summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am12
-rw-r--r--Makefile.am.in11
-rw-r--r--acinclude.m412420
-rw-r--r--aclocal.m413333
-rw-r--r--adept/COPYING29
-rw-r--r--adept/Makefile.am1
-rw-r--r--adept/NEWS2
-rw-r--r--adept/TODO33
-rw-r--r--adept/adept/Makefile.am35
-rw-r--r--adept/adept/acqprogress.cpp295
-rw-r--r--adept/adept/acqprogress.h127
-rw-r--r--adept/adept/acqprogresswidget.cpp53
-rw-r--r--adept/adept/acqprogresswidget.h30
-rw-r--r--adept/adept/acqprogresswidgetui.ui79
-rw-r--r--adept/adept/actor.h43
-rw-r--r--adept/adept/application.cpp350
-rw-r--r--adept/adept/application.h102
-rw-r--r--adept/adept/changelog.cpp145
-rw-r--r--adept/adept/changelog.h45
-rw-r--r--adept/adept/commitprogress.cpp117
-rw-r--r--adept/adept/commitprogress.h41
-rw-r--r--adept/adept/commitprogressui.ui197
-rw-r--r--adept/adept/desktopentryui.ui116
-rw-r--r--adept/adept/desktoplist.cpp194
-rw-r--r--adept/adept/desktoplist.h117
-rw-r--r--adept/adept/dpkgpm-gui.cpp258
-rw-r--r--adept/adept/dpkgpm-gui.h68
-rw-r--r--adept/adept/dpkgpm.cpp462
-rw-r--r--adept/adept/dpkgpm.h49
-rw-r--r--adept/adept/easytagfilter.cpp81
-rw-r--r--adept/adept/easytagfilter.h93
-rw-r--r--adept/adept/easytagfilterui.ui201
-rw-r--r--adept/adept/extendablelist.cpp339
-rw-r--r--adept/adept/extendablelist.h166
-rw-r--r--adept/adept/filterlist.cpp232
-rw-r--r--adept/adept/filterlist.h149
-rw-r--r--adept/adept/filtersidebar.cpp72
-rw-r--r--adept/adept/filtersidebar.h26
-rw-r--r--adept/adept/filtersidebarui.ui119
-rw-r--r--adept/adept/filterwidget.cpp36
-rw-r--r--adept/adept/filterwidget.h39
-rw-r--r--adept/adept/groupeddesktopselector.cpp137
-rw-r--r--adept/adept/groupeddesktopselector.h39
-rw-r--r--adept/adept/installerview.cpp112
-rw-r--r--adept/adept/installerview.h33
-rw-r--r--adept/adept/installerviewui.ui203
-rw-r--r--adept/adept/lister.cpp818
-rw-r--r--adept/adept/lister.h261
-rw-r--r--adept/adept/listerextenderui.ui309
-rw-r--r--adept/adept/listerpredicate.h14
-rw-r--r--adept/adept/packagedetails.cpp273
-rw-r--r--adept/adept/packagedetails.h58
-rw-r--r--adept/adept/packagedetailsui.ui506
-rw-r--r--adept/adept/packageinfo.cpp181
-rw-r--r--adept/adept/packageinfo.h49
-rw-r--r--adept/adept/packageinfoui.ui180
-rw-r--r--adept/adept/progress.cpp58
-rw-r--r--adept/adept/progress.h30
-rw-r--r--adept/adept/quickfilter.cpp79
-rw-r--r--adept/adept/quickfilter.h119
-rw-r--r--adept/adept/quickfilterui.ui130
-rw-r--r--adept/adept/sourceseditor.cpp165
-rw-r--r--adept/adept/sourceseditor.h63
-rw-r--r--adept/adept/sourceseditorui.ui173
-rw-r--r--adept/adept/statefilter.cpp60
-rw-r--r--adept/adept/statefilter.h144
-rw-r--r--adept/adept/statefilterui.ui166
-rw-r--r--adept/adept/tagchooser.cpp147
-rw-r--r--adept/adept/tagchooser.h83
-rw-r--r--adept/adept/tagfilter.cpp67
-rw-r--r--adept/adept/tagfilter.h110
-rw-r--r--adept/adept/tagfilterui.ui95
-rw-r--r--adept/adept/taglist.cpp138
-rw-r--r--adept/adept/taglist.h72
-rw-r--r--adept/adept/threadutils.cpp44
-rw-r--r--adept/adept/utils.h71
-rw-r--r--adept/adept/view.cpp153
-rw-r--r--adept/adept/view.h66
-rw-r--r--adept/batch/Makefile.am20
-rw-r--r--adept/batch/adept_batchui.rc16
-rw-r--r--adept/batch/adept_updater.desktop70
-rw-r--r--adept/batch/app.cpp142
-rw-r--r--adept/batch/app.h54
-rw-r--r--adept/batch/main.cpp48
-rw-r--r--adept/configure.in.in5
-rwxr-xr-xadept/deb-build21
-rw-r--r--adept/icons/Makefile.am1
-rw-r--r--adept/icons/cr128-action-adept_notifier_warning.pngbin0 -> 15265 bytes
-rw-r--r--adept/icons/cr16-action-adept_commit.pngbin0 -> 883 bytes
-rw-r--r--adept/icons/cr16-action-adept_distupgrade.pngbin0 -> 987 bytes
-rw-r--r--adept/icons/cr16-action-adept_install.pngbin0 -> 1088 bytes
-rw-r--r--adept/icons/cr16-action-adept_keep.pngbin0 -> 912 bytes
-rw-r--r--adept/icons/cr16-action-adept_main_indicator.pngbin0 -> 808 bytes
-rw-r--r--adept/icons/cr16-action-adept_notifier_ok.pngbin0 -> 1160 bytes
-rw-r--r--adept/icons/cr16-action-adept_notifier_warning.pngbin0 -> 905 bytes
-rw-r--r--adept/icons/cr16-action-adept_preview.pngbin0 -> 1042 bytes
-rw-r--r--adept/icons/cr16-action-adept_purge.pngbin0 -> 536 bytes
-rw-r--r--adept/icons/cr16-action-adept_reinstall.pngbin0 -> 1013 bytes
-rw-r--r--adept/icons/cr16-action-adept_remove.pngbin0 -> 625 bytes
-rw-r--r--adept/icons/cr16-action-adept_sourceseditor.pngbin0 -> 1054 bytes
-rw-r--r--adept/icons/cr16-action-adept_update.pngbin0 -> 1135 bytes
-rw-r--r--adept/icons/cr16-action-adept_upgrade.pngbin0 -> 906 bytes
-rw-r--r--adept/icons/cr16-action-extender_closed.pngbin0 -> 781 bytes
-rw-r--r--adept/icons/cr16-action-extender_opened.pngbin0 -> 808 bytes
-rw-r--r--adept/icons/cr22-action-adept_commit.pngbin0 -> 1192 bytes
-rw-r--r--adept/icons/cr22-action-adept_distupgrade.pngbin0 -> 1255 bytes
-rw-r--r--adept/icons/cr22-action-adept_install.pngbin0 -> 1415 bytes
-rw-r--r--adept/icons/cr22-action-adept_keep.pngbin0 -> 1229 bytes
-rw-r--r--adept/icons/cr22-action-adept_notifier_ok.pngbin0 -> 1589 bytes
-rw-r--r--adept/icons/cr22-action-adept_notifier_warning.pngbin0 -> 1367 bytes
-rw-r--r--adept/icons/cr22-action-adept_preview.pngbin0 -> 1433 bytes
-rw-r--r--adept/icons/cr22-action-adept_purge.pngbin0 -> 646 bytes
-rw-r--r--adept/icons/cr22-action-adept_reinstall.pngbin0 -> 1482 bytes
-rw-r--r--adept/icons/cr22-action-adept_remove.pngbin0 -> 743 bytes
-rw-r--r--adept/icons/cr22-action-adept_sourceseditor.pngbin0 -> 1578 bytes
-rw-r--r--adept/icons/cr22-action-adept_update.pngbin0 -> 1684 bytes
-rw-r--r--adept/icons/cr22-action-adept_upgrade.pngbin0 -> 1222 bytes
-rw-r--r--adept/icons/cr22-action-extender_closed.pngbin0 -> 1003 bytes
-rw-r--r--adept/icons/cr22-action-extender_opened.pngbin0 -> 1029 bytes
-rw-r--r--adept/icons/cr32-action-adept_commit.pngbin0 -> 1732 bytes
-rw-r--r--adept/icons/cr32-action-adept_distupgrade.pngbin0 -> 2037 bytes
-rw-r--r--adept/icons/cr32-action-adept_install.pngbin0 -> 1790 bytes
-rw-r--r--adept/icons/cr32-action-adept_keep.pngbin0 -> 1821 bytes
-rw-r--r--adept/icons/cr32-action-adept_notifier_ok.pngbin0 -> 2473 bytes
-rw-r--r--adept/icons/cr32-action-adept_notifier_warning.pngbin0 -> 2288 bytes
-rw-r--r--adept/icons/cr32-action-adept_preview.pngbin0 -> 2474 bytes
-rw-r--r--adept/icons/cr32-action-adept_purge.pngbin0 -> 784 bytes
-rw-r--r--adept/icons/cr32-action-adept_reinstall.pngbin0 -> 2200 bytes
-rw-r--r--adept/icons/cr32-action-adept_remove.pngbin0 -> 935 bytes
-rw-r--r--adept/icons/cr32-action-adept_sourceseditor.pngbin0 -> 2404 bytes
-rw-r--r--adept/icons/cr32-action-adept_update.pngbin0 -> 2536 bytes
-rw-r--r--adept/icons/cr32-action-adept_upgrade.pngbin0 -> 1849 bytes
-rw-r--r--adept/icons/cr32-action-extender_closed.pngbin0 -> 1591 bytes
-rw-r--r--adept/icons/cr32-action-extender_opened.pngbin0 -> 1628 bytes
-rw-r--r--adept/icons/cr48-action-adept_commit.pngbin0 -> 2855 bytes
-rw-r--r--adept/icons/cr48-action-adept_distupgrade.pngbin0 -> 2963 bytes
-rw-r--r--adept/icons/cr48-action-adept_install.pngbin0 -> 2352 bytes
-rw-r--r--adept/icons/cr48-action-adept_keep.pngbin0 -> 2687 bytes
-rw-r--r--adept/icons/cr48-action-adept_notifier_ok.pngbin0 -> 4152 bytes
-rw-r--r--adept/icons/cr48-action-adept_notifier_warning.pngbin0 -> 3965 bytes
-rw-r--r--adept/icons/cr48-action-adept_preview.pngbin0 -> 4442 bytes
-rw-r--r--adept/icons/cr48-action-adept_purge.pngbin0 -> 1094 bytes
-rw-r--r--adept/icons/cr48-action-adept_reinstall.pngbin0 -> 3598 bytes
-rw-r--r--adept/icons/cr48-action-adept_remove.pngbin0 -> 1164 bytes
-rw-r--r--adept/icons/cr48-action-adept_sourceseditor.pngbin0 -> 3645 bytes
-rw-r--r--adept/icons/cr48-action-adept_update.pngbin0 -> 4229 bytes
-rw-r--r--adept/icons/cr48-action-adept_upgrade.pngbin0 -> 2802 bytes
-rw-r--r--adept/icons/cr48-action-extender_closed.pngbin0 -> 2535 bytes
-rw-r--r--adept/icons/cr48-action-extender_opened.pngbin0 -> 2459 bytes
-rw-r--r--adept/icons/cr64-action-adept_notifier_warning.pngbin0 -> 5963 bytes
-rw-r--r--adept/icons/crsc-action-adept_notifier_warning.svgzbin0 -> 5636 bytes
-rw-r--r--adept/installer/Makefile.am22
-rw-r--r--adept/installer/adept_installer.desktop45
-rw-r--r--adept/installer/adept_installerui.rc20
-rw-r--r--adept/installer/app.cpp416
-rw-r--r--adept/installer/app.h128
-rw-r--r--adept/installer/hi128-app-adept_installer.pngbin0 -> 14185 bytes
-rw-r--r--adept/installer/hi16-app-adept_installer.pngbin0 -> 844 bytes
-rw-r--r--adept/installer/hi22-app-adept_installer.pngbin0 -> 1258 bytes
-rw-r--r--adept/installer/hi32-app-adept_installer.pngbin0 -> 2120 bytes
-rw-r--r--adept/installer/hi48-app-adept_installer.pngbin0 -> 3713 bytes
-rw-r--r--adept/installer/hi64-app-adept_installer.pngbin0 -> 5460 bytes
-rw-r--r--adept/installer/hisc-app-adept_installer.svgzbin0 -> 10539 bytes
-rw-r--r--adept/installer/main.cpp51
-rw-r--r--adept/kubuntu_upgrader/Makefile.am11
-rw-r--r--adept/kubuntu_upgrader/errordialog.cpp48
-rw-r--r--adept/kubuntu_upgrader/errordialog.h51
-rw-r--r--adept/kubuntu_upgrader/errordialogbase.ui67
-rw-r--r--adept/kubuntu_upgrader/upgradewizard.cpp545
-rw-r--r--adept/kubuntu_upgrader/upgradewizard.h96
-rw-r--r--adept/kubuntu_upgrader/upgradewizardbase.ui143
-rw-r--r--adept/libadept/Makefile.am33
-rw-r--r--adept/libadept/acqprogress.cpp295
-rw-r--r--adept/libadept/acqprogress.h127
-rw-r--r--adept/libadept/acqprogresswidget.cpp53
-rw-r--r--adept/libadept/acqprogresswidget.h30
-rw-r--r--adept/libadept/acqprogresswidgetui.ui79
-rw-r--r--adept/libadept/actor.h43
-rw-r--r--adept/libadept/application.cpp197
-rw-r--r--adept/libadept/application.h75
-rw-r--r--adept/libadept/commitprogress.cpp115
-rw-r--r--adept/libadept/commitprogress.h41
-rw-r--r--adept/libadept/commitprogressui.ui197
-rw-r--r--adept/libadept/desktopentryui.ui116
-rw-r--r--adept/libadept/desktoplist.cpp194
-rw-r--r--adept/libadept/desktoplist.h117
-rw-r--r--adept/libadept/dpkgpm-gui.cpp258
-rw-r--r--adept/libadept/dpkgpm-gui.h68
-rw-r--r--adept/libadept/dpkgpm.cpp451
-rw-r--r--adept/libadept/dpkgpm.h49
-rw-r--r--adept/libadept/easytagfilter.cpp82
-rw-r--r--adept/libadept/easytagfilter.h93
-rw-r--r--adept/libadept/easytagfilterui.ui201
-rw-r--r--adept/libadept/extendablelist.cpp332
-rw-r--r--adept/libadept/extendablelist.h165
-rw-r--r--adept/libadept/filterlist.cpp231
-rw-r--r--adept/libadept/filterlist.h149
-rw-r--r--adept/libadept/filtersidebar.cpp71
-rw-r--r--adept/libadept/filtersidebar.h26
-rw-r--r--adept/libadept/filtersidebarui.ui119
-rw-r--r--adept/libadept/filterwidget.cpp36
-rw-r--r--adept/libadept/filterwidget.h39
-rw-r--r--adept/libadept/groupeddesktopselector.cpp137
-rw-r--r--adept/libadept/groupeddesktopselector.h39
-rw-r--r--adept/libadept/installerview.cpp88
-rw-r--r--adept/libadept/installerview.h33
-rw-r--r--adept/libadept/installerviewui.ui194
-rw-r--r--adept/libadept/lister.cpp707
-rw-r--r--adept/libadept/lister.h220
-rw-r--r--adept/libadept/listerextenderui.ui310
-rw-r--r--adept/libadept/listerpredicate.h14
-rw-r--r--adept/libadept/packagedetails.cpp253
-rw-r--r--adept/libadept/packagedetails.h55
-rw-r--r--adept/libadept/packagedetailsui.ui464
-rw-r--r--adept/libadept/packageinfo.cpp181
-rw-r--r--adept/libadept/packageinfo.h49
-rw-r--r--adept/libadept/packageinfoui.ui180
-rw-r--r--adept/libadept/progress.cpp58
-rw-r--r--adept/libadept/progress.h30
-rw-r--r--adept/libadept/quickfilter.cpp79
-rw-r--r--adept/libadept/quickfilter.h119
-rw-r--r--adept/libadept/quickfilterui.ui130
-rw-r--r--adept/libadept/sourceseditor.cpp165
-rw-r--r--adept/libadept/sourceseditor.h63
-rw-r--r--adept/libadept/sourceseditorui.ui173
-rw-r--r--adept/libadept/statefilter.cpp60
-rw-r--r--adept/libadept/statefilter.h144
-rw-r--r--adept/libadept/statefilterui.ui166
-rw-r--r--adept/libadept/tagchooser.cpp144
-rw-r--r--adept/libadept/tagchooser.h82
-rw-r--r--adept/libadept/tagfilter.cpp67
-rw-r--r--adept/libadept/tagfilter.h113
-rw-r--r--adept/libadept/tagfilterui.ui95
-rw-r--r--adept/libadept/taglist.cpp134
-rw-r--r--adept/libadept/taglist.h75
-rw-r--r--adept/libadept/threadutils.cpp44
-rw-r--r--adept/libadept/utils.h71
-rw-r--r--adept/libadept/view.cpp153
-rw-r--r--adept/libadept/view.h66
-rw-r--r--adept/manager/Makefile.am20
-rw-r--r--adept/manager/adept_manager.desktop43
-rw-r--r--adept/manager/adept_managerui.rc38
-rw-r--r--adept/manager/app.cpp450
-rw-r--r--adept/manager/app.h162
-rw-r--r--adept/manager/hi128-app-adept_manager.pngbin0 -> 26416 bytes
-rw-r--r--adept/manager/hi16-app-adept_manager.pngbin0 -> 1482 bytes
-rw-r--r--adept/manager/hi22-app-adept_manager.pngbin0 -> 2346 bytes
-rw-r--r--adept/manager/hi32-app-adept_manager.pngbin0 -> 3909 bytes
-rw-r--r--adept/manager/hi48-app-adept_manager.pngbin0 -> 6820 bytes
-rw-r--r--adept/manager/hi64-app-adept_manager.pngbin0 -> 10284 bytes
-rw-r--r--adept/manager/hisc-app-adept_manager.svgzbin0 -> 3643 bytes
-rw-r--r--adept/manager/main.cpp71
-rw-r--r--adept/notifier/15adept-periodic-update3
-rw-r--r--adept/notifier/Makefile.am26
-rw-r--r--adept/notifier/adept_notifier.desktop63
-rw-r--r--adept/notifier/adept_notifier_auto.desktop23
-rw-r--r--adept/notifier/app.cpp342
-rw-r--r--adept/notifier/app.h93
-rw-r--r--adept/tests/libcapture/celem-test.cpp34
-rw-r--r--adept/tests/libcapture/grouper-test.cpp44
-rw-r--r--adept/tests/libcapture/pkgcache-test.cpp71
-rw-r--r--adept/tests/libcapture/stl_util-test.cpp56
-rw-r--r--adept/tests/libcapture/tree-test.cpp86
-rw-r--r--adept/tests/tut-main.cpp61
-rw-r--r--adept/tests/tut.h872
-rw-r--r--adept/tests/tut_reporter.h182
-rw-r--r--adept/updater/Makefile.am21
-rw-r--r--adept/updater/adept_updater.desktop69
-rw-r--r--adept/updater/adept_updaterui.rc16
-rw-r--r--adept/updater/app.cpp275
-rw-r--r--adept/updater/app.h105
-rw-r--r--adept/updater/hi128-app-adept_updater.pngbin0 -> 27523 bytes
-rw-r--r--adept/updater/hi16-app-adept_updater.pngbin0 -> 1509 bytes
-rw-r--r--adept/updater/hi22-app-adept_updater.pngbin0 -> 2357 bytes
-rw-r--r--adept/updater/hi32-app-adept_updater.pngbin0 -> 4053 bytes
-rw-r--r--adept/updater/hi48-app-adept_updater.pngbin0 -> 7011 bytes
-rw-r--r--adept/updater/hi64-app-adept_updater.pngbin0 -> 10508 bytes
-rw-r--r--adept/updater/hisc-app-adept_updater.svgzbin0 -> 4601 bytes
-rw-r--r--adept/updater/main.cpp56
-rw-r--r--config.h.in394
-rw-r--r--configure.files3
-rw-r--r--configure.in160
-rw-r--r--configure.in.in27
-rw-r--r--subdirs1
284 files changed, 50847 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..d7d453a
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,12 @@
+## kdebase/Makefile.am
+## (C) 1997 Stephan Kulow
+
+AUTOMAKE_OPTIONS = foreign 1.5
+
+dist-hook:
+ cd $(top_distdir) && perl $(top_srcdir)/admin/am_edit -padmin
+
+include admin/Doxyfile.am
+include admin/deps.am
+
+SUBDIRS=$(TOPSUBDIRS)
diff --git a/Makefile.am.in b/Makefile.am.in
new file mode 100644
index 0000000..2e81927
--- /dev/null
+++ b/Makefile.am.in
@@ -0,0 +1,11 @@
+## kdebase/Makefile.am
+## (C) 1997 Stephan Kulow
+
+AUTOMAKE_OPTIONS = foreign 1.5
+
+dist-hook:
+ cd $(top_distdir) && perl $(top_srcdir)/admin/am_edit -padmin
+
+include admin/Doxyfile.am
+include admin/deps.am
+
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..9173caa
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,12420 @@
+## -*- autoconf -*-
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 1997 Janos Farkas ([email protected])
+dnl (C) 1997,98,99 Stephan Kulow ([email protected])
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+dnl Boston, MA 02110-1301, USA.
+
+dnl IMPORTANT NOTE:
+dnl Please do not modify this file unless you expect your modifications to be
+dnl carried into every other module in the repository.
+dnl
+dnl Single-module modifications are best placed in configure.in for kdelibs
+dnl and kdebase or configure.in.in if present.
+
+# KDE_PATH_X_DIRECT
+dnl Internal subroutine of AC_PATH_X.
+dnl Set ac_x_includes and/or ac_x_libraries.
+AC_DEFUN([KDE_PATH_X_DIRECT],
+[
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+AC_TRY_CPP([#include <$x_direct_test_include>],
+[# We can compile using X headers with no special include directory.
+ac_x_includes=],
+[# Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /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 \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done])
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+AC_TRY_LINK([#include <X11/Intrinsic.h>], [${x_direct_test_function}(1)],
+[LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=],
+[LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib${kdelibsuff}/` \
+ /usr/X11/lib${kdelibsuff} \
+ /usr/X11R6/lib${kdelibsuff} \
+ /usr/X11R5/lib${kdelibsuff} \
+ /usr/X11R4/lib${kdelibsuff} \
+ \
+ /usr/lib${kdelibsuff}/X11 \
+ /usr/lib${kdelibsuff}/X11R6 \
+ /usr/lib${kdelibsuff}/X11R5 \
+ /usr/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/local/X11/lib${kdelibsuff} \
+ /usr/local/X11R6/lib${kdelibsuff} \
+ /usr/local/X11R5/lib${kdelibsuff} \
+ /usr/local/X11R4/lib${kdelibsuff} \
+ \
+ /usr/local/lib${kdelibsuff}/X11 \
+ /usr/local/lib${kdelibsuff}/X11R6 \
+ /usr/local/lib${kdelibsuff}/X11R5 \
+ /usr/local/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/X386/lib${kdelibsuff} \
+ /usr/x386/lib${kdelibsuff} \
+ /usr/XFree86/lib${kdelibsuff}/X11 \
+ \
+ /usr/lib${kdelibsuff} \
+ /usr/local/lib${kdelibsuff} \
+ /usr/unsupported/lib${kdelibsuff} \
+ /usr/athena/lib${kdelibsuff} \
+ /usr/local/x11r5/lib${kdelibsuff} \
+ /usr/lpp/Xamples/lib${kdelibsuff} \
+ /lib/usr/lib${kdelibsuff}/X11 \
+ \
+ /usr/openwin/lib${kdelibsuff} \
+ /usr/openwin/share/lib${kdelibsuff} \
+ ; \
+do
+dnl Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done])
+fi # $ac_x_libraries = NO
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find a file (or one of more files in a list of dirs)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_FIND_FILE],
+[
+$3=NO
+for i in $2;
+do
+ for j in $1;
+ do
+ echo "configure: __oline__: $i/$j" >&AC_FD_CC
+ if test -r "$i/$j"; then
+ echo "taking that" >&AC_FD_CC
+ $3=$i
+ break 2
+ fi
+ done
+done
+])
+
+dnl KDE_FIND_PATH(program-name, variable-name, list-of-dirs,
+dnl if-not-found, test-parameter, prepend-path)
+dnl
+dnl Look for program-name in list-of-dirs+$PATH.
+dnl If prepend-path is set, look in $PATH+list-of-dirs instead.
+dnl If found, $variable-name is set. If not, if-not-found is evaluated.
+dnl test-parameter: if set, the program is executed with this arg,
+dnl and only a successful exit code is required.
+AC_DEFUN([KDE_FIND_PATH],
+[
+ AC_MSG_CHECKING([for $1])
+ if test -n "$$2"; then
+ kde_cv_path="$$2";
+ else
+ kde_cache=`echo $1 | sed 'y%./+-%__p_%'`
+
+ AC_CACHE_VAL(kde_cv_path_$kde_cache,
+ [
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ dirs=""
+ for dir in $PATH; do
+ dirs="$dirs $dir"
+ done
+ if test -z "$6"; then dnl Append dirs in PATH (default)
+ dirs="$3 $dirs"
+ else dnl Prepend dirs in PATH (if 6th arg is set)
+ dirs="$dirs $3"
+ fi
+ IFS=$kde_save_IFS
+
+ for dir in $dirs; do
+ if test -x "$dir/$1"; then
+ if test -n "$5"
+ then
+ evalstr="$dir/$1 $5 2>&1 "
+ if eval $evalstr; then
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ else
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ fi
+ done
+
+ eval "kde_cv_path_$kde_cache=$kde_cv_path"
+
+ ])
+
+ eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\""
+
+ fi
+
+ if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then
+ AC_MSG_RESULT(not found)
+ $4
+ else
+ AC_MSG_RESULT($kde_cv_path)
+ $2=$kde_cv_path
+
+ fi
+])
+
+AC_DEFUN([KDE_MOC_ERROR_MESSAGE],
+[
+ AC_MSG_ERROR([No Qt meta object compiler (moc) found!
+Please check whether you installed Qt correctly.
+You need to have a running moc binary.
+configure tried to run $ac_cv_path_moc and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable MOC to the right one before running
+configure.
+])
+])
+
+AC_DEFUN([KDE_UIC_ERROR_MESSAGE],
+[
+ AC_MSG_WARN([No Qt ui compiler (uic) found!
+Please check whether you installed Qt correctly.
+You need to have a running uic binary.
+configure tried to run $ac_cv_path_uic and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable UIC to the right one before running
+configure.
+])
+])
+
+
+AC_DEFUN([KDE_CHECK_UIC_FLAG],
+[
+ AC_MSG_CHECKING([whether uic supports -$1 ])
+ kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'`
+ AC_CACHE_VAL(kde_cv_prog_uic_$kde_cache,
+ [
+ cat >conftest.ui <<EOT
+ <!DOCTYPE UI><UI version="3" stdsetdef="1"></UI>
+EOT
+ ac_uic_testrun="$UIC_PATH -$1 $2 conftest.ui >/dev/null"
+ if AC_TRY_EVAL(ac_uic_testrun); then
+ eval "kde_cv_prog_uic_$kde_cache=yes"
+ else
+ eval "kde_cv_prog_uic_$kde_cache=no"
+ fi
+ rm -f conftest*
+ ])
+
+ if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT([yes])
+ :
+ $3
+ else
+ AC_MSG_RESULT([no])
+ :
+ $4
+ fi
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find the meta object compiler and the ui compiler in the PATH,
+dnl in $QTDIR/bin, and some more usual places
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_MOC_UIC],
+[
+ AC_REQUIRE([KDE_CHECK_PERL])
+ qt_bindirs=""
+ for dir in $kde_qt_dirs; do
+ qt_bindirs="$qt_bindirs $dir/bin $dir/src/moc"
+ done
+ qt_bindirs="$qt_bindirs /usr/bin /usr/X11R6/bin /usr/local/qt/bin"
+ if test ! "$ac_qt_bindir" = "NO"; then
+ qt_bindirs="$ac_qt_bindir $qt_bindirs"
+ fi
+
+ KDE_FIND_PATH(moc, MOC, [$qt_bindirs], [KDE_MOC_ERROR_MESSAGE])
+ if test -z "$UIC_NOT_NEEDED"; then
+ KDE_FIND_PATH(uic, UIC_PATH, [$qt_bindirs], [UIC_PATH=""])
+ if test -z "$UIC_PATH" ; then
+ KDE_UIC_ERROR_MESSAGE
+ exit 1
+ else
+ UIC=$UIC_PATH
+
+ if test $kde_qtver = 3; then
+ KDE_CHECK_UIC_FLAG(L,[/nonexistent],ac_uic_supports_libpath=yes,ac_uic_supports_libpath=no)
+ KDE_CHECK_UIC_FLAG(nounload,,ac_uic_supports_nounload=yes,ac_uic_supports_nounload=no)
+
+ if test x$ac_uic_supports_libpath = xyes; then
+ UIC="$UIC -L \$(kde_widgetdir)"
+ fi
+ if test x$ac_uic_supports_nounload = xyes; then
+ UIC="$UIC -nounload"
+ fi
+ fi
+ fi
+ else
+ UIC="echo uic not available: "
+ fi
+
+ AC_SUBST(MOC)
+ AC_SUBST(UIC)
+
+ UIC_TR="i18n"
+ if test $kde_qtver = 3; then
+ UIC_TR="tr2i18n"
+ fi
+
+ AC_SUBST(UIC_TR)
+])
+
+AC_DEFUN([KDE_1_CHECK_PATHS],
+[
+ KDE_1_CHECK_PATH_HEADERS
+
+ KDE_TEST_RPATH=
+
+ if test -n "$USE_RPATH"; then
+
+ if test -n "$kde_libraries"; then
+ KDE_TEST_RPATH="-R $kde_libraries"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $qt_libraries"
+ fi
+
+ if test -n "$x_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $x_libraries"
+ fi
+
+ KDE_TEST_RPATH="$KDE_TEST_RPATH $KDE_EXTRA_RPATH"
+ fi
+
+AC_MSG_CHECKING([for KDE libraries installed])
+ac_link='$LIBTOOL_SHELL --silent --mode=link ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS $all_libraries conftest.$ac_ext $LIBS -lkdecore $LIBQT $KDE_TEST_RPATH 1>&5'
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_ERROR([your system fails at linking a small KDE application!
+Check, if your compiler is installed correctly and if you have used the
+same compiler to compile Qt and kdelibs as you did use now.
+For more details about this problem, look at the end of config.log.])
+fi
+
+if eval `KDEDIR= ./conftest 2>&5`; then
+ kde_result=done
+else
+ kde_result=problems
+fi
+
+KDEDIR= ./conftest 2> /dev/null >&5 # make an echo for config.log
+kde_have_all_paths=yes
+
+KDE_SET_PATHS($kde_result)
+
+])
+
+AC_DEFUN([KDE_SET_PATHS],
+[
+ kde_cv_all_paths="kde_have_all_paths=\"yes\" \
+ kde_htmldir=\"$kde_htmldir\" \
+ kde_appsdir=\"$kde_appsdir\" \
+ kde_icondir=\"$kde_icondir\" \
+ kde_sounddir=\"$kde_sounddir\" \
+ kde_datadir=\"$kde_datadir\" \
+ kde_locale=\"$kde_locale\" \
+ kde_cgidir=\"$kde_cgidir\" \
+ kde_confdir=\"$kde_confdir\" \
+ kde_kcfgdir=\"$kde_kcfgdir\" \
+ kde_mimedir=\"$kde_mimedir\" \
+ kde_toolbardir=\"$kde_toolbardir\" \
+ kde_wallpaperdir=\"$kde_wallpaperdir\" \
+ kde_templatesdir=\"$kde_templatesdir\" \
+ kde_bindir=\"$kde_bindir\" \
+ kde_servicesdir=\"$kde_servicesdir\" \
+ kde_servicetypesdir=\"$kde_servicetypesdir\" \
+ kde_moduledir=\"$kde_moduledir\" \
+ kde_styledir=\"$kde_styledir\" \
+ kde_widgetdir=\"$kde_widgetdir\" \
+ xdg_appsdir=\"$xdg_appsdir\" \
+ xdg_menudir=\"$xdg_menudir\" \
+ xdg_directorydir=\"$xdg_directorydir\" \
+ kde_result=$1"
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_PATHS],
+[
+if test "$1" = "default"; then
+
+ if test -z "$kde_htmldir"; then
+ kde_htmldir='\${datadir}/doc/HTML'
+ fi
+ if test -z "$kde_appsdir"; then
+ kde_appsdir='\${datadir}/applnk'
+ fi
+ if test -z "$kde_icondir"; then
+ kde_icondir='\${datadir}/icons'
+ fi
+ if test -z "$kde_sounddir"; then
+ kde_sounddir='\${datadir}/sounds'
+ fi
+ if test -z "$kde_datadir"; then
+ kde_datadir='\${datadir}/apps'
+ fi
+ if test -z "$kde_locale"; then
+ kde_locale='\${datadir}/locale'
+ fi
+ if test -z "$kde_cgidir"; then
+ kde_cgidir='\${exec_prefix}/cgi-bin'
+ fi
+ if test -z "$kde_confdir"; then
+ kde_confdir='\${datadir}/config'
+ fi
+ if test -z "$kde_kcfgdir"; then
+ kde_kcfgdir='\${datadir}/config.kcfg'
+ fi
+ if test -z "$kde_mimedir"; then
+ kde_mimedir='\${datadir}/mimelnk'
+ fi
+ if test -z "$kde_toolbardir"; then
+ kde_toolbardir='\${datadir}/toolbar'
+ fi
+ if test -z "$kde_wallpaperdir"; then
+ kde_wallpaperdir='\${datadir}/wallpapers'
+ fi
+ if test -z "$kde_templatesdir"; then
+ kde_templatesdir='\${datadir}/templates'
+ fi
+ if test -z "$kde_bindir"; then
+ kde_bindir='\${exec_prefix}/bin'
+ fi
+ if test -z "$kde_servicesdir"; then
+ kde_servicesdir='\${datadir}/services'
+ fi
+ if test -z "$kde_servicetypesdir"; then
+ kde_servicetypesdir='\${datadir}/servicetypes'
+ fi
+ if test -z "$kde_moduledir"; then
+ if test "$kde_qtver" = "2"; then
+ kde_moduledir='\${libdir}/kde2'
+ else
+ kde_moduledir='\${libdir}/kde3'
+ fi
+ fi
+ if test -z "$kde_styledir"; then
+ kde_styledir='\${libdir}/kde3/plugins/styles'
+ fi
+ if test -z "$kde_widgetdir"; then
+ kde_widgetdir='\${libdir}/kde3/plugins/designer'
+ fi
+ if test -z "$xdg_appsdir"; then
+ xdg_appsdir='\${datadir}/applications/kde'
+ fi
+ if test -z "$xdg_menudir"; then
+ xdg_menudir='\${sysconfdir}/xdg/menus'
+ fi
+ if test -z "$xdg_directorydir"; then
+ xdg_directorydir='\${datadir}/desktop-directories'
+ fi
+
+ KDE_SET_PATHS(defaults)
+
+else
+
+ if test $kde_qtver = 1; then
+ AC_MSG_RESULT([compiling])
+ KDE_1_CHECK_PATHS
+ else
+ AC_MSG_ERROR([path checking not yet supported for KDE 2])
+ fi
+
+fi
+])
+
+AC_DEFUN([KDE_CHECK_PATHS_FOR_COMPLETENESS],
+[ if test -z "$kde_htmldir" || test -z "$kde_appsdir" ||
+ test -z "$kde_icondir" || test -z "$kde_sounddir" ||
+ test -z "$kde_datadir" || test -z "$kde_locale" ||
+ test -z "$kde_cgidir" || test -z "$kde_confdir" ||
+ test -z "$kde_kcfgdir" ||
+ test -z "$kde_mimedir" || test -z "$kde_toolbardir" ||
+ test -z "$kde_wallpaperdir" || test -z "$kde_templatesdir" ||
+ test -z "$kde_bindir" || test -z "$kde_servicesdir" ||
+ test -z "$kde_servicetypesdir" || test -z "$kde_moduledir" ||
+ test -z "$kde_styledir" || test -z "kde_widgetdir" ||
+ test -z "$xdg_appsdir" || test -z "$xdg_menudir" || test -z "$xdg_directorydir" ||
+ test "x$kde_have_all_paths" != "xyes"; then
+ kde_have_all_paths=no
+ fi
+])
+
+AC_DEFUN([KDE_MISSING_PROG_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed KDE correctly.
+])
+])
+
+AC_DEFUN([KDE_MISSING_ARTS_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed aRts correctly or use
+--without-arts to compile without aRts support (this will remove functionality).
+])
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_BINDIRS],
+[
+ kde_default_bindirs="/usr/bin /usr/local/bin /opt/local/bin /usr/X11R6/bin /opt/kde/bin /opt/kde3/bin /usr/kde/bin /usr/local/kde/bin"
+ test -n "$KDEDIR" && kde_default_bindirs="$KDEDIR/bin $kde_default_bindirs"
+ if test -n "$KDEDIRS"; then
+ kde_save_IFS=$IFS
+ IFS=:
+ for dir in $KDEDIRS; do
+ kde_default_bindirs="$dir/bin $kde_default_bindirs "
+ done
+ IFS=$kde_save_IFS
+ fi
+])
+
+AC_DEFUN([KDE_SUBST_PROGRAMS],
+[
+ AC_ARG_WITH(arts,
+ AC_HELP_STRING([--without-arts],[build without aRts [default=no]]),
+ [build_arts=$withval],
+ [build_arts=yes]
+ )
+ AM_CONDITIONAL(include_ARTS, test "$build_arts" '!=' "no")
+ if test "$build_arts" = "no"; then
+ AC_DEFINE(WITHOUT_ARTS, 1, [Defined if compiling without arts])
+ fi
+
+ KDE_SET_DEFAULT_BINDIRS
+ kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs"
+ KDE_FIND_PATH(dcopidl, DCOPIDL, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl)])
+ KDE_FIND_PATH(dcopidl2cpp, DCOPIDL2CPP, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl2cpp)])
+ if test "$build_arts" '!=' "no"; then
+ KDE_FIND_PATH(mcopidl, MCOPIDL, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(mcopidl)])
+ KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)])
+ fi
+ KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs])
+
+ kde32ornewer=1
+ kde33ornewer=1
+ if test -n "$kde_qtver" && test "$kde_qtver" -lt 3; then
+ kde32ornewer=
+ kde33ornewer=
+ else
+ if test "$kde_qtver" = "3"; then
+ if test "$kde_qtsubver" -le 1; then
+ kde32ornewer=
+ fi
+ if test "$kde_qtsubver" -le 2; then
+ kde33ornewer=
+ fi
+ if test "$KDECONFIG" != "compiled"; then
+ if test `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then
+ kde33ornewer=
+ fi
+ fi
+ fi
+ fi
+
+ if test -n "$kde32ornewer"; then
+ KDE_FIND_PATH(kconfig_compiler, KCONFIG_COMPILER, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kconfig_compiler)])
+ KDE_FIND_PATH(dcopidlng, DCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
+ fi
+ if test -n "$kde33ornewer"; then
+ KDE_FIND_PATH(makekdewidgets, MAKEKDEWIDGETS, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(makekdewidgets)])
+ AC_SUBST(MAKEKDEWIDGETS)
+ fi
+ KDE_FIND_PATH(xmllint, XMLLINT, [${prefix}/bin ${exec_prefix}/bin], [XMLLINT=""])
+
+ if test -n "$MEINPROC" -a "$MEINPROC" != "compiled"; then
+ kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share"
+ test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs"
+ AC_FIND_FILE(apps/ksgmltools2/customization/kde-chunk.xsl, $kde_sharedirs, KDE_XSL_STYLESHEET)
+ if test "$KDE_XSL_STYLESHEET" = "NO"; then
+ KDE_XSL_STYLESHEET=""
+ else
+ KDE_XSL_STYLESHEET="$KDE_XSL_STYLESHEET/apps/ksgmltools2/customization/kde-chunk.xsl"
+ fi
+ fi
+
+ DCOP_DEPENDENCIES='$(DCOPIDL)'
+ if test -n "$kde32ornewer"; then
+ KCFG_DEPENDENCIES='$(KCONFIG_COMPILER)'
+ DCOP_DEPENDENCIES='$(DCOPIDL) $(DCOPIDLNG)'
+ AC_SUBST(KCONFIG_COMPILER)
+ AC_SUBST(KCFG_DEPENDENCIES)
+ AC_SUBST(DCOPIDLNG)
+ fi
+ AC_SUBST(DCOPIDL)
+ AC_SUBST(DCOPIDL2CPP)
+ AC_SUBST(DCOP_DEPENDENCIES)
+ AC_SUBST(MCOPIDL)
+ AC_SUBST(ARTSCCONFIG)
+ AC_SUBST(MEINPROC)
+ AC_SUBST(KDE_XSL_STYLESHEET)
+ AC_SUBST(XMLLINT)
+])dnl
+
+AC_DEFUN([AC_CREATE_KFSSTND],
+[
+AC_REQUIRE([AC_CHECK_RPATH])
+
+AC_MSG_CHECKING([for KDE paths])
+kde_result=""
+kde_cached_paths=yes
+AC_CACHE_VAL(kde_cv_all_paths,
+[
+ KDE_SET_DEFAULT_PATHS($1)
+ kde_cached_paths=no
+])
+eval "$kde_cv_all_paths"
+KDE_CHECK_PATHS_FOR_COMPLETENESS
+if test "$kde_have_all_paths" = "no" && test "$kde_cached_paths" = "yes"; then
+ # wrong values were cached, may be, we can set better ones
+ kde_result=
+ kde_htmldir= kde_appsdir= kde_icondir= kde_sounddir=
+ kde_datadir= kde_locale= kde_cgidir= kde_confdir= kde_kcfgdir=
+ kde_mimedir= kde_toolbardir= kde_wallpaperdir= kde_templatesdir=
+ kde_bindir= kde_servicesdir= kde_servicetypesdir= kde_moduledir=
+ kde_have_all_paths=
+ kde_styledir=
+ kde_widgetdir=
+ xdg_appsdir = xdg_menudir= xdg_directorydir=
+ KDE_SET_DEFAULT_PATHS($1)
+ eval "$kde_cv_all_paths"
+ KDE_CHECK_PATHS_FOR_COMPLETENESS
+ kde_result="$kde_result (cache overridden)"
+fi
+if test "$kde_have_all_paths" = "no"; then
+ AC_MSG_ERROR([configure could not run a little KDE program to test the environment.
+Since it had compiled and linked before, it must be a strange problem on your system.
+Look at config.log for details. If you are not able to fix this, look at
+http://www.kde.org/faq/installation.html or any www.kde.org mirror.
+(If you're using an egcs version on Linux, you may update binutils!)
+])
+else
+ rm -f conftest*
+ AC_MSG_RESULT($kde_result)
+fi
+
+bindir=$kde_bindir
+
+KDE_SUBST_PROGRAMS
+
+])
+
+AC_DEFUN([AC_SUBST_KFSSTND],
+[
+AC_SUBST(kde_htmldir)
+AC_SUBST(kde_appsdir)
+AC_SUBST(kde_icondir)
+AC_SUBST(kde_sounddir)
+AC_SUBST(kde_datadir)
+AC_SUBST(kde_locale)
+AC_SUBST(kde_confdir)
+AC_SUBST(kde_kcfgdir)
+AC_SUBST(kde_mimedir)
+AC_SUBST(kde_wallpaperdir)
+AC_SUBST(kde_bindir)
+dnl X Desktop Group standards
+AC_SUBST(xdg_appsdir)
+AC_SUBST(xdg_menudir)
+AC_SUBST(xdg_directorydir)
+dnl for KDE 2
+AC_SUBST(kde_templatesdir)
+AC_SUBST(kde_servicesdir)
+AC_SUBST(kde_servicetypesdir)
+AC_SUBST(kde_moduledir)
+AC_SUBST(kdeinitdir, '$(kde_moduledir)')
+AC_SUBST(kde_styledir)
+AC_SUBST(kde_widgetdir)
+if test "$kde_qtver" = 1; then
+ kde_minidir="$kde_icondir/mini"
+else
+# for KDE 1 - this breaks KDE2 apps using minidir, but
+# that's the plan ;-/
+ kde_minidir="/dev/null"
+fi
+dnl AC_SUBST(kde_minidir)
+dnl AC_SUBST(kde_cgidir)
+dnl AC_SUBST(kde_toolbardir)
+])
+
+AC_DEFUN([KDE_MISC_TESTS],
+[
+ dnl Checks for libraries.
+ AC_CHECK_LIB(util, main, [LIBUTIL="-lutil"]) dnl for *BSD
+ AC_SUBST(LIBUTIL)
+ AC_CHECK_LIB(compat, main, [LIBCOMPAT="-lcompat"]) dnl for *BSD
+ AC_SUBST(LIBCOMPAT)
+ kde_have_crypt=
+ AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"; kde_have_crypt=yes],
+ AC_CHECK_LIB(c, crypt, [kde_have_crypt=yes], [
+ AC_MSG_WARN([you have no crypt in either libcrypt or libc.
+You should install libcrypt from another source or configure with PAM
+support])
+ kde_have_crypt=no
+ ]))
+ AC_SUBST(LIBCRYPT)
+ if test $kde_have_crypt = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_CRYPT, 1, [Defines if your system has the crypt function])
+ fi
+ AC_CHECK_SOCKLEN_T
+ AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ AC_CHECK_LIB(dnet_stub, dnet_ntoa,
+ [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+ fi
+ AC_CHECK_FUNC(inet_ntoa)
+ if test $ac_cv_func_inet_ntoa = no; then
+ AC_CHECK_LIB(nsl, inet_ntoa, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl")
+ fi
+ AC_CHECK_FUNC(connect)
+ if test $ac_cv_func_connect = no; then
+ AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", ,
+ $X_EXTRA_LIBS)
+ fi
+
+ AC_CHECK_FUNC(remove)
+ if test $ac_cv_func_remove = no; then
+ AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix")
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ AC_CHECK_FUNC(shmat, ,
+ AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"))
+
+ # more headers that need to be explicitly included on darwin
+ AC_CHECK_HEADERS(sys/types.h stdint.h)
+
+ # sys/bitypes.h is needed for uint32_t and friends on Tru64
+ AC_CHECK_HEADERS(sys/bitypes.h)
+
+ # darwin requires a poll emulation library
+ AC_CHECK_LIB(poll, poll, LIB_POLL="-lpoll")
+
+ # for some image handling on Mac OS X
+ AC_CHECK_HEADERS(Carbon/Carbon.h)
+
+ # CoreAudio framework
+ AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [
+ AC_DEFINE(HAVE_COREAUDIO, 1, [Define if you have the CoreAudio API])
+ FRAMEWORK_COREAUDIO="-Wl,-framework,CoreAudio"
+ ])
+
+ AC_CHECK_RES_INIT
+ AC_SUBST(LIB_POLL)
+ AC_SUBST(FRAMEWORK_COREAUDIO)
+ LIBSOCKET="$X_EXTRA_LIBS"
+ AC_SUBST(LIBSOCKET)
+ AC_SUBST(X_EXTRA_LIBS)
+ AC_CHECK_LIB(ucb, killpg, [LIBUCB="-lucb"]) dnl for Solaris2.4
+ AC_SUBST(LIBUCB)
+
+ case $host in dnl this *is* LynxOS specific
+ *-*-lynxos* )
+ AC_MSG_CHECKING([LynxOS header file wrappers])
+ [CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"]
+ AC_MSG_RESULT(disabled)
+ AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS
+ ;;
+ esac
+
+ KDE_CHECK_TYPES
+ KDE_CHECK_LIBDL
+ KDE_CHECK_STRLCPY
+ KDE_CHECK_PIE_SUPPORT
+
+# darwin needs this to initialize the environment
+AC_CHECK_HEADERS(crt_externs.h)
+AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
+
+AH_VERBATIM(_DARWIN_ENVIRON,
+[
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+])
+
+AH_VERBATIM(_AIX_STRINGS_H_BZERO,
+[
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+])
+
+AC_CHECK_FUNCS([vsnprintf snprintf])
+
+AH_VERBATIM(_TRU64,[
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Find the header files and libraries for X-Windows. Extended the
+dnl macro AC_PATH_X
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([K_PATH_X],
+[
+AC_REQUIRE([KDE_MISC_TESTS])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_ARG_ENABLE(
+ embedded,
+ AC_HELP_STRING([--enable-embedded],[link to Qt-embedded, don't use X]),
+ kde_use_qt_emb=$enableval,
+ kde_use_qt_emb=no
+)
+
+AC_ARG_ENABLE(
+ qtopia,
+ AC_HELP_STRING([--enable-qtopia],[link to Qt-embedded, link to the Qtopia Environment]),
+ kde_use_qt_emb_palm=$enableval,
+ kde_use_qt_emb_palm=no
+)
+
+AC_ARG_ENABLE(
+ mac,
+ AC_HELP_STRING([--enable-mac],[link to Qt/Mac (don't use X)]),
+ kde_use_qt_mac=$enableval,
+ kde_use_qt_mac=no
+)
+
+# used to disable x11-specific stuff on special platforms
+AM_CONDITIONAL(include_x11, test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no")
+
+if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then
+
+AC_MSG_CHECKING(for X)
+
+AC_CACHE_VAL(kde_cv_have_x,
+[# One or both of the vars are not set, and there is no cached value.
+if test "{$x_includes+set}" = set || test "$x_includes" = NONE; then
+ kde_x_includes=NO
+else
+ kde_x_includes=$x_includes
+fi
+if test "{$x_libraries+set}" = set || test "$x_libraries" = NONE; then
+ kde_x_libraries=NO
+else
+ kde_x_libraries=$x_libraries
+fi
+
+# below we use the standard autoconf calls
+ac_x_libraries=$kde_x_libraries
+ac_x_includes=$kde_x_includes
+
+KDE_PATH_X_DIRECT
+dnl AC_PATH_X_XMKMF picks /usr/lib as the path for the X libraries.
+dnl Unfortunately, if compiling with the N32 ABI, this is not the correct
+dnl location. The correct location is /usr/lib32 or an undefined value
+dnl (the linker is smart enough to pick the correct default library).
+dnl Things work just fine if you use just AC_PATH_X_DIRECT.
+dnl Solaris has a similar problem. AC_PATH_X_XMKMF forces x_includes to
+dnl /usr/openwin/include, which doesn't work. /usr/include does work, so
+dnl x_includes should be left alone.
+case "$host" in
+mips-sgi-irix6*)
+ ;;
+*-*-solaris*)
+ ;;
+*)
+ _AC_PATH_X_XMKMF
+ if test -z "$ac_x_includes"; then
+ ac_x_includes="."
+ fi
+ if test -z "$ac_x_libraries"; then
+ ac_x_libraries="/usr/lib${kdelibsuff}"
+ fi
+esac
+#from now on we use our own again
+
+# when the user already gave --x-includes, we ignore
+# what the standard autoconf macros told us.
+if test "$kde_x_includes" = NO; then
+ kde_x_includes=$ac_x_includes
+fi
+
+# for --x-libraries too
+if test "$kde_x_libraries" = NO; then
+ kde_x_libraries=$ac_x_libraries
+fi
+
+if test "$kde_x_includes" = NO; then
+ AC_MSG_ERROR([Can't find X includes. Please check your installation and add the correct paths!])
+fi
+
+if test "$kde_x_libraries" = NO; then
+ AC_MSG_ERROR([Can't find X libraries. Please check your installation and add the correct paths!])
+fi
+
+# Record where we found X for the cache.
+kde_cv_have_x="have_x=yes \
+ kde_x_includes=$kde_x_includes kde_x_libraries=$kde_x_libraries"
+])dnl
+
+eval "$kde_cv_have_x"
+
+if test "$have_x" != yes; then
+ AC_MSG_RESULT($have_x)
+ no_x=yes
+else
+ AC_MSG_RESULT([libraries $kde_x_libraries, headers $kde_x_includes])
+fi
+
+if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then
+ X_INCLUDES=""
+ x_includes="."; dnl better than nothing :-
+ else
+ x_includes=$kde_x_includes
+ X_INCLUDES="-I$x_includes"
+fi
+
+if test -z "$kde_x_libraries" || test "x$kde_x_libraries" = xNONE; then
+ X_LDFLAGS=""
+ x_libraries="/usr/lib"; dnl better than nothing :-
+ else
+ x_libraries=$kde_x_libraries
+ X_LDFLAGS="-L$x_libraries"
+fi
+all_includes="$X_INCLUDES"
+all_libraries="$X_LDFLAGS $LDFLAGS_AS_NEEDED $LDFLAGS_NEW_DTAGS"
+
+# Check for libraries that X11R6 Xt/Xaw programs need.
+ac_save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+# SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+# check for ICE first), but we must link in the order -lSM -lICE or
+# we get undefined symbols. So assume we have SM if we have ICE.
+# These have to be linked with before -lX11, unlike the other
+# libraries we check for below, so use a different variable.
+AC_CHECK_LIB(ICE, IceConnectionNumber,
+ [LIBSM="-lSM -lICE"], , $X_EXTRA_LIBS)
+LDFLAGS="$ac_save_LDFLAGS"
+
+LIB_X11='-lX11 $(LIBSOCKET)'
+
+AC_MSG_CHECKING(for libXext)
+AC_CACHE_VAL(kde_cv_have_libXext,
+[
+kde_ldflags_safe="$LDFLAGS"
+kde_libs_safe="$LIBS"
+
+LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS"
+LIBS="-lXext -lX11 $LIBSOCKET"
+
+AC_TRY_LINK([
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+],
+[
+printf("hello Xext\n");
+],
+kde_cv_have_libXext=yes,
+kde_cv_have_libXext=no
+)
+
+LDFLAGS=$kde_ldflags_safe
+LIBS=$kde_libs_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_libXext)
+
+if test "$kde_cv_have_libXext" = "no"; then
+ AC_MSG_ERROR([We need a working libXext to proceed. Since configure
+can't find it itself, we stop here assuming that make wouldn't find
+them either.])
+fi
+
+LIB_XEXT="-lXext"
+QTE_NORTTI=""
+
+elif test "$kde_use_qt_emb" = "yes"; then
+ dnl We're using QT Embedded
+ CPPFLAGS=-DQWS
+ CXXFLAGS="$CXXFLAGS -fno-rtti"
+ QTE_NORTTI="-fno-rtti -DQWS"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+elif test "$kde_use_qt_mac" = "yes"; then
+ dnl We're using QT/Mac (I use QT_MAC so that qglobal.h doesn't *have* to
+ dnl be included to get the information) --Sam
+ CXXFLAGS="$CXXFLAGS -DQT_MAC -no-cpp-precomp"
+ CFLAGS="$CFLAGS -DQT_MAC -no-cpp-precomp"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+fi
+AC_SUBST(X_PRE_LIBS)
+AC_SUBST(LIB_X11)
+AC_SUBST(LIB_XRENDER)
+AC_SUBST(LIBSM)
+AC_SUBST(X_INCLUDES)
+AC_SUBST(X_LDFLAGS)
+AC_SUBST(x_includes)
+AC_SUBST(x_libraries)
+AC_SUBST(QTE_NORTTI)
+AC_SUBST(LIB_XEXT)
+
+])
+
+AC_DEFUN([KDE_PRINT_QT_PROGRAM],
+[
+AC_REQUIRE([KDE_USE_QT])
+cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qglobal.h>
+#include <qapplication.h>
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qevent.h>
+#include <qstring.h>
+#include <qstyle.h>
+EOF
+
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+#if QT_VERSION < 210
+#error 1
+#endif
+EOF
+fi
+fi
+
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qcursor.h>
+#include <qstylefactory.h>
+#include <private/qucomextra_p.h>
+EOF
+fi
+
+echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext
+cat >> conftest.$ac_ext <<EOF
+#error 1
+#endif
+
+int main() {
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+ QStringList *t = new QStringList();
+ Q_UNUSED(t);
+EOF
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+ QString s;
+ s.setLatin1("Elvis is alive", 14);
+EOF
+fi
+fi
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+ (void)QStyleFactory::create(QString::null);
+ QCursor c(Qt::WhatsThisCursor);
+EOF
+fi
+cat >> conftest.$ac_ext <<EOF
+ return 0;
+}
+EOF
+])
+
+AC_DEFUN([KDE_USE_QT],
+[
+if test -z "$1"; then
+ # Current default Qt version: 3.3
+ kde_qtver=3
+ kde_qtsubver=3
+else
+ kde_qtsubver=`echo "$1" | sed -e 's#[0-9][0-9]*\.\([0-9][0-9]*\).*#\1#'`
+ # following is the check if subversion isnt found in passed argument
+ if test "$kde_qtsubver" = "$1"; then
+ kde_qtsubver=1
+ fi
+ kde_qtver=`echo "$1" | sed -e 's#^\([0-9][0-9]*\)\..*#\1#'`
+ if test "$kde_qtver" = "1"; then
+ kde_qtsubver=42
+ fi
+fi
+
+if test -z "$2"; then
+ if test "$kde_qtver" = "2"; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_minversion=">= Qt 2.2.2"
+ else
+ kde_qt_minversion=">= Qt 2.0.2"
+ fi
+ fi
+ if test "$kde_qtver" = "3"; then
+ if test $kde_qtsubver -gt 0; then
+ if test $kde_qtsubver -gt 1; then
+ if test $kde_qtsubver -gt 2; then
+ kde_qt_minversion=">= Qt 3.3 and < 4.0"
+ else
+ kde_qt_minversion=">= Qt 3.2 and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.1 (20021021) and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.0 and < 4.0"
+ fi
+ fi
+ if test "$kde_qtver" = "1"; then
+ kde_qt_minversion=">= 1.42 and < 2.0"
+ fi
+else
+ kde_qt_minversion="$2"
+fi
+
+if test -z "$3"; then
+ if test $kde_qtver = 3; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 0x03@VER@00 && QT_VERSION < 0x040000"
+ qtsubver=`echo "00$kde_qtsubver" | sed -e 's,.*\(..\)$,\1,'`
+ kde_qt_verstring=`echo $kde_qt_verstring | sed -e "s,@VER@,$qtsubver,"`
+ else
+ kde_qt_verstring="QT_VERSION >= 300 && QT_VERSION < 0x040000"
+ fi
+ fi
+ if test $kde_qtver = 2; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 222"
+ else
+ kde_qt_verstring="QT_VERSION >= 200"
+ fi
+ fi
+ if test $kde_qtver = 1; then
+ kde_qt_verstring="QT_VERSION >= 142 && QT_VERSION < 200"
+ fi
+else
+ kde_qt_verstring="$3"
+fi
+
+if test $kde_qtver = 4; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt4 /usr/lib/qt /usr/share/qt4"
+fi
+if test $kde_qtver = 3; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt3 /usr/lib/qt /usr/share/qt3"
+fi
+if test $kde_qtver = 2; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt2 /usr/lib/qt"
+fi
+if test $kde_qtver = 1; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt"
+fi
+])
+
+AC_DEFUN([KDE_CHECK_QT_DIRECT],
+[
+AC_REQUIRE([KDE_USE_QT])
+AC_MSG_CHECKING([if Qt compiles without flags])
+AC_CACHE_VAL(kde_cv_qt_direct,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_LD_LIBRARY_PATH_safe=$LD_LIBRARY_PATH
+ac_LIBRARY_PATH="$LIBRARY_PATH"
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_includes"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBQT -lXext -lX11 $LIBSOCKET"
+else
+LIBS="$LIBQT $LIBSOCKET"
+fi
+LD_LIBRARY_PATH=
+export LD_LIBRARY_PATH
+LIBRARY_PATH=
+export LIBRARY_PATH
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ kde_cv_qt_direct="yes"
+else
+ kde_cv_qt_direct="no"
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+fi
+
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe"
+export LD_LIBRARY_PATH
+LIBRARY_PATH="$ac_LIBRARY_PATH"
+export LIBRARY_PATH
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_qt_direct" = "yes"; then
+ AC_MSG_RESULT(yes)
+ $1
+else
+ AC_MSG_RESULT(no)
+ $2
+fi
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the Qt headers and libraries.
+dnl $(QT_LDFLAGS) will be -Lqtliblocation (if needed)
+dnl and $(QT_INCLUDES) will be -Iqthdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_1_3],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([KDE_USE_QT])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+dnl ------------------------------------------------------------------------
+dnl Add configure flag to enable linking to MT version of Qt library.
+dnl ------------------------------------------------------------------------
+
+AC_ARG_ENABLE(
+ mt,
+ AC_HELP_STRING([--disable-mt],[link to non-threaded Qt (deprecated)]),
+ kde_use_qt_mt=$enableval,
+ [
+ if test $kde_qtver = 3; then
+ kde_use_qt_mt=yes
+ else
+ kde_use_qt_mt=no
+ fi
+ ]
+)
+
+USING_QT_MT=""
+
+dnl ------------------------------------------------------------------------
+dnl If we not get --disable-qt-mt then adjust some vars for the host.
+dnl ------------------------------------------------------------------------
+
+KDE_MT_LDFLAGS=
+KDE_MT_LIBS=
+if test "x$kde_use_qt_mt" = "xyes"; then
+ KDE_CHECK_THREADING
+ if test "x$kde_use_threading" = "xyes"; then
+ CPPFLAGS="$USE_THREADS -DQT_THREAD_SUPPORT $CPPFLAGS"
+ KDE_MT_LDFLAGS="$USE_THREADS"
+ KDE_MT_LIBS="$LIBPTHREAD"
+ else
+ kde_use_qt_mt=no
+ fi
+fi
+AC_SUBST(KDE_MT_LDFLAGS)
+AC_SUBST(KDE_MT_LIBS)
+
+kde_qt_was_given=yes
+
+dnl ------------------------------------------------------------------------
+dnl If we haven't been told how to link to Qt, we work it out for ourselves.
+dnl ------------------------------------------------------------------------
+if test -z "$LIBQT_GLOB"; then
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ LIBQT_GLOB="libqte.*"
+ else
+ LIBQT_GLOB="libqt.*"
+ fi
+fi
+
+dnl ------------------------------------------------------------
+dnl If we got --enable-embedded then adjust the Qt library name.
+dnl ------------------------------------------------------------
+if test "x$kde_use_qt_emb" = "xyes"; then
+ qtlib="qte"
+else
+ qtlib="qt"
+fi
+
+kde_int_qt="-l$qtlib"
+
+if test -z "$LIBQPE"; then
+dnl ------------------------------------------------------------
+dnl If we got --enable-palmtop then add -lqpe to the link line
+dnl ------------------------------------------------------------
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ if test "x$kde_use_qt_emb_palm" = "xyes"; then
+ LIB_QPE="-lqpe"
+ else
+ LIB_QPE=""
+ fi
+ else
+ LIB_QPE=""
+ fi
+fi
+
+dnl ------------------------------------------------------------------------
+dnl If we got --enable-qt-mt then adjust the Qt library name for the host.
+dnl ------------------------------------------------------------------------
+
+if test "x$kde_use_qt_mt" = "xyes"; then
+ LIBQT="-l$qtlib-mt"
+ kde_int_qt="-l$qtlib-mt"
+ LIBQT_GLOB="lib$qtlib-mt.*"
+ USING_QT_MT="using -mt"
+else
+ LIBQT="-l$qtlib"
+fi
+
+if test $kde_qtver != 1; then
+
+ AC_REQUIRE([AC_FIND_PNG])
+ AC_REQUIRE([AC_FIND_JPEG])
+ LIBQT="$LIBQT $LIBPNG $LIBJPEG"
+fi
+
+if test $kde_qtver = 3; then
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ LIBQT="$LIBQT $LIBDL"
+fi
+
+AC_MSG_CHECKING([for Qt])
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBQT="$LIBQT $X_PRE_LIBS -lXext -lX11 $LIBSM $LIBSOCKET"
+fi
+ac_qt_includes=NO ac_qt_libraries=NO ac_qt_bindir=NO
+qt_libraries=""
+qt_includes=""
+AC_ARG_WITH(qt-dir,
+ AC_HELP_STRING([--with-qt-dir=DIR],[where the root of Qt is installed ]),
+ [ ac_qt_includes="$withval"/include
+ ac_qt_libraries="$withval"/lib${kdelibsuff}
+ ac_qt_bindir="$withval"/bin
+ ])
+
+AC_ARG_WITH(qt-includes,
+ AC_HELP_STRING([--with-qt-includes=DIR],[where the Qt includes are. ]),
+ [
+ ac_qt_includes="$withval"
+ ])
+
+kde_qt_libs_given=no
+
+AC_ARG_WITH(qt-libraries,
+ AC_HELP_STRING([--with-qt-libraries=DIR],[where the Qt library is installed.]),
+ [ ac_qt_libraries="$withval"
+ kde_qt_libs_given=yes
+ ])
+
+AC_CACHE_VAL(ac_cv_have_qt,
+[#try to guess Qt locations
+
+qt_incdirs=""
+for dir in $kde_qt_dirs; do
+ qt_incdirs="$qt_incdirs $dir/include $dir"
+done
+qt_incdirs="$QTINC $qt_incdirs /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/X11R6/include/qt2 /usr/include/qt3 $x_includes"
+if test ! "$ac_qt_includes" = "NO"; then
+ qt_incdirs="$ac_qt_includes $qt_incdirs"
+fi
+
+if test "$kde_qtver" != "1"; then
+ kde_qt_header=qstyle.h
+else
+ kde_qt_header=qglobal.h
+fi
+
+AC_FIND_FILE($kde_qt_header, $qt_incdirs, qt_incdir)
+ac_qt_includes="$qt_incdir"
+
+qt_libdirs=""
+for dir in $kde_qt_dirs; do
+ qt_libdirs="$qt_libdirs $dir/lib${kdelibsuff} $dir"
+done
+qt_libdirs="$QTLIB $qt_libdirs /usr/X11R6/lib /usr/lib /usr/local/qt/lib $x_libraries"
+if test ! "$ac_qt_libraries" = "NO"; then
+ qt_libdir=$ac_qt_libraries
+else
+ qt_libdirs="$ac_qt_libraries $qt_libdirs"
+ # if the Qt was given, the chance is too big that libqt.* doesn't exist
+ qt_libdir=NONE
+ for dir in $qt_libdirs; do
+ try="ls -1 $dir/${LIBQT_GLOB}"
+ if test -n "`$try 2> /dev/null`"; then qt_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+fi
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIBQT="$LIBQT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+ac_qt_libraries="$qt_libdir"
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+LDFLAGS="$LDFLAGS -L$qt_libdir $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+LIBS="$LIBS $LIBQT $KDE_MT_LIBS"
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+else
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+ ac_qt_libraries="NO"
+fi
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+AC_LANG_RESTORE
+if test "$ac_qt_includes" = NO || test "$ac_qt_libraries" = NO; then
+ ac_cv_have_qt="have_qt=no"
+ ac_qt_notfound=""
+ missing_qt_mt=""
+ if test "$ac_qt_includes" = NO; then
+ if test "$ac_qt_libraries" = NO; then
+ ac_qt_notfound="(headers and libraries)";
+ else
+ ac_qt_notfound="(headers)";
+ fi
+ else
+ if test "x$kde_use_qt_mt" = "xyes"; then
+ missing_qt_mt="
+Make sure that you have compiled Qt with thread support!"
+ ac_qt_notfound="(library $qtlib-mt)";
+ else
+ ac_qt_notfound="(library $qtlib)";
+ fi
+ fi
+
+ AC_MSG_ERROR([Qt ($kde_qt_minversion) $ac_qt_notfound not found. Please check your installation!
+For more details about this problem, look at the end of config.log.$missing_qt_mt])
+else
+ have_qt="yes"
+fi
+])
+
+eval "$ac_cv_have_qt"
+
+if test "$have_qt" != yes; then
+ AC_MSG_RESULT([$have_qt]);
+else
+ ac_cv_have_qt="have_qt=yes \
+ ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries"
+ AC_MSG_RESULT([libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT])
+
+ qt_libraries="$ac_qt_libraries"
+ qt_includes="$ac_qt_includes"
+fi
+
+if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then
+ KDE_CHECK_QT_DIRECT(qt_libraries= ,[])
+fi
+
+AC_SUBST(qt_libraries)
+AC_SUBST(qt_includes)
+
+if test "$qt_includes" = "$x_includes" || test -z "$qt_includes"; then
+ QT_INCLUDES=""
+else
+ QT_INCLUDES="-I$qt_includes"
+ all_includes="$QT_INCLUDES $all_includes"
+fi
+
+if test "$qt_libraries" = "$x_libraries" || test -z "$qt_libraries"; then
+ QT_LDFLAGS=""
+else
+ QT_LDFLAGS="-L$qt_libraries"
+ all_libraries="$QT_LDFLAGS $all_libraries"
+fi
+test -z "$KDE_MT_LDFLAGS" || all_libraries="$all_libraries $KDE_MT_LDFLAGS"
+
+AC_SUBST(QT_INCLUDES)
+AC_SUBST(QT_LDFLAGS)
+AC_PATH_QT_MOC_UIC
+
+KDE_CHECK_QT_JPEG
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM)'
+else
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG)'
+fi
+test -z "$KDE_MT_LIBS" || LIB_QT="$LIB_QT $KDE_MT_LIBS"
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIB_QT="$LIB_QT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+AC_SUBST(LIB_QT)
+AC_SUBST(LIB_QPE)
+
+AC_SUBST(kde_qtver)
+])
+
+AC_DEFUN([AC_PATH_QT],
+[
+AC_PATH_QT_1_3
+])
+
+AC_DEFUN([KDE_CHECK_UIC_PLUGINS],
+[
+AC_REQUIRE([AC_PATH_QT_MOC_UIC])
+
+if test x$ac_uic_supports_libpath = xyes; then
+
+AC_MSG_CHECKING([if UIC has KDE plugins available])
+AC_CACHE_VAL(kde_cv_uic_plugins,
+[
+cat > actest.ui << EOF
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>NewConnectionDialog</class>
+<widget class="QDialog">
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>testInput</cstring>
+ </property>
+ </widget>
+</widget>
+</UI>
+EOF
+
+
+
+kde_cv_uic_plugins=no
+kde_line="$UIC_PATH -L $kde_widgetdir"
+if test x$ac_uic_supports_nounload = xyes; then
+ kde_line="$kde_line -nounload"
+fi
+kde_line="$kde_line -impl actest.h actest.ui > actest.cpp"
+if AC_TRY_EVAL(kde_line); then
+ # if you're trying to debug this check and think it's incorrect,
+ # better check your installation. The check _is_ correct - your
+ # installation is not.
+ if test -f actest.cpp && grep klineedit actest.cpp > /dev/null; then
+ kde_cv_uic_plugins=yes
+ fi
+fi
+rm -f actest.ui actest.cpp
+])
+
+AC_MSG_RESULT([$kde_cv_uic_plugins])
+if test "$kde_cv_uic_plugins" != yes; then
+ AC_MSG_ERROR([
+you need to install kdelibs first.
+
+If you did install kdelibs, then the Qt version that is picked up by
+this configure is not the same version you used to compile kdelibs.
+The Qt Plugin installed by kdelibs is *ONLY* loadable if it is the
+_same Qt version_, compiled with the _same compiler_ and the same Qt
+configuration settings.
+])
+fi
+fi
+])
+
+AC_DEFUN([KDE_CHECK_FINAL],
+[
+ AC_ARG_ENABLE(final,
+ AC_HELP_STRING([--enable-final],
+ [build size optimized apps (experimental - needs lots of memory)]),
+ kde_use_final=$enableval, kde_use_final=no)
+
+ if test "x$kde_use_final" = "xyes"; then
+ KDE_USE_FINAL_TRUE=""
+ KDE_USE_FINAL_FALSE="#"
+ else
+ KDE_USE_FINAL_TRUE="#"
+ KDE_USE_FINAL_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_FINAL_TRUE)
+ AC_SUBST(KDE_USE_FINAL_FALSE)
+])
+
+AC_DEFUN([KDE_CHECK_CLOSURE],
+[
+ AC_ARG_ENABLE(closure,
+ AC_HELP_STRING([--enable-closure],[delay template instantiation]),
+ kde_use_closure=$enableval, kde_use_closure=no)
+
+ KDE_NO_UNDEFINED=""
+ if test "x$kde_use_closure" = "xyes"; then
+ KDE_USE_CLOSURE_TRUE=""
+ KDE_USE_CLOSURE_FALSE="#"
+# CXXFLAGS="$CXXFLAGS $REPO"
+ else
+ KDE_USE_CLOSURE_TRUE="#"
+ KDE_USE_CLOSURE_FALSE=""
+ KDE_NO_UNDEFINED=""
+ case $host in
+ *-*-linux-gnu)
+ KDE_CHECK_COMPILER_FLAG([Wl,--no-undefined],
+ [KDE_CHECK_COMPILER_FLAG([Wl,--allow-shlib-undefined],
+ [KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined"],
+ [KDE_NO_UNDEFINED=""])],
+ [KDE_NO_UNDEFINED=""])
+ ;;
+ esac
+ fi
+ AC_SUBST(KDE_USE_CLOSURE_TRUE)
+ AC_SUBST(KDE_USE_CLOSURE_FALSE)
+ AC_SUBST(KDE_NO_UNDEFINED)
+])
+
+dnl Check if the linker supports --enable-new-dtags and --as-needed
+AC_DEFUN([KDE_CHECK_NEW_LDFLAGS],
+[
+ AC_ARG_ENABLE(new_ldflags,
+ AC_HELP_STRING([--enable-new-ldflags],
+ [enable the new linker flags]),
+ kde_use_new_ldflags=$enableval,
+ kde_use_new_ldflags=no)
+
+ LDFLAGS_AS_NEEDED=""
+ LDFLAGS_NEW_DTAGS=""
+ if test "x$kde_use_new_ldflags" = "xyes"; then
+ LDFLAGS_NEW_DTAGS=""
+ KDE_CHECK_COMPILER_FLAG([Wl,--enable-new-dtags],
+ [LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags"],)
+
+ KDE_CHECK_COMPILER_FLAG([Wl,--as-needed],
+ [LDFLAGS_AS_NEEDED="-Wl,--as-needed"],)
+ fi
+ AC_SUBST(LDFLAGS_AS_NEEDED)
+ AC_SUBST(LDFLAGS_NEW_DTAGS)
+])
+
+AC_DEFUN([KDE_CHECK_NMCHECK],
+[
+ AC_ARG_ENABLE(nmcheck,AC_HELP_STRING([--enable-nmcheck],[enable automatic namespace cleanness check]),
+ kde_use_nmcheck=$enableval, kde_use_nmcheck=no)
+
+ if test "$kde_use_nmcheck" = "yes"; then
+ KDE_USE_NMCHECK_TRUE=""
+ KDE_USE_NMCHECK_FALSE="#"
+ else
+ KDE_USE_NMCHECK_TRUE="#"
+ KDE_USE_NMCHECK_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_NMCHECK_TRUE)
+ AC_SUBST(KDE_USE_NMCHECK_FALSE)
+])
+
+AC_DEFUN([KDE_EXPAND_MAKEVAR], [
+savex=$exec_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+tmp=$$2
+while $1=`eval echo "$tmp"`; test "x$$1" != "x$tmp"; do tmp=$$1; done
+exec_prefix=$savex
+])
+
+dnl ------------------------------------------------------------------------
+dnl Now, the same with KDE
+dnl $(KDE_LDFLAGS) will be the kdeliblocation (if needed)
+dnl and $(kde_includes) will be the kdehdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_BASE_PATH_KDE],
+[
+AC_REQUIRE([KDE_CHECK_STL])
+AC_REQUIRE([AC_PATH_QT])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_CHECK_RPATH
+AC_MSG_CHECKING([for KDE])
+
+if test "${prefix}" != NONE; then
+ kde_includes=${includedir}
+ KDE_EXPAND_MAKEVAR(ac_kde_includes, includedir)
+
+ kde_libraries=${libdir}
+ KDE_EXPAND_MAKEVAR(ac_kde_libraries, libdir)
+
+else
+ ac_kde_includes=
+ ac_kde_libraries=
+ kde_libraries=""
+ kde_includes=""
+fi
+
+AC_CACHE_VAL(ac_cv_have_kde,
+[#try to guess kde locations
+
+if test "$kde_qtver" = 1; then
+ kde_check_header="ksock.h"
+ kde_check_lib="libkdecore.la"
+else
+ kde_check_header="ksharedptr.h"
+ kde_check_lib="libkio.la"
+fi
+
+if test -z "$1"; then
+
+kde_incdirs="$kde_libs_prefix/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes $qt_includes"
+test -n "$KDEDIR" && kde_incdirs="$KDEDIR/include $KDEDIR/include/kde $KDEDIR $kde_incdirs"
+kde_incdirs="$ac_kde_includes $kde_incdirs"
+AC_FIND_FILE($kde_check_header, $kde_incdirs, kde_incdir)
+ac_kde_includes="$kde_incdir"
+
+if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then
+ AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE headers installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+kde_libdirs="$kde_libs_prefix/lib${kdelibsuff} /usr/lib/kde/lib${kdelibsuff} /usr/local/kde/lib${kdelibsuff} /usr/kde/lib${kdelibsuff} /usr/lib${kdelibsuff}/kde /usr/lib${kdelibsuff}/kde3 /usr/lib${kdelibsuff} /usr/X11R6/lib${kdelibsuff} /usr/local/lib${kdelibsuff} /opt/kde3/lib${kdelibsuff} /opt/kde/lib${kdelibsuff} /usr/X11R6/kde/lib${kdelibsuff}"
+test -n "$KDEDIR" && kde_libdirs="$KDEDIR/lib${kdelibsuff} $KDEDIR $kde_libdirs"
+kde_libdirs="$ac_kde_libraries $libdir $kde_libdirs"
+AC_FIND_FILE($kde_check_lib, $kde_libdirs, kde_libdir)
+ac_kde_libraries="$kde_libdir"
+
+kde_widgetdir=NO
+dnl this might be somewhere else
+AC_FIND_FILE("kde3/plugins/designer/kdewidgets.la", $kde_libdirs, kde_widgetdir)
+
+if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then
+AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE libraries installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then
+AC_MSG_ERROR([
+I can't find the designer plugins. These are required and should have been installed
+by kdelibs])
+fi
+
+if test -n "$kde_widgetdir"; then
+ kde_widgetdir="$kde_widgetdir/kde3/plugins/designer"
+fi
+
+
+if test "$ac_kde_includes" = NO || test "$ac_kde_libraries" = NO || test "$kde_widgetdir" = NO; then
+ ac_cv_have_kde="have_kde=no"
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+fi
+
+else dnl test -z $1, e.g. from kdelibs
+
+ ac_cv_have_kde="have_kde=no"
+
+fi
+])dnl
+
+eval "$ac_cv_have_kde"
+
+if test "$have_kde" != "yes"; then
+ if test "${prefix}" = NONE; then
+ ac_kde_prefix="$ac_default_prefix"
+ else
+ ac_kde_prefix="$prefix"
+ fi
+ if test "$exec_prefix" = NONE; then
+ ac_kde_exec_prefix="$ac_kde_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix])
+ else
+ ac_kde_exec_prefix="$exec_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix and $ac_kde_exec_prefix])
+ fi
+
+ kde_libraries="${libdir}"
+ kde_includes="${includedir}"
+
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+ AC_MSG_RESULT([libraries $ac_kde_libraries, headers $ac_kde_includes])
+
+ kde_libraries="$ac_kde_libraries"
+ kde_includes="$ac_kde_includes"
+fi
+AC_SUBST(kde_libraries)
+AC_SUBST(kde_includes)
+
+if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then
+ KDE_INCLUDES=""
+else
+ KDE_INCLUDES="-I$kde_includes"
+ all_includes="$KDE_INCLUDES $all_includes"
+fi
+
+KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION"
+
+KDE_LDFLAGS="-L$kde_libraries"
+if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then
+ all_libraries="$KDE_LDFLAGS $all_libraries"
+fi
+
+AC_SUBST(KDE_LDFLAGS)
+AC_SUBST(KDE_INCLUDES)
+
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+all_libraries="$all_libraries $USER_LDFLAGS"
+all_includes="$all_includes $USER_INCLUDES"
+AC_SUBST(all_includes)
+AC_SUBST(all_libraries)
+
+if test -z "$1"; then
+KDE_CHECK_UIC_PLUGINS
+fi
+
+ac_kde_libraries="$kde_libdir"
+
+AC_SUBST(AUTODIRS)
+
+
+])
+
+AC_DEFUN([KDE_CHECK_EXTRA_LIBS],
+[
+AC_MSG_CHECKING(for extra includes)
+AC_ARG_WITH(extra-includes,AC_HELP_STRING([--with-extra-includes=DIR],[adds non standard include paths]),
+ kde_use_extra_includes="$withval",
+ kde_use_extra_includes=NONE
+)
+kde_extra_includes=
+if test -n "$kde_use_extra_includes" && \
+ test "$kde_use_extra_includes" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_includes; do
+ kde_extra_includes="$kde_extra_includes $dir"
+ USER_INCLUDES="$USER_INCLUDES -I$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_includes="added"
+else
+ kde_use_extra_includes="no"
+fi
+AC_SUBST(USER_INCLUDES)
+
+AC_MSG_RESULT($kde_use_extra_includes)
+
+kde_extra_libs=
+AC_MSG_CHECKING(for extra libs)
+AC_ARG_WITH(extra-libs,AC_HELP_STRING([--with-extra-libs=DIR],[adds non standard library paths]),
+ kde_use_extra_libs=$withval,
+ kde_use_extra_libs=NONE
+)
+if test -n "$kde_use_extra_libs" && \
+ test "$kde_use_extra_libs" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_libs; do
+ kde_extra_libs="$kde_extra_libs $dir"
+ KDE_EXTRA_RPATH="$KDE_EXTRA_RPATH -R $dir"
+ USER_LDFLAGS="$USER_LDFLAGS -L$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_libs="added"
+else
+ kde_use_extra_libs="no"
+fi
+
+AC_SUBST(USER_LDFLAGS)
+
+AC_MSG_RESULT($kde_use_extra_libs)
+
+])
+
+AC_DEFUN([KDE_1_CHECK_PATH_HEADERS],
+[
+ AC_MSG_CHECKING([for KDE headers installed])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include "confdefs.h"
+#include <kapp.h>
+
+int main() {
+ printf("kde_htmldir=\\"%s\\"\n", KApplication::kde_htmldir().data());
+ printf("kde_appsdir=\\"%s\\"\n", KApplication::kde_appsdir().data());
+ printf("kde_icondir=\\"%s\\"\n", KApplication::kde_icondir().data());
+ printf("kde_sounddir=\\"%s\\"\n", KApplication::kde_sounddir().data());
+ printf("kde_datadir=\\"%s\\"\n", KApplication::kde_datadir().data());
+ printf("kde_locale=\\"%s\\"\n", KApplication::kde_localedir().data());
+ printf("kde_cgidir=\\"%s\\"\n", KApplication::kde_cgidir().data());
+ printf("kde_confdir=\\"%s\\"\n", KApplication::kde_configdir().data());
+ printf("kde_mimedir=\\"%s\\"\n", KApplication::kde_mimedir().data());
+ printf("kde_toolbardir=\\"%s\\"\n", KApplication::kde_toolbardir().data());
+ printf("kde_wallpaperdir=\\"%s\\"\n",
+ KApplication::kde_wallpaperdir().data());
+ printf("kde_bindir=\\"%s\\"\n", KApplication::kde_bindir().data());
+ printf("kde_partsdir=\\"%s\\"\n", KApplication::kde_partsdir().data());
+ printf("kde_servicesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_servicetypesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_moduledir=\\"/tmp/dummy\\"\n");
+ printf("kde_styledir=\\"/tmp/dummy\\"\n");
+ printf("kde_widgetdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_appsdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_menudir=\\"/tmp/dummy\\"\n");
+ printf("xdg_directorydir=\\"/tmp/dummy\\"\n");
+ printf("kde_kcfgdir=\\"/tmp/dummy\\"\n");
+ return 0;
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$all_includes $CPPFLAGS"
+ if AC_TRY_EVAL(ac_compile); then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_ERROR([your system is not able to compile a small KDE application!
+Check, if you installed the KDE header files correctly.
+For more details about this problem, look at the end of config.log.])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_CHECK_KDEQTADDON],
+[
+AC_MSG_CHECKING(for kde-qt-addon)
+AC_CACHE_VAL(kde_cv_have_kdeqtaddon,
+[
+ kde_ldflags_safe="$LDFLAGS"
+ kde_libs_safe="$LIBS"
+ kde_cxxflags_safe="$CXXFLAGS"
+
+ LIBS="-lkde-qt-addon $LIBQT $LIBS"
+ CXXFLAGS="$CXXFLAGS -I$prefix/include -I$prefix/include/kde $all_includes"
+ LDFLAGS="$LDFLAGS $all_libraries $USER_LDFLAGS"
+
+ AC_TRY_LINK([
+ #include <qdom.h>
+ ],
+ [
+ QDomDocument doc;
+ ],
+ kde_cv_have_kdeqtaddon=yes,
+ kde_cv_have_kdeqtaddon=no
+ )
+
+ LDFLAGS=$kde_ldflags_safe
+ LIBS=$kde_libs_safe
+ CXXFLAGS=$kde_cxxflags_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_kdeqtaddon)
+
+if test "$kde_cv_have_kdeqtaddon" = "no"; then
+ AC_MSG_ERROR([Can't find libkde-qt-addon. You need to install it first.
+It is a separate package (and CVS module) named kde-qt-addon.])
+fi
+])
+
+AC_DEFUN([KDE_CREATE_LIBS_ALIASES],
+[
+ AC_REQUIRE([KDE_MISC_TESTS])
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ AC_REQUIRE([K_PATH_X])
+
+if test $kde_qtver = 3; then
+ case $host in
+ *cygwin*) lib_kded="-lkdeinit_kded" ;;
+ *) lib_kded="" ;;
+ esac
+ AC_SUBST(LIB_KDED, $lib_kded)
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KJS, "-lkjs")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KABC, "-lkabc")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+ AC_SUBST(LIB_KUTILS, "-lkutils")
+ AC_SUBST(LIB_KDEPIM, "-lkdepim")
+ AC_SUBST(LIB_KIMPROXY, "-lkimproxy")
+ AC_SUBST(LIB_KNEWSTUFF, "-lknewstuff")
+ AC_SUBST(LIB_KDNSSD, "-lkdnssd")
+ AC_SUBST(LIB_KUNITTEST, "-lkunittest")
+# these are for backward compatibility
+ AC_SUBST(LIB_KSYCOCA, "-lkio")
+ AC_SUBST(LIB_KFILE, "-lkio")
+elif test $kde_qtver = 2; then
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KSYCOCA, "-lksycoca")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KFILE, "-lkfile")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+else
+ AC_SUBST(LIB_KDECORE, "-lkdecore -lXext $(LIB_QT)")
+ AC_SUBST(LIB_KDEUI, "-lkdeui $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFM, "-lkfm $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFILE, "-lkfile $(LIB_KFM) $(LIB_KDEUI)")
+ AC_SUBST(LIB_KAB, "-lkab $(LIB_KIMGIO) $(LIB_KDECORE)")
+fi
+])
+
+AC_DEFUN([AC_PATH_KDE],
+[
+ AC_BASE_PATH_KDE
+ AC_ARG_ENABLE(path-check,AC_HELP_STRING([--disable-path-check],[don't try to find out, where to install]),
+ [
+ if test "$enableval" = "no";
+ then ac_use_path_checking="default"
+ else ac_use_path_checking=""
+ fi
+ ],
+ [
+ if test "$kde_qtver" = 1;
+ then ac_use_path_checking=""
+ else ac_use_path_checking="default"
+ fi
+ ]
+ )
+
+ AC_CREATE_KFSSTND($ac_use_path_checking)
+
+ AC_SUBST_KFSSTND
+ KDE_CREATE_LIBS_ALIASES
+])
+
+dnl KDE_CHECK_FUNC_EXT(<func>, [headers], [sample-use], [C prototype], [autoheader define], [call if found])
+AC_DEFUN([KDE_CHECK_FUNC_EXT],
+[
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(kde_cv_func_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+save_CXXFLAGS="$CXXFLAGS"
+kde_safe_LIBS="$LIBS"
+LIBS="$LIBS $X_EXTRA_LIBS"
+if test "$GXX" = "yes"; then
+CXXFLAGS="$CXXFLAGS -pedantic-errors"
+fi
+AC_TRY_COMPILE([
+$2
+],
+[
+$3
+],
+kde_cv_func_$1=yes,
+kde_cv_func_$1=no)
+CXXFLAGS="$save_CXXFLAGS"
+LIBS="$kde_safe_LIBS"
+AC_LANG_RESTORE
+])
+
+AC_MSG_RESULT($kde_cv_func_$1)
+
+AC_MSG_CHECKING([if $1 needs custom prototype])
+AC_CACHE_VAL(kde_cv_proto_$1,
+[
+if test "x$kde_cv_func_$1" = xyes; then
+ kde_cv_proto_$1=no
+else
+ case "$1" in
+ setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat)
+ kde_cv_proto_$1="yes - in libkdefakes"
+ ;;
+ *)
+ kde_cv_proto_$1=unknown
+ ;;
+ esac
+fi
+
+if test "x$kde_cv_proto_$1" = xunknown; then
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS $X_EXTRA_LIBS"
+ AC_TRY_LINK([
+$2
+
+extern "C" $4;
+],
+[
+$3
+],
+[ kde_cv_func_$1=yes
+ kde_cv_proto_$1=yes ],
+ [kde_cv_proto_$1="$1 unavailable"]
+)
+LIBS=$kde_safe_libs
+AC_LANG_RESTORE
+fi
+])
+AC_MSG_RESULT($kde_cv_proto_$1)
+
+if test "x$kde_cv_func_$1" = xyes; then
+ AC_DEFINE(HAVE_$5, 1, [Define if you have $1])
+ $6
+fi
+if test "x$kde_cv_proto_$1" = xno; then
+ AC_DEFINE(HAVE_$5_PROTO, 1,
+ [Define if you have the $1 prototype])
+fi
+
+AH_VERBATIM([_HAVE_$5_PROTO],
+[
+#if !defined(HAVE_$5_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+$4;
+#ifdef __cplusplus
+}
+#endif
+#endif
+])
+])
+
+AC_DEFUN([AC_CHECK_SETENV],
+[
+ KDE_CHECK_FUNC_EXT(setenv, [
+#include <stdlib.h>
+],
+ [setenv("VAR", "VALUE", 1);],
+ [int setenv (const char *, const char *, int)],
+ [SETENV])
+])
+
+AC_DEFUN([AC_CHECK_UNSETENV],
+[
+ KDE_CHECK_FUNC_EXT(unsetenv, [
+#include <stdlib.h>
+],
+ [unsetenv("VAR");],
+ [void unsetenv (const char *)],
+ [UNSETENV])
+])
+
+AC_DEFUN([AC_CHECK_GETDOMAINNAME],
+[
+ KDE_CHECK_FUNC_EXT(getdomainname, [
+#include <stdlib.h>
+#include <unistd.h>
+#include <netdb.h>
+],
+ [
+char buffer[200];
+getdomainname(buffer, 200);
+],
+ [#include <sys/types.h>
+ int getdomainname (char *, size_t)],
+ [GETDOMAINNAME])
+])
+
+AC_DEFUN([AC_CHECK_GETHOSTNAME],
+[
+ KDE_CHECK_FUNC_EXT(gethostname, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+char buffer[200];
+gethostname(buffer, 200);
+],
+ [int gethostname (char *, unsigned int)],
+ [GETHOSTNAME])
+])
+
+AC_DEFUN([AC_CHECK_USLEEP],
+[
+ KDE_CHECK_FUNC_EXT(usleep, [
+#include <unistd.h>
+],
+ [
+usleep(200);
+],
+ [int usleep (unsigned int)],
+ [USLEEP])
+])
+
+
+AC_DEFUN([AC_CHECK_RANDOM],
+[
+ KDE_CHECK_FUNC_EXT(random, [
+#include <stdlib.h>
+],
+ [
+random();
+],
+ [long int random(void)],
+ [RANDOM])
+
+ KDE_CHECK_FUNC_EXT(srandom, [
+#include <stdlib.h>
+],
+ [
+srandom(27);
+],
+ [void srandom(unsigned int)],
+ [SRANDOM])
+
+])
+
+AC_DEFUN([AC_CHECK_INITGROUPS],
+[
+ KDE_CHECK_FUNC_EXT(initgroups, [
+#include <sys/types.h>
+#include <unistd.h>
+#include <grp.h>
+],
+ [
+char buffer[200];
+initgroups(buffer, 27);
+],
+ [int initgroups(const char *, gid_t)],
+ [INITGROUPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMPS],
+[
+ KDE_CHECK_FUNC_EXT(mkstemps, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemps("/tmp/aaaXXXXXX", 6);
+],
+ [int mkstemps(char *, int)],
+ [MKSTEMPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkstemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemp("/tmp/aaaXXXXXX");
+],
+ [int mkstemp(char *)],
+ [MKSTEMP])
+])
+
+AC_DEFUN([AC_CHECK_MKDTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkdtemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkdtemp("/tmp/aaaXXXXXX");
+],
+ [char *mkdtemp(char *)],
+ [MKDTEMP])
+])
+
+
+AC_DEFUN([AC_CHECK_RES_INIT],
+[
+ AC_MSG_CHECKING([if res_init needs -lresolv])
+ kde_libs_safe="$LIBS"
+ LIBS="$LIBS $X_EXTRA_LIBS -lresolv"
+ AC_TRY_LINK(
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [
+ res_init();
+ ],
+ [
+ LIBRESOLV="-lresolv"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RES_INIT, 1, [Define if you have the res_init function])
+ ],
+ [ AC_MSG_RESULT(no) ]
+ )
+ LIBS=$kde_libs_safe
+ AC_SUBST(LIBRESOLV)
+
+ KDE_CHECK_FUNC_EXT(res_init,
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [res_init()],
+ [int res_init(void)],
+ [RES_INIT])
+])
+
+AC_DEFUN([AC_CHECK_STRLCPY],
+[
+ KDE_CHECK_FUNC_EXT(strlcpy, [
+#include <string.h>
+],
+[ char buf[20];
+ strlcpy(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcpy(char*, const char*, unsigned long)],
+ [STRLCPY])
+])
+
+AC_DEFUN([AC_CHECK_STRLCAT],
+[
+ KDE_CHECK_FUNC_EXT(strlcat, [
+#include <string.h>
+],
+[ char buf[20];
+ buf[0]='\0';
+ strlcat(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcat(char*, const char*, unsigned long)],
+ [STRLCAT])
+])
+
+AC_DEFUN([AC_CHECK_RES_QUERY],
+[
+ KDE_CHECK_FUNC_EXT(res_query, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+#include <netdb.h>
+],
+[
+res_query(NULL, 0, 0, NULL, 0);
+],
+ [int res_query(const char *, int, int, unsigned char *, int)],
+ [RES_QUERY])
+])
+
+AC_DEFUN([AC_CHECK_DN_SKIPNAME],
+[
+ KDE_CHECK_FUNC_EXT(dn_skipname, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+],
+[
+dn_skipname (NULL, NULL);
+],
+ [int dn_skipname (unsigned char *, unsigned char *)],
+ [DN_SKIPNAME])
+])
+
+
+AC_DEFUN([AC_FIND_GIF],
+ [AC_MSG_CHECKING([for giflib])
+AC_CACHE_VAL(ac_cv_lib_gif,
+[ac_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries -lgif -lX11 $LIBSOCKET"
+else
+LIBS="$all_libraries -lgif"
+fi
+AC_TRY_LINK(dnl
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+int GifLastError(void);
+#ifdef __cplusplus
+}
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+],
+ [return GifLastError();],
+ eval "ac_cv_lib_gif=yes",
+ eval "ac_cv_lib_gif=no")
+LIBS="$ac_save_LIBS"
+])dnl
+if eval "test \"`echo $ac_cv_lib_gif`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBGIF, 1, [Define if you have libgif])
+else
+ AC_MSG_ERROR(You need giflib30. Please install the kdesupport package)
+fi
+])
+
+AC_DEFUN([KDE_FIND_JPEG_HELPER],
+[
+AC_MSG_CHECKING([for libjpeg$2])
+AC_CACHE_VAL(ac_cv_lib_jpeg_$1,
+[
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -ljpeg$2 -lm"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+void jpeg_CreateDecompress();
+#ifdef __cplusplus
+}
+#endif
+],
+[jpeg_CreateDecompress();],
+ eval "ac_cv_lib_jpeg_$1=-ljpeg$2",
+ eval "ac_cv_lib_jpeg_$1=no")
+LIBS="$ac_save_LIBS"
+CFLAGS="$ac_save_CFLAGS"
+])
+
+if eval "test ! \"`echo $ac_cv_lib_jpeg_$1`\" = no"; then
+ LIBJPEG="$ac_cv_lib_jpeg_$1"
+ AC_MSG_RESULT($ac_cv_lib_jpeg_$1)
+else
+ AC_MSG_RESULT(no)
+ $3
+fi
+
+])
+
+AC_DEFUN([AC_FIND_JPEG],
+[
+dnl first look for libraries
+KDE_FIND_JPEG_HELPER(6b, 6b,
+ KDE_FIND_JPEG_HELPER(normal, [],
+ [
+ LIBJPEG=
+ ]
+ )
+)
+
+dnl then search the headers (can't use simply AC_TRY_xxx, as jpeglib.h
+dnl requires system dependent includes loaded before it)
+jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes"
+AC_FIND_FILE(jpeglib.h, $jpeg_incdirs, jpeg_incdir)
+test "x$jpeg_incdir" = xNO && jpeg_incdir=
+
+dnl if headers _and_ libraries are missing, this is no error, and we
+dnl continue with a warning (the user will get no jpeg support in khtml)
+dnl if only one is missing, it means a configuration error, but we still
+dnl only warn
+if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBJPEG, 1, [Define if you have libjpeg])
+else
+ if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then
+ AC_MSG_WARN([
+There is an installation error in jpeg support. You seem to have only one
+of either the headers _or_ the libraries installed. You may need to either
+provide correct --with-extra-... options, or the development package of
+libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/
+Disabling JPEG support.
+])
+ else
+ AC_MSG_WARN([libjpeg not found. disable JPEG support.])
+ fi
+ jpeg_incdir=
+ LIBJPEG=
+fi
+
+AC_SUBST(LIBJPEG)
+AH_VERBATIM(_AC_CHECK_JPEG,
+[/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+])
+])
+
+AC_DEFUN([KDE_CHECK_QT_JPEG],
+[
+if test -n "$LIBJPEG"; then
+AC_MSG_CHECKING([if Qt needs $LIBJPEG])
+AC_CACHE_VAL(kde_cv_qt_jpeg,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS $LIBQT"
+LIBS=`echo $LIBS | sed "s/$LIBJPEG//"`
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[#include <qapplication.h>],
+ [
+ int argc;
+ char** argv;
+ QApplication app(argc, argv);],
+ eval "kde_cv_qt_jpeg=no",
+ eval "kde_cv_qt_jpeg=yes")
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+fi
+])
+
+if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then
+ AC_MSG_RESULT(yes)
+ LIBJPEG_QT='$(LIBJPEG)'
+else
+ AC_MSG_RESULT(no)
+ LIBJPEG_QT=
+fi
+
+])
+
+AC_DEFUN([AC_FIND_ZLIB],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for libz])
+AC_CACHE_VAL(ac_cv_lib_z,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#include<zlib.h>
+],
+[
+ char buf[42];
+ gzFile f = (gzFile) 0;
+ /* this would segfault.. but we only link, don't run */
+ (void) gzgets(f, buf, sizeof(buf));
+
+ return (zlibVersion() == ZLIB_VERSION);
+],
+ eval "ac_cv_lib_z='-lz'",
+ eval "ac_cv_lib_z=no")
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if test ! "$ac_cv_lib_z" = no; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBZ, 1, [Define if you have libz])
+ LIBZ="$ac_cv_lib_z"
+ AC_MSG_RESULT($ac_cv_lib_z)
+else
+ AC_MSG_ERROR(not found.
+ Possibly configure picks up an outdated version
+ installed by XFree86. Remove it from your system.
+
+ Check your installation and look into config.log)
+ LIBZ=""
+fi
+AC_SUBST(LIBZ)
+])
+
+AC_DEFUN([KDE_TRY_TIFFLIB],
+[
+AC_MSG_CHECKING([for libtiff $1])
+
+AC_CACHE_VAL(kde_cv_libtiff_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lX11 $LIBSOCKET -lm"
+else
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lm"
+fi
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+[
+#include<tiffio.h>
+],
+ [return (TIFFOpen( "", "r") == 0); ],
+[
+ kde_cv_libtiff_$1="-l$1 $LIBJPEG $LIBZ"
+], [
+ kde_cv_libtiff_$1=no
+])
+
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_libtiff_$1" = "no"; then
+ AC_MSG_RESULT(no)
+ LIBTIFF=""
+ $3
+else
+ LIBTIFF="$kde_cv_libtiff_$1"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBTIFF, 1, [Define if you have libtiff])
+ $2
+fi
+
+])
+
+AC_DEFUN([AC_FIND_TIFF],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+KDE_TRY_TIFFLIB(tiff, [],
+ KDE_TRY_TIFFLIB(tiff34))
+
+AC_SUBST(LIBTIFF)
+])
+
+AC_DEFUN([KDE_FIND_LIBEXR],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_CACHE_VAL(ac_cv_libexr,
+[
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ AC_MSG_CHECKING([for OpenEXR libraries])
+
+ if test "$PKG_CONFIG" = "no" ; then
+ AC_MSG_RESULT(no)
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ if !(`$PKG_CONFIG --exists OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=no
+ else
+ if !(`$PKG_CONFIG --atleast-version="1.1.1" OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=old
+ else
+ kde_save_LIBS="$LIBS"
+ LIBS="$LIBS $all_libraries $USER_LDFLAGS $LIBZ `pkg-config --libs OpenEXR`"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ EXR_FLAGS=`$PKG_CONFIG --cflags OpenEXR`
+ CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $EXR_FLAGS"
+
+ AC_TRY_LINK(dnl
+ [
+ #include <ImfRgbaFile.h>
+ ],
+ [
+ using namespace Imf;
+ RgbaInputFile file ("dummy");
+ return 0;
+ ],
+ eval "ac_cv_libexr='`pkg-config --libs OpenEXR`'",
+ eval "ac_cv_libexr=no"
+ )
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+ if eval "test ! \"`echo $ac_cv_libexr`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_EXR, 1, [Define if you have OpenEXR])
+ LIB_EXR="$ac_cv_libexr"
+ AC_MSG_RESULT($ac_cv_libexr)
+ else
+ AC_MSG_RESULT(no)
+ LIB_EXR=""
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST(LIB_EXR)
+ AC_SUBST(EXR_FLAGS)
+])
+
+
+
+AC_DEFUN([AC_FIND_PNG],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_MSG_CHECKING([for libpng])
+AC_CACHE_VAL(ac_cv_lib_png,
+[
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm -lX11 $LIBSOCKET"
+else
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm"
+fi
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<png.h>
+ ],
+ [
+ png_structp png_ptr = png_create_read_struct( /* image ptr */
+ PNG_LIBPNG_VER_STRING, 0, 0, 0 );
+ return( png_ptr != 0 );
+ ],
+ eval "ac_cv_lib_png='-lpng $LIBZ -lm'",
+ eval "ac_cv_lib_png=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBPNG, 1, [Define if you have libpng])
+ LIBPNG="$ac_cv_lib_png"
+ AC_SUBST(LIBPNG)
+ AC_MSG_RESULT($ac_cv_lib_png)
+else
+ AC_MSG_RESULT(no)
+ LIBPNG=""
+ AC_SUBST(LIBPNG)
+fi
+])
+
+
+AC_DEFUN([AC_FIND_JASPER],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_MSG_CHECKING([for jasper])
+AC_CACHE_VAL(ac_cv_jasper,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -ljasper $LIBJPEG -lm"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<jasper/jasper.h>
+ ],
+ [
+ return( jas_init() );
+ ],
+ eval "ac_cv_jasper='-ljasper $LIBJPEG -lm'",
+ eval "ac_cv_jasper=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_jasper`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_JASPER, 1, [Define if you have jasper])
+ LIB_JASPER="$ac_cv_jasper"
+ AC_MSG_RESULT($ac_cv_jasper)
+else
+ AC_MSG_RESULT(no)
+ LIB_JASPER=""
+fi
+AC_SUBST(LIB_JASPER)
+])
+
+AC_DEFUN([AC_CHECK_BOOL],
+[
+ AC_DEFINE_UNQUOTED(HAVE_BOOL, 1, [You _must_ have bool])
+])
+
+AC_DEFUN([AC_CHECK_GNU_EXTENSIONS],
+[
+AC_MSG_CHECKING(if you need GNU extensions)
+AC_CACHE_VAL(ac_cv_gnu_extensions,
+[
+cat > conftest.c << EOF
+#include <features.h>
+
+#ifdef __GNU_LIBRARY__
+yes
+#endif
+EOF
+
+if (eval "$ac_cpp conftest.c") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_gnu_extensions=yes
+else
+ ac_cv_gnu_extensions=no
+fi
+])
+
+AC_MSG_RESULT($ac_cv_gnu_extensions)
+if test "$ac_cv_gnu_extensions" = "yes"; then
+ AC_DEFINE_UNQUOTED(_GNU_SOURCE, 1, [Define if you need to use the GNU extensions])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CXX supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], [])
+ CXXFLAGS="$save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+AC_DEFUN([KDE_CHECK_C_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CC supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cc_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_C
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cc_$kde_cache=yes"], [])
+ CFLAGS="$save_CFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+
+dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables
+dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever])
+dnl it's all white-space separated
+AC_DEFUN([AC_REMOVE_FORBIDDEN],
+[ __val=$$1
+ __forbid=" $2 "
+ if test -n "$__val"; then
+ __new=""
+ ac_save_IFS=$IFS
+ IFS=" "
+ for i in $__val; do
+ case "$__forbid" in
+ *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;;
+ *) # Careful to not add spaces, where there were none, because otherwise
+ # libtool gets confused, if we change e.g. CXX
+ if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;;
+ esac
+ done
+ IFS=$ac_save_IFS
+ $1=$__new
+ fi
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_BAD_COMPILER],
+[
+ AC_MSG_CHECKING([whether $CC is blacklisted])
+
+ dnl In theory we have tu run this test against $CC and $CXX
+ dnl in C and in C++ mode, because its perfectly legal for
+ dnl the user to mix compiler versions, since C has a defined
+ dnl ABI.
+ dnl
+ dnl For now, we assume the user is not on crack.
+
+ AC_TRY_COMPILE([
+#ifdef __GNUC__
+#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0
+choke me
+#endif
+#endif
+], ,
+ kde_bad_compiler=no,
+ kde_bad_compiler=yes
+)
+
+ AC_MSG_RESULT($kde_bad_compiler)
+
+if test "$kde_bad_compiler" = "yes"; then
+ AC_MSG_ERROR([
+
+This particular compiler version is blacklisted because it
+is known to miscompile KDE. Please use a newer version, or
+if that is not yet available, choose an older version.
+
+Please do not report a bug or bother us reporting this
+configure error. We know about it, and we introduced
+it by intention to avoid untraceable bugs or crashes in KDE.
+
+])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_OPT_NOINLINE_MATCH],
+[
+ AC_CACHE_CHECK([whether system headers can cope with -O2 -fno-inline],
+ kde_cv_opt_noinline_match,
+ [
+ kde_cv_opt_noinline_match=irrelevant
+ dnl if we don't use both -O2 and -fno-inline, this check is moot
+ if echo "$CFLAGS" | grep -e -O2 >/dev/null 2>/dev/null \
+ && echo "$CFLAGS" | grep -e -fno-inline >/dev/null 2>/dev/null ; then
+
+ ac_cflags_save="$CFLAGS"
+ CFLAGS="$CFLAGS -D_USE_GNU"
+
+ AC_TRY_LINK([
+ #include <string.h>
+], [ const char *pt, *et;
+ et = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p ( ";," ) && ((size_t)(const void *)(( ";," )+ 1) - (size_t)(const void *)( ";," ) == 1) ? ((__a0 =((__const char *) ( ";," ))[0], __a0 == '\0') ? ((void) ( pt ),((void *)0) ) : ((__a1 = ((__const char *) ( ";," ))[1], __a1== '\0') ? (__extension__ (__builtin_constant_p ( __a0 ) && ( __a0 ) == '\0' ? (char *) __rawmemchr ( pt , __a0) : strchr( pt , __a0 ))) : ((__a2 = ((__const char *) ( ";," ))[2], __a2 == '\0') ? __strpbrk_c2 ( pt , __a0, __a1) :(((__const char *) ( ";," ))[3] == '\0' ? __strpbrk_c3 ( pt ,__a0, __a1, __a2): strpbrk ( pt , ";," ))))) : strpbrk ( pt , ";," )); }) ;
+],
+ kde_cv_opt_noinline_match=yes,
+ kde_cv_opt_noinline_match=no
+ )
+
+ CFLAGS="$ac_cflags_save"
+ fi
+ ])
+])
+
+
+dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given
+AC_DEFUN([AC_VALIDIFY_CXXFLAGS],
+[dnl
+if test "x$kde_use_qt_emb" != "xyes"; then
+ AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath])
+else
+ AC_REMOVE_FORBIDDEN(CXX, [-rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath])
+fi
+])
+
+AC_DEFUN([AC_CHECK_COMPILERS],
+[
+ AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]),
+ [
+ case $enableval in
+ yes)
+ kde_use_debug_code="yes"
+ kde_use_debug_define=no
+ ;;
+ full)
+ kde_use_debug_code="full"
+ kde_use_debug_define=no
+ ;;
+ *)
+ kde_use_debug_code="no"
+ kde_use_debug_define=yes
+ ;;
+ esac
+ ],
+ [kde_use_debug_code="no"
+ kde_use_debug_define=no
+ ])
+
+ dnl Just for configure --help
+ AC_ARG_ENABLE(dummyoption,
+ AC_HELP_STRING([--disable-debug],
+ [disables debug output and debug symbols [default=no]]),
+ [],[])
+
+ AC_ARG_ENABLE(strict,
+ AC_HELP_STRING([--enable-strict],
+ [compiles with strict compiler options (may not work!)]),
+ [
+ if test $enableval = "no"; then
+ kde_use_strict_options="no"
+ else
+ kde_use_strict_options="yes"
+ fi
+ ], [kde_use_strict_options="no"])
+
+ AC_ARG_ENABLE(warnings,AC_HELP_STRING([--disable-warnings],[disables compilation with -Wall and similar]),
+ [
+ if test $enableval = "no"; then
+ kde_use_warnings="no"
+ else
+ kde_use_warnings="yes"
+ fi
+ ], [kde_use_warnings="yes"])
+
+ dnl enable warnings for debug build
+ if test "$kde_use_debug_code" != "no"; then
+ kde_use_warnings=yes
+ fi
+
+ AC_ARG_ENABLE(profile,AC_HELP_STRING([--enable-profile],[creates profiling infos [default=no]]),
+ [kde_use_profiling=$enableval],
+ [kde_use_profiling="no"]
+ )
+
+ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS
+ CFLAGS=" $CFLAGS"
+
+ AC_PROG_CC
+
+ AC_PROG_CPP
+
+ if test "$GCC" = "yes"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test $kde_use_debug_code = "full"; then
+ CFLAGS="-g3 -fno-inline $CFLAGS"
+ else
+ CFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CFLAGS"
+ fi
+ else
+ CFLAGS="-O2 $CFLAGS"
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CFLAGS="-DNDEBUG $CFLAGS"
+ fi
+
+
+ case "$host" in
+ *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";;
+ *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";;
+ esac
+
+ if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then
+ LDFLAGS=""
+ fi
+
+ CXXFLAGS=" $CXXFLAGS"
+
+ AC_PROG_CXX
+
+ KDE_CHECK_FOR_BAD_COMPILER
+
+ if test "$GXX" = "yes" || test "$CXX" = "KCC"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS"
+ else
+ if test "$kde_use_debug_code" = "full"; then
+ CXXFLAGS="-g3 -fno-inline $CXXFLAGS"
+ else
+ CXXFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CXXFLAGS"
+ fi
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"])
+
+ dnl convenience compiler flags
+ KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""])
+ AC_SUBST(WOVERLOADED_VIRTUAL)
+ else
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K3 $CXXFLAGS"
+ else
+ CXXFLAGS="-O2 $CXXFLAGS"
+ fi
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS"
+ fi
+
+ if test "$kde_use_profiling" = "yes"; then
+ KDE_CHECK_COMPILER_FLAG(pg,
+ [
+ CFLAGS="-pg $CFLAGS"
+ CXXFLAGS="-pg $CXXFLAGS"
+ ])
+ fi
+
+ if test "$kde_use_warnings" = "yes"; then
+ if test "$GCC" = "yes"; then
+ CXXFLAGS="-Wall -W -Wpointer-arith $CXXFLAGS"
+ case $host in
+ *-*-linux-gnu)
+ CFLAGS="-std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS"
+ CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts $CXXFLAGS"
+ KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"])
+ KDE_CHECK_C_COMPILER_FLAG(Wmissing-format-attribute, [CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"])
+ ;;
+ esac
+ KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"])
+ KDE_CHECK_COMPILER_FLAG(Wno-long-long,[CXXFLAGS="-Wno-long-long $CXXFLAGS"])
+ dnl ### FIXME: revert for KDE 4
+ KDE_CHECK_COMPILER_FLAG(Wno-non-virtual-dtor,[CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor"])
+ fi
+ fi
+
+ if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then
+ CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS"
+ fi
+
+ AC_ARG_ENABLE(pch,
+ AC_HELP_STRING([--enable-pch],
+ [enables precompiled header support (currently only KCC or gcc >=3.4+unsermake) [default=no]]),
+ [ kde_use_pch=$enableval ],[ kde_use_pch=no ])
+
+ HAVE_GCC_VISIBILITY=0
+ AC_SUBST([HAVE_GCC_VISIBILITY])
+
+ if test "$GXX" = "yes"; then
+ gcc_no_reorder_blocks=NO
+ KDE_CHECK_COMPILER_FLAG(fno-reorder-blocks,[gcc_no_reorder_blocks=YES])
+ if test $kde_use_debug_code != "no" && \
+ test $kde_use_debug_code != "full" && \
+ test "YES" = "$gcc_no_reorder_blocks" ; then
+ CXXFLAGS="$CXXFLAGS -fno-reorder-blocks"
+ CFLAGS="$CFLAGS -fno-reorder-blocks"
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"])
+ KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"])
+ KDE_CHECK_COMPILER_FLAG(fno-common, [CXXFLAGS="$CXXFLAGS -fno-common"])
+ KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= )
+ ENABLE_PERMISSIVE_FLAG="-fpermissive"
+
+ if test "$kde_use_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c header files)
+ echo >conftest.h
+ if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ if test "$kde_gcc_supports_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c++ header files)
+ if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ rm -f conftest.h conftest.h.gch
+ fi
+
+ KDE_CHECK_FOR_OPT_NOINLINE_MATCH
+ if test "x$kde_cv_opt_noinline_match" = "xno" ; then
+ CFLAGS="`echo "$CFLAGS" | sed "s/ -fno-inline//"`"
+ fi
+ fi
+ AM_CONDITIONAL(unsermake_enable_pch, test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes")
+ if test "$CXX" = "KCC"; then
+ dnl unfortunately we currently cannot disable exception support in KCC
+ dnl because doing so is binary incompatible and Qt by default links with exceptions :-(
+ dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"])
+ dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= )
+
+ if test "$kde_use_pch" = "yes"; then
+ dnl TODO: support --pch-dir!
+ KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"])
+ dnl the below works (but the dir must exist), but it's
+ dnl useless for a whole package.
+ dnl The are precompiled headers for each source file, so when compiling
+ dnl from scratch, it doesn't make a difference, and they take up
+ dnl around ~5Mb _per_ sourcefile.
+ dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp,
+ dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"])
+ fi
+ dnl this flag controls inlining. by default KCC inlines in optimisation mode
+ dnl all implementations that are defined inside the class {} declaration.
+ dnl because of templates-compatibility with broken gcc compilers, this
+ dnl can cause excessive inlining. This flag limits it to a sane level
+ KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"])
+ KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"])
+ KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"])
+ KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"])
+ dnl Some source files are shared between multiple executables
+ dnl (or libraries) and some of those need template instantiations.
+ dnl In that case KCC needs to compile those sources with
+ dnl --one_instantiation_per_object. To make it easy for us we compile
+ dnl _all_ objects with that flag (--one_per is a shorthand).
+ KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"])
+ fi
+ AC_SUBST(USE_EXCEPTIONS)
+ dnl obsolete macro - provided to keep things going
+ USE_RTTI=
+ AC_SUBST(USE_RTTI)
+
+ case "$host" in
+ *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;;
+ *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";;
+ *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";;
+ *-*-solaris*)
+ if test "$GXX" = yes; then
+ libstdcpp=`$CXX -print-file-name=libstdc++.so`
+ if test ! -f $libstdcpp; then
+ AC_MSG_ERROR([You've compiled gcc without --enable-shared. This doesn't work with KDE. Please recompile gcc with --enable-shared to receive a libstdc++.so])
+ fi
+ fi
+ ;;
+ esac
+
+ AC_VALIDIFY_CXXFLAGS
+
+ AC_PROG_CXXCPP
+
+ if test "$GCC" = yes; then
+ NOOPT_CFLAGS=-O0
+ fi
+ KDE_CHECK_COMPILER_FLAG(O0,[NOOPT_CXXFLAGS=-O0])
+
+ AC_ARG_ENABLE(coverage,
+ AC_HELP_STRING([--enable-coverage],[use gcc coverage testing]), [
+ if test "$am_cv_CC_dependencies_compiler_type" = "gcc3"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker="-lgcc"
+ elif test "$am_cv_CC_dependencies_compiler_type" = "gcc"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker=""
+ else
+ AC_MSG_ERROR([coverage with your compiler is not supported])
+ fi
+ CFLAGS="$CFLAGS $ac_coverage_compiler"
+ CXXFLAGS="$CXXFLAGS $ac_coverage_compiler"
+ LDFLAGS="$LDFLAGS $ac_coverage_linker"
+ ])
+
+ AC_SUBST(NOOPT_CXXFLAGS)
+ AC_SUBST(NOOPT_CFLAGS)
+ AC_SUBST(ENABLE_PERMISSIVE_FLAG)
+
+ KDE_CHECK_NEW_LDFLAGS
+ KDE_CHECK_FINAL
+ KDE_CHECK_CLOSURE
+ KDE_CHECK_NMCHECK
+
+ ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), [])
+])
+
+AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG],
+ [
+ AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], kde_cv_val_gcc_visibility_bug,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0"
+ LDFLAGS="$LDFLAGS -shared -fPIC"
+
+ AC_TRY_LINK(
+ [
+ /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */
+ #include <string>
+ int some_function( void ) __attribute__ ((visibility("default")));
+ int some_function( void )
+ {
+ std::string s("blafasel");
+ return 0;
+ }
+ ], [/* elvis is alive */],
+ kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_cv_val_gcc_visibility_bug = xno; then
+ CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
+ fi
+ ]
+)
+
+AC_DEFUN([KDE_ENABLE_HIDDEN_VISIBILITY],
+[
+ AC_BEFORE([AC_PATH_QT_1_3], [KDE_ENABLE_HIDDEN_VISIBILITY])
+
+ AC_MSG_CHECKING([grepping for visibility push/pop in headers])
+
+ if test "x$GXX" = "xyes"; then
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_EGREP_CPP(
+ [GCC visibility push],
+ [ #include <exception>
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ kde_stdc_visibility_patched=yes ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([Your libstdc++ doesn't appear to be patched for
+ visibility support. Disabling -fvisibility=hidden])
+
+ kde_stdc_visibility_patched=no ])
+
+ AC_LANG_RESTORE
+
+ kde_have_gcc_visibility=no
+ KDE_CHECK_COMPILER_FLAG(fvisibility=hidden,
+ [
+ kde_have_gcc_visibility=yes
+ dnl the whole toolchain is just a mess, gcc is just too buggy
+ dnl to handle STL with visibility enabled. Lets reconsider
+ dnl when gcc 4.2 is out or when things get fixed in the compiler.
+ dnl Contact [email protected] for details.
+ AC_ARG_ENABLE(gcc-hidden-visibility,
+ AC_HELP_STRING([--enable-gcc-hidden-visibility],[toolchain hidden visibility [default=no]]),
+ [kde_have_gcc_visibility=$enableval],
+ [kde_have_gcc_visibility=no])
+
+ AC_CACHE_CHECK([if Qt is patched for -fvisibility], kde_cv_val_qt_gcc_visibility_patched,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS $all_includes"
+
+ AC_TRY_COMPILE(
+ [
+#include <qglobal.h>
+#if Q_EXPORT - 0 != 0
+/* if this compiles, then Q_EXPORT is undefined */
+/* if Q_EXPORT is nonempty, this will break compilation */
+#endif
+ ], [/* elvis is alive */],
+ kde_cv_val_qt_gcc_visibility_patched=no, kde_cv_val_qt_gcc_visibility_patched=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_have_gcc_visibility = "xyes" && test x$kde_stdc_visibility_patched = "xyes" && test x$kde_cv_val_qt_gcc_visibility_patched = "xyes"; then
+ CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+ KDE_CHECK_VISIBILITY_GCC_BUG
+ HAVE_GCC_VISIBILITY=1
+ AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", [define to 1 if -fvisibility is supported])
+ fi
+ ])
+ fi
+])
+
+AC_DEFUN([KDE_ADD_DEPENDENCIES],
+[
+ [A]M_DEPENDENCIES(CC)
+ [A]M_DEPENDENCIES(CXX)
+])
+
+dnl just a wrapper to clean up configure.in
+AC_DEFUN([KDE_PROG_LIBTOOL],
+[
+AC_REQUIRE([AC_CHECK_COMPILERS])
+AC_REQUIRE([AC_ENABLE_SHARED])
+AC_REQUIRE([AC_ENABLE_STATIC])
+
+AC_REQUIRE([AC_LIBTOOL_DLOPEN])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_OBJEXT
+AC_EXEEXT
+
+AM_PROG_LIBTOOL
+AC_LIBTOOL_CXX
+
+LIBTOOL_SHELL="/bin/sh ./libtool"
+# LIBTOOL="$LIBTOOL --silent"
+KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)"
+AC_SUBST(KDE_PLUGIN)
+
+# This hack ensures that libtool creates shared libs for kunittest plugins. By default check_LTLIBRARIES makes static libs.
+KDE_CHECK_PLUGIN="\$(KDE_PLUGIN) -rpath \$(libdir)"
+AC_SUBST(KDE_CHECK_PLUGIN)
+
+# we patch configure quite some so we better keep that consistent for incremental runs
+AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure')
+])
+
+AC_DEFUN([KDE_CHECK_LIB64],
+[
+ kdelibsuff="$kde_libs_suffix"
+ if test -z "$kdelibsuff"; then
+ kdelibsuff="no"
+ fi
+ AC_ARG_ENABLE(libsuffix,
+ AC_HELP_STRING([--enable-libsuffix],
+ [/lib directory suffix (64,32,none,auto[=default])]),
+ kdelibsuff=$enableval)
+
+ if test "$kdelibsuff" = "auto"; then
+
+cat > conftest.c << EOF
+#include <stdio.h>
+int main() {
+ return 0;
+}
+EOF
+ kdelibsuff=`$CC conftest.c -o conftest.out; ldd conftest.out |sed -ne '/libc.so/{
+ s,.*/lib\([[^\/]]*\)/.*,\1,
+ p
+}'`
+ rm -rf conftest.*
+ fi
+
+ if test "$kdelibsuff" = "no" || "$kdelibsuff" = "none"; then
+ kdelibsuff=
+ fi
+ if test -z "$kdelibsuff"; then
+ AC_MSG_RESULT([not using lib directory suffix])
+ AC_DEFINE(KDELIBSUFF, [""], Suffix for lib directories)
+ else
+ if test "$libdir" = '${exec_prefix}/lib'; then
+ libdir="$libdir${kdelibsuff}"
+ AC_SUBST([libdir], ["$libdir"]) dnl ugly hack for lib64 platforms
+ fi
+ AC_DEFINE_UNQUOTED(KDELIBSUFF, ["${kdelibsuff}"], Suffix for lib directories)
+ AC_MSG_RESULT([using lib directory suffix $kdelibsuff])
+ fi
+])
+
+AC_DEFUN([KDE_CHECK_TYPES],
+[ AC_CHECK_SIZEOF(int, 4)dnl
+ AC_CHECK_SIZEOF(short)dnl
+ AC_CHECK_SIZEOF(long, 4)dnl
+ AC_CHECK_SIZEOF(char *, 4)dnl
+])dnl
+
+dnl Not used - kept for compat only?
+AC_DEFUN([KDE_DO_IT_ALL],
+[
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+AM_INIT_AUTOMAKE($1, $2)
+AM_DISABLE_LIBRARIES
+AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+AC_CHECK_COMPILERS
+KDE_PROG_LIBTOOL
+AM_KDE_WITH_NLS
+AC_PATH_KDE
+])
+
+AC_DEFUN([AC_CHECK_RPATH],
+[
+AC_MSG_CHECKING(for rpath)
+AC_ARG_ENABLE(rpath,
+ AC_HELP_STRING([--disable-rpath],[do not use the rpath feature of ld]),
+ USE_RPATH=$enableval, USE_RPATH=yes)
+
+if test -z "$KDE_RPATH" && test "$USE_RPATH" = "yes"; then
+
+ KDE_RPATH="-R \$(libdir)"
+
+ if test "$kde_libraries" != "$libdir"; then
+ KDE_RPATH="$KDE_RPATH -R \$(kde_libraries)"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_RPATH="$KDE_RPATH -R \$(qt_libraries)"
+ fi
+ dnl $x_libraries is set to /usr/lib in case
+ if test -n "$X_LDFLAGS"; then
+ X_RPATH="-R \$(x_libraries)"
+ KDE_RPATH="$KDE_RPATH $X_RPATH"
+ fi
+ if test -n "$KDE_EXTRA_RPATH"; then
+ KDE_RPATH="$KDE_RPATH \$(KDE_EXTRA_RPATH)"
+ fi
+fi
+AC_SUBST(KDE_EXTRA_RPATH)
+AC_SUBST(KDE_RPATH)
+AC_SUBST(X_RPATH)
+AC_MSG_RESULT($USE_RPATH)
+])
+
+dnl Check for the type of the third argument of getsockname
+AC_DEFUN([AC_CHECK_SOCKLEN_T],
+[
+ AC_MSG_CHECKING(for socklen_t)
+ AC_CACHE_VAL(kde_cv_socklen_t,
+ [
+ AC_LANG_PUSH(C++)
+ kde_cv_socklen_t=no
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ socklen_t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t=yes
+ kde_cv_socklen_t_equiv=socklen_t
+ ])
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t)
+ if test $kde_cv_socklen_t = no; then
+ AC_MSG_CHECKING([for socklen_t equivalent for socket functions])
+ AC_CACHE_VAL(kde_cv_socklen_t_equiv,
+ [
+ kde_cv_socklen_t_equiv=int
+ AC_LANG_PUSH(C++)
+ for t in int size_t unsigned long "unsigned long"; do
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ $t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t_equiv="$t"
+ break
+ ])
+ done
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t_equiv)
+ fi
+ AC_DEFINE_UNQUOTED(kde_socklen_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined])
+ AC_DEFINE_UNQUOTED(ksize_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined (deprecated, use kde_socklen_t)])
+])
+
+dnl This is a merge of some macros out of the gettext aclocal.m4
+dnl since we don't need anything, I took the things we need
+dnl the copyright for them is:
+dnl >
+dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+dnl This Makefile.in 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 This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+dnl >
+dnl for this file it is relicensed under LGPL
+
+AC_DEFUN([AM_KDE_WITH_NLS],
+ [
+ dnl If we use NLS figure out what method
+
+ AM_PATH_PROG_WITH_TEST_KDE(MSGFMT, msgfmt,
+ [test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"], msgfmt)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then
+ AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; ignore it])
+ GMSGFMT=":"
+ fi
+ MSGFMT=$GMSGFMT
+ AC_SUBST(GMSGFMT)
+ AC_SUBST(MSGFMT)
+
+ AM_PATH_PROG_WITH_TEST_KDE(XGETTEXT, xgettext,
+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+
+ dnl Test whether we really found GNU xgettext.
+ if test "$XGETTEXT" != ":"; then
+ dnl If it is no GNU xgettext we define it as : so that the
+ dnl Makefiles still can work.
+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+ : ;
+ else
+ AC_MSG_RESULT(
+ [found xgettext programs is not GNU xgettext; ignore it])
+ XGETTEXT=":"
+ fi
+ fi
+ AC_SUBST(XGETTEXT)
+
+ ])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <[email protected]>, 1996.
+
+# serial 1
+# Stephan Kulow: I appended a _KDE against name conflicts
+
+dnl AM_PATH_PROG_WITH_TEST_KDE(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST_KDE],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ /*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test -n "[$]$1"; then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <[email protected]>, 1995.
+
+# serial 1
+
+AC_DEFUN([AM_LC_MESSAGES],
+ [if test $ac_cv_header_locale_h = yes; then
+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+ if test $am_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your locale.h file contains LC_MESSAGES])
+ fi
+ fi])
+
+dnl From Jim Meyering.
+dnl FIXME: migrate into libit.
+
+AC_DEFUN([AM_FUNC_OBSTACK],
+[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack,
+ [AC_TRY_LINK([#include "obstack.h"],
+ [struct obstack *mem;obstack_free(mem,(char *) 0)],
+ am_cv_func_obstack=yes,
+ am_cv_func_obstack=no)])
+ if test $am_cv_func_obstack = yes; then
+ AC_DEFINE(HAVE_OBSTACK)
+ else
+ LIBOBJS="$LIBOBJS obstack.o"
+ fi
+])
+
+dnl From Jim Meyering. Use this if you use the GNU error.[ch].
+dnl FIXME: Migrate into libit
+
+AC_DEFUN([AM_FUNC_ERROR_AT_LINE],
+[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line,
+ [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");],
+ am_cv_lib_error_at_line=yes,
+ am_cv_lib_error_at_line=no)])
+ if test $am_cv_lib_error_at_line = no; then
+ LIBOBJS="$LIBOBJS error.o"
+ fi
+ AC_SUBST(LIBOBJS)dnl
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <[email protected]>, 1995.
+
+# serial 1
+# Stephan Kulow: I put a KDE in it to avoid name conflicts
+
+AC_DEFUN([AM_KDE_GNU_GETTEXT],
+ [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([AM_KDE_WITH_NLS])dnl
+ AC_CHECK_HEADERS([limits.h locale.h nl_types.h string.h values.h alloca.h])
+ AC_CHECK_FUNCS([getcwd munmap putenv setlocale strchr strcasecmp \
+__argz_count __argz_stringify __argz_next])
+
+ AC_MSG_CHECKING(for stpcpy)
+ AC_CACHE_VAL(kde_cv_func_stpcpy,
+ [
+ kde_safe_cxxflags=$CXXFLAGS
+ CXXFLAGS="-Werror"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+ #include <string.h>
+ ],
+ [
+ char buffer[200];
+ stpcpy(buffer, buffer);
+ ],
+ kde_cv_func_stpcpy=yes,
+ kde_cv_func_stpcpy=no)
+ AC_LANG_RESTORE
+ CXXFLAGS=$kde_safe_cxxflags
+ ])
+ AC_MSG_RESULT($kde_cv_func_stpcpy)
+ if eval "test \"`echo $kde_cv_func_stpcpy`\" = yes"; then
+ AC_DEFINE(HAVE_STPCPY, 1, [Define if you have stpcpy])
+ fi
+
+ AM_LC_MESSAGES
+
+ if test "x$CATOBJEXT" != "x"; then
+ if test "x$ALL_LINGUAS" = "x"; then
+ LINGUAS=
+ else
+ AC_MSG_CHECKING(for catalogs to be installed)
+ NEW_LINGUAS=
+ for lang in ${LINGUAS=$ALL_LINGUAS}; do
+ case "$ALL_LINGUAS" in
+ *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+ esac
+ done
+ LINGUAS=$NEW_LINGUAS
+ AC_MSG_RESULT($LINGUAS)
+ fi
+
+ dnl Construct list of names of catalog files to be constructed.
+ if test -n "$LINGUAS"; then
+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+ fi
+ fi
+
+ ])
+
+AC_DEFUN([AC_HAVE_XPM],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$XPM_LDFLAGS" && XPM_LDFLAGS=
+ test -z "$XPM_INCLUDE" && XPM_INCLUDE=
+
+ AC_ARG_WITH(xpm,AC_HELP_STRING([--without-xpm],[disable color pixmap XPM tests]),
+ xpm_test=$withval, xpm_test="yes")
+ if test "x$xpm_test" = xno; then
+ ac_cv_have_xpm=no
+ else
+ AC_MSG_CHECKING(for XPM)
+ AC_CACHE_VAL(ac_cv_have_xpm,
+ [
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm -lX11 -lXext $LIBZ $LIBSOCKET"
+ else
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm $LIBZ $LIBSOCKET"
+ fi
+ CFLAGS="$CFLAGS $X_INCLUDES $USER_INCLUDES"
+ test -n "$XPM_INCLUDE" && CFLAGS="-I$XPM_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <X11/xpm.h>],[],
+ ac_cv_have_xpm="yes",ac_cv_have_xpm="no")
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ ])dnl
+
+ if test "$ac_cv_have_xpm" = no; then
+ AC_MSG_RESULT(no)
+ XPM_LDFLAGS=""
+ XPMINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_XPM, 1, [Define if you have XPM support])
+ if test "$XPM_LDFLAGS" = ""; then
+ XPMLIB='-lXpm $(LIB_X11)'
+ else
+ XPMLIB="-L$XPM_LDFLAGS -lXpm "'$(LIB_X11)'
+ fi
+ if test "$XPM_INCLUDE" = ""; then
+ XPMINC=""
+ else
+ XPMINC="-I$XPM_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ AC_SUBST(XPMINC)
+ AC_SUBST(XPMLIB)
+])
+
+AC_DEFUN([AC_HAVE_DPMS],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$DPMS_LDFLAGS" && DPMS_LDFLAGS=
+ test -z "$DPMS_INCLUDE" && DPMS_INCLUDE=
+ DPMS_LIB=
+
+ AC_ARG_WITH(dpms,AC_HELP_STRING([--without-dpms],[disable DPMS power saving]),
+ dpms_test=$withval, dpms_test="yes")
+ if test "x$dpms_test" = xno; then
+ ac_cv_have_dpms=no
+ else
+ AC_MSG_CHECKING(for DPMS)
+ dnl Note: ac_cv_have_dpms can be no, yes, or -lXdpms.
+ dnl 'yes' means DPMS_LIB="", '-lXdpms' means DPMS_LIB="-lXdpms".
+ AC_CACHE_VAL(ac_cv_have_dpms,
+ [
+ if test "x$kde_use_qt_emb" = "xyes" || test "x$kde_use_qt_mac" = "xyes"; then
+ AC_MSG_RESULT(no)
+ ac_cv_have_dpms="no"
+ else
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ ac_save_libs="$LIBS"
+ LDFLAGS="$LDFLAGS $DPMS_LDFLAGS $all_libraries"
+ LIBS="-lX11 -lXext $LIBSOCKET"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ ac_cv_have_dpms="yes", [
+ LIBS="-lXdpms $LIBS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ [
+ ac_cv_have_dpms="-lXdpms"
+ ],ac_cv_have_dpms="no")
+ ])
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ LIBS="$ac_save_libs"
+ fi
+ ])dnl
+
+ if test "$ac_cv_have_dpms" = no; then
+ AC_MSG_RESULT(no)
+ DPMS_LDFLAGS=""
+ DPMSINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_DPMS, 1, [Define if you have DPMS support])
+ if test "$ac_cv_have_dpms" = "-lXdpms"; then
+ DPMS_LIB="-lXdpms"
+ fi
+ if test "$DPMS_LDFLAGS" = ""; then
+ DPMSLIB="$DPMS_LIB "'$(LIB_X11)'
+ else
+ DPMSLIB="$DPMS_LDFLAGS $DPMS_LIB "'$(LIB_X11)'
+ fi
+ if test "$DPMS_INCLUDE" = ""; then
+ DPMSINC=""
+ else
+ DPMSINC="-I$DPMS_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ ac_save_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AH_TEMPLATE(HAVE_DPMSCAPABLE_PROTO,
+ [Define if you have the DPMSCapable prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSCapable,
+ AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ AH_TEMPLATE(HAVE_DPMSINFO_PROTO,
+ [Define if you have the DPMSInfo prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSInfo,
+ AC_DEFINE(HAVE_DPMSINFO_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ CFLAGS="$ac_save_cflags"
+ AC_SUBST(DPMSINC)
+ AC_SUBST(DPMSLIB)
+])
+
+AC_DEFUN([AC_HAVE_GL],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$GL_LDFLAGS" && GL_LDFLAGS=
+ test -z "$GL_INCLUDE" && GL_INCLUDE=
+
+ AC_ARG_WITH(gl,AC_HELP_STRING([--without-gl],[disable 3D GL modes]),
+ gl_test=$withval, gl_test="yes")
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ # GL and Qt Embedded is a no-go for now.
+ ac_cv_have_gl=no
+ elif test "x$gl_test" = xno; then
+ ac_cv_have_gl=no
+ else
+ AC_MSG_CHECKING(for GL)
+ AC_CACHE_VAL(ac_cv_have_gl,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_ldflags=$LDFLAGS
+ ac_save_cxxflags=$CXXFLAGS
+ ac_save_libs=$LIBS
+ LDFLAGS="$LDFLAGS $GL_LDFLAGS $X_LDFLAGS $all_libraries"
+ LIBS="$LIBS -lGL -lGLU"
+ test "x$kde_use_qt_mac" != xyes && test "x$kde_use_qt_emb" != xyes && LIBS="$LIBS -lX11"
+ LIBS="$LIBS $LIB_XEXT -lm $LIBSOCKET"
+ CXXFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$GL_INCLUDE" && CFLAGS="-I$GL_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <GL/gl.h>
+#include <GL/glu.h>
+], [],
+ ac_cv_have_gl="yes", ac_cv_have_gl="no")
+ AC_LANG_RESTORE
+ LDFLAGS=$ac_save_ldflags
+ CXXFLAGS=$ac_save_cxxflags
+ LIBS=$ac_save_libs
+ ])dnl
+
+ if test "$ac_cv_have_gl" = "no"; then
+ AC_MSG_RESULT(no)
+ GL_LDFLAGS=""
+ GLINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_GL, 1, [Defines if you have GL (Mesa, OpenGL, ...)])
+ if test "$GL_LDFLAGS" = ""; then
+ GLLIB='-lGLU -lGL $(LIB_X11)'
+ else
+ GLLIB="$GL_LDFLAGS -lGLU -lGL "'$(LIB_X11)'
+ fi
+ if test "$GL_INCLUDE" = ""; then
+ GLINC=""
+ else
+ GLINC="-I$GL_INCLUDE"
+ fi
+ AC_MSG_RESULT($ac_cv_have_gl)
+ $1
+ fi
+ fi
+ AC_SUBST(GLINC)
+ AC_SUBST(GLLIB)
+])
+
+
+ dnl shadow password and PAM magic - maintained by [email protected]
+
+AC_DEFUN([KDE_PAM], [
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+
+ want_pam=
+ AC_ARG_WITH(pam,
+ AC_HELP_STRING([--with-pam[=ARG]],[enable support for PAM: ARG=[yes|no|service name]]),
+ [ if test "x$withval" = "xyes"; then
+ want_pam=yes
+ pam_service=kde
+ elif test "x$withval" = "xno"; then
+ want_pam=no
+ else
+ want_pam=yes
+ pam_service=$withval
+ fi
+ ], [ pam_service=kde ])
+
+ use_pam=
+ PAMLIBS=
+ if test "x$want_pam" != xno; then
+ AC_CHECK_LIB(pam, pam_start, [
+ AC_CHECK_HEADER(security/pam_appl.h,
+ [ pam_header=security/pam_appl.h ],
+ [ AC_CHECK_HEADER(pam/pam_appl.h,
+ [ pam_header=pam/pam_appl.h ],
+ [
+ AC_MSG_WARN([PAM detected, but no headers found!
+Make sure you have the necessary development packages installed.])
+ ]
+ )
+ ]
+ )
+ ], , $LIBDL)
+ if test -z "$pam_header"; then
+ if test "x$want_pam" = xyes; then
+ AC_MSG_ERROR([--with-pam was specified, but cannot compile with PAM!])
+ fi
+ else
+ AC_DEFINE(HAVE_PAM, 1, [Defines if you have PAM (Pluggable Authentication Modules)])
+ PAMLIBS="$PAM_MISC_LIB -lpam $LIBDL"
+ use_pam=yes
+
+ dnl darwin claims to be something special
+ if test "$pam_header" = "pam/pam_appl.h"; then
+ AC_DEFINE(HAVE_PAM_PAM_APPL_H, 1, [Define if your PAM headers are in pam/ instead of security/])
+ fi
+
+ dnl test whether struct pam_message is const (Linux) or not (Sun)
+ AC_MSG_CHECKING(for const pam_message)
+ AC_EGREP_HEADER([struct pam_message], $pam_header,
+ [ AC_EGREP_HEADER([const struct pam_message], $pam_header,
+ [AC_MSG_RESULT([const: Linux-type PAM])],
+ [AC_MSG_RESULT([nonconst: Sun-type PAM])
+ AC_DEFINE(PAM_MESSAGE_NONCONST, 1, [Define if your PAM support takes non-const arguments (Solaris)])]
+ )],
+ [AC_MSG_RESULT([not found - assume const, Linux-type PAM])])
+ fi
+ fi
+
+ AC_SUBST(PAMLIBS)
+])
+
+dnl DEF_PAM_SERVICE(arg name, full name, define name)
+AC_DEFUN([DEF_PAM_SERVICE], [
+ AC_ARG_WITH($1-pam,
+ AC_HELP_STRING([--with-$1-pam=[val]],[override PAM service from --with-pam for $2]),
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE=$withval
+ else
+ AC_MSG_ERROR([Cannot use use --with-$1-pam, as no PAM was detected.
+You may want to enforce it by using --with-pam.])
+ fi
+ ],
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE="$pam_service"
+ fi
+ ])
+ if test -n "$$3_PAM_SERVICE"; then
+ AC_MSG_RESULT([The PAM service used by $2 will be $$3_PAM_SERVICE])
+ AC_DEFINE_UNQUOTED($3_PAM_SERVICE, "$$3_PAM_SERVICE", [The PAM service to be used by $2])
+ fi
+ AC_SUBST($3_PAM_SERVICE)
+])
+
+AC_DEFUN([KDE_SHADOWPASSWD], [
+ AC_REQUIRE([KDE_PAM])
+
+ AC_CHECK_LIB(shadow, getspent,
+ [ LIBSHADOW="-lshadow"
+ ac_use_shadow=yes
+ ],
+ [ dnl for UnixWare
+ AC_CHECK_LIB(gen, getspent,
+ [ LIBGEN="-lgen"
+ ac_use_shadow=yes
+ ],
+ [ AC_CHECK_FUNC(getspent,
+ [ ac_use_shadow=yes ],
+ [ ac_use_shadow=no ])
+ ])
+ ])
+ AC_SUBST(LIBSHADOW)
+ AC_SUBST(LIBGEN)
+
+ AC_MSG_CHECKING([for shadow passwords])
+
+ AC_ARG_WITH(shadow,
+ AC_HELP_STRING([--with-shadow],[If you want shadow password support]),
+ [ if test "x$withval" != "xno"; then
+ use_shadow=yes
+ else
+ use_shadow=no
+ fi
+ ], [
+ use_shadow="$ac_use_shadow"
+ ])
+
+ if test "x$use_shadow" = xyes; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SHADOW, 1, [Define if you use shadow passwords])
+ else
+ AC_MSG_RESULT(no)
+ LIBSHADOW=
+ LIBGEN=
+ fi
+
+ dnl finally make the relevant binaries setuid root, if we have shadow passwds.
+ dnl this still applies, if we could use it indirectly through pam.
+ if test "x$use_shadow" = xyes ||
+ ( test "x$use_pam" = xyes && test "x$ac_use_shadow" = xyes ); then
+ case $host in
+ *-*-freebsd* | *-*-netbsd* | *-*-openbsd*)
+ SETUIDFLAGS="-m 4755 -o root";;
+ *)
+ SETUIDFLAGS="-m 4755";;
+ esac
+ fi
+ AC_SUBST(SETUIDFLAGS)
+
+])
+
+AC_DEFUN([KDE_PASSWDLIBS], [
+ AC_REQUIRE([KDE_MISC_TESTS]) dnl for LIBCRYPT
+ AC_REQUIRE([KDE_PAM])
+ AC_REQUIRE([KDE_SHADOWPASSWD])
+
+ if test "x$use_pam" = "xyes"; then
+ PASSWDLIBS="$PAMLIBS"
+ else
+ PASSWDLIBS="$LIBCRYPT $LIBSHADOW $LIBGEN"
+ fi
+
+ dnl FreeBSD uses a shadow-like setup, where /etc/passwd holds the users, but
+ dnl /etc/master.passwd holds the actual passwords. /etc/master.passwd requires
+ dnl root to read, so kcheckpass needs to be root (even when using pam, since pam
+ dnl may need to read /etc/master.passwd).
+ case $host in
+ *-*-freebsd*)
+ SETUIDFLAGS="-m 4755 -o root"
+ ;;
+ *)
+ ;;
+ esac
+
+ AC_SUBST(PASSWDLIBS)
+])
+
+AC_DEFUN([KDE_CHECK_LIBDL],
+[
+AC_CHECK_LIB(dl, dlopen, [
+LIBDL="-ldl"
+ac_cv_have_dlfcn=yes
+])
+
+AC_CHECK_LIB(dld, shl_unload, [
+LIBDL="-ldld"
+ac_cv_have_shload=yes
+])
+
+AC_SUBST(LIBDL)
+])
+
+AC_DEFUN([KDE_CHECK_DLOPEN],
+[
+KDE_CHECK_LIBDL
+AC_CHECK_HEADERS(dlfcn.h dl.h)
+if test "$ac_cv_header_dlfcn_h" = "no"; then
+ ac_cv_have_dlfcn=no
+fi
+
+if test "$ac_cv_header_dl_h" = "no"; then
+ ac_cv_have_shload=no
+fi
+
+dnl XXX why change enable_dlopen? its already set by autoconf's AC_ARG_ENABLE
+dnl (MM)
+AC_ARG_ENABLE(dlopen,
+AC_HELP_STRING([--disable-dlopen],[link statically [default=no]]),
+enable_dlopen=$enableval,
+enable_dlopen=yes)
+
+# override the user's opinion, if we know it better ;)
+if test "$ac_cv_have_dlfcn" = "no" && test "$ac_cv_have_shload" = "no"; then
+ enable_dlopen=no
+fi
+
+if test "$ac_cv_have_dlfcn" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_DLFCN, 1, [Define if you have dlfcn])
+fi
+
+if test "$ac_cv_have_shload" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_SHLOAD, 1, [Define if you have shload])
+fi
+
+if test "$enable_dlopen" = no ; then
+ test -n "$1" && eval $1
+else
+ test -n "$2" && eval $2
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_DYNAMIC_LOADING],
+[
+KDE_CHECK_DLOPEN(libtool_enable_shared=yes, libtool_enable_static=no)
+KDE_PROG_LIBTOOL
+AC_MSG_CHECKING([dynamic loading])
+eval "`egrep '^build_libtool_libs=' libtool`"
+if test "$build_libtool_libs" = "yes" && test "$enable_dlopen" = "yes"; then
+ dynamic_loading=yes
+ AC_DEFINE_UNQUOTED(HAVE_DYNAMIC_LOADING)
+else
+ dynamic_loading=no
+fi
+AC_MSG_RESULT($dynamic_loading)
+if test "$dynamic_loading" = "yes"; then
+ $1
+else
+ $2
+fi
+])
+
+AC_DEFUN([KDE_ADD_INCLUDES],
+[
+if test -z "$1"; then
+ test_include="Pix.h"
+else
+ test_include="$1"
+fi
+
+AC_MSG_CHECKING([for libg++ ($test_include)])
+
+AC_CACHE_VAL(kde_cv_libgpp_includes,
+[
+kde_cv_libgpp_includes=no
+
+ for ac_dir in \
+ \
+ /usr/include/g++ \
+ /usr/include \
+ /usr/unsupported/include \
+ /opt/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$test_include"; then
+ kde_cv_libgpp_includes=$ac_dir
+ break
+ fi
+ done
+])
+
+AC_MSG_RESULT($kde_cv_libgpp_includes)
+if test "$kde_cv_libgpp_includes" != "no"; then
+ all_includes="-I$kde_cv_libgpp_includes $all_includes $USER_INCLUDES"
+fi
+])
+])
+
+AC_DEFUN([KDE_CHECK_LIBPTHREAD],
+[
+ dnl This code is here specifically to handle the
+ dnl various flavors of threading library on FreeBSD
+ dnl 4-, 5-, and 6-, and the (weird) rules around it.
+ dnl There may be an environment PTHREAD_LIBS that
+ dnl specifies what to use; otherwise, search for it.
+ dnl -pthread is special cased and unsets LIBPTHREAD
+ dnl below if found.
+ LIBPTHREAD=""
+
+ if test -n "$PTHREAD_LIBS"; then
+ if test "x$PTHREAD_LIBS" = "x-pthread" ; then
+ LIBPTHREAD="PTHREAD"
+ else
+ PTHREAD_LIBS_save="$PTHREAD_LIBS"
+ PTHREAD_LIBS=`echo "$PTHREAD_LIBS_save" | sed -e 's,^-l,,g'`
+ AC_MSG_CHECKING([for pthread_create in $PTHREAD_LIBS])
+ KDE_CHECK_LIB($PTHREAD_LIBS, pthread_create, [
+ LIBPTHREAD="$PTHREAD_LIBS_save"])
+ PTHREAD_LIBS="$PTHREAD_LIBS_save"
+ fi
+ fi
+
+ dnl Is this test really needed, in the face of the Tru64 test below?
+ if test -z "$LIBPTHREAD"; then
+ AC_CHECK_LIB(pthread, pthread_create, [LIBPTHREAD="-lpthread"])
+ fi
+
+ dnl This is a special Tru64 check, see BR 76171 issue #18.
+ if test -z "$LIBPTHREAD" ; then
+ AC_MSG_CHECKING([for pthread_create in -lpthread])
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS -lpthread"
+ AC_TRY_LINK([#include <pthread.h>],[(void)pthread_create(0,0,0,0);],[
+ AC_MSG_RESULT(yes)
+ LIBPTHREAD="-lpthread"],[
+ AC_MSG_RESULT(no)])
+ LIBS=$kde_safe_libs
+ fi
+
+ dnl Un-special-case for FreeBSD.
+ if test "x$LIBPTHREAD" = "xPTHREAD" ; then
+ LIBPTHREAD=""
+ fi
+
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_PTHREAD_OPTION],
+[
+ USE_THREADS=""
+ if test -z "$LIBPTHREAD"; then
+ KDE_CHECK_COMPILER_FLAG(pthread, [USE_THREADS="-D_THREAD_SAFE -pthread"])
+ fi
+
+ AH_VERBATIM(__svr_define, [
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+])
+ case $host_os in
+ solaris*)
+ KDE_CHECK_COMPILER_FLAG(mt, [USE_THREADS="-mt"])
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_SOLARIS -DSVR4"
+ ;;
+ freebsd*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE $PTHREAD_CFLAGS"
+ ;;
+ aix*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
+ LIBPTHREAD="$LIBPTHREAD -lc_r"
+ ;;
+ linux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="$CXXFLAGS --thread_safe"
+ NOOPT_CXXFLAGS="$NOOPT_CXXFLAGS --thread_safe"
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ AC_SUBST(USE_THREADS)
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_THREADING],
+[
+ AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+ AC_REQUIRE([KDE_CHECK_PTHREAD_OPTION])
+ dnl default is yes if libpthread is found and no if no libpthread is available
+ if test -z "$LIBPTHREAD"; then
+ if test -z "$USE_THREADS"; then
+ kde_check_threading_default=no
+ else
+ kde_check_threading_default=yes
+ fi
+ else
+ kde_check_threading_default=yes
+ fi
+ AC_ARG_ENABLE(threading,AC_HELP_STRING([--disable-threading],[disables threading even if libpthread found]),
+ kde_use_threading=$enableval, kde_use_threading=$kde_check_threading_default)
+ if test "x$kde_use_threading" = "xyes"; then
+ AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define if you have a working libpthread (will enable threaded code)])
+ fi
+])
+
+AC_DEFUN([KDE_TRY_LINK_PYTHON],
+[
+if test "$kde_python_link_found" = no; then
+
+if test "$1" = normal; then
+ AC_MSG_CHECKING(if a Python application links)
+else
+ AC_MSG_CHECKING(if Python depends on $2)
+fi
+
+AC_CACHE_VAL(kde_cv_try_link_python_$1,
+[
+kde_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $PYTHONINC"
+kde_save_libs="$LIBS"
+LIBS="$LIBS $LIBPYTHON $2 $LIBDL $LIBSOCKET"
+kde_save_ldflags="$LDFLAGS"
+LDFLAGS="$LDFLAGS $PYTHONLIB"
+
+AC_TRY_LINK(
+[
+#include <Python.h>
+],[
+ PySys_SetArgv(1, 0);
+],
+ [kde_cv_try_link_python_$1=yes],
+ [kde_cv_try_link_python_$1=no]
+)
+CFLAGS="$kde_save_cflags"
+LIBS="$kde_save_libs"
+LDFLAGS="$kde_save_ldflags"
+])
+
+if test "$kde_cv_try_link_python_$1" = "yes"; then
+ AC_MSG_RESULT(yes)
+ kde_python_link_found=yes
+ if test ! "$1" = normal; then
+ LIBPYTHON="$LIBPYTHON $2"
+ fi
+ $3
+else
+ AC_MSG_RESULT(no)
+ $4
+fi
+
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_DIR],
+[
+AC_MSG_CHECKING([for Python directory])
+
+AC_CACHE_VAL(kde_cv_pythondir,
+[
+ if test -z "$PYTHONDIR"; then
+ kde_cv_pythondir=/usr/local
+ else
+ kde_cv_pythondir="$PYTHONDIR"
+ fi
+])
+
+AC_ARG_WITH(pythondir,
+AC_HELP_STRING([--with-pythondir=pythondir],[use python installed in pythondir]),
+[
+ ac_python_dir=$withval
+], ac_python_dir=$kde_cv_pythondir
+)
+
+AC_MSG_RESULT($ac_python_dir)
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_INTERN],
+[
+AC_REQUIRE([KDE_CHECK_LIBDL])
+AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+AC_REQUIRE([KDE_CHECK_PYTHON_DIR])
+
+if test -z "$1"; then
+ version="1.5"
+else
+ version="$1"
+fi
+
+AC_MSG_CHECKING([for Python$version])
+
+python_incdirs="$ac_python_dir/include /usr/include /usr/local/include/ $kde_extra_includes"
+AC_FIND_FILE(Python.h, $python_incdirs, python_incdir)
+if test ! -r $python_incdir/Python.h; then
+ AC_FIND_FILE(python$version/Python.h, $python_incdirs, python_incdir)
+ python_incdir=$python_incdir/python$version
+ if test ! -r $python_incdir/Python.h; then
+ python_incdir=no
+ fi
+fi
+
+PYTHONINC=-I$python_incdir
+
+python_libdirs="$ac_python_dir/lib$kdelibsuff /usr/lib$kdelibsuff /usr/local /usr/lib$kdelibsuff $kde_extra_libs"
+AC_FIND_FILE(libpython$version.so, $python_libdirs, python_libdir)
+if test ! -r $python_libdir/libpython$version.so; then
+ AC_FIND_FILE(libpython$version.a, $python_libdirs, python_libdir)
+ if test ! -r $python_libdir/libpython$version.a; then
+ AC_FIND_FILE(python$version/config/libpython$version.a, $python_libdirs, python_libdir)
+ python_libdir=$python_libdir/python$version/config
+ if test ! -r $python_libdir/libpython$version.a; then
+ python_libdir=no
+ fi
+ fi
+fi
+
+PYTHONLIB=-L$python_libdir
+kde_orig_LIBPYTHON=$LIBPYTHON
+if test -z "$LIBPYTHON"; then
+ LIBPYTHON=-lpython$version
+fi
+
+AC_FIND_FILE(python$version/copy.py, $python_libdirs, python_moddir)
+python_moddir=$python_moddir/python$version
+if test ! -r $python_moddir/copy.py; then
+ python_moddir=no
+fi
+
+PYTHONMODDIR=$python_moddir
+
+AC_MSG_RESULT(header $python_incdir library $python_libdir modules $python_moddir)
+
+if test x$python_incdir = xno || test x$python_libdir = xno || test x$python_moddir = xno; then
+ LIBPYTHON=$kde_orig_LIBPYTHON
+ test "x$PYTHONLIB" = "x-Lno" && PYTHONLIB=""
+ test "x$PYTHONINC" = "x-Ino" && PYTHONINC=""
+ $2
+else
+ dnl Note: this test is very weak
+ kde_python_link_found=no
+ KDE_TRY_LINK_PYTHON(normal)
+ KDE_TRY_LINK_PYTHON(m, -lm)
+ KDE_TRY_LINK_PYTHON(pthread, $LIBPTHREAD)
+ KDE_TRY_LINK_PYTHON(tcl, -ltcl)
+ KDE_TRY_LINK_PYTHON(db2, -ldb2)
+ KDE_TRY_LINK_PYTHON(m_and_thread, [$LIBPTHREAD -lm])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_util, [$LIBPTHREAD -lm -lutil])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db3, [$LIBPTHREAD -lm -ldb-3 -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_db3, [$LIBPTHREAD -ldb-3])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db, [$LIBPTHREAD -lm -ldb -ltermcap -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_dl, [$LIBPTHREAD $LIBDL -lutil -lreadline -lncurses -lm])
+ KDE_TRY_LINK_PYTHON(pthread_and_panel_curses, [$LIBPTHREAD $LIBDL -lm -lpanel -lcurses])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db_special, [$LIBPTHREAD -lm -ldb -lutil], [],
+ [AC_MSG_WARN([it seems, Python depends on another library.
+ Please set LIBPYTHON to '-lpython$version -lotherlib' before calling configure to fix this
+ and contact the authors to let them know about this problem])
+ ])
+
+ LIBPYTHON="$LIBPYTHON $LIBDL $LIBSOCKET"
+ AC_SUBST(PYTHONINC)
+ AC_SUBST(PYTHONLIB)
+ AC_SUBST(LIBPYTHON)
+ AC_SUBST(PYTHONMODDIR)
+ AC_DEFINE(HAVE_PYTHON, 1, [Define if you have the development files for python])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_PYTHON],
+[
+ KDE_CHECK_PYTHON_INTERN("2.4",
+ [KDE_CHECK_PYTHON_INTERN("2.3",
+ [KDE_CHECK_PYTHON_INTERN("2.2",
+ [KDE_CHECK_PYTHON_INTERN("2.1",
+ [KDE_CHECK_PYTHON_INTERN("2.0",
+ [KDE_CHECK_PYTHON_INTERN($1, $2) ])
+ ])
+ ])
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_STL],
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`"
+
+ AC_MSG_CHECKING([if C++ programs can be compiled])
+ AC_CACHE_VAL(kde_cv_stl_works,
+ [
+ AC_TRY_COMPILE([
+#include <string>
+using namespace std;
+],[
+ string astring="Hallo Welt.";
+ astring.erase(0, 6); // now astring is "Welt"
+ return 0;
+], kde_cv_stl_works=yes,
+ kde_cv_stl_works=no)
+])
+
+ AC_MSG_RESULT($kde_cv_stl_works)
+
+ if test "$kde_cv_stl_works" = "yes"; then
+ # back compatible
+ AC_DEFINE_UNQUOTED(HAVE_SGI_STL, 1, [Define if you have a STL implementation by SGI])
+ else
+ AC_MSG_ERROR([Your Installation isn't able to compile simple C++ programs.
+Check config.log for details - if you're using a Linux distribution you might miss
+a package named similar to libstdc++-dev.])
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([AC_FIND_QIMGIO],
+ [AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for qimgio])
+AC_CACHE_VAL(ac_cv_lib_qimgio,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+ac_save_CXXFLAGS="$CXXFLAGS"
+LIBS="$all_libraries -lqimgio -lpng -lz $LIBJPEG $LIBQT"
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+AC_TRY_RUN(dnl
+[
+#include <qimageio.h>
+#include <qstring.h>
+int main() {
+ QString t = "hallo";
+ t.fill('t');
+ qInitImageIO();
+}
+],
+ ac_cv_lib_qimgio=yes,
+ ac_cv_lib_qimgio=no,
+ ac_cv_lib_qimgio=no)
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+if eval "test \"`echo $ac_cv_lib_qimgio`\" = yes"; then
+ LIBQIMGIO="-lqimgio -lpng -lz $LIBJPEG"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_QIMGIO, 1, [Define if you have the Qt extension qimgio available])
+ AC_SUBST(LIBQIMGIO)
+else
+ AC_MSG_RESULT(not found)
+fi
+])
+
+AC_DEFUN([AM_DISABLE_LIBRARIES],
+[
+ AC_PROVIDE([AM_ENABLE_STATIC])
+ AC_PROVIDE([AM_ENABLE_SHARED])
+ enable_static=no
+ enable_shared=yes
+])
+
+
+AC_DEFUN([AC_CHECK_UTMP_FILE],
+[
+ AC_MSG_CHECKING([for utmp file])
+
+ AC_CACHE_VAL(kde_cv_utmp_file,
+ [
+ kde_cv_utmp_file=no
+
+ for ac_file in \
+ \
+ /var/run/utmp \
+ /var/adm/utmp \
+ /etc/utmp \
+ ; \
+ do
+ if test -r "$ac_file"; then
+ kde_cv_utmp_file=$ac_file
+ break
+ fi
+ done
+ ])
+
+ if test "$kde_cv_utmp_file" != "no"; then
+ AC_DEFINE_UNQUOTED(UTMP, "$kde_cv_utmp_file", [Define the file for utmp entries])
+ $1
+ AC_MSG_RESULT($kde_cv_utmp_file)
+ else
+ $2
+ AC_MSG_RESULT([non found])
+ fi
+])
+
+
+AC_DEFUN([KDE_CREATE_SUBDIRSLIST],
+[
+
+DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin"
+TOPSUBDIRS=""
+
+if test ! -s $srcdir/subdirs; then
+ dnl Note: Makefile.common creates subdirs, so this is just a fallback
+ files=`cd $srcdir && ls -1`
+ dirs=`for i in $files; do if test -d $i; then echo $i; fi; done`
+ for i in $dirs; do
+ echo $i >> $srcdir/subdirs
+ done
+fi
+
+ac_topsubdirs=
+if test -s $srcdir/inst-apps; then
+ ac_topsubdirs="`cat $srcdir/inst-apps`"
+elif test -s $srcdir/subdirs; then
+ ac_topsubdirs="`cat $srcdir/subdirs`"
+fi
+
+for i in $ac_topsubdirs; do
+ AC_MSG_CHECKING([if $i should be compiled])
+ if test -d $srcdir/$i; then
+ install_it="yes"
+ for j in $DO_NOT_COMPILE; do
+ if test $i = $j; then
+ install_it="no"
+ fi
+ done
+ else
+ install_it="no"
+ fi
+ AC_MSG_RESULT($install_it)
+ vari=`echo $i | sed -e 's,[[-+.@]],_,g'`
+ if test $install_it = "yes"; then
+ TOPSUBDIRS="$TOPSUBDIRS $i"
+ eval "$vari""_SUBDIR_included=yes"
+ else
+ eval "$vari""_SUBDIR_included=no"
+ fi
+done
+
+AC_SUBST(TOPSUBDIRS)
+])
+
+AC_DEFUN([KDE_CHECK_NAMESPACES],
+[
+AC_MSG_CHECKING(whether C++ compiler supports namespaces)
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE([
+],
+[
+namespace Foo {
+ extern int i;
+ namespace Bar {
+ extern int i;
+ }
+}
+
+int Foo::i = 0;
+int Foo::Bar::i = 1;
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_NAMESPACES)
+], [
+AC_MSG_RESULT(no)
+])
+AC_LANG_RESTORE
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for S_ISSOCK macro. Doesn't exist on Unix SCO. [email protected]
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_S_ISSOCK],
+[
+AC_MSG_CHECKING(for S_ISSOCK)
+AC_CACHE_VAL(ac_cv_have_s_issock,
+[
+AC_TRY_LINK(
+[
+#include <sys/stat.h>
+],
+[
+struct stat buff;
+int b = S_ISSOCK( buff.st_mode );
+],
+ac_cv_have_s_issock=yes,
+ac_cv_have_s_issock=no)
+])
+AC_MSG_RESULT($ac_cv_have_s_issock)
+if test "$ac_cv_have_s_issock" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_S_ISSOCK, 1, [Define if sys/stat.h declares S_ISSOCK.])
+fi
+
+AH_VERBATIM(_ISSOCK,
+[
+#ifndef HAVE_S_ISSOCK
+#define HAVE_S_ISSOCK
+#define S_ISSOCK(mode) (1==0)
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for MAXPATHLEN macro, defines KDEMAXPATHLEN. [email protected]
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_KDEMAXPATHLEN],
+[
+AC_MSG_CHECKING(for MAXPATHLEN)
+AC_CACHE_VAL(ac_cv_maxpathlen,
+[
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <sys/param.h>
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+KDE_HELLO MAXPATHLEN
+
+EOF
+
+ac_try="$ac_cpp conftest.$ac_ext 2>/dev/null | grep '^KDE_HELLO' >conftest.out"
+
+if AC_TRY_EVAL(ac_try) && test -s conftest.out; then
+ ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out`
+else
+ ac_cv_maxpathlen=1024
+fi
+
+rm conftest.*
+
+])
+AC_MSG_RESULT($ac_cv_maxpathlen)
+AC_DEFINE_UNQUOTED(KDEMAXPATHLEN,$ac_cv_maxpathlen, [Define a safe value for MAXPATHLEN] )
+])
+
+AC_DEFUN([KDE_CHECK_HEADER],
+[
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADER([$1], [$2], [$3], [$4])
+ AC_LANG_RESTORE
+ CPPFLAGS=$kde_safe_cppflags
+])
+
+AC_DEFUN([KDE_CHECK_HEADERS],
+[
+ AH_CHECK_HEADERS([$1])
+ AC_LANG_SAVE
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADERS([$1], [$2], [$3], [$4])
+ CPPFLAGS=$kde_safe_cppflags
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_FAST_CONFIGURE],
+[
+ dnl makes configure fast (needs perl)
+ AC_ARG_ENABLE(fast-perl, AC_HELP_STRING([--disable-fast-perl],[disable fast Makefile generation (needs perl)]),
+ with_fast_perl=$enableval, with_fast_perl=yes)
+])
+
+AC_DEFUN([KDE_CONF_FILES],
+[
+ val=
+ if test -f $srcdir/configure.files ; then
+ val=`sed -e 's%^%\$(top_srcdir)/%' $srcdir/configure.files`
+ fi
+ CONF_FILES=
+ if test -n "$val" ; then
+ for i in $val ; do
+ CONF_FILES="$CONF_FILES $i"
+ done
+ fi
+ AC_SUBST(CONF_FILES)
+])dnl
+
+dnl This sets the prefix, for arts and kdelibs
+dnl Do NOT use in any other module.
+dnl It only looks at --prefix, KDEDIR and falls back to /usr/local/kde
+AC_DEFUN([KDE_SET_PREFIX_CORE],
+[
+ unset CDPATH
+ dnl make $KDEDIR the default for the installation
+ AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+
+ if test "x$prefix" = "xNONE"; then
+ prefix=$ac_default_prefix
+ ac_configure_args="$ac_configure_args --prefix=$prefix"
+ fi
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ kde_libs_prefix='$(prefix)'
+ kde_libs_htmldir='$(kde_htmldir)'
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+
+AC_DEFUN([KDE_SET_PREFIX],
+[
+ unset CDPATH
+ dnl We can't give real code to that macro, only a value.
+ dnl It only matters for --help, since we set the prefix in this function anyway.
+ AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix})
+
+ KDE_SET_DEFAULT_BINDIRS
+ if test "x$prefix" = "xNONE"; then
+ dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ else
+ dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH
+ kde_save_PATH="$PATH"
+ PATH="$exec_prefix/bin:$prefix/bin:$PATH"
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ PATH="$kde_save_PATH"
+ fi
+
+ kde_libs_prefix=`$KDECONFIG --prefix`
+ if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then
+ AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs.
+ This means it has been moved since you installed it.
+ This won't work. Please recompile kdelibs for the new prefix.
+ ])
+ fi
+ kde_libs_htmldir=`$KDECONFIG --install html --expandvars`
+ kde_libs_suffix=`$KDECONFIG --libsuffix` || kde_libs_suffix=auto
+
+ AC_MSG_CHECKING([where to install])
+ if test "x$prefix" = "xNONE"; then
+ prefix=$kde_libs_prefix
+ AC_MSG_RESULT([$prefix (as returned by kde-config)])
+ else
+ dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different
+ given_prefix=$prefix
+ AC_MSG_RESULT([$prefix (as requested)])
+ fi
+
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ AC_SUBST(KDECONFIG)
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+pushdef([AC_PROG_INSTALL],
+[
+ dnl our own version, testing for a -p flag
+ popdef([AC_PROG_INSTALL])
+ dnl as AC_PROG_INSTALL works as it works we first have
+ dnl to save if the user didn't specify INSTALL, as the
+ dnl autoconf one overwrites INSTALL and we have no chance to find
+ dnl out afterwards
+ test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL
+ test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM
+ test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT
+ AC_PROG_INSTALL
+
+ if test -z "$kde_save_INSTALL_given" ; then
+ # OK, user hasn't given any INSTALL, autoconf found one for us
+ # now we test, if it supports the -p flag
+ AC_MSG_CHECKING(for -p flag to install)
+ rm -f confinst.$$.* > /dev/null 2>&1
+ echo "Testtest" > confinst.$$.orig
+ ac_res=no
+ if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then
+ if test -f confinst.$$.new ; then
+ # OK, -p seems to do no harm to install
+ INSTALL="${INSTALL} -p"
+ ac_res=yes
+ fi
+ fi
+ rm -f confinst.$$.*
+ AC_MSG_RESULT($ac_res)
+ fi
+ dnl the following tries to resolve some signs and wonders coming up
+ dnl with different autoconf/automake versions
+ dnl e.g.:
+ dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s
+ dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS)
+ dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s
+ dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has
+ dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the
+ dnl install-@DIR@PROGRAMS targets to explicitly use that flag
+ dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as
+ dnl INSTALL_SCRIPT, which breaks with automake <= 1.4
+ dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure
+ dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from
+ dnl automake (due to broken Makefile.am or whatever) to install programs,
+ dnl and so does not see the -s flag in automake > 1.4
+ dnl to clean up that mess we:
+ dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG
+ dnl which cleans KDE's program with automake > 1.4;
+ dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems
+ dnl with automake<=1.4
+ dnl note that dues to this sometimes two '-s' flags are used (if KDE
+ dnl properly uses install-@DIR@PROGRAMS, but I don't care
+ dnl
+ dnl And to all this comes, that I even can't write in comments variable
+ dnl names used by automake, because it is so stupid to think I wanted to
+ dnl _use_ them, therefor I have written A_M_... instead of AM_
+ dnl hmm, I wanted to say something ... ahh yes: Arghhh.
+
+ if test -z "$kde_save_INSTALL_PROGRAM_given" ; then
+ INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)'
+ fi
+ if test -z "$kde_save_INSTALL_SCRIPT_given" ; then
+ INSTALL_SCRIPT='${INSTALL}'
+ fi
+])dnl
+
+AC_DEFUN([KDE_LANG_CPLUSPLUS],
+[AC_LANG_CPLUSPLUS
+ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC'
+pushdef([AC_LANG_CPLUSPLUS], [popdef([AC_LANG_CPLUSPLUS]) KDE_LANG_CPLUSPLUS])
+])
+
+pushdef([AC_LANG_CPLUSPLUS],
+[popdef([AC_LANG_CPLUSPLUS])
+KDE_LANG_CPLUSPLUS
+])
+
+AC_DEFUN([KDE_CHECK_LONG_LONG],
+[
+AC_MSG_CHECKING(for long long)
+AC_CACHE_VAL(kde_cv_c_long_long,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_LINK([], [
+ long long foo = 0;
+ foo = foo+1;
+ ],
+ kde_cv_c_long_long=yes, kde_cv_c_long_long=no)
+ AC_LANG_RESTORE
+])
+AC_MSG_RESULT($kde_cv_c_long_long)
+if test "$kde_cv_c_long_long" = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have long long as datatype])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_LIB],
+[
+ kde_save_LDFLAGS="$LDFLAGS"
+ dnl AC_CHECK_LIB modifies LIBS, so save it here
+ kde_save_LIBS="$LIBS"
+ LDFLAGS="$LDFLAGS $all_libraries"
+ case $host_os in
+ aix*) LDFLAGS="-brtl $LDFLAGS"
+ test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS"
+ ;;
+ esac
+ AC_CHECK_LIB($1, $2, $3, $4, $5)
+ LDFLAGS="$kde_save_LDFLAGS"
+ LIBS="$kde_save_LIBS"
+])
+
+AC_DEFUN([KDE_JAVA_PREFIX],
+[
+ dir=`dirname "$1"`
+ base=`basename "$1"`
+ list=`ls -1 $dir 2> /dev/null`
+ for entry in $list; do
+ if test -d $dir/$entry/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/bin"
+ ;;
+ esac
+ elif test -d $dir/$entry/jre/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/jre/bin"
+ ;;
+ esac
+ fi
+ done
+])
+
+dnl KDE_CHEC_JAVA_DIR(onlyjre)
+AC_DEFUN([KDE_CHECK_JAVA_DIR],
+[
+
+AC_ARG_WITH(java,
+AC_HELP_STRING([--with-java=javadir],[use java installed in javadir, --without-java disables]),
+[ ac_java_dir=$withval
+], ac_java_dir=""
+)
+
+AC_MSG_CHECKING([for Java])
+
+dnl at this point ac_java_dir is either a dir, 'no' to disable, or '' to say look in $PATH
+if test "x$ac_java_dir" = "xno"; then
+ kde_java_bindir=no
+ kde_java_includedir=no
+ kde_java_libjvmdir=no
+ kde_java_libgcjdir=no
+ kde_java_libhpidir=no
+else
+ if test "x$ac_java_dir" = "x"; then
+
+
+ dnl No option set -> collect list of candidate paths
+ if test -n "$JAVA_HOME"; then
+ KDE_JAVA_PREFIX($JAVA_HOME)
+ fi
+ KDE_JAVA_PREFIX(/usr/j2se)
+ KDE_JAVA_PREFIX(/usr/lib/j2se)
+ KDE_JAVA_PREFIX(/usr/j*dk*)
+ KDE_JAVA_PREFIX(/usr/lib/j*dk*)
+ KDE_JAVA_PREFIX(/opt/j*sdk*)
+ KDE_JAVA_PREFIX(/usr/lib/java*)
+ KDE_JAVA_PREFIX(/usr/java*)
+ KDE_JAVA_PREFIX(/usr/java/j*dk*)
+ KDE_JAVA_PREFIX(/usr/java/j*re*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava*)
+ KDE_JAVA_PREFIX(/opt/java*)
+
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ for dir in $PATH; do
+ if test -d "$dir"; then
+ javadirs="$javadirs $dir"
+ fi
+ done
+ IFS=$kde_save_IFS
+ jredirs=
+
+ dnl Now javadirs contains a list of paths that exist, all ending with bin/
+ for dir in $javadirs; do
+ dnl Check for the java executable
+ if test -x "$dir/java"; then
+ dnl And also check for a libjvm.so somewhere under there
+ dnl Since we have to go to the parent dir, /usr/bin is excluded, /usr is too big.
+ if test "$dir" != "/usr/bin"; then
+ libjvmdir=`find $dir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ if test ! -f $libjvmdir/libjvm.so; then continue; fi
+ jredirs="$jredirs $dir"
+ fi
+ fi
+ done
+
+ dnl Now jredirs contains a reduced list, of paths where both java and ../**/libjvm.so was found
+ JAVAC=
+ JAVA=
+ kde_java_bindir=no
+ for dir in $jredirs; do
+ JAVA="$dir/java"
+ kde_java_bindir=$dir
+ if test -x "$dir/javac"; then
+ JAVAC="$dir/javac"
+ break
+ fi
+ done
+
+ if test -n "$JAVAC"; then
+ dnl this substitution might not work - well, we test for jni.h below
+ kde_java_includedir=`echo $JAVAC | sed -e 's,bin/javac$,include/,'`
+ else
+ kde_java_includedir=no
+ fi
+ else
+ dnl config option set
+ kde_java_bindir=$ac_java_dir/bin
+ if test -x $ac_java_dir/bin/java && test ! -x $ac_java_dir/bin/javac; then
+ kde_java_includedir=no
+ else
+ kde_java_includedir=$ac_java_dir/include
+ fi
+ fi
+fi
+
+dnl At this point kde_java_bindir and kde_java_includedir are either set or "no"
+if test "x$kde_java_bindir" != "xno"; then
+
+ dnl Look for libjvm.so
+ kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ dnl Look for libgcj.so
+ kde_java_libgcjdir=`find $kde_java_bindir/.. -name libgcj.so | sed 's,libgcj.so,,'|head -n 1`
+ dnl Look for libhpi.so and avoid green threads
+ kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1`
+
+ dnl Now check everything's fine under there
+ dnl the include dir is our flag for having the JDK
+ if test -d "$kde_java_includedir"; then
+ if test ! -x "$kde_java_bindir/javac"; then
+ AC_MSG_ERROR([javac not found under $kde_java_bindir - it seems you passed a wrong --with-java.])
+ fi
+ if test ! -x "$kde_java_bindir/javah"; then
+ AC_MSG_ERROR([javah not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -x "$kde_java_bindir/jar"; then
+ AC_MSG_ERROR([jar not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -r "$kde_java_includedir/jni.h"; then
+ AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.])
+ fi
+
+ jni_includes="-I$kde_java_includedir"
+ dnl Strange thing, jni.h requires jni_md.h which is under genunix here..
+ dnl and under linux here..
+
+ dnl not needed for gcj
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux"
+ test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris"
+ test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix"
+ fi
+
+ else
+ JAVAC=
+ jni_includes=
+ fi
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libjvmdir/libjvm.so"; then
+ AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.])
+ fi
+ else
+ if test ! -r "$kde_java_libgcjdir/libgcj.so"; then
+ AC_MSG_ERROR([libgcj.so not found under $kde_java_libgcjdir. Use --without-java.])
+ fi
+ fi
+
+ if test ! -x "$kde_java_bindir/java"; then
+ AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+
+ dnl not needed for gcj compile
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libhpidir/libhpi.so"; then
+ AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.])
+ fi
+ fi
+
+ if test -n "$jni_includes"; then
+ dnl Check for JNI version
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_cxxflags_safe="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $all_includes $jni_includes"
+
+ AC_TRY_COMPILE([
+ #include <jni.h>
+ ],
+ [
+ #ifndef JNI_VERSION_1_2
+ Syntax Error
+ #endif
+ ],[ kde_jni_works=yes ],
+ [ kde_jni_works=no ])
+
+ if test $kde_jni_works = no; then
+ AC_MSG_ERROR([Incorrect version of $kde_java_includedir/jni.h.
+ You need to have Java Development Kit (JDK) version 1.2.
+
+ Use --with-java to specify another location.
+ Use --without-java to configure without java support.
+ Or download a newer JDK and try again.
+ See e.g. http://java.sun.com/products/jdk/1.2 ])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ AC_LANG_RESTORE
+
+ dnl All tests ok, inform and subst the variables
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ if test "x$kde_java_libgcjdir" = "x"; then
+ JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi"
+ else
+ JVMLIBS="-L$kde_java_libgcjdir -lgcj"
+ fi
+ AC_MSG_RESULT([java JDK in $kde_java_bindir])
+
+ else
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([java JRE in $kde_java_bindir])
+ fi
+elif test -d "/Library/Java/Home"; then
+ kde_java_bindir="/Library/Java/Home/bin"
+ jni_includes="-I/Library/Java/Home/include"
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ JVMLIBS="-Wl,-framework,JavaVM"
+
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([Apple Java Framework])
+else
+ AC_MSG_RESULT([none found])
+fi
+
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAH)
+AC_SUBST(JAR)
+AC_SUBST(JVMLIBS)
+AC_SUBST(jni_includes)
+
+# for backward compat
+kde_cv_java_includedir=$kde_java_includedir
+kde_cv_java_bindir=$kde_java_bindir
+])
+
+dnl this is a redefinition of autoconf 2.5x's AC_FOREACH.
+dnl When the argument list becomes big, as in KDE for AC_OUTPUT in
+dnl big packages, m4_foreach is dog-slow. So use our own version of
+m4_define([mm_foreach],
+[m4_pushdef([$1])_mm_foreach($@)m4_popdef([$1])])
+m4_define([mm_car], [[$1]])
+m4_define([mm_car2], [[$@]])
+m4_define([_mm_foreach],
+[m4_if(m4_quote($2), [], [],
+ [m4_define([$1], mm_car($2))$3[]_mm_foreach([$1],
+ mm_car2(m4_shift($2)),
+ [$3])])])
+m4_define([AC_FOREACH],
+[mm_foreach([$1], m4_split(m4_normalize([$2])), [$3])])
+
+AC_DEFUN([KDE_NEED_FLEX],
+[
+kde_libs_safe=$LIBS
+LIBS="$LIBS $USER_LDFLAGS"
+AM_PROG_LEX
+LIBS=$kde_libs_safe
+if test -z "$LEXLIB"; then
+ AC_MSG_ERROR([You need to have flex installed.])
+fi
+AC_SUBST(LEXLIB)
+])
+
+AC_DEFUN([AC_PATH_QTOPIA],
+[
+ dnl TODO: use AC_CACHE_VAL
+
+ if test -z "$1"; then
+ qtopia_minver_maj=1
+ qtopia_minver_min=5
+ qtopia_minver_pat=0
+ else
+ qtopia_minver_maj=`echo "$1" | sed -e "s/^\(.*\)\..*\..*$/\1/"`
+ qtopia_minver_min=`echo "$1" | sed -e "s/^.*\.\(.*\)\..*$/\1/"`
+ qtopia_minver_pat=`echo "$1" | sed -e "s/^.*\..*\.\(.*\)$/\1/"`
+ fi
+
+ qtopia_minver="$qtopia_minver_maj$qtopia_minver_min$qtopia_minver_pat"
+ qtopia_minverstr="$qtopia_minver_maj.$qtopia_minver_min.$qtopia_minver_pat"
+
+ AC_REQUIRE([AC_PATH_QT])
+
+ AC_MSG_CHECKING([for Qtopia])
+
+ LIB_QTOPIA="-lqpe"
+ AC_SUBST(LIB_QTOPIA)
+
+ kde_qtopia_dirs="$QPEDIR /opt/Qtopia"
+
+ ac_qtopia_incdir=NO
+
+ AC_ARG_WITH(qtopia-dir,
+ AC_HELP_STRING([--with-qtopia-dir=DIR],[where the root of Qtopia is installed]),
+ [ ac_qtopia_incdir="$withval"/include] )
+
+ qtopia_incdirs=""
+ for dir in $kde_qtopia_dirs; do
+ qtopia_incdirs="$qtopia_incdirs $dir/include"
+ done
+
+ if test ! "$ac_qtopia_incdir" = "NO"; then
+ qtopia_incdirs="$ac_qtopia_incdir $qtopia_incdirs"
+ fi
+
+ qtopia_incdir=""
+ AC_FIND_FILE(qpe/qpeapplication.h, $qtopia_incdirs, qtopia_incdir)
+ ac_qtopia_incdir="$qtopia_incdir"
+
+ if test -z "$qtopia_incdir"; then
+ AC_MSG_ERROR([Cannot find Qtopia headers. Please check your installation.])
+ fi
+
+ qtopia_ver_maj=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION "\(.*\)\..*\..*".*,\1,p'`;
+ qtopia_ver_min=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\.\(.*\)\..*".*,\1,p'`;
+ qtopia_ver_pat=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\..*\.\(.*\)".*,\1,p'`;
+
+ qtopia_ver="$qtopia_ver_maj$qtopia_ver_min$qtopia_ver_pat"
+ qtopia_verstr="$qtopia_ver_maj.$qtopia_ver_min.$qtopia_ver_pat"
+ if test "$qtopia_ver" -lt "$qtopia_minver"; then
+ AC_MSG_ERROR([found Qtopia version $qtopia_verstr but version $qtopia_minverstr
+is required.])
+ fi
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ ac_cxxflags_safe="$CXXFLAGS"
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ CXXFLAGS="$CXXFLAGS -I$qtopia_incdir $all_includes"
+ LDFLAGS="$LDFLAGS $QT_LDFLAGS $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+ LIBS="$LIBS $LIB_QTOPIA $LIBQT"
+
+ cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qpe/qpeapplication.h>
+#include <qpe/version.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication app( argc, argv );
+ return 0;
+}
+EOF
+
+ if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+ else
+ rm -f conftest*
+ AC_MSG_ERROR([Cannot link small Qtopia Application. For more details look at
+the end of config.log])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ AC_LANG_RESTORE
+
+ QTOPIA_INCLUDES="-I$qtopia_incdir"
+ AC_SUBST(QTOPIA_INCLUDES)
+
+ AC_MSG_RESULT([found version $qtopia_verstr with headers at $qtopia_incdir])
+])
+
+
+AC_DEFUN([KDE_INIT_DOXYGEN],
+[
+AC_MSG_CHECKING([for Qt docs])
+kde_qtdir=
+if test "${with_qt_dir+set}" = set; then
+ kde_qtdir="$with_qt_dir"
+fi
+
+AC_FIND_FILE(qsql.html, [ $kde_qtdir/doc/html $QTDIR/doc/html /usr/share/doc/packages/qt3/html /usr/lib/qt/doc /usr/lib/qt3/doc /usr/lib/qt3/doc/html /usr/doc/qt3/html /usr/doc/qt3 /usr/share/doc/qt3-doc /usr/share/qt3/doc/html /usr/X11R6/share/doc/qt/html ], QTDOCDIR)
+AC_MSG_RESULT($QTDOCDIR)
+
+AC_SUBST(QTDOCDIR)
+
+KDE_FIND_PATH(dot, DOT, [], [])
+if test -n "$DOT"; then
+ KDE_HAVE_DOT="YES"
+else
+ KDE_HAVE_DOT="NO"
+fi
+AC_SUBST(KDE_HAVE_DOT)
+KDE_FIND_PATH(doxygen, DOXYGEN, [], [])
+AC_SUBST(DOXYGEN)
+
+DOXYGEN_PROJECT_NAME="$1"
+DOXYGEN_PROJECT_NUMBER="$2"
+AC_SUBST(DOXYGEN_PROJECT_NAME)
+AC_SUBST(DOXYGEN_PROJECT_NUMBER)
+
+KDE_HAS_DOXYGEN=no
+if test -n "$DOXYGEN" && test -x "$DOXYGEN" && test -f $QTDOCDIR/qsql.html; then
+ KDE_HAS_DOXYGEN=yes
+fi
+AC_SUBST(KDE_HAS_DOXYGEN)
+
+])
+
+
+AC_DEFUN([AC_FIND_BZIP2],
+[
+AC_MSG_CHECKING([for bzDecompress in libbz2])
+AC_CACHE_VAL(ac_cv_lib_bzip2,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lbz2 $LIBSOCKET"
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#define BZ_NO_STDIO
+#include<bzlib.h>
+],
+ [ bz_stream s; (void) bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2='-lbz2'",
+ eval "ac_cv_lib_bzip2=no")
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+AC_MSG_RESULT($ac_cv_lib_bzip2)
+
+if test ! "$ac_cv_lib_bzip2" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2"
+ AC_SUBST(LIBBZ2)
+
+else
+
+ cxx_shared_flag=
+ ld_shared_flag=
+ KDE_CHECK_COMPILER_FLAG(shared, [
+ ld_shared_flag="-shared"
+ ])
+ KDE_CHECK_COMPILER_FLAG(fPIC, [
+ cxx_shared_flag="-fPIC"
+ ])
+
+ AC_MSG_CHECKING([for BZ2_bzDecompress in (shared) libbz2])
+ AC_CACHE_VAL(ac_cv_lib_bzip2_prefix,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_LIBS="$LIBS"
+ LIBS="$all_libraries $USER_LDFLAGS $ld_shared_flag -lbz2 $LIBSOCKET"
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CFLAGS $cxx_shared_flag $all_includes $USER_INCLUDES"
+
+ AC_TRY_LINK(dnl
+ [
+ #define BZ_NO_STDIO
+ #include<bzlib.h>
+ ],
+ [ bz_stream s; (void) BZ2_bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2_prefix='-lbz2'",
+ eval "ac_cv_lib_bzip2_prefix=no")
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+
+ AC_MSG_RESULT($ac_cv_lib_bzip2_prefix)
+
+ if test ! "$ac_cv_lib_bzip2_prefix" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2_prefix"
+ AC_SUBST(LIBBZ2)
+
+ AC_DEFINE(NEED_BZ2_PREFIX, 1, [Define if the libbz2 functions need the BZ2_ prefix])
+ dnl else, we just ignore this
+ fi
+
+fi
+AM_CONDITIONAL(include_BZIP2, test -n "$BZIP2DIR")
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the SSL headers and libraries.
+dnl $(SSL_LDFLAGS) will be -Lsslliblocation (if needed)
+dnl and $(SSL_INCLUDES) will be -Isslhdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([KDE_CHECK_SSL],
+[
+LIBSSL="-lssl -lcrypto"
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+ac_ssl_includes=NO ac_ssl_libraries=NO
+ssl_libraries=""
+ssl_includes=""
+AC_ARG_WITH(ssl-dir,
+ AC_HELP_STRING([--with-ssl-dir=DIR],[where the root of OpenSSL is installed]),
+ [ ac_ssl_includes="$withval"/include
+ ac_ssl_libraries="$withval"/lib$kdelibsuff
+ ])
+
+want_ssl=yes
+AC_ARG_WITH(ssl,
+ AC_HELP_STRING([--without-ssl],[disable SSL checks]),
+ [want_ssl=$withval])
+
+if test $want_ssl = yes; then
+
+AC_MSG_CHECKING(for OpenSSL)
+
+AC_CACHE_VAL(ac_cv_have_ssl,
+[#try to guess OpenSSL locations
+
+ ssl_incdirs="/usr/include /usr/local/include /usr/ssl/include /usr/local/ssl/include $prefix/include $kde_extra_includes"
+ ssl_incdirs="$ac_ssl_includes $ssl_incdirs"
+ AC_FIND_FILE(openssl/ssl.h, $ssl_incdirs, ssl_incdir)
+ ac_ssl_includes="$ssl_incdir"
+
+ ssl_libdirs="/usr/lib$kdelibsuff /usr/local/lib$kdelibsuff /usr/ssl/lib$kdelibsuff /usr/local/ssl/lib$kdelibsuff $libdir $prefix/lib$kdelibsuff $exec_prefix/lib$kdelibsuff $kde_extra_libs"
+ if test ! "$ac_ssl_libraries" = "NO"; then
+ ssl_libdirs="$ac_ssl_libraries $ssl_libdirs"
+ fi
+
+ test=NONE
+ ssl_libdir=NONE
+ for dir in $ssl_libdirs; do
+ try="ls -1 $dir/libssl*"
+ if test=`eval $try 2> /dev/null`; then ssl_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+
+ ac_ssl_libraries="$ssl_libdir"
+
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ LDFLAGS="$LDFLAGS -L$ssl_libdir $all_libraries"
+ LIBS="$LIBS $LIBSSL -lRSAglue -lrsaref"
+
+ AC_TRY_LINK(,void RSAPrivateEncrypt(void);RSAPrivateEncrypt();,
+ ac_ssl_rsaref="yes"
+ ,
+ ac_ssl_rsaref="no"
+ )
+
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ if test "$ac_ssl_includes" = NO || test "$ac_ssl_libraries" = NO; then
+ have_ssl=no
+ else
+ have_ssl=yes;
+ fi
+
+ ])
+
+ eval "$ac_cv_have_ssl"
+
+ AC_MSG_RESULT([libraries $ac_ssl_libraries, headers $ac_ssl_includes])
+
+ AC_MSG_CHECKING([whether OpenSSL uses rsaref])
+ AC_MSG_RESULT($ac_ssl_rsaref)
+
+ AC_MSG_CHECKING([for easter eggs])
+ AC_MSG_RESULT([none found])
+
+else
+ have_ssl=no
+fi
+
+if test "$have_ssl" = yes; then
+ AC_MSG_CHECKING(for OpenSSL version)
+ dnl Check for SSL version
+ AC_CACHE_VAL(ac_cv_ssl_version,
+ [
+
+ cat >conftest.$ac_ext <<EOF
+#include <openssl/opensslv.h>
+#include <stdio.h>
+ int main() {
+
+#ifndef OPENSSL_VERSION_NUMBER
+ printf("ssl_version=\\"error\\"\n");
+#else
+ if (OPENSSL_VERSION_NUMBER < 0x00906000)
+ printf("ssl_version=\\"old\\"\n");
+ else
+ printf("ssl_version=\\"ok\\"\n");
+#endif
+ return (0);
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ if test "$ac_ssl_includes" != "/usr/include"; then
+ CPPFLAGS="$CPPFLAGS -I$ac_ssl_includes"
+ fi
+
+ if AC_TRY_EVAL(ac_link); then
+
+ if eval `./conftest 2>&5`; then
+ if test $ssl_version = error; then
+ AC_MSG_ERROR([$ssl_incdir/openssl/opensslv.h doesn't define OPENSSL_VERSION_NUMBER !])
+ else
+ if test $ssl_version = old; then
+ AC_MSG_WARN([OpenSSL version too old. Upgrade to 0.9.6 at least, see http://www.openssl.org. SSL support disabled.])
+ have_ssl=no
+ fi
+ fi
+ ac_cv_ssl_version="ssl_version=$ssl_version"
+ else
+ AC_MSG_ERROR([Your system couldn't run a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <[email protected]>, attaching your config.log])
+ fi
+
+ else
+ AC_MSG_ERROR([Your system couldn't link a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <[email protected]>, attaching your config.log])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ ])
+
+ eval "$ac_cv_ssl_version"
+ AC_MSG_RESULT($ssl_version)
+fi
+
+if test "$have_ssl" != yes; then
+ LIBSSL="";
+else
+ AC_DEFINE(HAVE_SSL, 1, [If we are going to use OpenSSL])
+ ac_cv_have_ssl="have_ssl=yes \
+ ac_ssl_includes=$ac_ssl_includes ac_ssl_libraries=$ac_ssl_libraries ac_ssl_rsaref=$ac_ssl_rsaref"
+
+
+ ssl_libraries="$ac_ssl_libraries"
+ ssl_includes="$ac_ssl_includes"
+
+ if test "$ac_ssl_rsaref" = yes; then
+ LIBSSL="-lssl -lcrypto -lRSAglue -lrsaref"
+ fi
+
+ if test $ssl_version = "old"; then
+ AC_DEFINE(HAVE_OLD_SSL_API, 1, [Define if you have OpenSSL < 0.9.6])
+ fi
+fi
+
+SSL_INCLUDES=
+
+if test "$ssl_includes" = "/usr/include"; then
+ if test -f /usr/kerberos/include/krb5.h; then
+ SSL_INCLUDES="-I/usr/kerberos/include"
+ fi
+elif test "$ssl_includes" != "/usr/local/include" && test -n "$ssl_includes"; then
+ SSL_INCLUDES="-I$ssl_includes"
+fi
+
+if test "$ssl_libraries" = "/usr/lib" || test "$ssl_libraries" = "/usr/local/lib" || test -z "$ssl_libraries" || test "$ssl_libraries" = "NONE"; then
+ SSL_LDFLAGS=""
+else
+ SSL_LDFLAGS="-L$ssl_libraries -R$ssl_libraries"
+fi
+
+AC_SUBST(SSL_INCLUDES)
+AC_SUBST(SSL_LDFLAGS)
+AC_SUBST(LIBSSL)
+])
+
+AC_DEFUN([KDE_CHECK_STRLCPY],
+[
+ AC_REQUIRE([AC_CHECK_STRLCAT])
+ AC_REQUIRE([AC_CHECK_STRLCPY])
+ AC_CHECK_SIZEOF(size_t)
+ AC_CHECK_SIZEOF(unsigned long)
+
+ AC_MSG_CHECKING([sizeof size_t == sizeof unsigned long])
+ AC_TRY_COMPILE(,[
+ #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG
+ choke me
+ #endif
+ ],AC_MSG_RESULT([yes]),[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([
+ Apparently on your system our assumption sizeof size_t == sizeof unsigned long
+ does not apply. Please mail [email protected] with a description of your system!
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_BINUTILS],
+[
+ AC_MSG_CHECKING([if ld supports unversioned version maps])
+
+ kde_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+ echo "{ local: extern \"C++\" { foo }; };" > conftest.map
+ AC_TRY_LINK([int foo;],
+[
+#ifdef __INTEL_COMPILER
+icc apparently does not support libtools version-info and version-script
+at the same time. Dunno where the bug is, but until somebody figured out,
+better disable the optional version scripts.
+#endif
+
+ foo = 42;
+], kde_supports_versionmaps=yes, kde_supports_versionmaps=no)
+ LDFLAGS="$kde_save_LDFLAGS"
+ rm -f conftest.map
+ AM_CONDITIONAL(include_VERSION_SCRIPT,
+ [test "$kde_supports_versionmaps" = "yes" && test "$kde_use_debug_code" = "no"])
+
+ AC_MSG_RESULT($kde_supports_versionmaps)
+])
+
+AC_DEFUN([AM_PROG_OBJC],[
+AC_CHECK_PROGS(OBJC, gcc, gcc)
+test -z "$OBJC" && AC_MSG_ERROR([no acceptable objective-c gcc found in \$PATH])
+if test "x${OBJCFLAGS-unset}" = xunset; then
+ OBJCFLAGS="-g -O2"
+fi
+AC_SUBST(OBJCFLAGS)
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(OBJC)])
+])
+
+AC_DEFUN([KDE_CHECK_PERL],
+[
+ KDE_FIND_PATH(perl, PERL, [$bindir $exec_prefix/bin $prefix/bin], [
+ AC_MSG_ERROR([No Perl found in your $PATH.
+We need perl to generate some code.])
+ ])
+ AC_SUBST(PERL)
+])
+
+AC_DEFUN([KDE_CHECK_LARGEFILE],
+[
+AC_SYS_LARGEFILE
+if test "$ac_cv_sys_file_offset_bits" != no; then
+ CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
+fi
+
+if test "x$ac_cv_sys_large_files" != "xno"; then
+ CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=1"
+fi
+
+])
+
+dnl A small extension to PKG_CHECK_MODULES (defined in pkg.m4.in)
+dnl which allows to search for libs that get installed into the KDE prefix.
+dnl
+dnl Syntax: KDE_PKG_CHECK_MODULES(KSTUFF, libkexif >= 0.2 glib = 1.3.4, action-if, action-not)
+dnl defines KSTUFF_LIBS, KSTUFF_CFLAGS, see pkg-config man page
+dnl also defines KSTUFF_PKG_ERRORS on error
+AC_DEFUN([KDE_PKG_CHECK_MODULES], [
+
+ PKG_CONFIG_PATH="$prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ if test "$prefix" != "$kde_libs_prefix"; then
+ PKG_CONFIG_PATH="$kde_libs_prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ fi
+ export PKG_CONFIG_PATH
+ PKG_CHECK_MODULES([$1],[$2],[$3],[$4])
+])
+
+
+dnl Check for PIE support in the compiler and linker
+AC_DEFUN([KDE_CHECK_PIE_SUPPORT],
+[
+ AC_CACHE_CHECK([for PIE support], kde_cv_val_pie_support,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIE"
+ LDFLAGS="$LDFLAGS -pie"
+
+ AC_TRY_LINK([int foo;], [], [kde_cv_val_pie_support=yes], [kde_cv_val_pie_support=no])
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ])
+
+ AC_MSG_CHECKING(if enabling -pie/fPIE support)
+
+ AC_ARG_ENABLE(pie,
+ AC_HELP_STRING([--enable-pie],[platform supports PIE linking [default=detect]]),
+ [kde_has_pie_support=$enableval],
+ [kde_has_pie_support=detect])
+
+ if test "$kde_has_pie_support" = "detect"; then
+ kde_has_pie_support=$kde_cv_val_pie_support
+ fi
+
+ AC_MSG_RESULT([$kde_has_pie_support])
+
+ KDE_USE_FPIE=""
+ KDE_USE_PIE=""
+
+ AC_SUBST([KDE_USE_FPIE])
+ AC_SUBST([KDE_USE_PIE])
+
+ if test "$kde_has_pie_support" = "yes"; then
+ KDE_USE_FPIE="-fPIE"
+ KDE_USE_PIE="-pie"
+ fi
+])
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+## Free Software Foundation, Inc.
+## Originally by Gordon Matzigkeit <[email protected]>, 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.
+
+# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_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.
+Xsed='sed -e 1s/^X//'
+[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 avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+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_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+ [AC_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=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])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_AC_SYS_COMPILER
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+AC_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_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$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.
+AC_DEFUN([_LT_LINKER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$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 conftest*
+])# _LT_LINKER_BOILERPLATE
+
+
+# _LT_AC_SYS_LIBPATH_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.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_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.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${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 <<EOF
+[$]*
+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 "$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 &&
+ echo_test_string=`eval $cmd` &&
+ (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.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|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-*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-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ 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_TRY_LINK([],[],[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" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$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
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$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 conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# 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*)
+ # 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
+ ;;
+ *)
+ # 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.
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+ = "XX$teststring") >/dev/null 2>&1 &&
+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ 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`
+ ;;
+ 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
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# ------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ---------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_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 <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#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
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#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 ());
+
+ exit (status);
+}]
+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_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# ----------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_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*)
+ 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="-dld"],
+ [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="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ 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_AC_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_AC_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
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$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_AC_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 ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_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
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_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
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_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_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; 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
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[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"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+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"
+if test "$GCC" = yes; then
+ 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 ';' >/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.
+ 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
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+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'
+ ;;
+
+aix4* | aix5*)
+ 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<name>.so
+ # instead of lib<name>.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*)
+ 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'
+ ;;
+
+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*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ 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'
+ 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*)
+ # 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}${versuffix}$shared_ext ${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`'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
+ 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
+ ;;
+ freebsd*) # from 4.6 on
+ 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'
+ ;;
+
+interix3*)
+ 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
+ # 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
+
+ # 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)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
+ ;;
+
+netbsdelf*-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
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_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=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
+ ;;
+
+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"
+ ;;
+
+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
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ 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
+ 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'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ 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'
+ ;;
+
+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
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+ if test -z "$LTCFLAGS"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ 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_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 DLLs
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+# set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_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="ifelse([$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 <<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
+
+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
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_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
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+ [AC_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])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])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 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+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
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[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
+aix4* | aix5*)
+ 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'.
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ 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
+ ;;
+
+interix3*)
+ # 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* | netbsdelf*-gnu)
+ 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=unknown
+ ;;
+
+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
+ ;;
+
+solaris*)
+ 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
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ 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
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible 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
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[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_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
+# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
+# (note the single quotes!). If your package is not flat and you're not
+# using automake, define top_builddir and top_srcdir appropriately in
+# the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# and an installed libltdl is not found, it is assumed to be `libltdl'.
+# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and top_srcdir
+# appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ------------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([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
+fi
+])# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# -------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[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_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## 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...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF
+
+# 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
+ ;;
+
+aix4* | aix5*)
+ 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])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_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_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ 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
+ 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]].*|aix5*)
+ 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_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ 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
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_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
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_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 "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_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_AC_SYS_LIBPATH_AIX
+ _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes ; then
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_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'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_AC_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) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_AC_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 $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_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_AC_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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ 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_AC_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_AC_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 $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc*)
+ # 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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_AC_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'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_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 $templist | $SED "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 $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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::"'
+ ;;
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_AC_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_AC_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_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd='echo'
+ ;;
+ osf3*)
+ 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_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 $templist | $SED "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 $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_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 ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_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 -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_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 $templist | $SED "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 $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_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` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker. We must also pass each convience library through
+ # to the system linker between allextract/defaultextract.
+ # The C++ compiler will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_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_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_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.
+ # 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.
+ # So that behaviour is only enabled if SCOABSPATH is set to a
+ # non-empty value in the environment. Most likely only useful for
+ # creating official distributions of packages.
+ # This is a hack until libtool officially supports absolute path
+ # names for shared libraries.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_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...
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+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
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([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.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+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...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+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
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+
+ 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_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_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_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_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_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_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
+ifelse([$1],[CXX],
+[case $host_os in
+interix3*)
+ # 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_AC_TAGVAR(predep_objects,$1)=
+ _LT_AC_TAGVAR(postdep_objects,$1)=
+ _LT_AC_TAGVAR(postdeps,$1)=
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # 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.
+ _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_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_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_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"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+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
+ ;;
+aix4* | aix5*)
+ 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_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_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"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## 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...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# -------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# 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_AC_SYS_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"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then 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
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # 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
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ SED SHELL STRIP \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <[email protected]>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# 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//"
+
+# 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
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# 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
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# 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
+
+# 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
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# 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
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# 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
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# 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
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $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.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# 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=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# 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
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\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
+EOF
+ ;;
+ esac
+
+ # 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 '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+ if test -f "$ltmain_in"; then
+ test -f Makefile && make "$ltmain"
+ fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# 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]]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+linux* | k*bsd*-gnu)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDGIRSTW]]'
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ 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
+
+# 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
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, 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.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+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 <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+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_AC_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 -f 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
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix3*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # 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*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_AC_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
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc* | ecpc*)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler.
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ interix3*)
+ # 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_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | pw32* | os2*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # 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_AC_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_AC_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_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_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'
+ ;;
+ linux* | k*bsd*-gnu)
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_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_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # 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.
+ extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ _LT_CC_BASENAME([$compiler])
+ 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
+
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` 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
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<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.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <[email protected]> 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 can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_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_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_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_AC_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_AC_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'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_AC_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_AC_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' ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ _LT_AC_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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<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.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_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_AC_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
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_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_AC_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_AC_TAGVAR(hardcode_direct, $1)=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
+ 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_AC_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_AC_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]].*|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
+
+ 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_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ 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
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_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
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_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 "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_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_AC_SYS_LIBPATH_AIX
+ _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_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*)
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi[[45]]*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ 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.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ if test "$GCC" = yes ; then
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_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_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_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~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_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}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ wlarc=''
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_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'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ *)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
+ esac
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_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*
+ printf "$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_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+############################################################
+# 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. #
+############################################################
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_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
+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_MSG_RESULT([$SED])
+])
+
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN([PKG_CHECK_MODULES], [
+ succeeded=no
+
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ if test "$PKG_CONFIG" = "no" ; then
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ AC_MSG_CHECKING(for $2)
+
+ if $PKG_CONFIG --exists "$2" ; then
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+
+ AC_MSG_CHECKING($1_CFLAGS)
+ $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+ AC_MSG_RESULT($$1_CFLAGS)
+
+ AC_MSG_CHECKING($1_LIBS)
+ $1_LIBS=`$PKG_CONFIG --libs "$2"`
+ AC_MSG_RESULT($$1_LIBS)
+ else
+ $1_CFLAGS=""
+ $1_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+ $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ ifelse([$4], ,echo $$1_PKG_ERRORS,)
+ fi
+
+ AC_SUBST($1_CFLAGS)
+ AC_SUBST($1_LIBS)
+ else
+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
+ fi
+ fi
+
+ if test $succeeded = yes; then
+ ifelse([$3], , :, [$3])
+ else
+ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+ fi
+])
+
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..c65deb3
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,13333 @@
+# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 1997 Janos Farkas ([email protected])
+dnl (C) 1997,98,99 Stephan Kulow ([email protected])
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+dnl Boston, MA 02110-1301, USA.
+
+dnl IMPORTANT NOTE:
+dnl Please do not modify this file unless you expect your modifications to be
+dnl carried into every other module in the repository.
+dnl
+dnl Single-module modifications are best placed in configure.in for kdelibs
+dnl and kdebase or configure.in.in if present.
+
+# KDE_PATH_X_DIRECT
+dnl Internal subroutine of AC_PATH_X.
+dnl Set ac_x_includes and/or ac_x_libraries.
+AC_DEFUN([KDE_PATH_X_DIRECT],
+[
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+AC_TRY_CPP([#include <$x_direct_test_include>],
+[# We can compile using X headers with no special include directory.
+ac_x_includes=],
+[# Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /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 \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done])
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+AC_TRY_LINK([#include <X11/Intrinsic.h>], [${x_direct_test_function}(1)],
+[LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=],
+[LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib${kdelibsuff}/` \
+ /usr/X11/lib${kdelibsuff} \
+ /usr/X11R6/lib${kdelibsuff} \
+ /usr/X11R5/lib${kdelibsuff} \
+ /usr/X11R4/lib${kdelibsuff} \
+ \
+ /usr/lib${kdelibsuff}/X11 \
+ /usr/lib${kdelibsuff}/X11R6 \
+ /usr/lib${kdelibsuff}/X11R5 \
+ /usr/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/local/X11/lib${kdelibsuff} \
+ /usr/local/X11R6/lib${kdelibsuff} \
+ /usr/local/X11R5/lib${kdelibsuff} \
+ /usr/local/X11R4/lib${kdelibsuff} \
+ \
+ /usr/local/lib${kdelibsuff}/X11 \
+ /usr/local/lib${kdelibsuff}/X11R6 \
+ /usr/local/lib${kdelibsuff}/X11R5 \
+ /usr/local/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/X386/lib${kdelibsuff} \
+ /usr/x386/lib${kdelibsuff} \
+ /usr/XFree86/lib${kdelibsuff}/X11 \
+ \
+ /usr/lib${kdelibsuff} \
+ /usr/local/lib${kdelibsuff} \
+ /usr/unsupported/lib${kdelibsuff} \
+ /usr/athena/lib${kdelibsuff} \
+ /usr/local/x11r5/lib${kdelibsuff} \
+ /usr/lpp/Xamples/lib${kdelibsuff} \
+ /lib/usr/lib${kdelibsuff}/X11 \
+ \
+ /usr/openwin/lib${kdelibsuff} \
+ /usr/openwin/share/lib${kdelibsuff} \
+ ; \
+do
+dnl Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done])
+fi # $ac_x_libraries = NO
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find a file (or one of more files in a list of dirs)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_FIND_FILE],
+[
+$3=NO
+for i in $2;
+do
+ for j in $1;
+ do
+ echo "configure: __oline__: $i/$j" >&AC_FD_CC
+ if test -r "$i/$j"; then
+ echo "taking that" >&AC_FD_CC
+ $3=$i
+ break 2
+ fi
+ done
+done
+])
+
+dnl KDE_FIND_PATH(program-name, variable-name, list-of-dirs,
+dnl if-not-found, test-parameter, prepend-path)
+dnl
+dnl Look for program-name in list-of-dirs+$PATH.
+dnl If prepend-path is set, look in $PATH+list-of-dirs instead.
+dnl If found, $variable-name is set. If not, if-not-found is evaluated.
+dnl test-parameter: if set, the program is executed with this arg,
+dnl and only a successful exit code is required.
+AC_DEFUN([KDE_FIND_PATH],
+[
+ AC_MSG_CHECKING([for $1])
+ if test -n "$$2"; then
+ kde_cv_path="$$2";
+ else
+ kde_cache=`echo $1 | sed 'y%./+-%__p_%'`
+
+ AC_CACHE_VAL(kde_cv_path_$kde_cache,
+ [
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ dirs=""
+ for dir in $PATH; do
+ dirs="$dirs $dir"
+ done
+ if test -z "$6"; then dnl Append dirs in PATH (default)
+ dirs="$3 $dirs"
+ else dnl Prepend dirs in PATH (if 6th arg is set)
+ dirs="$dirs $3"
+ fi
+ IFS=$kde_save_IFS
+
+ for dir in $dirs; do
+ if test -x "$dir/$1"; then
+ if test -n "$5"
+ then
+ evalstr="$dir/$1 $5 2>&1 "
+ if eval $evalstr; then
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ else
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ fi
+ done
+
+ eval "kde_cv_path_$kde_cache=$kde_cv_path"
+
+ ])
+
+ eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\""
+
+ fi
+
+ if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then
+ AC_MSG_RESULT(not found)
+ $4
+ else
+ AC_MSG_RESULT($kde_cv_path)
+ $2=$kde_cv_path
+
+ fi
+])
+
+AC_DEFUN([KDE_MOC_ERROR_MESSAGE],
+[
+ AC_MSG_ERROR([No Qt meta object compiler (moc) found!
+Please check whether you installed Qt correctly.
+You need to have a running moc binary.
+configure tried to run $ac_cv_path_moc and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable MOC to the right one before running
+configure.
+])
+])
+
+AC_DEFUN([KDE_UIC_ERROR_MESSAGE],
+[
+ AC_MSG_WARN([No Qt ui compiler (uic) found!
+Please check whether you installed Qt correctly.
+You need to have a running uic binary.
+configure tried to run $ac_cv_path_uic and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable UIC to the right one before running
+configure.
+])
+])
+
+
+AC_DEFUN([KDE_CHECK_UIC_FLAG],
+[
+ AC_MSG_CHECKING([whether uic supports -$1 ])
+ kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'`
+ AC_CACHE_VAL(kde_cv_prog_uic_$kde_cache,
+ [
+ cat >conftest.ui <<EOT
+ <!DOCTYPE UI><UI version="3" stdsetdef="1"></UI>
+EOT
+ ac_uic_testrun="$UIC_PATH -$1 $2 conftest.ui >/dev/null"
+ if AC_TRY_EVAL(ac_uic_testrun); then
+ eval "kde_cv_prog_uic_$kde_cache=yes"
+ else
+ eval "kde_cv_prog_uic_$kde_cache=no"
+ fi
+ rm -f conftest*
+ ])
+
+ if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT([yes])
+ :
+ $3
+ else
+ AC_MSG_RESULT([no])
+ :
+ $4
+ fi
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find the meta object compiler and the ui compiler in the PATH,
+dnl in $QTDIR/bin, and some more usual places
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_MOC_UIC],
+[
+ AC_REQUIRE([KDE_CHECK_PERL])
+ qt_bindirs=""
+ for dir in $kde_qt_dirs; do
+ qt_bindirs="$qt_bindirs $dir/bin $dir/src/moc"
+ done
+ qt_bindirs="$qt_bindirs /usr/bin /usr/X11R6/bin /usr/local/qt/bin"
+ if test ! "$ac_qt_bindir" = "NO"; then
+ qt_bindirs="$ac_qt_bindir $qt_bindirs"
+ fi
+
+ KDE_FIND_PATH(moc, MOC, [$qt_bindirs], [KDE_MOC_ERROR_MESSAGE])
+ if test -z "$UIC_NOT_NEEDED"; then
+ KDE_FIND_PATH(uic, UIC_PATH, [$qt_bindirs], [UIC_PATH=""])
+ if test -z "$UIC_PATH" ; then
+ KDE_UIC_ERROR_MESSAGE
+ exit 1
+ else
+ UIC=$UIC_PATH
+
+ if test $kde_qtver = 3; then
+ KDE_CHECK_UIC_FLAG(L,[/nonexistent],ac_uic_supports_libpath=yes,ac_uic_supports_libpath=no)
+ KDE_CHECK_UIC_FLAG(nounload,,ac_uic_supports_nounload=yes,ac_uic_supports_nounload=no)
+
+ if test x$ac_uic_supports_libpath = xyes; then
+ UIC="$UIC -L \$(kde_widgetdir)"
+ fi
+ if test x$ac_uic_supports_nounload = xyes; then
+ UIC="$UIC -nounload"
+ fi
+ fi
+ fi
+ else
+ UIC="echo uic not available: "
+ fi
+
+ AC_SUBST(MOC)
+ AC_SUBST(UIC)
+
+ UIC_TR="i18n"
+ if test $kde_qtver = 3; then
+ UIC_TR="tr2i18n"
+ fi
+
+ AC_SUBST(UIC_TR)
+])
+
+AC_DEFUN([KDE_1_CHECK_PATHS],
+[
+ KDE_1_CHECK_PATH_HEADERS
+
+ KDE_TEST_RPATH=
+
+ if test -n "$USE_RPATH"; then
+
+ if test -n "$kde_libraries"; then
+ KDE_TEST_RPATH="-R $kde_libraries"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $qt_libraries"
+ fi
+
+ if test -n "$x_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $x_libraries"
+ fi
+
+ KDE_TEST_RPATH="$KDE_TEST_RPATH $KDE_EXTRA_RPATH"
+ fi
+
+AC_MSG_CHECKING([for KDE libraries installed])
+ac_link='$LIBTOOL_SHELL --silent --mode=link ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS $all_libraries conftest.$ac_ext $LIBS -lkdecore $LIBQT $KDE_TEST_RPATH 1>&5'
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_ERROR([your system fails at linking a small KDE application!
+Check, if your compiler is installed correctly and if you have used the
+same compiler to compile Qt and kdelibs as you did use now.
+For more details about this problem, look at the end of config.log.])
+fi
+
+if eval `KDEDIR= ./conftest 2>&5`; then
+ kde_result=done
+else
+ kde_result=problems
+fi
+
+KDEDIR= ./conftest 2> /dev/null >&5 # make an echo for config.log
+kde_have_all_paths=yes
+
+KDE_SET_PATHS($kde_result)
+
+])
+
+AC_DEFUN([KDE_SET_PATHS],
+[
+ kde_cv_all_paths="kde_have_all_paths=\"yes\" \
+ kde_htmldir=\"$kde_htmldir\" \
+ kde_appsdir=\"$kde_appsdir\" \
+ kde_icondir=\"$kde_icondir\" \
+ kde_sounddir=\"$kde_sounddir\" \
+ kde_datadir=\"$kde_datadir\" \
+ kde_locale=\"$kde_locale\" \
+ kde_cgidir=\"$kde_cgidir\" \
+ kde_confdir=\"$kde_confdir\" \
+ kde_kcfgdir=\"$kde_kcfgdir\" \
+ kde_mimedir=\"$kde_mimedir\" \
+ kde_toolbardir=\"$kde_toolbardir\" \
+ kde_wallpaperdir=\"$kde_wallpaperdir\" \
+ kde_templatesdir=\"$kde_templatesdir\" \
+ kde_bindir=\"$kde_bindir\" \
+ kde_servicesdir=\"$kde_servicesdir\" \
+ kde_servicetypesdir=\"$kde_servicetypesdir\" \
+ kde_moduledir=\"$kde_moduledir\" \
+ kde_styledir=\"$kde_styledir\" \
+ kde_widgetdir=\"$kde_widgetdir\" \
+ xdg_appsdir=\"$xdg_appsdir\" \
+ xdg_menudir=\"$xdg_menudir\" \
+ xdg_directorydir=\"$xdg_directorydir\" \
+ kde_result=$1"
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_PATHS],
+[
+if test "$1" = "default"; then
+
+ if test -z "$kde_htmldir"; then
+ kde_htmldir='\${datadir}/doc/HTML'
+ fi
+ if test -z "$kde_appsdir"; then
+ kde_appsdir='\${datadir}/applnk'
+ fi
+ if test -z "$kde_icondir"; then
+ kde_icondir='\${datadir}/icons'
+ fi
+ if test -z "$kde_sounddir"; then
+ kde_sounddir='\${datadir}/sounds'
+ fi
+ if test -z "$kde_datadir"; then
+ kde_datadir='\${datadir}/apps'
+ fi
+ if test -z "$kde_locale"; then
+ kde_locale='\${datadir}/locale'
+ fi
+ if test -z "$kde_cgidir"; then
+ kde_cgidir='\${exec_prefix}/cgi-bin'
+ fi
+ if test -z "$kde_confdir"; then
+ kde_confdir='\${datadir}/config'
+ fi
+ if test -z "$kde_kcfgdir"; then
+ kde_kcfgdir='\${datadir}/config.kcfg'
+ fi
+ if test -z "$kde_mimedir"; then
+ kde_mimedir='\${datadir}/mimelnk'
+ fi
+ if test -z "$kde_toolbardir"; then
+ kde_toolbardir='\${datadir}/toolbar'
+ fi
+ if test -z "$kde_wallpaperdir"; then
+ kde_wallpaperdir='\${datadir}/wallpapers'
+ fi
+ if test -z "$kde_templatesdir"; then
+ kde_templatesdir='\${datadir}/templates'
+ fi
+ if test -z "$kde_bindir"; then
+ kde_bindir='\${exec_prefix}/bin'
+ fi
+ if test -z "$kde_servicesdir"; then
+ kde_servicesdir='\${datadir}/services'
+ fi
+ if test -z "$kde_servicetypesdir"; then
+ kde_servicetypesdir='\${datadir}/servicetypes'
+ fi
+ if test -z "$kde_moduledir"; then
+ if test "$kde_qtver" = "2"; then
+ kde_moduledir='\${libdir}/kde2'
+ else
+ kde_moduledir='\${libdir}/kde3'
+ fi
+ fi
+ if test -z "$kde_styledir"; then
+ kde_styledir='\${libdir}/kde3/plugins/styles'
+ fi
+ if test -z "$kde_widgetdir"; then
+ kde_widgetdir='\${libdir}/kde3/plugins/designer'
+ fi
+ if test -z "$xdg_appsdir"; then
+ xdg_appsdir='\${datadir}/applications/kde'
+ fi
+ if test -z "$xdg_menudir"; then
+ xdg_menudir='\${sysconfdir}/xdg/menus'
+ fi
+ if test -z "$xdg_directorydir"; then
+ xdg_directorydir='\${datadir}/desktop-directories'
+ fi
+
+ KDE_SET_PATHS(defaults)
+
+else
+
+ if test $kde_qtver = 1; then
+ AC_MSG_RESULT([compiling])
+ KDE_1_CHECK_PATHS
+ else
+ AC_MSG_ERROR([path checking not yet supported for KDE 2])
+ fi
+
+fi
+])
+
+AC_DEFUN([KDE_CHECK_PATHS_FOR_COMPLETENESS],
+[ if test -z "$kde_htmldir" || test -z "$kde_appsdir" ||
+ test -z "$kde_icondir" || test -z "$kde_sounddir" ||
+ test -z "$kde_datadir" || test -z "$kde_locale" ||
+ test -z "$kde_cgidir" || test -z "$kde_confdir" ||
+ test -z "$kde_kcfgdir" ||
+ test -z "$kde_mimedir" || test -z "$kde_toolbardir" ||
+ test -z "$kde_wallpaperdir" || test -z "$kde_templatesdir" ||
+ test -z "$kde_bindir" || test -z "$kde_servicesdir" ||
+ test -z "$kde_servicetypesdir" || test -z "$kde_moduledir" ||
+ test -z "$kde_styledir" || test -z "kde_widgetdir" ||
+ test -z "$xdg_appsdir" || test -z "$xdg_menudir" || test -z "$xdg_directorydir" ||
+ test "x$kde_have_all_paths" != "xyes"; then
+ kde_have_all_paths=no
+ fi
+])
+
+AC_DEFUN([KDE_MISSING_PROG_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed KDE correctly.
+])
+])
+
+AC_DEFUN([KDE_MISSING_ARTS_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed aRts correctly or use
+--without-arts to compile without aRts support (this will remove functionality).
+])
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_BINDIRS],
+[
+ kde_default_bindirs="/usr/bin /usr/local/bin /opt/local/bin /usr/X11R6/bin /opt/kde/bin /opt/kde3/bin /usr/kde/bin /usr/local/kde/bin"
+ test -n "$KDEDIR" && kde_default_bindirs="$KDEDIR/bin $kde_default_bindirs"
+ if test -n "$KDEDIRS"; then
+ kde_save_IFS=$IFS
+ IFS=:
+ for dir in $KDEDIRS; do
+ kde_default_bindirs="$dir/bin $kde_default_bindirs "
+ done
+ IFS=$kde_save_IFS
+ fi
+])
+
+AC_DEFUN([KDE_SUBST_PROGRAMS],
+[
+ AC_ARG_WITH(arts,
+ AC_HELP_STRING([--without-arts],[build without aRts [default=no]]),
+ [build_arts=$withval],
+ [build_arts=yes]
+ )
+ AM_CONDITIONAL(include_ARTS, test "$build_arts" '!=' "no")
+ if test "$build_arts" = "no"; then
+ AC_DEFINE(WITHOUT_ARTS, 1, [Defined if compiling without arts])
+ fi
+
+ KDE_SET_DEFAULT_BINDIRS
+ kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs"
+ KDE_FIND_PATH(dcopidl, DCOPIDL, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl)])
+ KDE_FIND_PATH(dcopidl2cpp, DCOPIDL2CPP, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl2cpp)])
+ if test "$build_arts" '!=' "no"; then
+ KDE_FIND_PATH(mcopidl, MCOPIDL, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(mcopidl)])
+ KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)])
+ fi
+ KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs])
+
+ kde32ornewer=1
+ kde33ornewer=1
+ if test -n "$kde_qtver" && test "$kde_qtver" -lt 3; then
+ kde32ornewer=
+ kde33ornewer=
+ else
+ if test "$kde_qtver" = "3"; then
+ if test "$kde_qtsubver" -le 1; then
+ kde32ornewer=
+ fi
+ if test "$kde_qtsubver" -le 2; then
+ kde33ornewer=
+ fi
+ if test "$KDECONFIG" != "compiled"; then
+ if test `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then
+ kde33ornewer=
+ fi
+ fi
+ fi
+ fi
+
+ if test -n "$kde32ornewer"; then
+ KDE_FIND_PATH(kconfig_compiler, KCONFIG_COMPILER, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kconfig_compiler)])
+ KDE_FIND_PATH(dcopidlng, DCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
+ fi
+ if test -n "$kde33ornewer"; then
+ KDE_FIND_PATH(makekdewidgets, MAKEKDEWIDGETS, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(makekdewidgets)])
+ AC_SUBST(MAKEKDEWIDGETS)
+ fi
+ KDE_FIND_PATH(xmllint, XMLLINT, [${prefix}/bin ${exec_prefix}/bin], [XMLLINT=""])
+
+ if test -n "$MEINPROC" -a "$MEINPROC" != "compiled"; then
+ kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share"
+ test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs"
+ AC_FIND_FILE(apps/ksgmltools2/customization/kde-chunk.xsl, $kde_sharedirs, KDE_XSL_STYLESHEET)
+ if test "$KDE_XSL_STYLESHEET" = "NO"; then
+ KDE_XSL_STYLESHEET=""
+ else
+ KDE_XSL_STYLESHEET="$KDE_XSL_STYLESHEET/apps/ksgmltools2/customization/kde-chunk.xsl"
+ fi
+ fi
+
+ DCOP_DEPENDENCIES='$(DCOPIDL)'
+ if test -n "$kde32ornewer"; then
+ KCFG_DEPENDENCIES='$(KCONFIG_COMPILER)'
+ DCOP_DEPENDENCIES='$(DCOPIDL) $(DCOPIDLNG)'
+ AC_SUBST(KCONFIG_COMPILER)
+ AC_SUBST(KCFG_DEPENDENCIES)
+ AC_SUBST(DCOPIDLNG)
+ fi
+ AC_SUBST(DCOPIDL)
+ AC_SUBST(DCOPIDL2CPP)
+ AC_SUBST(DCOP_DEPENDENCIES)
+ AC_SUBST(MCOPIDL)
+ AC_SUBST(ARTSCCONFIG)
+ AC_SUBST(MEINPROC)
+ AC_SUBST(KDE_XSL_STYLESHEET)
+ AC_SUBST(XMLLINT)
+])dnl
+
+AC_DEFUN([AC_CREATE_KFSSTND],
+[
+AC_REQUIRE([AC_CHECK_RPATH])
+
+AC_MSG_CHECKING([for KDE paths])
+kde_result=""
+kde_cached_paths=yes
+AC_CACHE_VAL(kde_cv_all_paths,
+[
+ KDE_SET_DEFAULT_PATHS($1)
+ kde_cached_paths=no
+])
+eval "$kde_cv_all_paths"
+KDE_CHECK_PATHS_FOR_COMPLETENESS
+if test "$kde_have_all_paths" = "no" && test "$kde_cached_paths" = "yes"; then
+ # wrong values were cached, may be, we can set better ones
+ kde_result=
+ kde_htmldir= kde_appsdir= kde_icondir= kde_sounddir=
+ kde_datadir= kde_locale= kde_cgidir= kde_confdir= kde_kcfgdir=
+ kde_mimedir= kde_toolbardir= kde_wallpaperdir= kde_templatesdir=
+ kde_bindir= kde_servicesdir= kde_servicetypesdir= kde_moduledir=
+ kde_have_all_paths=
+ kde_styledir=
+ kde_widgetdir=
+ xdg_appsdir = xdg_menudir= xdg_directorydir=
+ KDE_SET_DEFAULT_PATHS($1)
+ eval "$kde_cv_all_paths"
+ KDE_CHECK_PATHS_FOR_COMPLETENESS
+ kde_result="$kde_result (cache overridden)"
+fi
+if test "$kde_have_all_paths" = "no"; then
+ AC_MSG_ERROR([configure could not run a little KDE program to test the environment.
+Since it had compiled and linked before, it must be a strange problem on your system.
+Look at config.log for details. If you are not able to fix this, look at
+http://www.kde.org/faq/installation.html or any www.kde.org mirror.
+(If you're using an egcs version on Linux, you may update binutils!)
+])
+else
+ rm -f conftest*
+ AC_MSG_RESULT($kde_result)
+fi
+
+bindir=$kde_bindir
+
+KDE_SUBST_PROGRAMS
+
+])
+
+AC_DEFUN([AC_SUBST_KFSSTND],
+[
+AC_SUBST(kde_htmldir)
+AC_SUBST(kde_appsdir)
+AC_SUBST(kde_icondir)
+AC_SUBST(kde_sounddir)
+AC_SUBST(kde_datadir)
+AC_SUBST(kde_locale)
+AC_SUBST(kde_confdir)
+AC_SUBST(kde_kcfgdir)
+AC_SUBST(kde_mimedir)
+AC_SUBST(kde_wallpaperdir)
+AC_SUBST(kde_bindir)
+dnl X Desktop Group standards
+AC_SUBST(xdg_appsdir)
+AC_SUBST(xdg_menudir)
+AC_SUBST(xdg_directorydir)
+dnl for KDE 2
+AC_SUBST(kde_templatesdir)
+AC_SUBST(kde_servicesdir)
+AC_SUBST(kde_servicetypesdir)
+AC_SUBST(kde_moduledir)
+AC_SUBST(kdeinitdir, '$(kde_moduledir)')
+AC_SUBST(kde_styledir)
+AC_SUBST(kde_widgetdir)
+if test "$kde_qtver" = 1; then
+ kde_minidir="$kde_icondir/mini"
+else
+# for KDE 1 - this breaks KDE2 apps using minidir, but
+# that's the plan ;-/
+ kde_minidir="/dev/null"
+fi
+dnl AC_SUBST(kde_minidir)
+dnl AC_SUBST(kde_cgidir)
+dnl AC_SUBST(kde_toolbardir)
+])
+
+AC_DEFUN([KDE_MISC_TESTS],
+[
+ dnl Checks for libraries.
+ AC_CHECK_LIB(util, main, [LIBUTIL="-lutil"]) dnl for *BSD
+ AC_SUBST(LIBUTIL)
+ AC_CHECK_LIB(compat, main, [LIBCOMPAT="-lcompat"]) dnl for *BSD
+ AC_SUBST(LIBCOMPAT)
+ kde_have_crypt=
+ AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"; kde_have_crypt=yes],
+ AC_CHECK_LIB(c, crypt, [kde_have_crypt=yes], [
+ AC_MSG_WARN([you have no crypt in either libcrypt or libc.
+You should install libcrypt from another source or configure with PAM
+support])
+ kde_have_crypt=no
+ ]))
+ AC_SUBST(LIBCRYPT)
+ if test $kde_have_crypt = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_CRYPT, 1, [Defines if your system has the crypt function])
+ fi
+ AC_CHECK_SOCKLEN_T
+ AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ AC_CHECK_LIB(dnet_stub, dnet_ntoa,
+ [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+ fi
+ AC_CHECK_FUNC(inet_ntoa)
+ if test $ac_cv_func_inet_ntoa = no; then
+ AC_CHECK_LIB(nsl, inet_ntoa, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl")
+ fi
+ AC_CHECK_FUNC(connect)
+ if test $ac_cv_func_connect = no; then
+ AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", ,
+ $X_EXTRA_LIBS)
+ fi
+
+ AC_CHECK_FUNC(remove)
+ if test $ac_cv_func_remove = no; then
+ AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix")
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ AC_CHECK_FUNC(shmat, ,
+ AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"))
+
+ # more headers that need to be explicitly included on darwin
+ AC_CHECK_HEADERS(sys/types.h stdint.h)
+
+ # sys/bitypes.h is needed for uint32_t and friends on Tru64
+ AC_CHECK_HEADERS(sys/bitypes.h)
+
+ # darwin requires a poll emulation library
+ AC_CHECK_LIB(poll, poll, LIB_POLL="-lpoll")
+
+ # for some image handling on Mac OS X
+ AC_CHECK_HEADERS(Carbon/Carbon.h)
+
+ # CoreAudio framework
+ AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [
+ AC_DEFINE(HAVE_COREAUDIO, 1, [Define if you have the CoreAudio API])
+ FRAMEWORK_COREAUDIO="-Wl,-framework,CoreAudio"
+ ])
+
+ AC_CHECK_RES_INIT
+ AC_SUBST(LIB_POLL)
+ AC_SUBST(FRAMEWORK_COREAUDIO)
+ LIBSOCKET="$X_EXTRA_LIBS"
+ AC_SUBST(LIBSOCKET)
+ AC_SUBST(X_EXTRA_LIBS)
+ AC_CHECK_LIB(ucb, killpg, [LIBUCB="-lucb"]) dnl for Solaris2.4
+ AC_SUBST(LIBUCB)
+
+ case $host in dnl this *is* LynxOS specific
+ *-*-lynxos* )
+ AC_MSG_CHECKING([LynxOS header file wrappers])
+ [CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"]
+ AC_MSG_RESULT(disabled)
+ AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS
+ ;;
+ esac
+
+ KDE_CHECK_TYPES
+ KDE_CHECK_LIBDL
+ KDE_CHECK_STRLCPY
+ KDE_CHECK_PIE_SUPPORT
+
+# darwin needs this to initialize the environment
+AC_CHECK_HEADERS(crt_externs.h)
+AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
+
+AH_VERBATIM(_DARWIN_ENVIRON,
+[
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+])
+
+AH_VERBATIM(_AIX_STRINGS_H_BZERO,
+[
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+])
+
+AC_CHECK_FUNCS([vsnprintf snprintf])
+
+AH_VERBATIM(_TRU64,[
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Find the header files and libraries for X-Windows. Extended the
+dnl macro AC_PATH_X
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([K_PATH_X],
+[
+AC_REQUIRE([KDE_MISC_TESTS])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_ARG_ENABLE(
+ embedded,
+ AC_HELP_STRING([--enable-embedded],[link to Qt-embedded, don't use X]),
+ kde_use_qt_emb=$enableval,
+ kde_use_qt_emb=no
+)
+
+AC_ARG_ENABLE(
+ qtopia,
+ AC_HELP_STRING([--enable-qtopia],[link to Qt-embedded, link to the Qtopia Environment]),
+ kde_use_qt_emb_palm=$enableval,
+ kde_use_qt_emb_palm=no
+)
+
+AC_ARG_ENABLE(
+ mac,
+ AC_HELP_STRING([--enable-mac],[link to Qt/Mac (don't use X)]),
+ kde_use_qt_mac=$enableval,
+ kde_use_qt_mac=no
+)
+
+# used to disable x11-specific stuff on special platforms
+AM_CONDITIONAL(include_x11, test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no")
+
+if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then
+
+AC_MSG_CHECKING(for X)
+
+AC_CACHE_VAL(kde_cv_have_x,
+[# One or both of the vars are not set, and there is no cached value.
+if test "{$x_includes+set}" = set || test "$x_includes" = NONE; then
+ kde_x_includes=NO
+else
+ kde_x_includes=$x_includes
+fi
+if test "{$x_libraries+set}" = set || test "$x_libraries" = NONE; then
+ kde_x_libraries=NO
+else
+ kde_x_libraries=$x_libraries
+fi
+
+# below we use the standard autoconf calls
+ac_x_libraries=$kde_x_libraries
+ac_x_includes=$kde_x_includes
+
+KDE_PATH_X_DIRECT
+dnl AC_PATH_X_XMKMF picks /usr/lib as the path for the X libraries.
+dnl Unfortunately, if compiling with the N32 ABI, this is not the correct
+dnl location. The correct location is /usr/lib32 or an undefined value
+dnl (the linker is smart enough to pick the correct default library).
+dnl Things work just fine if you use just AC_PATH_X_DIRECT.
+dnl Solaris has a similar problem. AC_PATH_X_XMKMF forces x_includes to
+dnl /usr/openwin/include, which doesn't work. /usr/include does work, so
+dnl x_includes should be left alone.
+case "$host" in
+mips-sgi-irix6*)
+ ;;
+*-*-solaris*)
+ ;;
+*)
+ _AC_PATH_X_XMKMF
+ if test -z "$ac_x_includes"; then
+ ac_x_includes="."
+ fi
+ if test -z "$ac_x_libraries"; then
+ ac_x_libraries="/usr/lib${kdelibsuff}"
+ fi
+esac
+#from now on we use our own again
+
+# when the user already gave --x-includes, we ignore
+# what the standard autoconf macros told us.
+if test "$kde_x_includes" = NO; then
+ kde_x_includes=$ac_x_includes
+fi
+
+# for --x-libraries too
+if test "$kde_x_libraries" = NO; then
+ kde_x_libraries=$ac_x_libraries
+fi
+
+if test "$kde_x_includes" = NO; then
+ AC_MSG_ERROR([Can't find X includes. Please check your installation and add the correct paths!])
+fi
+
+if test "$kde_x_libraries" = NO; then
+ AC_MSG_ERROR([Can't find X libraries. Please check your installation and add the correct paths!])
+fi
+
+# Record where we found X for the cache.
+kde_cv_have_x="have_x=yes \
+ kde_x_includes=$kde_x_includes kde_x_libraries=$kde_x_libraries"
+])dnl
+
+eval "$kde_cv_have_x"
+
+if test "$have_x" != yes; then
+ AC_MSG_RESULT($have_x)
+ no_x=yes
+else
+ AC_MSG_RESULT([libraries $kde_x_libraries, headers $kde_x_includes])
+fi
+
+if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then
+ X_INCLUDES=""
+ x_includes="."; dnl better than nothing :-
+ else
+ x_includes=$kde_x_includes
+ X_INCLUDES="-I$x_includes"
+fi
+
+if test -z "$kde_x_libraries" || test "x$kde_x_libraries" = xNONE; then
+ X_LDFLAGS=""
+ x_libraries="/usr/lib"; dnl better than nothing :-
+ else
+ x_libraries=$kde_x_libraries
+ X_LDFLAGS="-L$x_libraries"
+fi
+all_includes="$X_INCLUDES"
+all_libraries="$X_LDFLAGS $LDFLAGS_AS_NEEDED $LDFLAGS_NEW_DTAGS"
+
+# Check for libraries that X11R6 Xt/Xaw programs need.
+ac_save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+# SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+# check for ICE first), but we must link in the order -lSM -lICE or
+# we get undefined symbols. So assume we have SM if we have ICE.
+# These have to be linked with before -lX11, unlike the other
+# libraries we check for below, so use a different variable.
+AC_CHECK_LIB(ICE, IceConnectionNumber,
+ [LIBSM="-lSM -lICE"], , $X_EXTRA_LIBS)
+LDFLAGS="$ac_save_LDFLAGS"
+
+LIB_X11='-lX11 $(LIBSOCKET)'
+
+AC_MSG_CHECKING(for libXext)
+AC_CACHE_VAL(kde_cv_have_libXext,
+[
+kde_ldflags_safe="$LDFLAGS"
+kde_libs_safe="$LIBS"
+
+LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS"
+LIBS="-lXext -lX11 $LIBSOCKET"
+
+AC_TRY_LINK([
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+],
+[
+printf("hello Xext\n");
+],
+kde_cv_have_libXext=yes,
+kde_cv_have_libXext=no
+)
+
+LDFLAGS=$kde_ldflags_safe
+LIBS=$kde_libs_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_libXext)
+
+if test "$kde_cv_have_libXext" = "no"; then
+ AC_MSG_ERROR([We need a working libXext to proceed. Since configure
+can't find it itself, we stop here assuming that make wouldn't find
+them either.])
+fi
+
+LIB_XEXT="-lXext"
+QTE_NORTTI=""
+
+elif test "$kde_use_qt_emb" = "yes"; then
+ dnl We're using QT Embedded
+ CPPFLAGS=-DQWS
+ CXXFLAGS="$CXXFLAGS -fno-rtti"
+ QTE_NORTTI="-fno-rtti -DQWS"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+elif test "$kde_use_qt_mac" = "yes"; then
+ dnl We're using QT/Mac (I use QT_MAC so that qglobal.h doesn't *have* to
+ dnl be included to get the information) --Sam
+ CXXFLAGS="$CXXFLAGS -DQT_MAC -no-cpp-precomp"
+ CFLAGS="$CFLAGS -DQT_MAC -no-cpp-precomp"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+fi
+AC_SUBST(X_PRE_LIBS)
+AC_SUBST(LIB_X11)
+AC_SUBST(LIB_XRENDER)
+AC_SUBST(LIBSM)
+AC_SUBST(X_INCLUDES)
+AC_SUBST(X_LDFLAGS)
+AC_SUBST(x_includes)
+AC_SUBST(x_libraries)
+AC_SUBST(QTE_NORTTI)
+AC_SUBST(LIB_XEXT)
+
+])
+
+AC_DEFUN([KDE_PRINT_QT_PROGRAM],
+[
+AC_REQUIRE([KDE_USE_QT])
+cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qglobal.h>
+#include <qapplication.h>
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qevent.h>
+#include <qstring.h>
+#include <qstyle.h>
+EOF
+
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+#if QT_VERSION < 210
+#error 1
+#endif
+EOF
+fi
+fi
+
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qcursor.h>
+#include <qstylefactory.h>
+#include <private/qucomextra_p.h>
+EOF
+fi
+
+echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext
+cat >> conftest.$ac_ext <<EOF
+#error 1
+#endif
+
+int main() {
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+ QStringList *t = new QStringList();
+ Q_UNUSED(t);
+EOF
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+ QString s;
+ s.setLatin1("Elvis is alive", 14);
+EOF
+fi
+fi
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+ (void)QStyleFactory::create(QString::null);
+ QCursor c(Qt::WhatsThisCursor);
+EOF
+fi
+cat >> conftest.$ac_ext <<EOF
+ return 0;
+}
+EOF
+])
+
+AC_DEFUN([KDE_USE_QT],
+[
+if test -z "$1"; then
+ # Current default Qt version: 3.3
+ kde_qtver=3
+ kde_qtsubver=3
+else
+ kde_qtsubver=`echo "$1" | sed -e 's#[0-9][0-9]*\.\([0-9][0-9]*\).*#\1#'`
+ # following is the check if subversion isnt found in passed argument
+ if test "$kde_qtsubver" = "$1"; then
+ kde_qtsubver=1
+ fi
+ kde_qtver=`echo "$1" | sed -e 's#^\([0-9][0-9]*\)\..*#\1#'`
+ if test "$kde_qtver" = "1"; then
+ kde_qtsubver=42
+ fi
+fi
+
+if test -z "$2"; then
+ if test "$kde_qtver" = "2"; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_minversion=">= Qt 2.2.2"
+ else
+ kde_qt_minversion=">= Qt 2.0.2"
+ fi
+ fi
+ if test "$kde_qtver" = "3"; then
+ if test $kde_qtsubver -gt 0; then
+ if test $kde_qtsubver -gt 1; then
+ if test $kde_qtsubver -gt 2; then
+ kde_qt_minversion=">= Qt 3.3 and < 4.0"
+ else
+ kde_qt_minversion=">= Qt 3.2 and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.1 (20021021) and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.0 and < 4.0"
+ fi
+ fi
+ if test "$kde_qtver" = "1"; then
+ kde_qt_minversion=">= 1.42 and < 2.0"
+ fi
+else
+ kde_qt_minversion="$2"
+fi
+
+if test -z "$3"; then
+ if test $kde_qtver = 3; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 0x03@VER@00 && QT_VERSION < 0x040000"
+ qtsubver=`echo "00$kde_qtsubver" | sed -e 's,.*\(..\)$,\1,'`
+ kde_qt_verstring=`echo $kde_qt_verstring | sed -e "s,@VER@,$qtsubver,"`
+ else
+ kde_qt_verstring="QT_VERSION >= 300 && QT_VERSION < 0x040000"
+ fi
+ fi
+ if test $kde_qtver = 2; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 222"
+ else
+ kde_qt_verstring="QT_VERSION >= 200"
+ fi
+ fi
+ if test $kde_qtver = 1; then
+ kde_qt_verstring="QT_VERSION >= 142 && QT_VERSION < 200"
+ fi
+else
+ kde_qt_verstring="$3"
+fi
+
+if test $kde_qtver = 4; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt4 /usr/lib/qt /usr/share/qt4"
+fi
+if test $kde_qtver = 3; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt3 /usr/lib/qt /usr/share/qt3"
+fi
+if test $kde_qtver = 2; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt2 /usr/lib/qt"
+fi
+if test $kde_qtver = 1; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt"
+fi
+])
+
+AC_DEFUN([KDE_CHECK_QT_DIRECT],
+[
+AC_REQUIRE([KDE_USE_QT])
+AC_MSG_CHECKING([if Qt compiles without flags])
+AC_CACHE_VAL(kde_cv_qt_direct,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_LD_LIBRARY_PATH_safe=$LD_LIBRARY_PATH
+ac_LIBRARY_PATH="$LIBRARY_PATH"
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_includes"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBQT -lXext -lX11 $LIBSOCKET"
+else
+LIBS="$LIBQT $LIBSOCKET"
+fi
+LD_LIBRARY_PATH=
+export LD_LIBRARY_PATH
+LIBRARY_PATH=
+export LIBRARY_PATH
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ kde_cv_qt_direct="yes"
+else
+ kde_cv_qt_direct="no"
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+fi
+
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe"
+export LD_LIBRARY_PATH
+LIBRARY_PATH="$ac_LIBRARY_PATH"
+export LIBRARY_PATH
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_qt_direct" = "yes"; then
+ AC_MSG_RESULT(yes)
+ $1
+else
+ AC_MSG_RESULT(no)
+ $2
+fi
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the Qt headers and libraries.
+dnl $(QT_LDFLAGS) will be -Lqtliblocation (if needed)
+dnl and $(QT_INCLUDES) will be -Iqthdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_1_3],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([KDE_USE_QT])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+dnl ------------------------------------------------------------------------
+dnl Add configure flag to enable linking to MT version of Qt library.
+dnl ------------------------------------------------------------------------
+
+AC_ARG_ENABLE(
+ mt,
+ AC_HELP_STRING([--disable-mt],[link to non-threaded Qt (deprecated)]),
+ kde_use_qt_mt=$enableval,
+ [
+ if test $kde_qtver = 3; then
+ kde_use_qt_mt=yes
+ else
+ kde_use_qt_mt=no
+ fi
+ ]
+)
+
+USING_QT_MT=""
+
+dnl ------------------------------------------------------------------------
+dnl If we not get --disable-qt-mt then adjust some vars for the host.
+dnl ------------------------------------------------------------------------
+
+KDE_MT_LDFLAGS=
+KDE_MT_LIBS=
+if test "x$kde_use_qt_mt" = "xyes"; then
+ KDE_CHECK_THREADING
+ if test "x$kde_use_threading" = "xyes"; then
+ CPPFLAGS="$USE_THREADS -DQT_THREAD_SUPPORT $CPPFLAGS"
+ KDE_MT_LDFLAGS="$USE_THREADS"
+ KDE_MT_LIBS="$LIBPTHREAD"
+ else
+ kde_use_qt_mt=no
+ fi
+fi
+AC_SUBST(KDE_MT_LDFLAGS)
+AC_SUBST(KDE_MT_LIBS)
+
+kde_qt_was_given=yes
+
+dnl ------------------------------------------------------------------------
+dnl If we haven't been told how to link to Qt, we work it out for ourselves.
+dnl ------------------------------------------------------------------------
+if test -z "$LIBQT_GLOB"; then
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ LIBQT_GLOB="libqte.*"
+ else
+ LIBQT_GLOB="libqt.*"
+ fi
+fi
+
+dnl ------------------------------------------------------------
+dnl If we got --enable-embedded then adjust the Qt library name.
+dnl ------------------------------------------------------------
+if test "x$kde_use_qt_emb" = "xyes"; then
+ qtlib="qte"
+else
+ qtlib="qt"
+fi
+
+kde_int_qt="-l$qtlib"
+
+if test -z "$LIBQPE"; then
+dnl ------------------------------------------------------------
+dnl If we got --enable-palmtop then add -lqpe to the link line
+dnl ------------------------------------------------------------
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ if test "x$kde_use_qt_emb_palm" = "xyes"; then
+ LIB_QPE="-lqpe"
+ else
+ LIB_QPE=""
+ fi
+ else
+ LIB_QPE=""
+ fi
+fi
+
+dnl ------------------------------------------------------------------------
+dnl If we got --enable-qt-mt then adjust the Qt library name for the host.
+dnl ------------------------------------------------------------------------
+
+if test "x$kde_use_qt_mt" = "xyes"; then
+ LIBQT="-l$qtlib-mt"
+ kde_int_qt="-l$qtlib-mt"
+ LIBQT_GLOB="lib$qtlib-mt.*"
+ USING_QT_MT="using -mt"
+else
+ LIBQT="-l$qtlib"
+fi
+
+if test $kde_qtver != 1; then
+
+ AC_REQUIRE([AC_FIND_PNG])
+ AC_REQUIRE([AC_FIND_JPEG])
+ LIBQT="$LIBQT $LIBPNG $LIBJPEG"
+fi
+
+if test $kde_qtver = 3; then
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ LIBQT="$LIBQT $LIBDL"
+fi
+
+AC_MSG_CHECKING([for Qt])
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBQT="$LIBQT $X_PRE_LIBS -lXext -lX11 $LIBSM $LIBSOCKET"
+fi
+ac_qt_includes=NO ac_qt_libraries=NO ac_qt_bindir=NO
+qt_libraries=""
+qt_includes=""
+AC_ARG_WITH(qt-dir,
+ AC_HELP_STRING([--with-qt-dir=DIR],[where the root of Qt is installed ]),
+ [ ac_qt_includes="$withval"/include
+ ac_qt_libraries="$withval"/lib${kdelibsuff}
+ ac_qt_bindir="$withval"/bin
+ ])
+
+AC_ARG_WITH(qt-includes,
+ AC_HELP_STRING([--with-qt-includes=DIR],[where the Qt includes are. ]),
+ [
+ ac_qt_includes="$withval"
+ ])
+
+kde_qt_libs_given=no
+
+AC_ARG_WITH(qt-libraries,
+ AC_HELP_STRING([--with-qt-libraries=DIR],[where the Qt library is installed.]),
+ [ ac_qt_libraries="$withval"
+ kde_qt_libs_given=yes
+ ])
+
+AC_CACHE_VAL(ac_cv_have_qt,
+[#try to guess Qt locations
+
+qt_incdirs=""
+for dir in $kde_qt_dirs; do
+ qt_incdirs="$qt_incdirs $dir/include $dir"
+done
+qt_incdirs="$QTINC $qt_incdirs /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/X11R6/include/qt2 /usr/include/qt3 $x_includes"
+if test ! "$ac_qt_includes" = "NO"; then
+ qt_incdirs="$ac_qt_includes $qt_incdirs"
+fi
+
+if test "$kde_qtver" != "1"; then
+ kde_qt_header=qstyle.h
+else
+ kde_qt_header=qglobal.h
+fi
+
+AC_FIND_FILE($kde_qt_header, $qt_incdirs, qt_incdir)
+ac_qt_includes="$qt_incdir"
+
+qt_libdirs=""
+for dir in $kde_qt_dirs; do
+ qt_libdirs="$qt_libdirs $dir/lib${kdelibsuff} $dir"
+done
+qt_libdirs="$QTLIB $qt_libdirs /usr/X11R6/lib /usr/lib /usr/local/qt/lib $x_libraries"
+if test ! "$ac_qt_libraries" = "NO"; then
+ qt_libdir=$ac_qt_libraries
+else
+ qt_libdirs="$ac_qt_libraries $qt_libdirs"
+ # if the Qt was given, the chance is too big that libqt.* doesn't exist
+ qt_libdir=NONE
+ for dir in $qt_libdirs; do
+ try="ls -1 $dir/${LIBQT_GLOB}"
+ if test -n "`$try 2> /dev/null`"; then qt_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+fi
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIBQT="$LIBQT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+ac_qt_libraries="$qt_libdir"
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+LDFLAGS="$LDFLAGS -L$qt_libdir $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+LIBS="$LIBS $LIBQT $KDE_MT_LIBS"
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+else
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+ ac_qt_libraries="NO"
+fi
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+AC_LANG_RESTORE
+if test "$ac_qt_includes" = NO || test "$ac_qt_libraries" = NO; then
+ ac_cv_have_qt="have_qt=no"
+ ac_qt_notfound=""
+ missing_qt_mt=""
+ if test "$ac_qt_includes" = NO; then
+ if test "$ac_qt_libraries" = NO; then
+ ac_qt_notfound="(headers and libraries)";
+ else
+ ac_qt_notfound="(headers)";
+ fi
+ else
+ if test "x$kde_use_qt_mt" = "xyes"; then
+ missing_qt_mt="
+Make sure that you have compiled Qt with thread support!"
+ ac_qt_notfound="(library $qtlib-mt)";
+ else
+ ac_qt_notfound="(library $qtlib)";
+ fi
+ fi
+
+ AC_MSG_ERROR([Qt ($kde_qt_minversion) $ac_qt_notfound not found. Please check your installation!
+For more details about this problem, look at the end of config.log.$missing_qt_mt])
+else
+ have_qt="yes"
+fi
+])
+
+eval "$ac_cv_have_qt"
+
+if test "$have_qt" != yes; then
+ AC_MSG_RESULT([$have_qt]);
+else
+ ac_cv_have_qt="have_qt=yes \
+ ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries"
+ AC_MSG_RESULT([libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT])
+
+ qt_libraries="$ac_qt_libraries"
+ qt_includes="$ac_qt_includes"
+fi
+
+if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then
+ KDE_CHECK_QT_DIRECT(qt_libraries= ,[])
+fi
+
+AC_SUBST(qt_libraries)
+AC_SUBST(qt_includes)
+
+if test "$qt_includes" = "$x_includes" || test -z "$qt_includes"; then
+ QT_INCLUDES=""
+else
+ QT_INCLUDES="-I$qt_includes"
+ all_includes="$QT_INCLUDES $all_includes"
+fi
+
+if test "$qt_libraries" = "$x_libraries" || test -z "$qt_libraries"; then
+ QT_LDFLAGS=""
+else
+ QT_LDFLAGS="-L$qt_libraries"
+ all_libraries="$QT_LDFLAGS $all_libraries"
+fi
+test -z "$KDE_MT_LDFLAGS" || all_libraries="$all_libraries $KDE_MT_LDFLAGS"
+
+AC_SUBST(QT_INCLUDES)
+AC_SUBST(QT_LDFLAGS)
+AC_PATH_QT_MOC_UIC
+
+KDE_CHECK_QT_JPEG
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM)'
+else
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG)'
+fi
+test -z "$KDE_MT_LIBS" || LIB_QT="$LIB_QT $KDE_MT_LIBS"
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIB_QT="$LIB_QT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+AC_SUBST(LIB_QT)
+AC_SUBST(LIB_QPE)
+
+AC_SUBST(kde_qtver)
+])
+
+AC_DEFUN([AC_PATH_QT],
+[
+AC_PATH_QT_1_3
+])
+
+AC_DEFUN([KDE_CHECK_UIC_PLUGINS],
+[
+AC_REQUIRE([AC_PATH_QT_MOC_UIC])
+
+if test x$ac_uic_supports_libpath = xyes; then
+
+AC_MSG_CHECKING([if UIC has KDE plugins available])
+AC_CACHE_VAL(kde_cv_uic_plugins,
+[
+cat > actest.ui << EOF
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>NewConnectionDialog</class>
+<widget class="QDialog">
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>testInput</cstring>
+ </property>
+ </widget>
+</widget>
+</UI>
+EOF
+
+
+
+kde_cv_uic_plugins=no
+kde_line="$UIC_PATH -L $kde_widgetdir"
+if test x$ac_uic_supports_nounload = xyes; then
+ kde_line="$kde_line -nounload"
+fi
+kde_line="$kde_line -impl actest.h actest.ui > actest.cpp"
+if AC_TRY_EVAL(kde_line); then
+ # if you're trying to debug this check and think it's incorrect,
+ # better check your installation. The check _is_ correct - your
+ # installation is not.
+ if test -f actest.cpp && grep klineedit actest.cpp > /dev/null; then
+ kde_cv_uic_plugins=yes
+ fi
+fi
+rm -f actest.ui actest.cpp
+])
+
+AC_MSG_RESULT([$kde_cv_uic_plugins])
+if test "$kde_cv_uic_plugins" != yes; then
+ AC_MSG_ERROR([
+you need to install kdelibs first.
+
+If you did install kdelibs, then the Qt version that is picked up by
+this configure is not the same version you used to compile kdelibs.
+The Qt Plugin installed by kdelibs is *ONLY* loadable if it is the
+_same Qt version_, compiled with the _same compiler_ and the same Qt
+configuration settings.
+])
+fi
+fi
+])
+
+AC_DEFUN([KDE_CHECK_FINAL],
+[
+ AC_ARG_ENABLE(final,
+ AC_HELP_STRING([--enable-final],
+ [build size optimized apps (experimental - needs lots of memory)]),
+ kde_use_final=$enableval, kde_use_final=no)
+
+ if test "x$kde_use_final" = "xyes"; then
+ KDE_USE_FINAL_TRUE=""
+ KDE_USE_FINAL_FALSE="#"
+ else
+ KDE_USE_FINAL_TRUE="#"
+ KDE_USE_FINAL_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_FINAL_TRUE)
+ AC_SUBST(KDE_USE_FINAL_FALSE)
+])
+
+AC_DEFUN([KDE_CHECK_CLOSURE],
+[
+ AC_ARG_ENABLE(closure,
+ AC_HELP_STRING([--enable-closure],[delay template instantiation]),
+ kde_use_closure=$enableval, kde_use_closure=no)
+
+ KDE_NO_UNDEFINED=""
+ if test "x$kde_use_closure" = "xyes"; then
+ KDE_USE_CLOSURE_TRUE=""
+ KDE_USE_CLOSURE_FALSE="#"
+# CXXFLAGS="$CXXFLAGS $REPO"
+ else
+ KDE_USE_CLOSURE_TRUE="#"
+ KDE_USE_CLOSURE_FALSE=""
+ KDE_NO_UNDEFINED=""
+ case $host in
+ *-*-linux-gnu)
+ KDE_CHECK_COMPILER_FLAG([Wl,--no-undefined],
+ [KDE_CHECK_COMPILER_FLAG([Wl,--allow-shlib-undefined],
+ [KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined"],
+ [KDE_NO_UNDEFINED=""])],
+ [KDE_NO_UNDEFINED=""])
+ ;;
+ esac
+ fi
+ AC_SUBST(KDE_USE_CLOSURE_TRUE)
+ AC_SUBST(KDE_USE_CLOSURE_FALSE)
+ AC_SUBST(KDE_NO_UNDEFINED)
+])
+
+dnl Check if the linker supports --enable-new-dtags and --as-needed
+AC_DEFUN([KDE_CHECK_NEW_LDFLAGS],
+[
+ AC_ARG_ENABLE(new_ldflags,
+ AC_HELP_STRING([--enable-new-ldflags],
+ [enable the new linker flags]),
+ kde_use_new_ldflags=$enableval,
+ kde_use_new_ldflags=no)
+
+ LDFLAGS_AS_NEEDED=""
+ LDFLAGS_NEW_DTAGS=""
+ if test "x$kde_use_new_ldflags" = "xyes"; then
+ LDFLAGS_NEW_DTAGS=""
+ KDE_CHECK_COMPILER_FLAG([Wl,--enable-new-dtags],
+ [LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags"],)
+
+ KDE_CHECK_COMPILER_FLAG([Wl,--as-needed],
+ [LDFLAGS_AS_NEEDED="-Wl,--as-needed"],)
+ fi
+ AC_SUBST(LDFLAGS_AS_NEEDED)
+ AC_SUBST(LDFLAGS_NEW_DTAGS)
+])
+
+AC_DEFUN([KDE_CHECK_NMCHECK],
+[
+ AC_ARG_ENABLE(nmcheck,AC_HELP_STRING([--enable-nmcheck],[enable automatic namespace cleanness check]),
+ kde_use_nmcheck=$enableval, kde_use_nmcheck=no)
+
+ if test "$kde_use_nmcheck" = "yes"; then
+ KDE_USE_NMCHECK_TRUE=""
+ KDE_USE_NMCHECK_FALSE="#"
+ else
+ KDE_USE_NMCHECK_TRUE="#"
+ KDE_USE_NMCHECK_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_NMCHECK_TRUE)
+ AC_SUBST(KDE_USE_NMCHECK_FALSE)
+])
+
+AC_DEFUN([KDE_EXPAND_MAKEVAR], [
+savex=$exec_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+tmp=$$2
+while $1=`eval echo "$tmp"`; test "x$$1" != "x$tmp"; do tmp=$$1; done
+exec_prefix=$savex
+])
+
+dnl ------------------------------------------------------------------------
+dnl Now, the same with KDE
+dnl $(KDE_LDFLAGS) will be the kdeliblocation (if needed)
+dnl and $(kde_includes) will be the kdehdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_BASE_PATH_KDE],
+[
+AC_REQUIRE([KDE_CHECK_STL])
+AC_REQUIRE([AC_PATH_QT])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_CHECK_RPATH
+AC_MSG_CHECKING([for KDE])
+
+if test "${prefix}" != NONE; then
+ kde_includes=${includedir}
+ KDE_EXPAND_MAKEVAR(ac_kde_includes, includedir)
+
+ kde_libraries=${libdir}
+ KDE_EXPAND_MAKEVAR(ac_kde_libraries, libdir)
+
+else
+ ac_kde_includes=
+ ac_kde_libraries=
+ kde_libraries=""
+ kde_includes=""
+fi
+
+AC_CACHE_VAL(ac_cv_have_kde,
+[#try to guess kde locations
+
+if test "$kde_qtver" = 1; then
+ kde_check_header="ksock.h"
+ kde_check_lib="libkdecore.la"
+else
+ kde_check_header="ksharedptr.h"
+ kde_check_lib="libkio.la"
+fi
+
+if test -z "$1"; then
+
+kde_incdirs="$kde_libs_prefix/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes $qt_includes"
+test -n "$KDEDIR" && kde_incdirs="$KDEDIR/include $KDEDIR/include/kde $KDEDIR $kde_incdirs"
+kde_incdirs="$ac_kde_includes $kde_incdirs"
+AC_FIND_FILE($kde_check_header, $kde_incdirs, kde_incdir)
+ac_kde_includes="$kde_incdir"
+
+if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then
+ AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE headers installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+kde_libdirs="$kde_libs_prefix/lib${kdelibsuff} /usr/lib/kde/lib${kdelibsuff} /usr/local/kde/lib${kdelibsuff} /usr/kde/lib${kdelibsuff} /usr/lib${kdelibsuff}/kde /usr/lib${kdelibsuff}/kde3 /usr/lib${kdelibsuff} /usr/X11R6/lib${kdelibsuff} /usr/local/lib${kdelibsuff} /opt/kde3/lib${kdelibsuff} /opt/kde/lib${kdelibsuff} /usr/X11R6/kde/lib${kdelibsuff}"
+test -n "$KDEDIR" && kde_libdirs="$KDEDIR/lib${kdelibsuff} $KDEDIR $kde_libdirs"
+kde_libdirs="$ac_kde_libraries $libdir $kde_libdirs"
+AC_FIND_FILE($kde_check_lib, $kde_libdirs, kde_libdir)
+ac_kde_libraries="$kde_libdir"
+
+kde_widgetdir=NO
+dnl this might be somewhere else
+AC_FIND_FILE("kde3/plugins/designer/kdewidgets.la", $kde_libdirs, kde_widgetdir)
+
+if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then
+AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE libraries installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then
+AC_MSG_ERROR([
+I can't find the designer plugins. These are required and should have been installed
+by kdelibs])
+fi
+
+if test -n "$kde_widgetdir"; then
+ kde_widgetdir="$kde_widgetdir/kde3/plugins/designer"
+fi
+
+
+if test "$ac_kde_includes" = NO || test "$ac_kde_libraries" = NO || test "$kde_widgetdir" = NO; then
+ ac_cv_have_kde="have_kde=no"
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+fi
+
+else dnl test -z $1, e.g. from kdelibs
+
+ ac_cv_have_kde="have_kde=no"
+
+fi
+])dnl
+
+eval "$ac_cv_have_kde"
+
+if test "$have_kde" != "yes"; then
+ if test "${prefix}" = NONE; then
+ ac_kde_prefix="$ac_default_prefix"
+ else
+ ac_kde_prefix="$prefix"
+ fi
+ if test "$exec_prefix" = NONE; then
+ ac_kde_exec_prefix="$ac_kde_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix])
+ else
+ ac_kde_exec_prefix="$exec_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix and $ac_kde_exec_prefix])
+ fi
+
+ kde_libraries="${libdir}"
+ kde_includes="${includedir}"
+
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+ AC_MSG_RESULT([libraries $ac_kde_libraries, headers $ac_kde_includes])
+
+ kde_libraries="$ac_kde_libraries"
+ kde_includes="$ac_kde_includes"
+fi
+AC_SUBST(kde_libraries)
+AC_SUBST(kde_includes)
+
+if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then
+ KDE_INCLUDES=""
+else
+ KDE_INCLUDES="-I$kde_includes"
+ all_includes="$KDE_INCLUDES $all_includes"
+fi
+
+KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION"
+
+KDE_LDFLAGS="-L$kde_libraries"
+if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then
+ all_libraries="$KDE_LDFLAGS $all_libraries"
+fi
+
+AC_SUBST(KDE_LDFLAGS)
+AC_SUBST(KDE_INCLUDES)
+
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+all_libraries="$all_libraries $USER_LDFLAGS"
+all_includes="$all_includes $USER_INCLUDES"
+AC_SUBST(all_includes)
+AC_SUBST(all_libraries)
+
+if test -z "$1"; then
+KDE_CHECK_UIC_PLUGINS
+fi
+
+ac_kde_libraries="$kde_libdir"
+
+AC_SUBST(AUTODIRS)
+
+
+])
+
+AC_DEFUN([KDE_CHECK_EXTRA_LIBS],
+[
+AC_MSG_CHECKING(for extra includes)
+AC_ARG_WITH(extra-includes,AC_HELP_STRING([--with-extra-includes=DIR],[adds non standard include paths]),
+ kde_use_extra_includes="$withval",
+ kde_use_extra_includes=NONE
+)
+kde_extra_includes=
+if test -n "$kde_use_extra_includes" && \
+ test "$kde_use_extra_includes" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_includes; do
+ kde_extra_includes="$kde_extra_includes $dir"
+ USER_INCLUDES="$USER_INCLUDES -I$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_includes="added"
+else
+ kde_use_extra_includes="no"
+fi
+AC_SUBST(USER_INCLUDES)
+
+AC_MSG_RESULT($kde_use_extra_includes)
+
+kde_extra_libs=
+AC_MSG_CHECKING(for extra libs)
+AC_ARG_WITH(extra-libs,AC_HELP_STRING([--with-extra-libs=DIR],[adds non standard library paths]),
+ kde_use_extra_libs=$withval,
+ kde_use_extra_libs=NONE
+)
+if test -n "$kde_use_extra_libs" && \
+ test "$kde_use_extra_libs" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_libs; do
+ kde_extra_libs="$kde_extra_libs $dir"
+ KDE_EXTRA_RPATH="$KDE_EXTRA_RPATH -R $dir"
+ USER_LDFLAGS="$USER_LDFLAGS -L$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_libs="added"
+else
+ kde_use_extra_libs="no"
+fi
+
+AC_SUBST(USER_LDFLAGS)
+
+AC_MSG_RESULT($kde_use_extra_libs)
+
+])
+
+AC_DEFUN([KDE_1_CHECK_PATH_HEADERS],
+[
+ AC_MSG_CHECKING([for KDE headers installed])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include "confdefs.h"
+#include <kapp.h>
+
+int main() {
+ printf("kde_htmldir=\\"%s\\"\n", KApplication::kde_htmldir().data());
+ printf("kde_appsdir=\\"%s\\"\n", KApplication::kde_appsdir().data());
+ printf("kde_icondir=\\"%s\\"\n", KApplication::kde_icondir().data());
+ printf("kde_sounddir=\\"%s\\"\n", KApplication::kde_sounddir().data());
+ printf("kde_datadir=\\"%s\\"\n", KApplication::kde_datadir().data());
+ printf("kde_locale=\\"%s\\"\n", KApplication::kde_localedir().data());
+ printf("kde_cgidir=\\"%s\\"\n", KApplication::kde_cgidir().data());
+ printf("kde_confdir=\\"%s\\"\n", KApplication::kde_configdir().data());
+ printf("kde_mimedir=\\"%s\\"\n", KApplication::kde_mimedir().data());
+ printf("kde_toolbardir=\\"%s\\"\n", KApplication::kde_toolbardir().data());
+ printf("kde_wallpaperdir=\\"%s\\"\n",
+ KApplication::kde_wallpaperdir().data());
+ printf("kde_bindir=\\"%s\\"\n", KApplication::kde_bindir().data());
+ printf("kde_partsdir=\\"%s\\"\n", KApplication::kde_partsdir().data());
+ printf("kde_servicesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_servicetypesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_moduledir=\\"/tmp/dummy\\"\n");
+ printf("kde_styledir=\\"/tmp/dummy\\"\n");
+ printf("kde_widgetdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_appsdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_menudir=\\"/tmp/dummy\\"\n");
+ printf("xdg_directorydir=\\"/tmp/dummy\\"\n");
+ printf("kde_kcfgdir=\\"/tmp/dummy\\"\n");
+ return 0;
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$all_includes $CPPFLAGS"
+ if AC_TRY_EVAL(ac_compile); then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_ERROR([your system is not able to compile a small KDE application!
+Check, if you installed the KDE header files correctly.
+For more details about this problem, look at the end of config.log.])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_CHECK_KDEQTADDON],
+[
+AC_MSG_CHECKING(for kde-qt-addon)
+AC_CACHE_VAL(kde_cv_have_kdeqtaddon,
+[
+ kde_ldflags_safe="$LDFLAGS"
+ kde_libs_safe="$LIBS"
+ kde_cxxflags_safe="$CXXFLAGS"
+
+ LIBS="-lkde-qt-addon $LIBQT $LIBS"
+ CXXFLAGS="$CXXFLAGS -I$prefix/include -I$prefix/include/kde $all_includes"
+ LDFLAGS="$LDFLAGS $all_libraries $USER_LDFLAGS"
+
+ AC_TRY_LINK([
+ #include <qdom.h>
+ ],
+ [
+ QDomDocument doc;
+ ],
+ kde_cv_have_kdeqtaddon=yes,
+ kde_cv_have_kdeqtaddon=no
+ )
+
+ LDFLAGS=$kde_ldflags_safe
+ LIBS=$kde_libs_safe
+ CXXFLAGS=$kde_cxxflags_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_kdeqtaddon)
+
+if test "$kde_cv_have_kdeqtaddon" = "no"; then
+ AC_MSG_ERROR([Can't find libkde-qt-addon. You need to install it first.
+It is a separate package (and CVS module) named kde-qt-addon.])
+fi
+])
+
+AC_DEFUN([KDE_CREATE_LIBS_ALIASES],
+[
+ AC_REQUIRE([KDE_MISC_TESTS])
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ AC_REQUIRE([K_PATH_X])
+
+if test $kde_qtver = 3; then
+ case $host in
+ *cygwin*) lib_kded="-lkdeinit_kded" ;;
+ *) lib_kded="" ;;
+ esac
+ AC_SUBST(LIB_KDED, $lib_kded)
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KJS, "-lkjs")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KABC, "-lkabc")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+ AC_SUBST(LIB_KUTILS, "-lkutils")
+ AC_SUBST(LIB_KDEPIM, "-lkdepim")
+ AC_SUBST(LIB_KIMPROXY, "-lkimproxy")
+ AC_SUBST(LIB_KNEWSTUFF, "-lknewstuff")
+ AC_SUBST(LIB_KDNSSD, "-lkdnssd")
+ AC_SUBST(LIB_KUNITTEST, "-lkunittest")
+# these are for backward compatibility
+ AC_SUBST(LIB_KSYCOCA, "-lkio")
+ AC_SUBST(LIB_KFILE, "-lkio")
+elif test $kde_qtver = 2; then
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KSYCOCA, "-lksycoca")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KFILE, "-lkfile")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+else
+ AC_SUBST(LIB_KDECORE, "-lkdecore -lXext $(LIB_QT)")
+ AC_SUBST(LIB_KDEUI, "-lkdeui $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFM, "-lkfm $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFILE, "-lkfile $(LIB_KFM) $(LIB_KDEUI)")
+ AC_SUBST(LIB_KAB, "-lkab $(LIB_KIMGIO) $(LIB_KDECORE)")
+fi
+])
+
+AC_DEFUN([AC_PATH_KDE],
+[
+ AC_BASE_PATH_KDE
+ AC_ARG_ENABLE(path-check,AC_HELP_STRING([--disable-path-check],[don't try to find out, where to install]),
+ [
+ if test "$enableval" = "no";
+ then ac_use_path_checking="default"
+ else ac_use_path_checking=""
+ fi
+ ],
+ [
+ if test "$kde_qtver" = 1;
+ then ac_use_path_checking=""
+ else ac_use_path_checking="default"
+ fi
+ ]
+ )
+
+ AC_CREATE_KFSSTND($ac_use_path_checking)
+
+ AC_SUBST_KFSSTND
+ KDE_CREATE_LIBS_ALIASES
+])
+
+dnl KDE_CHECK_FUNC_EXT(<func>, [headers], [sample-use], [C prototype], [autoheader define], [call if found])
+AC_DEFUN([KDE_CHECK_FUNC_EXT],
+[
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(kde_cv_func_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+save_CXXFLAGS="$CXXFLAGS"
+kde_safe_LIBS="$LIBS"
+LIBS="$LIBS $X_EXTRA_LIBS"
+if test "$GXX" = "yes"; then
+CXXFLAGS="$CXXFLAGS -pedantic-errors"
+fi
+AC_TRY_COMPILE([
+$2
+],
+[
+$3
+],
+kde_cv_func_$1=yes,
+kde_cv_func_$1=no)
+CXXFLAGS="$save_CXXFLAGS"
+LIBS="$kde_safe_LIBS"
+AC_LANG_RESTORE
+])
+
+AC_MSG_RESULT($kde_cv_func_$1)
+
+AC_MSG_CHECKING([if $1 needs custom prototype])
+AC_CACHE_VAL(kde_cv_proto_$1,
+[
+if test "x$kde_cv_func_$1" = xyes; then
+ kde_cv_proto_$1=no
+else
+ case "$1" in
+ setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat)
+ kde_cv_proto_$1="yes - in libkdefakes"
+ ;;
+ *)
+ kde_cv_proto_$1=unknown
+ ;;
+ esac
+fi
+
+if test "x$kde_cv_proto_$1" = xunknown; then
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS $X_EXTRA_LIBS"
+ AC_TRY_LINK([
+$2
+
+extern "C" $4;
+],
+[
+$3
+],
+[ kde_cv_func_$1=yes
+ kde_cv_proto_$1=yes ],
+ [kde_cv_proto_$1="$1 unavailable"]
+)
+LIBS=$kde_safe_libs
+AC_LANG_RESTORE
+fi
+])
+AC_MSG_RESULT($kde_cv_proto_$1)
+
+if test "x$kde_cv_func_$1" = xyes; then
+ AC_DEFINE(HAVE_$5, 1, [Define if you have $1])
+ $6
+fi
+if test "x$kde_cv_proto_$1" = xno; then
+ AC_DEFINE(HAVE_$5_PROTO, 1,
+ [Define if you have the $1 prototype])
+fi
+
+AH_VERBATIM([_HAVE_$5_PROTO],
+[
+#if !defined(HAVE_$5_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+$4;
+#ifdef __cplusplus
+}
+#endif
+#endif
+])
+])
+
+AC_DEFUN([AC_CHECK_SETENV],
+[
+ KDE_CHECK_FUNC_EXT(setenv, [
+#include <stdlib.h>
+],
+ [setenv("VAR", "VALUE", 1);],
+ [int setenv (const char *, const char *, int)],
+ [SETENV])
+])
+
+AC_DEFUN([AC_CHECK_UNSETENV],
+[
+ KDE_CHECK_FUNC_EXT(unsetenv, [
+#include <stdlib.h>
+],
+ [unsetenv("VAR");],
+ [void unsetenv (const char *)],
+ [UNSETENV])
+])
+
+AC_DEFUN([AC_CHECK_GETDOMAINNAME],
+[
+ KDE_CHECK_FUNC_EXT(getdomainname, [
+#include <stdlib.h>
+#include <unistd.h>
+#include <netdb.h>
+],
+ [
+char buffer[200];
+getdomainname(buffer, 200);
+],
+ [#include <sys/types.h>
+ int getdomainname (char *, size_t)],
+ [GETDOMAINNAME])
+])
+
+AC_DEFUN([AC_CHECK_GETHOSTNAME],
+[
+ KDE_CHECK_FUNC_EXT(gethostname, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+char buffer[200];
+gethostname(buffer, 200);
+],
+ [int gethostname (char *, unsigned int)],
+ [GETHOSTNAME])
+])
+
+AC_DEFUN([AC_CHECK_USLEEP],
+[
+ KDE_CHECK_FUNC_EXT(usleep, [
+#include <unistd.h>
+],
+ [
+usleep(200);
+],
+ [int usleep (unsigned int)],
+ [USLEEP])
+])
+
+
+AC_DEFUN([AC_CHECK_RANDOM],
+[
+ KDE_CHECK_FUNC_EXT(random, [
+#include <stdlib.h>
+],
+ [
+random();
+],
+ [long int random(void)],
+ [RANDOM])
+
+ KDE_CHECK_FUNC_EXT(srandom, [
+#include <stdlib.h>
+],
+ [
+srandom(27);
+],
+ [void srandom(unsigned int)],
+ [SRANDOM])
+
+])
+
+AC_DEFUN([AC_CHECK_INITGROUPS],
+[
+ KDE_CHECK_FUNC_EXT(initgroups, [
+#include <sys/types.h>
+#include <unistd.h>
+#include <grp.h>
+],
+ [
+char buffer[200];
+initgroups(buffer, 27);
+],
+ [int initgroups(const char *, gid_t)],
+ [INITGROUPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMPS],
+[
+ KDE_CHECK_FUNC_EXT(mkstemps, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemps("/tmp/aaaXXXXXX", 6);
+],
+ [int mkstemps(char *, int)],
+ [MKSTEMPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkstemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemp("/tmp/aaaXXXXXX");
+],
+ [int mkstemp(char *)],
+ [MKSTEMP])
+])
+
+AC_DEFUN([AC_CHECK_MKDTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkdtemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkdtemp("/tmp/aaaXXXXXX");
+],
+ [char *mkdtemp(char *)],
+ [MKDTEMP])
+])
+
+
+AC_DEFUN([AC_CHECK_RES_INIT],
+[
+ AC_MSG_CHECKING([if res_init needs -lresolv])
+ kde_libs_safe="$LIBS"
+ LIBS="$LIBS $X_EXTRA_LIBS -lresolv"
+ AC_TRY_LINK(
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [
+ res_init();
+ ],
+ [
+ LIBRESOLV="-lresolv"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RES_INIT, 1, [Define if you have the res_init function])
+ ],
+ [ AC_MSG_RESULT(no) ]
+ )
+ LIBS=$kde_libs_safe
+ AC_SUBST(LIBRESOLV)
+
+ KDE_CHECK_FUNC_EXT(res_init,
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [res_init()],
+ [int res_init(void)],
+ [RES_INIT])
+])
+
+AC_DEFUN([AC_CHECK_STRLCPY],
+[
+ KDE_CHECK_FUNC_EXT(strlcpy, [
+#include <string.h>
+],
+[ char buf[20];
+ strlcpy(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcpy(char*, const char*, unsigned long)],
+ [STRLCPY])
+])
+
+AC_DEFUN([AC_CHECK_STRLCAT],
+[
+ KDE_CHECK_FUNC_EXT(strlcat, [
+#include <string.h>
+],
+[ char buf[20];
+ buf[0]='\0';
+ strlcat(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcat(char*, const char*, unsigned long)],
+ [STRLCAT])
+])
+
+AC_DEFUN([AC_CHECK_RES_QUERY],
+[
+ KDE_CHECK_FUNC_EXT(res_query, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+#include <netdb.h>
+],
+[
+res_query(NULL, 0, 0, NULL, 0);
+],
+ [int res_query(const char *, int, int, unsigned char *, int)],
+ [RES_QUERY])
+])
+
+AC_DEFUN([AC_CHECK_DN_SKIPNAME],
+[
+ KDE_CHECK_FUNC_EXT(dn_skipname, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+],
+[
+dn_skipname (NULL, NULL);
+],
+ [int dn_skipname (unsigned char *, unsigned char *)],
+ [DN_SKIPNAME])
+])
+
+
+AC_DEFUN([AC_FIND_GIF],
+ [AC_MSG_CHECKING([for giflib])
+AC_CACHE_VAL(ac_cv_lib_gif,
+[ac_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries -lgif -lX11 $LIBSOCKET"
+else
+LIBS="$all_libraries -lgif"
+fi
+AC_TRY_LINK(dnl
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+int GifLastError(void);
+#ifdef __cplusplus
+}
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+],
+ [return GifLastError();],
+ eval "ac_cv_lib_gif=yes",
+ eval "ac_cv_lib_gif=no")
+LIBS="$ac_save_LIBS"
+])dnl
+if eval "test \"`echo $ac_cv_lib_gif`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBGIF, 1, [Define if you have libgif])
+else
+ AC_MSG_ERROR(You need giflib30. Please install the kdesupport package)
+fi
+])
+
+AC_DEFUN([KDE_FIND_JPEG_HELPER],
+[
+AC_MSG_CHECKING([for libjpeg$2])
+AC_CACHE_VAL(ac_cv_lib_jpeg_$1,
+[
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -ljpeg$2 -lm"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+void jpeg_CreateDecompress();
+#ifdef __cplusplus
+}
+#endif
+],
+[jpeg_CreateDecompress();],
+ eval "ac_cv_lib_jpeg_$1=-ljpeg$2",
+ eval "ac_cv_lib_jpeg_$1=no")
+LIBS="$ac_save_LIBS"
+CFLAGS="$ac_save_CFLAGS"
+])
+
+if eval "test ! \"`echo $ac_cv_lib_jpeg_$1`\" = no"; then
+ LIBJPEG="$ac_cv_lib_jpeg_$1"
+ AC_MSG_RESULT($ac_cv_lib_jpeg_$1)
+else
+ AC_MSG_RESULT(no)
+ $3
+fi
+
+])
+
+AC_DEFUN([AC_FIND_JPEG],
+[
+dnl first look for libraries
+KDE_FIND_JPEG_HELPER(6b, 6b,
+ KDE_FIND_JPEG_HELPER(normal, [],
+ [
+ LIBJPEG=
+ ]
+ )
+)
+
+dnl then search the headers (can't use simply AC_TRY_xxx, as jpeglib.h
+dnl requires system dependent includes loaded before it)
+jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes"
+AC_FIND_FILE(jpeglib.h, $jpeg_incdirs, jpeg_incdir)
+test "x$jpeg_incdir" = xNO && jpeg_incdir=
+
+dnl if headers _and_ libraries are missing, this is no error, and we
+dnl continue with a warning (the user will get no jpeg support in khtml)
+dnl if only one is missing, it means a configuration error, but we still
+dnl only warn
+if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBJPEG, 1, [Define if you have libjpeg])
+else
+ if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then
+ AC_MSG_WARN([
+There is an installation error in jpeg support. You seem to have only one
+of either the headers _or_ the libraries installed. You may need to either
+provide correct --with-extra-... options, or the development package of
+libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/
+Disabling JPEG support.
+])
+ else
+ AC_MSG_WARN([libjpeg not found. disable JPEG support.])
+ fi
+ jpeg_incdir=
+ LIBJPEG=
+fi
+
+AC_SUBST(LIBJPEG)
+AH_VERBATIM(_AC_CHECK_JPEG,
+[/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+])
+])
+
+AC_DEFUN([KDE_CHECK_QT_JPEG],
+[
+if test -n "$LIBJPEG"; then
+AC_MSG_CHECKING([if Qt needs $LIBJPEG])
+AC_CACHE_VAL(kde_cv_qt_jpeg,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS $LIBQT"
+LIBS=`echo $LIBS | sed "s/$LIBJPEG//"`
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[#include <qapplication.h>],
+ [
+ int argc;
+ char** argv;
+ QApplication app(argc, argv);],
+ eval "kde_cv_qt_jpeg=no",
+ eval "kde_cv_qt_jpeg=yes")
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+fi
+])
+
+if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then
+ AC_MSG_RESULT(yes)
+ LIBJPEG_QT='$(LIBJPEG)'
+else
+ AC_MSG_RESULT(no)
+ LIBJPEG_QT=
+fi
+
+])
+
+AC_DEFUN([AC_FIND_ZLIB],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for libz])
+AC_CACHE_VAL(ac_cv_lib_z,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#include<zlib.h>
+],
+[
+ char buf[42];
+ gzFile f = (gzFile) 0;
+ /* this would segfault.. but we only link, don't run */
+ (void) gzgets(f, buf, sizeof(buf));
+
+ return (zlibVersion() == ZLIB_VERSION);
+],
+ eval "ac_cv_lib_z='-lz'",
+ eval "ac_cv_lib_z=no")
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if test ! "$ac_cv_lib_z" = no; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBZ, 1, [Define if you have libz])
+ LIBZ="$ac_cv_lib_z"
+ AC_MSG_RESULT($ac_cv_lib_z)
+else
+ AC_MSG_ERROR(not found.
+ Possibly configure picks up an outdated version
+ installed by XFree86. Remove it from your system.
+
+ Check your installation and look into config.log)
+ LIBZ=""
+fi
+AC_SUBST(LIBZ)
+])
+
+AC_DEFUN([KDE_TRY_TIFFLIB],
+[
+AC_MSG_CHECKING([for libtiff $1])
+
+AC_CACHE_VAL(kde_cv_libtiff_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lX11 $LIBSOCKET -lm"
+else
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lm"
+fi
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+[
+#include<tiffio.h>
+],
+ [return (TIFFOpen( "", "r") == 0); ],
+[
+ kde_cv_libtiff_$1="-l$1 $LIBJPEG $LIBZ"
+], [
+ kde_cv_libtiff_$1=no
+])
+
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_libtiff_$1" = "no"; then
+ AC_MSG_RESULT(no)
+ LIBTIFF=""
+ $3
+else
+ LIBTIFF="$kde_cv_libtiff_$1"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBTIFF, 1, [Define if you have libtiff])
+ $2
+fi
+
+])
+
+AC_DEFUN([AC_FIND_TIFF],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+KDE_TRY_TIFFLIB(tiff, [],
+ KDE_TRY_TIFFLIB(tiff34))
+
+AC_SUBST(LIBTIFF)
+])
+
+AC_DEFUN([KDE_FIND_LIBEXR],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_CACHE_VAL(ac_cv_libexr,
+[
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ AC_MSG_CHECKING([for OpenEXR libraries])
+
+ if test "$PKG_CONFIG" = "no" ; then
+ AC_MSG_RESULT(no)
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ if !(`$PKG_CONFIG --exists OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=no
+ else
+ if !(`$PKG_CONFIG --atleast-version="1.1.1" OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=old
+ else
+ kde_save_LIBS="$LIBS"
+ LIBS="$LIBS $all_libraries $USER_LDFLAGS $LIBZ `pkg-config --libs OpenEXR`"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ EXR_FLAGS=`$PKG_CONFIG --cflags OpenEXR`
+ CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $EXR_FLAGS"
+
+ AC_TRY_LINK(dnl
+ [
+ #include <ImfRgbaFile.h>
+ ],
+ [
+ using namespace Imf;
+ RgbaInputFile file ("dummy");
+ return 0;
+ ],
+ eval "ac_cv_libexr='`pkg-config --libs OpenEXR`'",
+ eval "ac_cv_libexr=no"
+ )
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+ if eval "test ! \"`echo $ac_cv_libexr`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_EXR, 1, [Define if you have OpenEXR])
+ LIB_EXR="$ac_cv_libexr"
+ AC_MSG_RESULT($ac_cv_libexr)
+ else
+ AC_MSG_RESULT(no)
+ LIB_EXR=""
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST(LIB_EXR)
+ AC_SUBST(EXR_FLAGS)
+])
+
+
+
+AC_DEFUN([AC_FIND_PNG],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_MSG_CHECKING([for libpng])
+AC_CACHE_VAL(ac_cv_lib_png,
+[
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm -lX11 $LIBSOCKET"
+else
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm"
+fi
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<png.h>
+ ],
+ [
+ png_structp png_ptr = png_create_read_struct( /* image ptr */
+ PNG_LIBPNG_VER_STRING, 0, 0, 0 );
+ return( png_ptr != 0 );
+ ],
+ eval "ac_cv_lib_png='-lpng $LIBZ -lm'",
+ eval "ac_cv_lib_png=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBPNG, 1, [Define if you have libpng])
+ LIBPNG="$ac_cv_lib_png"
+ AC_SUBST(LIBPNG)
+ AC_MSG_RESULT($ac_cv_lib_png)
+else
+ AC_MSG_RESULT(no)
+ LIBPNG=""
+ AC_SUBST(LIBPNG)
+fi
+])
+
+
+AC_DEFUN([AC_FIND_JASPER],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_MSG_CHECKING([for jasper])
+AC_CACHE_VAL(ac_cv_jasper,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -ljasper $LIBJPEG -lm"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<jasper/jasper.h>
+ ],
+ [
+ return( jas_init() );
+ ],
+ eval "ac_cv_jasper='-ljasper $LIBJPEG -lm'",
+ eval "ac_cv_jasper=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_jasper`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_JASPER, 1, [Define if you have jasper])
+ LIB_JASPER="$ac_cv_jasper"
+ AC_MSG_RESULT($ac_cv_jasper)
+else
+ AC_MSG_RESULT(no)
+ LIB_JASPER=""
+fi
+AC_SUBST(LIB_JASPER)
+])
+
+AC_DEFUN([AC_CHECK_BOOL],
+[
+ AC_DEFINE_UNQUOTED(HAVE_BOOL, 1, [You _must_ have bool])
+])
+
+AC_DEFUN([AC_CHECK_GNU_EXTENSIONS],
+[
+AC_MSG_CHECKING(if you need GNU extensions)
+AC_CACHE_VAL(ac_cv_gnu_extensions,
+[
+cat > conftest.c << EOF
+#include <features.h>
+
+#ifdef __GNU_LIBRARY__
+yes
+#endif
+EOF
+
+if (eval "$ac_cpp conftest.c") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_gnu_extensions=yes
+else
+ ac_cv_gnu_extensions=no
+fi
+])
+
+AC_MSG_RESULT($ac_cv_gnu_extensions)
+if test "$ac_cv_gnu_extensions" = "yes"; then
+ AC_DEFINE_UNQUOTED(_GNU_SOURCE, 1, [Define if you need to use the GNU extensions])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CXX supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], [])
+ CXXFLAGS="$save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+AC_DEFUN([KDE_CHECK_C_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CC supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cc_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_C
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cc_$kde_cache=yes"], [])
+ CFLAGS="$save_CFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+
+dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables
+dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever])
+dnl it's all white-space separated
+AC_DEFUN([AC_REMOVE_FORBIDDEN],
+[ __val=$$1
+ __forbid=" $2 "
+ if test -n "$__val"; then
+ __new=""
+ ac_save_IFS=$IFS
+ IFS=" "
+ for i in $__val; do
+ case "$__forbid" in
+ *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;;
+ *) # Careful to not add spaces, where there were none, because otherwise
+ # libtool gets confused, if we change e.g. CXX
+ if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;;
+ esac
+ done
+ IFS=$ac_save_IFS
+ $1=$__new
+ fi
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_BAD_COMPILER],
+[
+ AC_MSG_CHECKING([whether $CC is blacklisted])
+
+ dnl In theory we have tu run this test against $CC and $CXX
+ dnl in C and in C++ mode, because its perfectly legal for
+ dnl the user to mix compiler versions, since C has a defined
+ dnl ABI.
+ dnl
+ dnl For now, we assume the user is not on crack.
+
+ AC_TRY_COMPILE([
+#ifdef __GNUC__
+#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0
+choke me
+#endif
+#endif
+], ,
+ kde_bad_compiler=no,
+ kde_bad_compiler=yes
+)
+
+ AC_MSG_RESULT($kde_bad_compiler)
+
+if test "$kde_bad_compiler" = "yes"; then
+ AC_MSG_ERROR([
+
+This particular compiler version is blacklisted because it
+is known to miscompile KDE. Please use a newer version, or
+if that is not yet available, choose an older version.
+
+Please do not report a bug or bother us reporting this
+configure error. We know about it, and we introduced
+it by intention to avoid untraceable bugs or crashes in KDE.
+
+])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_OPT_NOINLINE_MATCH],
+[
+ AC_CACHE_CHECK([whether system headers can cope with -O2 -fno-inline],
+ kde_cv_opt_noinline_match,
+ [
+ kde_cv_opt_noinline_match=irrelevant
+ dnl if we don't use both -O2 and -fno-inline, this check is moot
+ if echo "$CFLAGS" | grep -e -O2 >/dev/null 2>/dev/null \
+ && echo "$CFLAGS" | grep -e -fno-inline >/dev/null 2>/dev/null ; then
+
+ ac_cflags_save="$CFLAGS"
+ CFLAGS="$CFLAGS -D_USE_GNU"
+
+ AC_TRY_LINK([
+ #include <string.h>
+], [ const char *pt, *et;
+ et = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p ( ";," ) && ((size_t)(const void *)(( ";," )+ 1) - (size_t)(const void *)( ";," ) == 1) ? ((__a0 =((__const char *) ( ";," ))[0], __a0 == '\0') ? ((void) ( pt ),((void *)0) ) : ((__a1 = ((__const char *) ( ";," ))[1], __a1== '\0') ? (__extension__ (__builtin_constant_p ( __a0 ) && ( __a0 ) == '\0' ? (char *) __rawmemchr ( pt , __a0) : strchr( pt , __a0 ))) : ((__a2 = ((__const char *) ( ";," ))[2], __a2 == '\0') ? __strpbrk_c2 ( pt , __a0, __a1) :(((__const char *) ( ";," ))[3] == '\0' ? __strpbrk_c3 ( pt ,__a0, __a1, __a2): strpbrk ( pt , ";," ))))) : strpbrk ( pt , ";," )); }) ;
+],
+ kde_cv_opt_noinline_match=yes,
+ kde_cv_opt_noinline_match=no
+ )
+
+ CFLAGS="$ac_cflags_save"
+ fi
+ ])
+])
+
+
+dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given
+AC_DEFUN([AC_VALIDIFY_CXXFLAGS],
+[dnl
+if test "x$kde_use_qt_emb" != "xyes"; then
+ AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath])
+else
+ AC_REMOVE_FORBIDDEN(CXX, [-rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath])
+fi
+])
+
+AC_DEFUN([AC_CHECK_COMPILERS],
+[
+ AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]),
+ [
+ case $enableval in
+ yes)
+ kde_use_debug_code="yes"
+ kde_use_debug_define=no
+ ;;
+ full)
+ kde_use_debug_code="full"
+ kde_use_debug_define=no
+ ;;
+ *)
+ kde_use_debug_code="no"
+ kde_use_debug_define=yes
+ ;;
+ esac
+ ],
+ [kde_use_debug_code="no"
+ kde_use_debug_define=no
+ ])
+
+ dnl Just for configure --help
+ AC_ARG_ENABLE(dummyoption,
+ AC_HELP_STRING([--disable-debug],
+ [disables debug output and debug symbols [default=no]]),
+ [],[])
+
+ AC_ARG_ENABLE(strict,
+ AC_HELP_STRING([--enable-strict],
+ [compiles with strict compiler options (may not work!)]),
+ [
+ if test $enableval = "no"; then
+ kde_use_strict_options="no"
+ else
+ kde_use_strict_options="yes"
+ fi
+ ], [kde_use_strict_options="no"])
+
+ AC_ARG_ENABLE(warnings,AC_HELP_STRING([--disable-warnings],[disables compilation with -Wall and similar]),
+ [
+ if test $enableval = "no"; then
+ kde_use_warnings="no"
+ else
+ kde_use_warnings="yes"
+ fi
+ ], [kde_use_warnings="yes"])
+
+ dnl enable warnings for debug build
+ if test "$kde_use_debug_code" != "no"; then
+ kde_use_warnings=yes
+ fi
+
+ AC_ARG_ENABLE(profile,AC_HELP_STRING([--enable-profile],[creates profiling infos [default=no]]),
+ [kde_use_profiling=$enableval],
+ [kde_use_profiling="no"]
+ )
+
+ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS
+ CFLAGS=" $CFLAGS"
+
+ AC_PROG_CC
+
+ AC_PROG_CPP
+
+ if test "$GCC" = "yes"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test $kde_use_debug_code = "full"; then
+ CFLAGS="-g3 -fno-inline $CFLAGS"
+ else
+ CFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CFLAGS"
+ fi
+ else
+ CFLAGS="-O2 $CFLAGS"
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CFLAGS="-DNDEBUG $CFLAGS"
+ fi
+
+
+ case "$host" in
+ *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";;
+ *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";;
+ esac
+
+ if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then
+ LDFLAGS=""
+ fi
+
+ CXXFLAGS=" $CXXFLAGS"
+
+ AC_PROG_CXX
+
+ KDE_CHECK_FOR_BAD_COMPILER
+
+ if test "$GXX" = "yes" || test "$CXX" = "KCC"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS"
+ else
+ if test "$kde_use_debug_code" = "full"; then
+ CXXFLAGS="-g3 -fno-inline $CXXFLAGS"
+ else
+ CXXFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CXXFLAGS"
+ fi
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"])
+
+ dnl convenience compiler flags
+ KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""])
+ AC_SUBST(WOVERLOADED_VIRTUAL)
+ else
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K3 $CXXFLAGS"
+ else
+ CXXFLAGS="-O2 $CXXFLAGS"
+ fi
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS"
+ fi
+
+ if test "$kde_use_profiling" = "yes"; then
+ KDE_CHECK_COMPILER_FLAG(pg,
+ [
+ CFLAGS="-pg $CFLAGS"
+ CXXFLAGS="-pg $CXXFLAGS"
+ ])
+ fi
+
+ if test "$kde_use_warnings" = "yes"; then
+ if test "$GCC" = "yes"; then
+ CXXFLAGS="-Wall -W -Wpointer-arith $CXXFLAGS"
+ case $host in
+ *-*-linux-gnu)
+ CFLAGS="-std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS"
+ CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts $CXXFLAGS"
+ KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"])
+ KDE_CHECK_C_COMPILER_FLAG(Wmissing-format-attribute, [CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"])
+ ;;
+ esac
+ KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"])
+ KDE_CHECK_COMPILER_FLAG(Wno-long-long,[CXXFLAGS="-Wno-long-long $CXXFLAGS"])
+ dnl ### FIXME: revert for KDE 4
+ KDE_CHECK_COMPILER_FLAG(Wno-non-virtual-dtor,[CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor"])
+ fi
+ fi
+
+ if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then
+ CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS"
+ fi
+
+ AC_ARG_ENABLE(pch,
+ AC_HELP_STRING([--enable-pch],
+ [enables precompiled header support (currently only KCC or gcc >=3.4+unsermake) [default=no]]),
+ [ kde_use_pch=$enableval ],[ kde_use_pch=no ])
+
+ HAVE_GCC_VISIBILITY=0
+ AC_SUBST([HAVE_GCC_VISIBILITY])
+
+ if test "$GXX" = "yes"; then
+ gcc_no_reorder_blocks=NO
+ KDE_CHECK_COMPILER_FLAG(fno-reorder-blocks,[gcc_no_reorder_blocks=YES])
+ if test $kde_use_debug_code != "no" && \
+ test $kde_use_debug_code != "full" && \
+ test "YES" = "$gcc_no_reorder_blocks" ; then
+ CXXFLAGS="$CXXFLAGS -fno-reorder-blocks"
+ CFLAGS="$CFLAGS -fno-reorder-blocks"
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"])
+ KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"])
+ KDE_CHECK_COMPILER_FLAG(fno-common, [CXXFLAGS="$CXXFLAGS -fno-common"])
+ KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= )
+ ENABLE_PERMISSIVE_FLAG="-fpermissive"
+
+ if test "$kde_use_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c header files)
+ echo >conftest.h
+ if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ if test "$kde_gcc_supports_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c++ header files)
+ if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ rm -f conftest.h conftest.h.gch
+ fi
+
+ KDE_CHECK_FOR_OPT_NOINLINE_MATCH
+ if test "x$kde_cv_opt_noinline_match" = "xno" ; then
+ CFLAGS="`echo "$CFLAGS" | sed "s/ -fno-inline//"`"
+ fi
+ fi
+ AM_CONDITIONAL(unsermake_enable_pch, test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes")
+ if test "$CXX" = "KCC"; then
+ dnl unfortunately we currently cannot disable exception support in KCC
+ dnl because doing so is binary incompatible and Qt by default links with exceptions :-(
+ dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"])
+ dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= )
+
+ if test "$kde_use_pch" = "yes"; then
+ dnl TODO: support --pch-dir!
+ KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"])
+ dnl the below works (but the dir must exist), but it's
+ dnl useless for a whole package.
+ dnl The are precompiled headers for each source file, so when compiling
+ dnl from scratch, it doesn't make a difference, and they take up
+ dnl around ~5Mb _per_ sourcefile.
+ dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp,
+ dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"])
+ fi
+ dnl this flag controls inlining. by default KCC inlines in optimisation mode
+ dnl all implementations that are defined inside the class {} declaration.
+ dnl because of templates-compatibility with broken gcc compilers, this
+ dnl can cause excessive inlining. This flag limits it to a sane level
+ KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"])
+ KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"])
+ KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"])
+ KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"])
+ dnl Some source files are shared between multiple executables
+ dnl (or libraries) and some of those need template instantiations.
+ dnl In that case KCC needs to compile those sources with
+ dnl --one_instantiation_per_object. To make it easy for us we compile
+ dnl _all_ objects with that flag (--one_per is a shorthand).
+ KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"])
+ fi
+ AC_SUBST(USE_EXCEPTIONS)
+ dnl obsolete macro - provided to keep things going
+ USE_RTTI=
+ AC_SUBST(USE_RTTI)
+
+ case "$host" in
+ *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;;
+ *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";;
+ *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";;
+ *-*-solaris*)
+ if test "$GXX" = yes; then
+ libstdcpp=`$CXX -print-file-name=libstdc++.so`
+ if test ! -f $libstdcpp; then
+ AC_MSG_ERROR([You've compiled gcc without --enable-shared. This doesn't work with KDE. Please recompile gcc with --enable-shared to receive a libstdc++.so])
+ fi
+ fi
+ ;;
+ esac
+
+ AC_VALIDIFY_CXXFLAGS
+
+ AC_PROG_CXXCPP
+
+ if test "$GCC" = yes; then
+ NOOPT_CFLAGS=-O0
+ fi
+ KDE_CHECK_COMPILER_FLAG(O0,[NOOPT_CXXFLAGS=-O0])
+
+ AC_ARG_ENABLE(coverage,
+ AC_HELP_STRING([--enable-coverage],[use gcc coverage testing]), [
+ if test "$am_cv_CC_dependencies_compiler_type" = "gcc3"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker="-lgcc"
+ elif test "$am_cv_CC_dependencies_compiler_type" = "gcc"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker=""
+ else
+ AC_MSG_ERROR([coverage with your compiler is not supported])
+ fi
+ CFLAGS="$CFLAGS $ac_coverage_compiler"
+ CXXFLAGS="$CXXFLAGS $ac_coverage_compiler"
+ LDFLAGS="$LDFLAGS $ac_coverage_linker"
+ ])
+
+ AC_SUBST(NOOPT_CXXFLAGS)
+ AC_SUBST(NOOPT_CFLAGS)
+ AC_SUBST(ENABLE_PERMISSIVE_FLAG)
+
+ KDE_CHECK_NEW_LDFLAGS
+ KDE_CHECK_FINAL
+ KDE_CHECK_CLOSURE
+ KDE_CHECK_NMCHECK
+
+ ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), [])
+])
+
+AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG],
+ [
+ AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], kde_cv_val_gcc_visibility_bug,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0"
+ LDFLAGS="$LDFLAGS -shared -fPIC"
+
+ AC_TRY_LINK(
+ [
+ /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */
+ #include <string>
+ int some_function( void ) __attribute__ ((visibility("default")));
+ int some_function( void )
+ {
+ std::string s("blafasel");
+ return 0;
+ }
+ ], [/* elvis is alive */],
+ kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_cv_val_gcc_visibility_bug = xno; then
+ CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
+ fi
+ ]
+)
+
+AC_DEFUN([KDE_ENABLE_HIDDEN_VISIBILITY],
+[
+ AC_BEFORE([AC_PATH_QT_1_3], [KDE_ENABLE_HIDDEN_VISIBILITY])
+
+ AC_MSG_CHECKING([grepping for visibility push/pop in headers])
+
+ if test "x$GXX" = "xyes"; then
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_EGREP_CPP(
+ [GCC visibility push],
+ [ #include <exception>
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ kde_stdc_visibility_patched=yes ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([Your libstdc++ doesn't appear to be patched for
+ visibility support. Disabling -fvisibility=hidden])
+
+ kde_stdc_visibility_patched=no ])
+
+ AC_LANG_RESTORE
+
+ kde_have_gcc_visibility=no
+ KDE_CHECK_COMPILER_FLAG(fvisibility=hidden,
+ [
+ kde_have_gcc_visibility=yes
+ dnl the whole toolchain is just a mess, gcc is just too buggy
+ dnl to handle STL with visibility enabled. Lets reconsider
+ dnl when gcc 4.2 is out or when things get fixed in the compiler.
+ dnl Contact [email protected] for details.
+ AC_ARG_ENABLE(gcc-hidden-visibility,
+ AC_HELP_STRING([--enable-gcc-hidden-visibility],[toolchain hidden visibility [default=no]]),
+ [kde_have_gcc_visibility=$enableval],
+ [kde_have_gcc_visibility=no])
+
+ AC_CACHE_CHECK([if Qt is patched for -fvisibility], kde_cv_val_qt_gcc_visibility_patched,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS $all_includes"
+
+ AC_TRY_COMPILE(
+ [
+#include <qglobal.h>
+#if Q_EXPORT - 0 != 0
+/* if this compiles, then Q_EXPORT is undefined */
+/* if Q_EXPORT is nonempty, this will break compilation */
+#endif
+ ], [/* elvis is alive */],
+ kde_cv_val_qt_gcc_visibility_patched=no, kde_cv_val_qt_gcc_visibility_patched=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_have_gcc_visibility = "xyes" && test x$kde_stdc_visibility_patched = "xyes" && test x$kde_cv_val_qt_gcc_visibility_patched = "xyes"; then
+ CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+ KDE_CHECK_VISIBILITY_GCC_BUG
+ HAVE_GCC_VISIBILITY=1
+ AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", [define to 1 if -fvisibility is supported])
+ fi
+ ])
+ fi
+])
+
+AC_DEFUN([KDE_ADD_DEPENDENCIES],
+[
+ [A]M_DEPENDENCIES(CC)
+ [A]M_DEPENDENCIES(CXX)
+])
+
+dnl just a wrapper to clean up configure.in
+AC_DEFUN([KDE_PROG_LIBTOOL],
+[
+AC_REQUIRE([AC_CHECK_COMPILERS])
+AC_REQUIRE([AC_ENABLE_SHARED])
+AC_REQUIRE([AC_ENABLE_STATIC])
+
+AC_REQUIRE([AC_LIBTOOL_DLOPEN])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_OBJEXT
+AC_EXEEXT
+
+AM_PROG_LIBTOOL
+AC_LIBTOOL_CXX
+
+LIBTOOL_SHELL="/bin/sh ./libtool"
+# LIBTOOL="$LIBTOOL --silent"
+KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)"
+AC_SUBST(KDE_PLUGIN)
+
+# This hack ensures that libtool creates shared libs for kunittest plugins. By default check_LTLIBRARIES makes static libs.
+KDE_CHECK_PLUGIN="\$(KDE_PLUGIN) -rpath \$(libdir)"
+AC_SUBST(KDE_CHECK_PLUGIN)
+
+# we patch configure quite some so we better keep that consistent for incremental runs
+AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure')
+])
+
+AC_DEFUN([KDE_CHECK_LIB64],
+[
+ kdelibsuff="$kde_libs_suffix"
+ if test -z "$kdelibsuff"; then
+ kdelibsuff="no"
+ fi
+ AC_ARG_ENABLE(libsuffix,
+ AC_HELP_STRING([--enable-libsuffix],
+ [/lib directory suffix (64,32,none,auto[=default])]),
+ kdelibsuff=$enableval)
+
+ if test "$kdelibsuff" = "auto"; then
+
+cat > conftest.c << EOF
+#include <stdio.h>
+int main() {
+ return 0;
+}
+EOF
+ kdelibsuff=`$CC conftest.c -o conftest.out; ldd conftest.out |sed -ne '/libc.so/{
+ s,.*/lib\([[^\/]]*\)/.*,\1,
+ p
+}'`
+ rm -rf conftest.*
+ fi
+
+ if test "$kdelibsuff" = "no" || "$kdelibsuff" = "none"; then
+ kdelibsuff=
+ fi
+ if test -z "$kdelibsuff"; then
+ AC_MSG_RESULT([not using lib directory suffix])
+ AC_DEFINE(KDELIBSUFF, [""], Suffix for lib directories)
+ else
+ if test "$libdir" = '${exec_prefix}/lib'; then
+ libdir="$libdir${kdelibsuff}"
+ AC_SUBST([libdir], ["$libdir"]) dnl ugly hack for lib64 platforms
+ fi
+ AC_DEFINE_UNQUOTED(KDELIBSUFF, ["${kdelibsuff}"], Suffix for lib directories)
+ AC_MSG_RESULT([using lib directory suffix $kdelibsuff])
+ fi
+])
+
+AC_DEFUN([KDE_CHECK_TYPES],
+[ AC_CHECK_SIZEOF(int, 4)dnl
+ AC_CHECK_SIZEOF(short)dnl
+ AC_CHECK_SIZEOF(long, 4)dnl
+ AC_CHECK_SIZEOF(char *, 4)dnl
+])dnl
+
+dnl Not used - kept for compat only?
+AC_DEFUN([KDE_DO_IT_ALL],
+[
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+AM_INIT_AUTOMAKE($1, $2)
+AM_DISABLE_LIBRARIES
+AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+AC_CHECK_COMPILERS
+KDE_PROG_LIBTOOL
+AM_KDE_WITH_NLS
+AC_PATH_KDE
+])
+
+AC_DEFUN([AC_CHECK_RPATH],
+[
+AC_MSG_CHECKING(for rpath)
+AC_ARG_ENABLE(rpath,
+ AC_HELP_STRING([--disable-rpath],[do not use the rpath feature of ld]),
+ USE_RPATH=$enableval, USE_RPATH=yes)
+
+if test -z "$KDE_RPATH" && test "$USE_RPATH" = "yes"; then
+
+ KDE_RPATH="-R \$(libdir)"
+
+ if test "$kde_libraries" != "$libdir"; then
+ KDE_RPATH="$KDE_RPATH -R \$(kde_libraries)"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_RPATH="$KDE_RPATH -R \$(qt_libraries)"
+ fi
+ dnl $x_libraries is set to /usr/lib in case
+ if test -n "$X_LDFLAGS"; then
+ X_RPATH="-R \$(x_libraries)"
+ KDE_RPATH="$KDE_RPATH $X_RPATH"
+ fi
+ if test -n "$KDE_EXTRA_RPATH"; then
+ KDE_RPATH="$KDE_RPATH \$(KDE_EXTRA_RPATH)"
+ fi
+fi
+AC_SUBST(KDE_EXTRA_RPATH)
+AC_SUBST(KDE_RPATH)
+AC_SUBST(X_RPATH)
+AC_MSG_RESULT($USE_RPATH)
+])
+
+dnl Check for the type of the third argument of getsockname
+AC_DEFUN([AC_CHECK_SOCKLEN_T],
+[
+ AC_MSG_CHECKING(for socklen_t)
+ AC_CACHE_VAL(kde_cv_socklen_t,
+ [
+ AC_LANG_PUSH(C++)
+ kde_cv_socklen_t=no
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ socklen_t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t=yes
+ kde_cv_socklen_t_equiv=socklen_t
+ ])
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t)
+ if test $kde_cv_socklen_t = no; then
+ AC_MSG_CHECKING([for socklen_t equivalent for socket functions])
+ AC_CACHE_VAL(kde_cv_socklen_t_equiv,
+ [
+ kde_cv_socklen_t_equiv=int
+ AC_LANG_PUSH(C++)
+ for t in int size_t unsigned long "unsigned long"; do
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ $t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t_equiv="$t"
+ break
+ ])
+ done
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t_equiv)
+ fi
+ AC_DEFINE_UNQUOTED(kde_socklen_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined])
+ AC_DEFINE_UNQUOTED(ksize_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined (deprecated, use kde_socklen_t)])
+])
+
+dnl This is a merge of some macros out of the gettext aclocal.m4
+dnl since we don't need anything, I took the things we need
+dnl the copyright for them is:
+dnl >
+dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+dnl This Makefile.in 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 This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+dnl >
+dnl for this file it is relicensed under LGPL
+
+AC_DEFUN([AM_KDE_WITH_NLS],
+ [
+ dnl If we use NLS figure out what method
+
+ AM_PATH_PROG_WITH_TEST_KDE(MSGFMT, msgfmt,
+ [test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"], msgfmt)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then
+ AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; ignore it])
+ GMSGFMT=":"
+ fi
+ MSGFMT=$GMSGFMT
+ AC_SUBST(GMSGFMT)
+ AC_SUBST(MSGFMT)
+
+ AM_PATH_PROG_WITH_TEST_KDE(XGETTEXT, xgettext,
+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+
+ dnl Test whether we really found GNU xgettext.
+ if test "$XGETTEXT" != ":"; then
+ dnl If it is no GNU xgettext we define it as : so that the
+ dnl Makefiles still can work.
+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+ : ;
+ else
+ AC_MSG_RESULT(
+ [found xgettext programs is not GNU xgettext; ignore it])
+ XGETTEXT=":"
+ fi
+ fi
+ AC_SUBST(XGETTEXT)
+
+ ])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <[email protected]>, 1996.
+
+# serial 1
+# Stephan Kulow: I appended a _KDE against name conflicts
+
+dnl AM_PATH_PROG_WITH_TEST_KDE(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST_KDE],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ /*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test -n "[$]$1"; then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <[email protected]>, 1995.
+
+# serial 1
+
+AC_DEFUN([AM_LC_MESSAGES],
+ [if test $ac_cv_header_locale_h = yes; then
+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+ if test $am_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your locale.h file contains LC_MESSAGES])
+ fi
+ fi])
+
+dnl From Jim Meyering.
+dnl FIXME: migrate into libit.
+
+AC_DEFUN([AM_FUNC_OBSTACK],
+[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack,
+ [AC_TRY_LINK([#include "obstack.h"],
+ [struct obstack *mem;obstack_free(mem,(char *) 0)],
+ am_cv_func_obstack=yes,
+ am_cv_func_obstack=no)])
+ if test $am_cv_func_obstack = yes; then
+ AC_DEFINE(HAVE_OBSTACK)
+ else
+ LIBOBJS="$LIBOBJS obstack.o"
+ fi
+])
+
+dnl From Jim Meyering. Use this if you use the GNU error.[ch].
+dnl FIXME: Migrate into libit
+
+AC_DEFUN([AM_FUNC_ERROR_AT_LINE],
+[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line,
+ [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");],
+ am_cv_lib_error_at_line=yes,
+ am_cv_lib_error_at_line=no)])
+ if test $am_cv_lib_error_at_line = no; then
+ LIBOBJS="$LIBOBJS error.o"
+ fi
+ AC_SUBST(LIBOBJS)dnl
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <[email protected]>, 1995.
+
+# serial 1
+# Stephan Kulow: I put a KDE in it to avoid name conflicts
+
+AC_DEFUN([AM_KDE_GNU_GETTEXT],
+ [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([AM_KDE_WITH_NLS])dnl
+ AC_CHECK_HEADERS([limits.h locale.h nl_types.h string.h values.h alloca.h])
+ AC_CHECK_FUNCS([getcwd munmap putenv setlocale strchr strcasecmp \
+__argz_count __argz_stringify __argz_next])
+
+ AC_MSG_CHECKING(for stpcpy)
+ AC_CACHE_VAL(kde_cv_func_stpcpy,
+ [
+ kde_safe_cxxflags=$CXXFLAGS
+ CXXFLAGS="-Werror"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+ #include <string.h>
+ ],
+ [
+ char buffer[200];
+ stpcpy(buffer, buffer);
+ ],
+ kde_cv_func_stpcpy=yes,
+ kde_cv_func_stpcpy=no)
+ AC_LANG_RESTORE
+ CXXFLAGS=$kde_safe_cxxflags
+ ])
+ AC_MSG_RESULT($kde_cv_func_stpcpy)
+ if eval "test \"`echo $kde_cv_func_stpcpy`\" = yes"; then
+ AC_DEFINE(HAVE_STPCPY, 1, [Define if you have stpcpy])
+ fi
+
+ AM_LC_MESSAGES
+
+ if test "x$CATOBJEXT" != "x"; then
+ if test "x$ALL_LINGUAS" = "x"; then
+ LINGUAS=
+ else
+ AC_MSG_CHECKING(for catalogs to be installed)
+ NEW_LINGUAS=
+ for lang in ${LINGUAS=$ALL_LINGUAS}; do
+ case "$ALL_LINGUAS" in
+ *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+ esac
+ done
+ LINGUAS=$NEW_LINGUAS
+ AC_MSG_RESULT($LINGUAS)
+ fi
+
+ dnl Construct list of names of catalog files to be constructed.
+ if test -n "$LINGUAS"; then
+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+ fi
+ fi
+
+ ])
+
+AC_DEFUN([AC_HAVE_XPM],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$XPM_LDFLAGS" && XPM_LDFLAGS=
+ test -z "$XPM_INCLUDE" && XPM_INCLUDE=
+
+ AC_ARG_WITH(xpm,AC_HELP_STRING([--without-xpm],[disable color pixmap XPM tests]),
+ xpm_test=$withval, xpm_test="yes")
+ if test "x$xpm_test" = xno; then
+ ac_cv_have_xpm=no
+ else
+ AC_MSG_CHECKING(for XPM)
+ AC_CACHE_VAL(ac_cv_have_xpm,
+ [
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm -lX11 -lXext $LIBZ $LIBSOCKET"
+ else
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm $LIBZ $LIBSOCKET"
+ fi
+ CFLAGS="$CFLAGS $X_INCLUDES $USER_INCLUDES"
+ test -n "$XPM_INCLUDE" && CFLAGS="-I$XPM_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <X11/xpm.h>],[],
+ ac_cv_have_xpm="yes",ac_cv_have_xpm="no")
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ ])dnl
+
+ if test "$ac_cv_have_xpm" = no; then
+ AC_MSG_RESULT(no)
+ XPM_LDFLAGS=""
+ XPMINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_XPM, 1, [Define if you have XPM support])
+ if test "$XPM_LDFLAGS" = ""; then
+ XPMLIB='-lXpm $(LIB_X11)'
+ else
+ XPMLIB="-L$XPM_LDFLAGS -lXpm "'$(LIB_X11)'
+ fi
+ if test "$XPM_INCLUDE" = ""; then
+ XPMINC=""
+ else
+ XPMINC="-I$XPM_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ AC_SUBST(XPMINC)
+ AC_SUBST(XPMLIB)
+])
+
+AC_DEFUN([AC_HAVE_DPMS],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$DPMS_LDFLAGS" && DPMS_LDFLAGS=
+ test -z "$DPMS_INCLUDE" && DPMS_INCLUDE=
+ DPMS_LIB=
+
+ AC_ARG_WITH(dpms,AC_HELP_STRING([--without-dpms],[disable DPMS power saving]),
+ dpms_test=$withval, dpms_test="yes")
+ if test "x$dpms_test" = xno; then
+ ac_cv_have_dpms=no
+ else
+ AC_MSG_CHECKING(for DPMS)
+ dnl Note: ac_cv_have_dpms can be no, yes, or -lXdpms.
+ dnl 'yes' means DPMS_LIB="", '-lXdpms' means DPMS_LIB="-lXdpms".
+ AC_CACHE_VAL(ac_cv_have_dpms,
+ [
+ if test "x$kde_use_qt_emb" = "xyes" || test "x$kde_use_qt_mac" = "xyes"; then
+ AC_MSG_RESULT(no)
+ ac_cv_have_dpms="no"
+ else
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ ac_save_libs="$LIBS"
+ LDFLAGS="$LDFLAGS $DPMS_LDFLAGS $all_libraries"
+ LIBS="-lX11 -lXext $LIBSOCKET"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ ac_cv_have_dpms="yes", [
+ LIBS="-lXdpms $LIBS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ [
+ ac_cv_have_dpms="-lXdpms"
+ ],ac_cv_have_dpms="no")
+ ])
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ LIBS="$ac_save_libs"
+ fi
+ ])dnl
+
+ if test "$ac_cv_have_dpms" = no; then
+ AC_MSG_RESULT(no)
+ DPMS_LDFLAGS=""
+ DPMSINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_DPMS, 1, [Define if you have DPMS support])
+ if test "$ac_cv_have_dpms" = "-lXdpms"; then
+ DPMS_LIB="-lXdpms"
+ fi
+ if test "$DPMS_LDFLAGS" = ""; then
+ DPMSLIB="$DPMS_LIB "'$(LIB_X11)'
+ else
+ DPMSLIB="$DPMS_LDFLAGS $DPMS_LIB "'$(LIB_X11)'
+ fi
+ if test "$DPMS_INCLUDE" = ""; then
+ DPMSINC=""
+ else
+ DPMSINC="-I$DPMS_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ ac_save_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AH_TEMPLATE(HAVE_DPMSCAPABLE_PROTO,
+ [Define if you have the DPMSCapable prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSCapable,
+ AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ AH_TEMPLATE(HAVE_DPMSINFO_PROTO,
+ [Define if you have the DPMSInfo prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSInfo,
+ AC_DEFINE(HAVE_DPMSINFO_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ CFLAGS="$ac_save_cflags"
+ AC_SUBST(DPMSINC)
+ AC_SUBST(DPMSLIB)
+])
+
+AC_DEFUN([AC_HAVE_GL],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$GL_LDFLAGS" && GL_LDFLAGS=
+ test -z "$GL_INCLUDE" && GL_INCLUDE=
+
+ AC_ARG_WITH(gl,AC_HELP_STRING([--without-gl],[disable 3D GL modes]),
+ gl_test=$withval, gl_test="yes")
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ # GL and Qt Embedded is a no-go for now.
+ ac_cv_have_gl=no
+ elif test "x$gl_test" = xno; then
+ ac_cv_have_gl=no
+ else
+ AC_MSG_CHECKING(for GL)
+ AC_CACHE_VAL(ac_cv_have_gl,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_ldflags=$LDFLAGS
+ ac_save_cxxflags=$CXXFLAGS
+ ac_save_libs=$LIBS
+ LDFLAGS="$LDFLAGS $GL_LDFLAGS $X_LDFLAGS $all_libraries"
+ LIBS="$LIBS -lGL -lGLU"
+ test "x$kde_use_qt_mac" != xyes && test "x$kde_use_qt_emb" != xyes && LIBS="$LIBS -lX11"
+ LIBS="$LIBS $LIB_XEXT -lm $LIBSOCKET"
+ CXXFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$GL_INCLUDE" && CFLAGS="-I$GL_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <GL/gl.h>
+#include <GL/glu.h>
+], [],
+ ac_cv_have_gl="yes", ac_cv_have_gl="no")
+ AC_LANG_RESTORE
+ LDFLAGS=$ac_save_ldflags
+ CXXFLAGS=$ac_save_cxxflags
+ LIBS=$ac_save_libs
+ ])dnl
+
+ if test "$ac_cv_have_gl" = "no"; then
+ AC_MSG_RESULT(no)
+ GL_LDFLAGS=""
+ GLINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_GL, 1, [Defines if you have GL (Mesa, OpenGL, ...)])
+ if test "$GL_LDFLAGS" = ""; then
+ GLLIB='-lGLU -lGL $(LIB_X11)'
+ else
+ GLLIB="$GL_LDFLAGS -lGLU -lGL "'$(LIB_X11)'
+ fi
+ if test "$GL_INCLUDE" = ""; then
+ GLINC=""
+ else
+ GLINC="-I$GL_INCLUDE"
+ fi
+ AC_MSG_RESULT($ac_cv_have_gl)
+ $1
+ fi
+ fi
+ AC_SUBST(GLINC)
+ AC_SUBST(GLLIB)
+])
+
+
+ dnl shadow password and PAM magic - maintained by [email protected]
+
+AC_DEFUN([KDE_PAM], [
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+
+ want_pam=
+ AC_ARG_WITH(pam,
+ AC_HELP_STRING([--with-pam[=ARG]],[enable support for PAM: ARG=[yes|no|service name]]),
+ [ if test "x$withval" = "xyes"; then
+ want_pam=yes
+ pam_service=kde
+ elif test "x$withval" = "xno"; then
+ want_pam=no
+ else
+ want_pam=yes
+ pam_service=$withval
+ fi
+ ], [ pam_service=kde ])
+
+ use_pam=
+ PAMLIBS=
+ if test "x$want_pam" != xno; then
+ AC_CHECK_LIB(pam, pam_start, [
+ AC_CHECK_HEADER(security/pam_appl.h,
+ [ pam_header=security/pam_appl.h ],
+ [ AC_CHECK_HEADER(pam/pam_appl.h,
+ [ pam_header=pam/pam_appl.h ],
+ [
+ AC_MSG_WARN([PAM detected, but no headers found!
+Make sure you have the necessary development packages installed.])
+ ]
+ )
+ ]
+ )
+ ], , $LIBDL)
+ if test -z "$pam_header"; then
+ if test "x$want_pam" = xyes; then
+ AC_MSG_ERROR([--with-pam was specified, but cannot compile with PAM!])
+ fi
+ else
+ AC_DEFINE(HAVE_PAM, 1, [Defines if you have PAM (Pluggable Authentication Modules)])
+ PAMLIBS="$PAM_MISC_LIB -lpam $LIBDL"
+ use_pam=yes
+
+ dnl darwin claims to be something special
+ if test "$pam_header" = "pam/pam_appl.h"; then
+ AC_DEFINE(HAVE_PAM_PAM_APPL_H, 1, [Define if your PAM headers are in pam/ instead of security/])
+ fi
+
+ dnl test whether struct pam_message is const (Linux) or not (Sun)
+ AC_MSG_CHECKING(for const pam_message)
+ AC_EGREP_HEADER([struct pam_message], $pam_header,
+ [ AC_EGREP_HEADER([const struct pam_message], $pam_header,
+ [AC_MSG_RESULT([const: Linux-type PAM])],
+ [AC_MSG_RESULT([nonconst: Sun-type PAM])
+ AC_DEFINE(PAM_MESSAGE_NONCONST, 1, [Define if your PAM support takes non-const arguments (Solaris)])]
+ )],
+ [AC_MSG_RESULT([not found - assume const, Linux-type PAM])])
+ fi
+ fi
+
+ AC_SUBST(PAMLIBS)
+])
+
+dnl DEF_PAM_SERVICE(arg name, full name, define name)
+AC_DEFUN([DEF_PAM_SERVICE], [
+ AC_ARG_WITH($1-pam,
+ AC_HELP_STRING([--with-$1-pam=[val]],[override PAM service from --with-pam for $2]),
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE=$withval
+ else
+ AC_MSG_ERROR([Cannot use use --with-$1-pam, as no PAM was detected.
+You may want to enforce it by using --with-pam.])
+ fi
+ ],
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE="$pam_service"
+ fi
+ ])
+ if test -n "$$3_PAM_SERVICE"; then
+ AC_MSG_RESULT([The PAM service used by $2 will be $$3_PAM_SERVICE])
+ AC_DEFINE_UNQUOTED($3_PAM_SERVICE, "$$3_PAM_SERVICE", [The PAM service to be used by $2])
+ fi
+ AC_SUBST($3_PAM_SERVICE)
+])
+
+AC_DEFUN([KDE_SHADOWPASSWD], [
+ AC_REQUIRE([KDE_PAM])
+
+ AC_CHECK_LIB(shadow, getspent,
+ [ LIBSHADOW="-lshadow"
+ ac_use_shadow=yes
+ ],
+ [ dnl for UnixWare
+ AC_CHECK_LIB(gen, getspent,
+ [ LIBGEN="-lgen"
+ ac_use_shadow=yes
+ ],
+ [ AC_CHECK_FUNC(getspent,
+ [ ac_use_shadow=yes ],
+ [ ac_use_shadow=no ])
+ ])
+ ])
+ AC_SUBST(LIBSHADOW)
+ AC_SUBST(LIBGEN)
+
+ AC_MSG_CHECKING([for shadow passwords])
+
+ AC_ARG_WITH(shadow,
+ AC_HELP_STRING([--with-shadow],[If you want shadow password support]),
+ [ if test "x$withval" != "xno"; then
+ use_shadow=yes
+ else
+ use_shadow=no
+ fi
+ ], [
+ use_shadow="$ac_use_shadow"
+ ])
+
+ if test "x$use_shadow" = xyes; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SHADOW, 1, [Define if you use shadow passwords])
+ else
+ AC_MSG_RESULT(no)
+ LIBSHADOW=
+ LIBGEN=
+ fi
+
+ dnl finally make the relevant binaries setuid root, if we have shadow passwds.
+ dnl this still applies, if we could use it indirectly through pam.
+ if test "x$use_shadow" = xyes ||
+ ( test "x$use_pam" = xyes && test "x$ac_use_shadow" = xyes ); then
+ case $host in
+ *-*-freebsd* | *-*-netbsd* | *-*-openbsd*)
+ SETUIDFLAGS="-m 4755 -o root";;
+ *)
+ SETUIDFLAGS="-m 4755";;
+ esac
+ fi
+ AC_SUBST(SETUIDFLAGS)
+
+])
+
+AC_DEFUN([KDE_PASSWDLIBS], [
+ AC_REQUIRE([KDE_MISC_TESTS]) dnl for LIBCRYPT
+ AC_REQUIRE([KDE_PAM])
+ AC_REQUIRE([KDE_SHADOWPASSWD])
+
+ if test "x$use_pam" = "xyes"; then
+ PASSWDLIBS="$PAMLIBS"
+ else
+ PASSWDLIBS="$LIBCRYPT $LIBSHADOW $LIBGEN"
+ fi
+
+ dnl FreeBSD uses a shadow-like setup, where /etc/passwd holds the users, but
+ dnl /etc/master.passwd holds the actual passwords. /etc/master.passwd requires
+ dnl root to read, so kcheckpass needs to be root (even when using pam, since pam
+ dnl may need to read /etc/master.passwd).
+ case $host in
+ *-*-freebsd*)
+ SETUIDFLAGS="-m 4755 -o root"
+ ;;
+ *)
+ ;;
+ esac
+
+ AC_SUBST(PASSWDLIBS)
+])
+
+AC_DEFUN([KDE_CHECK_LIBDL],
+[
+AC_CHECK_LIB(dl, dlopen, [
+LIBDL="-ldl"
+ac_cv_have_dlfcn=yes
+])
+
+AC_CHECK_LIB(dld, shl_unload, [
+LIBDL="-ldld"
+ac_cv_have_shload=yes
+])
+
+AC_SUBST(LIBDL)
+])
+
+AC_DEFUN([KDE_CHECK_DLOPEN],
+[
+KDE_CHECK_LIBDL
+AC_CHECK_HEADERS(dlfcn.h dl.h)
+if test "$ac_cv_header_dlfcn_h" = "no"; then
+ ac_cv_have_dlfcn=no
+fi
+
+if test "$ac_cv_header_dl_h" = "no"; then
+ ac_cv_have_shload=no
+fi
+
+dnl XXX why change enable_dlopen? its already set by autoconf's AC_ARG_ENABLE
+dnl (MM)
+AC_ARG_ENABLE(dlopen,
+AC_HELP_STRING([--disable-dlopen],[link statically [default=no]]),
+enable_dlopen=$enableval,
+enable_dlopen=yes)
+
+# override the user's opinion, if we know it better ;)
+if test "$ac_cv_have_dlfcn" = "no" && test "$ac_cv_have_shload" = "no"; then
+ enable_dlopen=no
+fi
+
+if test "$ac_cv_have_dlfcn" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_DLFCN, 1, [Define if you have dlfcn])
+fi
+
+if test "$ac_cv_have_shload" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_SHLOAD, 1, [Define if you have shload])
+fi
+
+if test "$enable_dlopen" = no ; then
+ test -n "$1" && eval $1
+else
+ test -n "$2" && eval $2
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_DYNAMIC_LOADING],
+[
+KDE_CHECK_DLOPEN(libtool_enable_shared=yes, libtool_enable_static=no)
+KDE_PROG_LIBTOOL
+AC_MSG_CHECKING([dynamic loading])
+eval "`egrep '^build_libtool_libs=' libtool`"
+if test "$build_libtool_libs" = "yes" && test "$enable_dlopen" = "yes"; then
+ dynamic_loading=yes
+ AC_DEFINE_UNQUOTED(HAVE_DYNAMIC_LOADING)
+else
+ dynamic_loading=no
+fi
+AC_MSG_RESULT($dynamic_loading)
+if test "$dynamic_loading" = "yes"; then
+ $1
+else
+ $2
+fi
+])
+
+AC_DEFUN([KDE_ADD_INCLUDES],
+[
+if test -z "$1"; then
+ test_include="Pix.h"
+else
+ test_include="$1"
+fi
+
+AC_MSG_CHECKING([for libg++ ($test_include)])
+
+AC_CACHE_VAL(kde_cv_libgpp_includes,
+[
+kde_cv_libgpp_includes=no
+
+ for ac_dir in \
+ \
+ /usr/include/g++ \
+ /usr/include \
+ /usr/unsupported/include \
+ /opt/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$test_include"; then
+ kde_cv_libgpp_includes=$ac_dir
+ break
+ fi
+ done
+])
+
+AC_MSG_RESULT($kde_cv_libgpp_includes)
+if test "$kde_cv_libgpp_includes" != "no"; then
+ all_includes="-I$kde_cv_libgpp_includes $all_includes $USER_INCLUDES"
+fi
+])
+])
+
+AC_DEFUN([KDE_CHECK_LIBPTHREAD],
+[
+ dnl This code is here specifically to handle the
+ dnl various flavors of threading library on FreeBSD
+ dnl 4-, 5-, and 6-, and the (weird) rules around it.
+ dnl There may be an environment PTHREAD_LIBS that
+ dnl specifies what to use; otherwise, search for it.
+ dnl -pthread is special cased and unsets LIBPTHREAD
+ dnl below if found.
+ LIBPTHREAD=""
+
+ if test -n "$PTHREAD_LIBS"; then
+ if test "x$PTHREAD_LIBS" = "x-pthread" ; then
+ LIBPTHREAD="PTHREAD"
+ else
+ PTHREAD_LIBS_save="$PTHREAD_LIBS"
+ PTHREAD_LIBS=`echo "$PTHREAD_LIBS_save" | sed -e 's,^-l,,g'`
+ AC_MSG_CHECKING([for pthread_create in $PTHREAD_LIBS])
+ KDE_CHECK_LIB($PTHREAD_LIBS, pthread_create, [
+ LIBPTHREAD="$PTHREAD_LIBS_save"])
+ PTHREAD_LIBS="$PTHREAD_LIBS_save"
+ fi
+ fi
+
+ dnl Is this test really needed, in the face of the Tru64 test below?
+ if test -z "$LIBPTHREAD"; then
+ AC_CHECK_LIB(pthread, pthread_create, [LIBPTHREAD="-lpthread"])
+ fi
+
+ dnl This is a special Tru64 check, see BR 76171 issue #18.
+ if test -z "$LIBPTHREAD" ; then
+ AC_MSG_CHECKING([for pthread_create in -lpthread])
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS -lpthread"
+ AC_TRY_LINK([#include <pthread.h>],[(void)pthread_create(0,0,0,0);],[
+ AC_MSG_RESULT(yes)
+ LIBPTHREAD="-lpthread"],[
+ AC_MSG_RESULT(no)])
+ LIBS=$kde_safe_libs
+ fi
+
+ dnl Un-special-case for FreeBSD.
+ if test "x$LIBPTHREAD" = "xPTHREAD" ; then
+ LIBPTHREAD=""
+ fi
+
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_PTHREAD_OPTION],
+[
+ USE_THREADS=""
+ if test -z "$LIBPTHREAD"; then
+ KDE_CHECK_COMPILER_FLAG(pthread, [USE_THREADS="-D_THREAD_SAFE -pthread"])
+ fi
+
+ AH_VERBATIM(__svr_define, [
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+])
+ case $host_os in
+ solaris*)
+ KDE_CHECK_COMPILER_FLAG(mt, [USE_THREADS="-mt"])
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_SOLARIS -DSVR4"
+ ;;
+ freebsd*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE $PTHREAD_CFLAGS"
+ ;;
+ aix*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
+ LIBPTHREAD="$LIBPTHREAD -lc_r"
+ ;;
+ linux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="$CXXFLAGS --thread_safe"
+ NOOPT_CXXFLAGS="$NOOPT_CXXFLAGS --thread_safe"
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ AC_SUBST(USE_THREADS)
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_THREADING],
+[
+ AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+ AC_REQUIRE([KDE_CHECK_PTHREAD_OPTION])
+ dnl default is yes if libpthread is found and no if no libpthread is available
+ if test -z "$LIBPTHREAD"; then
+ if test -z "$USE_THREADS"; then
+ kde_check_threading_default=no
+ else
+ kde_check_threading_default=yes
+ fi
+ else
+ kde_check_threading_default=yes
+ fi
+ AC_ARG_ENABLE(threading,AC_HELP_STRING([--disable-threading],[disables threading even if libpthread found]),
+ kde_use_threading=$enableval, kde_use_threading=$kde_check_threading_default)
+ if test "x$kde_use_threading" = "xyes"; then
+ AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define if you have a working libpthread (will enable threaded code)])
+ fi
+])
+
+AC_DEFUN([KDE_TRY_LINK_PYTHON],
+[
+if test "$kde_python_link_found" = no; then
+
+if test "$1" = normal; then
+ AC_MSG_CHECKING(if a Python application links)
+else
+ AC_MSG_CHECKING(if Python depends on $2)
+fi
+
+AC_CACHE_VAL(kde_cv_try_link_python_$1,
+[
+kde_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $PYTHONINC"
+kde_save_libs="$LIBS"
+LIBS="$LIBS $LIBPYTHON $2 $LIBDL $LIBSOCKET"
+kde_save_ldflags="$LDFLAGS"
+LDFLAGS="$LDFLAGS $PYTHONLIB"
+
+AC_TRY_LINK(
+[
+#include <Python.h>
+],[
+ PySys_SetArgv(1, 0);
+],
+ [kde_cv_try_link_python_$1=yes],
+ [kde_cv_try_link_python_$1=no]
+)
+CFLAGS="$kde_save_cflags"
+LIBS="$kde_save_libs"
+LDFLAGS="$kde_save_ldflags"
+])
+
+if test "$kde_cv_try_link_python_$1" = "yes"; then
+ AC_MSG_RESULT(yes)
+ kde_python_link_found=yes
+ if test ! "$1" = normal; then
+ LIBPYTHON="$LIBPYTHON $2"
+ fi
+ $3
+else
+ AC_MSG_RESULT(no)
+ $4
+fi
+
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_DIR],
+[
+AC_MSG_CHECKING([for Python directory])
+
+AC_CACHE_VAL(kde_cv_pythondir,
+[
+ if test -z "$PYTHONDIR"; then
+ kde_cv_pythondir=/usr/local
+ else
+ kde_cv_pythondir="$PYTHONDIR"
+ fi
+])
+
+AC_ARG_WITH(pythondir,
+AC_HELP_STRING([--with-pythondir=pythondir],[use python installed in pythondir]),
+[
+ ac_python_dir=$withval
+], ac_python_dir=$kde_cv_pythondir
+)
+
+AC_MSG_RESULT($ac_python_dir)
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_INTERN],
+[
+AC_REQUIRE([KDE_CHECK_LIBDL])
+AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+AC_REQUIRE([KDE_CHECK_PYTHON_DIR])
+
+if test -z "$1"; then
+ version="1.5"
+else
+ version="$1"
+fi
+
+AC_MSG_CHECKING([for Python$version])
+
+python_incdirs="$ac_python_dir/include /usr/include /usr/local/include/ $kde_extra_includes"
+AC_FIND_FILE(Python.h, $python_incdirs, python_incdir)
+if test ! -r $python_incdir/Python.h; then
+ AC_FIND_FILE(python$version/Python.h, $python_incdirs, python_incdir)
+ python_incdir=$python_incdir/python$version
+ if test ! -r $python_incdir/Python.h; then
+ python_incdir=no
+ fi
+fi
+
+PYTHONINC=-I$python_incdir
+
+python_libdirs="$ac_python_dir/lib$kdelibsuff /usr/lib$kdelibsuff /usr/local /usr/lib$kdelibsuff $kde_extra_libs"
+AC_FIND_FILE(libpython$version.so, $python_libdirs, python_libdir)
+if test ! -r $python_libdir/libpython$version.so; then
+ AC_FIND_FILE(libpython$version.a, $python_libdirs, python_libdir)
+ if test ! -r $python_libdir/libpython$version.a; then
+ AC_FIND_FILE(python$version/config/libpython$version.a, $python_libdirs, python_libdir)
+ python_libdir=$python_libdir/python$version/config
+ if test ! -r $python_libdir/libpython$version.a; then
+ python_libdir=no
+ fi
+ fi
+fi
+
+PYTHONLIB=-L$python_libdir
+kde_orig_LIBPYTHON=$LIBPYTHON
+if test -z "$LIBPYTHON"; then
+ LIBPYTHON=-lpython$version
+fi
+
+AC_FIND_FILE(python$version/copy.py, $python_libdirs, python_moddir)
+python_moddir=$python_moddir/python$version
+if test ! -r $python_moddir/copy.py; then
+ python_moddir=no
+fi
+
+PYTHONMODDIR=$python_moddir
+
+AC_MSG_RESULT(header $python_incdir library $python_libdir modules $python_moddir)
+
+if test x$python_incdir = xno || test x$python_libdir = xno || test x$python_moddir = xno; then
+ LIBPYTHON=$kde_orig_LIBPYTHON
+ test "x$PYTHONLIB" = "x-Lno" && PYTHONLIB=""
+ test "x$PYTHONINC" = "x-Ino" && PYTHONINC=""
+ $2
+else
+ dnl Note: this test is very weak
+ kde_python_link_found=no
+ KDE_TRY_LINK_PYTHON(normal)
+ KDE_TRY_LINK_PYTHON(m, -lm)
+ KDE_TRY_LINK_PYTHON(pthread, $LIBPTHREAD)
+ KDE_TRY_LINK_PYTHON(tcl, -ltcl)
+ KDE_TRY_LINK_PYTHON(db2, -ldb2)
+ KDE_TRY_LINK_PYTHON(m_and_thread, [$LIBPTHREAD -lm])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_util, [$LIBPTHREAD -lm -lutil])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db3, [$LIBPTHREAD -lm -ldb-3 -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_db3, [$LIBPTHREAD -ldb-3])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db, [$LIBPTHREAD -lm -ldb -ltermcap -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_dl, [$LIBPTHREAD $LIBDL -lutil -lreadline -lncurses -lm])
+ KDE_TRY_LINK_PYTHON(pthread_and_panel_curses, [$LIBPTHREAD $LIBDL -lm -lpanel -lcurses])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db_special, [$LIBPTHREAD -lm -ldb -lutil], [],
+ [AC_MSG_WARN([it seems, Python depends on another library.
+ Please set LIBPYTHON to '-lpython$version -lotherlib' before calling configure to fix this
+ and contact the authors to let them know about this problem])
+ ])
+
+ LIBPYTHON="$LIBPYTHON $LIBDL $LIBSOCKET"
+ AC_SUBST(PYTHONINC)
+ AC_SUBST(PYTHONLIB)
+ AC_SUBST(LIBPYTHON)
+ AC_SUBST(PYTHONMODDIR)
+ AC_DEFINE(HAVE_PYTHON, 1, [Define if you have the development files for python])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_PYTHON],
+[
+ KDE_CHECK_PYTHON_INTERN("2.4",
+ [KDE_CHECK_PYTHON_INTERN("2.3",
+ [KDE_CHECK_PYTHON_INTERN("2.2",
+ [KDE_CHECK_PYTHON_INTERN("2.1",
+ [KDE_CHECK_PYTHON_INTERN("2.0",
+ [KDE_CHECK_PYTHON_INTERN($1, $2) ])
+ ])
+ ])
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_STL],
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`"
+
+ AC_MSG_CHECKING([if C++ programs can be compiled])
+ AC_CACHE_VAL(kde_cv_stl_works,
+ [
+ AC_TRY_COMPILE([
+#include <string>
+using namespace std;
+],[
+ string astring="Hallo Welt.";
+ astring.erase(0, 6); // now astring is "Welt"
+ return 0;
+], kde_cv_stl_works=yes,
+ kde_cv_stl_works=no)
+])
+
+ AC_MSG_RESULT($kde_cv_stl_works)
+
+ if test "$kde_cv_stl_works" = "yes"; then
+ # back compatible
+ AC_DEFINE_UNQUOTED(HAVE_SGI_STL, 1, [Define if you have a STL implementation by SGI])
+ else
+ AC_MSG_ERROR([Your Installation isn't able to compile simple C++ programs.
+Check config.log for details - if you're using a Linux distribution you might miss
+a package named similar to libstdc++-dev.])
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([AC_FIND_QIMGIO],
+ [AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for qimgio])
+AC_CACHE_VAL(ac_cv_lib_qimgio,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+ac_save_CXXFLAGS="$CXXFLAGS"
+LIBS="$all_libraries -lqimgio -lpng -lz $LIBJPEG $LIBQT"
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+AC_TRY_RUN(dnl
+[
+#include <qimageio.h>
+#include <qstring.h>
+int main() {
+ QString t = "hallo";
+ t.fill('t');
+ qInitImageIO();
+}
+],
+ ac_cv_lib_qimgio=yes,
+ ac_cv_lib_qimgio=no,
+ ac_cv_lib_qimgio=no)
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+if eval "test \"`echo $ac_cv_lib_qimgio`\" = yes"; then
+ LIBQIMGIO="-lqimgio -lpng -lz $LIBJPEG"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_QIMGIO, 1, [Define if you have the Qt extension qimgio available])
+ AC_SUBST(LIBQIMGIO)
+else
+ AC_MSG_RESULT(not found)
+fi
+])
+
+AC_DEFUN([AM_DISABLE_LIBRARIES],
+[
+ AC_PROVIDE([AM_ENABLE_STATIC])
+ AC_PROVIDE([AM_ENABLE_SHARED])
+ enable_static=no
+ enable_shared=yes
+])
+
+
+AC_DEFUN([AC_CHECK_UTMP_FILE],
+[
+ AC_MSG_CHECKING([for utmp file])
+
+ AC_CACHE_VAL(kde_cv_utmp_file,
+ [
+ kde_cv_utmp_file=no
+
+ for ac_file in \
+ \
+ /var/run/utmp \
+ /var/adm/utmp \
+ /etc/utmp \
+ ; \
+ do
+ if test -r "$ac_file"; then
+ kde_cv_utmp_file=$ac_file
+ break
+ fi
+ done
+ ])
+
+ if test "$kde_cv_utmp_file" != "no"; then
+ AC_DEFINE_UNQUOTED(UTMP, "$kde_cv_utmp_file", [Define the file for utmp entries])
+ $1
+ AC_MSG_RESULT($kde_cv_utmp_file)
+ else
+ $2
+ AC_MSG_RESULT([non found])
+ fi
+])
+
+
+AC_DEFUN([KDE_CREATE_SUBDIRSLIST],
+[
+
+DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin"
+TOPSUBDIRS=""
+
+if test ! -s $srcdir/subdirs; then
+ dnl Note: Makefile.common creates subdirs, so this is just a fallback
+ files=`cd $srcdir && ls -1`
+ dirs=`for i in $files; do if test -d $i; then echo $i; fi; done`
+ for i in $dirs; do
+ echo $i >> $srcdir/subdirs
+ done
+fi
+
+ac_topsubdirs=
+if test -s $srcdir/inst-apps; then
+ ac_topsubdirs="`cat $srcdir/inst-apps`"
+elif test -s $srcdir/subdirs; then
+ ac_topsubdirs="`cat $srcdir/subdirs`"
+fi
+
+for i in $ac_topsubdirs; do
+ AC_MSG_CHECKING([if $i should be compiled])
+ if test -d $srcdir/$i; then
+ install_it="yes"
+ for j in $DO_NOT_COMPILE; do
+ if test $i = $j; then
+ install_it="no"
+ fi
+ done
+ else
+ install_it="no"
+ fi
+ AC_MSG_RESULT($install_it)
+ vari=`echo $i | sed -e 's,[[-+.@]],_,g'`
+ if test $install_it = "yes"; then
+ TOPSUBDIRS="$TOPSUBDIRS $i"
+ eval "$vari""_SUBDIR_included=yes"
+ else
+ eval "$vari""_SUBDIR_included=no"
+ fi
+done
+
+AC_SUBST(TOPSUBDIRS)
+])
+
+AC_DEFUN([KDE_CHECK_NAMESPACES],
+[
+AC_MSG_CHECKING(whether C++ compiler supports namespaces)
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE([
+],
+[
+namespace Foo {
+ extern int i;
+ namespace Bar {
+ extern int i;
+ }
+}
+
+int Foo::i = 0;
+int Foo::Bar::i = 1;
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_NAMESPACES)
+], [
+AC_MSG_RESULT(no)
+])
+AC_LANG_RESTORE
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for S_ISSOCK macro. Doesn't exist on Unix SCO. [email protected]
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_S_ISSOCK],
+[
+AC_MSG_CHECKING(for S_ISSOCK)
+AC_CACHE_VAL(ac_cv_have_s_issock,
+[
+AC_TRY_LINK(
+[
+#include <sys/stat.h>
+],
+[
+struct stat buff;
+int b = S_ISSOCK( buff.st_mode );
+],
+ac_cv_have_s_issock=yes,
+ac_cv_have_s_issock=no)
+])
+AC_MSG_RESULT($ac_cv_have_s_issock)
+if test "$ac_cv_have_s_issock" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_S_ISSOCK, 1, [Define if sys/stat.h declares S_ISSOCK.])
+fi
+
+AH_VERBATIM(_ISSOCK,
+[
+#ifndef HAVE_S_ISSOCK
+#define HAVE_S_ISSOCK
+#define S_ISSOCK(mode) (1==0)
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for MAXPATHLEN macro, defines KDEMAXPATHLEN. [email protected]
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_KDEMAXPATHLEN],
+[
+AC_MSG_CHECKING(for MAXPATHLEN)
+AC_CACHE_VAL(ac_cv_maxpathlen,
+[
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <sys/param.h>
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+KDE_HELLO MAXPATHLEN
+
+EOF
+
+ac_try="$ac_cpp conftest.$ac_ext 2>/dev/null | grep '^KDE_HELLO' >conftest.out"
+
+if AC_TRY_EVAL(ac_try) && test -s conftest.out; then
+ ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out`
+else
+ ac_cv_maxpathlen=1024
+fi
+
+rm conftest.*
+
+])
+AC_MSG_RESULT($ac_cv_maxpathlen)
+AC_DEFINE_UNQUOTED(KDEMAXPATHLEN,$ac_cv_maxpathlen, [Define a safe value for MAXPATHLEN] )
+])
+
+AC_DEFUN([KDE_CHECK_HEADER],
+[
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADER([$1], [$2], [$3], [$4])
+ AC_LANG_RESTORE
+ CPPFLAGS=$kde_safe_cppflags
+])
+
+AC_DEFUN([KDE_CHECK_HEADERS],
+[
+ AH_CHECK_HEADERS([$1])
+ AC_LANG_SAVE
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADERS([$1], [$2], [$3], [$4])
+ CPPFLAGS=$kde_safe_cppflags
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_FAST_CONFIGURE],
+[
+ dnl makes configure fast (needs perl)
+ AC_ARG_ENABLE(fast-perl, AC_HELP_STRING([--disable-fast-perl],[disable fast Makefile generation (needs perl)]),
+ with_fast_perl=$enableval, with_fast_perl=yes)
+])
+
+AC_DEFUN([KDE_CONF_FILES],
+[
+ val=
+ if test -f $srcdir/configure.files ; then
+ val=`sed -e 's%^%\$(top_srcdir)/%' $srcdir/configure.files`
+ fi
+ CONF_FILES=
+ if test -n "$val" ; then
+ for i in $val ; do
+ CONF_FILES="$CONF_FILES $i"
+ done
+ fi
+ AC_SUBST(CONF_FILES)
+])dnl
+
+dnl This sets the prefix, for arts and kdelibs
+dnl Do NOT use in any other module.
+dnl It only looks at --prefix, KDEDIR and falls back to /usr/local/kde
+AC_DEFUN([KDE_SET_PREFIX_CORE],
+[
+ unset CDPATH
+ dnl make $KDEDIR the default for the installation
+ AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+
+ if test "x$prefix" = "xNONE"; then
+ prefix=$ac_default_prefix
+ ac_configure_args="$ac_configure_args --prefix=$prefix"
+ fi
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ kde_libs_prefix='$(prefix)'
+ kde_libs_htmldir='$(kde_htmldir)'
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+
+AC_DEFUN([KDE_SET_PREFIX],
+[
+ unset CDPATH
+ dnl We can't give real code to that macro, only a value.
+ dnl It only matters for --help, since we set the prefix in this function anyway.
+ AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix})
+
+ KDE_SET_DEFAULT_BINDIRS
+ if test "x$prefix" = "xNONE"; then
+ dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ else
+ dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH
+ kde_save_PATH="$PATH"
+ PATH="$exec_prefix/bin:$prefix/bin:$PATH"
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ PATH="$kde_save_PATH"
+ fi
+
+ kde_libs_prefix=`$KDECONFIG --prefix`
+ if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then
+ AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs.
+ This means it has been moved since you installed it.
+ This won't work. Please recompile kdelibs for the new prefix.
+ ])
+ fi
+ kde_libs_htmldir=`$KDECONFIG --install html --expandvars`
+ kde_libs_suffix=`$KDECONFIG --libsuffix` || kde_libs_suffix=auto
+
+ AC_MSG_CHECKING([where to install])
+ if test "x$prefix" = "xNONE"; then
+ prefix=$kde_libs_prefix
+ AC_MSG_RESULT([$prefix (as returned by kde-config)])
+ else
+ dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different
+ given_prefix=$prefix
+ AC_MSG_RESULT([$prefix (as requested)])
+ fi
+
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ AC_SUBST(KDECONFIG)
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+pushdef([AC_PROG_INSTALL],
+[
+ dnl our own version, testing for a -p flag
+ popdef([AC_PROG_INSTALL])
+ dnl as AC_PROG_INSTALL works as it works we first have
+ dnl to save if the user didn't specify INSTALL, as the
+ dnl autoconf one overwrites INSTALL and we have no chance to find
+ dnl out afterwards
+ test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL
+ test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM
+ test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT
+ AC_PROG_INSTALL
+
+ if test -z "$kde_save_INSTALL_given" ; then
+ # OK, user hasn't given any INSTALL, autoconf found one for us
+ # now we test, if it supports the -p flag
+ AC_MSG_CHECKING(for -p flag to install)
+ rm -f confinst.$$.* > /dev/null 2>&1
+ echo "Testtest" > confinst.$$.orig
+ ac_res=no
+ if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then
+ if test -f confinst.$$.new ; then
+ # OK, -p seems to do no harm to install
+ INSTALL="${INSTALL} -p"
+ ac_res=yes
+ fi
+ fi
+ rm -f confinst.$$.*
+ AC_MSG_RESULT($ac_res)
+ fi
+ dnl the following tries to resolve some signs and wonders coming up
+ dnl with different autoconf/automake versions
+ dnl e.g.:
+ dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s
+ dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS)
+ dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s
+ dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has
+ dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the
+ dnl install-@DIR@PROGRAMS targets to explicitly use that flag
+ dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as
+ dnl INSTALL_SCRIPT, which breaks with automake <= 1.4
+ dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure
+ dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from
+ dnl automake (due to broken Makefile.am or whatever) to install programs,
+ dnl and so does not see the -s flag in automake > 1.4
+ dnl to clean up that mess we:
+ dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG
+ dnl which cleans KDE's program with automake > 1.4;
+ dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems
+ dnl with automake<=1.4
+ dnl note that dues to this sometimes two '-s' flags are used (if KDE
+ dnl properly uses install-@DIR@PROGRAMS, but I don't care
+ dnl
+ dnl And to all this comes, that I even can't write in comments variable
+ dnl names used by automake, because it is so stupid to think I wanted to
+ dnl _use_ them, therefor I have written A_M_... instead of AM_
+ dnl hmm, I wanted to say something ... ahh yes: Arghhh.
+
+ if test -z "$kde_save_INSTALL_PROGRAM_given" ; then
+ INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)'
+ fi
+ if test -z "$kde_save_INSTALL_SCRIPT_given" ; then
+ INSTALL_SCRIPT='${INSTALL}'
+ fi
+])dnl
+
+AC_DEFUN([KDE_LANG_CPLUSPLUS],
+[AC_LANG_CPLUSPLUS
+ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC'
+pushdef([AC_LANG_CPLUSPLUS], [popdef([AC_LANG_CPLUSPLUS]) KDE_LANG_CPLUSPLUS])
+])
+
+pushdef([AC_LANG_CPLUSPLUS],
+[popdef([AC_LANG_CPLUSPLUS])
+KDE_LANG_CPLUSPLUS
+])
+
+AC_DEFUN([KDE_CHECK_LONG_LONG],
+[
+AC_MSG_CHECKING(for long long)
+AC_CACHE_VAL(kde_cv_c_long_long,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_LINK([], [
+ long long foo = 0;
+ foo = foo+1;
+ ],
+ kde_cv_c_long_long=yes, kde_cv_c_long_long=no)
+ AC_LANG_RESTORE
+])
+AC_MSG_RESULT($kde_cv_c_long_long)
+if test "$kde_cv_c_long_long" = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have long long as datatype])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_LIB],
+[
+ kde_save_LDFLAGS="$LDFLAGS"
+ dnl AC_CHECK_LIB modifies LIBS, so save it here
+ kde_save_LIBS="$LIBS"
+ LDFLAGS="$LDFLAGS $all_libraries"
+ case $host_os in
+ aix*) LDFLAGS="-brtl $LDFLAGS"
+ test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS"
+ ;;
+ esac
+ AC_CHECK_LIB($1, $2, $3, $4, $5)
+ LDFLAGS="$kde_save_LDFLAGS"
+ LIBS="$kde_save_LIBS"
+])
+
+AC_DEFUN([KDE_JAVA_PREFIX],
+[
+ dir=`dirname "$1"`
+ base=`basename "$1"`
+ list=`ls -1 $dir 2> /dev/null`
+ for entry in $list; do
+ if test -d $dir/$entry/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/bin"
+ ;;
+ esac
+ elif test -d $dir/$entry/jre/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/jre/bin"
+ ;;
+ esac
+ fi
+ done
+])
+
+dnl KDE_CHEC_JAVA_DIR(onlyjre)
+AC_DEFUN([KDE_CHECK_JAVA_DIR],
+[
+
+AC_ARG_WITH(java,
+AC_HELP_STRING([--with-java=javadir],[use java installed in javadir, --without-java disables]),
+[ ac_java_dir=$withval
+], ac_java_dir=""
+)
+
+AC_MSG_CHECKING([for Java])
+
+dnl at this point ac_java_dir is either a dir, 'no' to disable, or '' to say look in $PATH
+if test "x$ac_java_dir" = "xno"; then
+ kde_java_bindir=no
+ kde_java_includedir=no
+ kde_java_libjvmdir=no
+ kde_java_libgcjdir=no
+ kde_java_libhpidir=no
+else
+ if test "x$ac_java_dir" = "x"; then
+
+
+ dnl No option set -> collect list of candidate paths
+ if test -n "$JAVA_HOME"; then
+ KDE_JAVA_PREFIX($JAVA_HOME)
+ fi
+ KDE_JAVA_PREFIX(/usr/j2se)
+ KDE_JAVA_PREFIX(/usr/lib/j2se)
+ KDE_JAVA_PREFIX(/usr/j*dk*)
+ KDE_JAVA_PREFIX(/usr/lib/j*dk*)
+ KDE_JAVA_PREFIX(/opt/j*sdk*)
+ KDE_JAVA_PREFIX(/usr/lib/java*)
+ KDE_JAVA_PREFIX(/usr/java*)
+ KDE_JAVA_PREFIX(/usr/java/j*dk*)
+ KDE_JAVA_PREFIX(/usr/java/j*re*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava*)
+ KDE_JAVA_PREFIX(/opt/java*)
+
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ for dir in $PATH; do
+ if test -d "$dir"; then
+ javadirs="$javadirs $dir"
+ fi
+ done
+ IFS=$kde_save_IFS
+ jredirs=
+
+ dnl Now javadirs contains a list of paths that exist, all ending with bin/
+ for dir in $javadirs; do
+ dnl Check for the java executable
+ if test -x "$dir/java"; then
+ dnl And also check for a libjvm.so somewhere under there
+ dnl Since we have to go to the parent dir, /usr/bin is excluded, /usr is too big.
+ if test "$dir" != "/usr/bin"; then
+ libjvmdir=`find $dir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ if test ! -f $libjvmdir/libjvm.so; then continue; fi
+ jredirs="$jredirs $dir"
+ fi
+ fi
+ done
+
+ dnl Now jredirs contains a reduced list, of paths where both java and ../**/libjvm.so was found
+ JAVAC=
+ JAVA=
+ kde_java_bindir=no
+ for dir in $jredirs; do
+ JAVA="$dir/java"
+ kde_java_bindir=$dir
+ if test -x "$dir/javac"; then
+ JAVAC="$dir/javac"
+ break
+ fi
+ done
+
+ if test -n "$JAVAC"; then
+ dnl this substitution might not work - well, we test for jni.h below
+ kde_java_includedir=`echo $JAVAC | sed -e 's,bin/javac$,include/,'`
+ else
+ kde_java_includedir=no
+ fi
+ else
+ dnl config option set
+ kde_java_bindir=$ac_java_dir/bin
+ if test -x $ac_java_dir/bin/java && test ! -x $ac_java_dir/bin/javac; then
+ kde_java_includedir=no
+ else
+ kde_java_includedir=$ac_java_dir/include
+ fi
+ fi
+fi
+
+dnl At this point kde_java_bindir and kde_java_includedir are either set or "no"
+if test "x$kde_java_bindir" != "xno"; then
+
+ dnl Look for libjvm.so
+ kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ dnl Look for libgcj.so
+ kde_java_libgcjdir=`find $kde_java_bindir/.. -name libgcj.so | sed 's,libgcj.so,,'|head -n 1`
+ dnl Look for libhpi.so and avoid green threads
+ kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1`
+
+ dnl Now check everything's fine under there
+ dnl the include dir is our flag for having the JDK
+ if test -d "$kde_java_includedir"; then
+ if test ! -x "$kde_java_bindir/javac"; then
+ AC_MSG_ERROR([javac not found under $kde_java_bindir - it seems you passed a wrong --with-java.])
+ fi
+ if test ! -x "$kde_java_bindir/javah"; then
+ AC_MSG_ERROR([javah not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -x "$kde_java_bindir/jar"; then
+ AC_MSG_ERROR([jar not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -r "$kde_java_includedir/jni.h"; then
+ AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.])
+ fi
+
+ jni_includes="-I$kde_java_includedir"
+ dnl Strange thing, jni.h requires jni_md.h which is under genunix here..
+ dnl and under linux here..
+
+ dnl not needed for gcj
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux"
+ test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris"
+ test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix"
+ fi
+
+ else
+ JAVAC=
+ jni_includes=
+ fi
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libjvmdir/libjvm.so"; then
+ AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.])
+ fi
+ else
+ if test ! -r "$kde_java_libgcjdir/libgcj.so"; then
+ AC_MSG_ERROR([libgcj.so not found under $kde_java_libgcjdir. Use --without-java.])
+ fi
+ fi
+
+ if test ! -x "$kde_java_bindir/java"; then
+ AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+
+ dnl not needed for gcj compile
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libhpidir/libhpi.so"; then
+ AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.])
+ fi
+ fi
+
+ if test -n "$jni_includes"; then
+ dnl Check for JNI version
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_cxxflags_safe="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $all_includes $jni_includes"
+
+ AC_TRY_COMPILE([
+ #include <jni.h>
+ ],
+ [
+ #ifndef JNI_VERSION_1_2
+ Syntax Error
+ #endif
+ ],[ kde_jni_works=yes ],
+ [ kde_jni_works=no ])
+
+ if test $kde_jni_works = no; then
+ AC_MSG_ERROR([Incorrect version of $kde_java_includedir/jni.h.
+ You need to have Java Development Kit (JDK) version 1.2.
+
+ Use --with-java to specify another location.
+ Use --without-java to configure without java support.
+ Or download a newer JDK and try again.
+ See e.g. http://java.sun.com/products/jdk/1.2 ])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ AC_LANG_RESTORE
+
+ dnl All tests ok, inform and subst the variables
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ if test "x$kde_java_libgcjdir" = "x"; then
+ JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi"
+ else
+ JVMLIBS="-L$kde_java_libgcjdir -lgcj"
+ fi
+ AC_MSG_RESULT([java JDK in $kde_java_bindir])
+
+ else
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([java JRE in $kde_java_bindir])
+ fi
+elif test -d "/Library/Java/Home"; then
+ kde_java_bindir="/Library/Java/Home/bin"
+ jni_includes="-I/Library/Java/Home/include"
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ JVMLIBS="-Wl,-framework,JavaVM"
+
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([Apple Java Framework])
+else
+ AC_MSG_RESULT([none found])
+fi
+
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAH)
+AC_SUBST(JAR)
+AC_SUBST(JVMLIBS)
+AC_SUBST(jni_includes)
+
+# for backward compat
+kde_cv_java_includedir=$kde_java_includedir
+kde_cv_java_bindir=$kde_java_bindir
+])
+
+dnl this is a redefinition of autoconf 2.5x's AC_FOREACH.
+dnl When the argument list becomes big, as in KDE for AC_OUTPUT in
+dnl big packages, m4_foreach is dog-slow. So use our own version of
+m4_define([mm_foreach],
+[m4_pushdef([$1])_mm_foreach($@)m4_popdef([$1])])
+m4_define([mm_car], [[$1]])
+m4_define([mm_car2], [[$@]])
+m4_define([_mm_foreach],
+[m4_if(m4_quote($2), [], [],
+ [m4_define([$1], mm_car($2))$3[]_mm_foreach([$1],
+ mm_car2(m4_shift($2)),
+ [$3])])])
+m4_define([AC_FOREACH],
+[mm_foreach([$1], m4_split(m4_normalize([$2])), [$3])])
+
+AC_DEFUN([KDE_NEED_FLEX],
+[
+kde_libs_safe=$LIBS
+LIBS="$LIBS $USER_LDFLAGS"
+AM_PROG_LEX
+LIBS=$kde_libs_safe
+if test -z "$LEXLIB"; then
+ AC_MSG_ERROR([You need to have flex installed.])
+fi
+AC_SUBST(LEXLIB)
+])
+
+AC_DEFUN([AC_PATH_QTOPIA],
+[
+ dnl TODO: use AC_CACHE_VAL
+
+ if test -z "$1"; then
+ qtopia_minver_maj=1
+ qtopia_minver_min=5
+ qtopia_minver_pat=0
+ else
+ qtopia_minver_maj=`echo "$1" | sed -e "s/^\(.*\)\..*\..*$/\1/"`
+ qtopia_minver_min=`echo "$1" | sed -e "s/^.*\.\(.*\)\..*$/\1/"`
+ qtopia_minver_pat=`echo "$1" | sed -e "s/^.*\..*\.\(.*\)$/\1/"`
+ fi
+
+ qtopia_minver="$qtopia_minver_maj$qtopia_minver_min$qtopia_minver_pat"
+ qtopia_minverstr="$qtopia_minver_maj.$qtopia_minver_min.$qtopia_minver_pat"
+
+ AC_REQUIRE([AC_PATH_QT])
+
+ AC_MSG_CHECKING([for Qtopia])
+
+ LIB_QTOPIA="-lqpe"
+ AC_SUBST(LIB_QTOPIA)
+
+ kde_qtopia_dirs="$QPEDIR /opt/Qtopia"
+
+ ac_qtopia_incdir=NO
+
+ AC_ARG_WITH(qtopia-dir,
+ AC_HELP_STRING([--with-qtopia-dir=DIR],[where the root of Qtopia is installed]),
+ [ ac_qtopia_incdir="$withval"/include] )
+
+ qtopia_incdirs=""
+ for dir in $kde_qtopia_dirs; do
+ qtopia_incdirs="$qtopia_incdirs $dir/include"
+ done
+
+ if test ! "$ac_qtopia_incdir" = "NO"; then
+ qtopia_incdirs="$ac_qtopia_incdir $qtopia_incdirs"
+ fi
+
+ qtopia_incdir=""
+ AC_FIND_FILE(qpe/qpeapplication.h, $qtopia_incdirs, qtopia_incdir)
+ ac_qtopia_incdir="$qtopia_incdir"
+
+ if test -z "$qtopia_incdir"; then
+ AC_MSG_ERROR([Cannot find Qtopia headers. Please check your installation.])
+ fi
+
+ qtopia_ver_maj=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION "\(.*\)\..*\..*".*,\1,p'`;
+ qtopia_ver_min=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\.\(.*\)\..*".*,\1,p'`;
+ qtopia_ver_pat=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\..*\.\(.*\)".*,\1,p'`;
+
+ qtopia_ver="$qtopia_ver_maj$qtopia_ver_min$qtopia_ver_pat"
+ qtopia_verstr="$qtopia_ver_maj.$qtopia_ver_min.$qtopia_ver_pat"
+ if test "$qtopia_ver" -lt "$qtopia_minver"; then
+ AC_MSG_ERROR([found Qtopia version $qtopia_verstr but version $qtopia_minverstr
+is required.])
+ fi
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ ac_cxxflags_safe="$CXXFLAGS"
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ CXXFLAGS="$CXXFLAGS -I$qtopia_incdir $all_includes"
+ LDFLAGS="$LDFLAGS $QT_LDFLAGS $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+ LIBS="$LIBS $LIB_QTOPIA $LIBQT"
+
+ cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qpe/qpeapplication.h>
+#include <qpe/version.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication app( argc, argv );
+ return 0;
+}
+EOF
+
+ if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+ else
+ rm -f conftest*
+ AC_MSG_ERROR([Cannot link small Qtopia Application. For more details look at
+the end of config.log])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ AC_LANG_RESTORE
+
+ QTOPIA_INCLUDES="-I$qtopia_incdir"
+ AC_SUBST(QTOPIA_INCLUDES)
+
+ AC_MSG_RESULT([found version $qtopia_verstr with headers at $qtopia_incdir])
+])
+
+
+AC_DEFUN([KDE_INIT_DOXYGEN],
+[
+AC_MSG_CHECKING([for Qt docs])
+kde_qtdir=
+if test "${with_qt_dir+set}" = set; then
+ kde_qtdir="$with_qt_dir"
+fi
+
+AC_FIND_FILE(qsql.html, [ $kde_qtdir/doc/html $QTDIR/doc/html /usr/share/doc/packages/qt3/html /usr/lib/qt/doc /usr/lib/qt3/doc /usr/lib/qt3/doc/html /usr/doc/qt3/html /usr/doc/qt3 /usr/share/doc/qt3-doc /usr/share/qt3/doc/html /usr/X11R6/share/doc/qt/html ], QTDOCDIR)
+AC_MSG_RESULT($QTDOCDIR)
+
+AC_SUBST(QTDOCDIR)
+
+KDE_FIND_PATH(dot, DOT, [], [])
+if test -n "$DOT"; then
+ KDE_HAVE_DOT="YES"
+else
+ KDE_HAVE_DOT="NO"
+fi
+AC_SUBST(KDE_HAVE_DOT)
+KDE_FIND_PATH(doxygen, DOXYGEN, [], [])
+AC_SUBST(DOXYGEN)
+
+DOXYGEN_PROJECT_NAME="$1"
+DOXYGEN_PROJECT_NUMBER="$2"
+AC_SUBST(DOXYGEN_PROJECT_NAME)
+AC_SUBST(DOXYGEN_PROJECT_NUMBER)
+
+KDE_HAS_DOXYGEN=no
+if test -n "$DOXYGEN" && test -x "$DOXYGEN" && test -f $QTDOCDIR/qsql.html; then
+ KDE_HAS_DOXYGEN=yes
+fi
+AC_SUBST(KDE_HAS_DOXYGEN)
+
+])
+
+
+AC_DEFUN([AC_FIND_BZIP2],
+[
+AC_MSG_CHECKING([for bzDecompress in libbz2])
+AC_CACHE_VAL(ac_cv_lib_bzip2,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lbz2 $LIBSOCKET"
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#define BZ_NO_STDIO
+#include<bzlib.h>
+],
+ [ bz_stream s; (void) bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2='-lbz2'",
+ eval "ac_cv_lib_bzip2=no")
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+AC_MSG_RESULT($ac_cv_lib_bzip2)
+
+if test ! "$ac_cv_lib_bzip2" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2"
+ AC_SUBST(LIBBZ2)
+
+else
+
+ cxx_shared_flag=
+ ld_shared_flag=
+ KDE_CHECK_COMPILER_FLAG(shared, [
+ ld_shared_flag="-shared"
+ ])
+ KDE_CHECK_COMPILER_FLAG(fPIC, [
+ cxx_shared_flag="-fPIC"
+ ])
+
+ AC_MSG_CHECKING([for BZ2_bzDecompress in (shared) libbz2])
+ AC_CACHE_VAL(ac_cv_lib_bzip2_prefix,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_LIBS="$LIBS"
+ LIBS="$all_libraries $USER_LDFLAGS $ld_shared_flag -lbz2 $LIBSOCKET"
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CFLAGS $cxx_shared_flag $all_includes $USER_INCLUDES"
+
+ AC_TRY_LINK(dnl
+ [
+ #define BZ_NO_STDIO
+ #include<bzlib.h>
+ ],
+ [ bz_stream s; (void) BZ2_bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2_prefix='-lbz2'",
+ eval "ac_cv_lib_bzip2_prefix=no")
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+
+ AC_MSG_RESULT($ac_cv_lib_bzip2_prefix)
+
+ if test ! "$ac_cv_lib_bzip2_prefix" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2_prefix"
+ AC_SUBST(LIBBZ2)
+
+ AC_DEFINE(NEED_BZ2_PREFIX, 1, [Define if the libbz2 functions need the BZ2_ prefix])
+ dnl else, we just ignore this
+ fi
+
+fi
+AM_CONDITIONAL(include_BZIP2, test -n "$BZIP2DIR")
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the SSL headers and libraries.
+dnl $(SSL_LDFLAGS) will be -Lsslliblocation (if needed)
+dnl and $(SSL_INCLUDES) will be -Isslhdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([KDE_CHECK_SSL],
+[
+LIBSSL="-lssl -lcrypto"
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+ac_ssl_includes=NO ac_ssl_libraries=NO
+ssl_libraries=""
+ssl_includes=""
+AC_ARG_WITH(ssl-dir,
+ AC_HELP_STRING([--with-ssl-dir=DIR],[where the root of OpenSSL is installed]),
+ [ ac_ssl_includes="$withval"/include
+ ac_ssl_libraries="$withval"/lib$kdelibsuff
+ ])
+
+want_ssl=yes
+AC_ARG_WITH(ssl,
+ AC_HELP_STRING([--without-ssl],[disable SSL checks]),
+ [want_ssl=$withval])
+
+if test $want_ssl = yes; then
+
+AC_MSG_CHECKING(for OpenSSL)
+
+AC_CACHE_VAL(ac_cv_have_ssl,
+[#try to guess OpenSSL locations
+
+ ssl_incdirs="/usr/include /usr/local/include /usr/ssl/include /usr/local/ssl/include $prefix/include $kde_extra_includes"
+ ssl_incdirs="$ac_ssl_includes $ssl_incdirs"
+ AC_FIND_FILE(openssl/ssl.h, $ssl_incdirs, ssl_incdir)
+ ac_ssl_includes="$ssl_incdir"
+
+ ssl_libdirs="/usr/lib$kdelibsuff /usr/local/lib$kdelibsuff /usr/ssl/lib$kdelibsuff /usr/local/ssl/lib$kdelibsuff $libdir $prefix/lib$kdelibsuff $exec_prefix/lib$kdelibsuff $kde_extra_libs"
+ if test ! "$ac_ssl_libraries" = "NO"; then
+ ssl_libdirs="$ac_ssl_libraries $ssl_libdirs"
+ fi
+
+ test=NONE
+ ssl_libdir=NONE
+ for dir in $ssl_libdirs; do
+ try="ls -1 $dir/libssl*"
+ if test=`eval $try 2> /dev/null`; then ssl_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+
+ ac_ssl_libraries="$ssl_libdir"
+
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ LDFLAGS="$LDFLAGS -L$ssl_libdir $all_libraries"
+ LIBS="$LIBS $LIBSSL -lRSAglue -lrsaref"
+
+ AC_TRY_LINK(,void RSAPrivateEncrypt(void);RSAPrivateEncrypt();,
+ ac_ssl_rsaref="yes"
+ ,
+ ac_ssl_rsaref="no"
+ )
+
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ if test "$ac_ssl_includes" = NO || test "$ac_ssl_libraries" = NO; then
+ have_ssl=no
+ else
+ have_ssl=yes;
+ fi
+
+ ])
+
+ eval "$ac_cv_have_ssl"
+
+ AC_MSG_RESULT([libraries $ac_ssl_libraries, headers $ac_ssl_includes])
+
+ AC_MSG_CHECKING([whether OpenSSL uses rsaref])
+ AC_MSG_RESULT($ac_ssl_rsaref)
+
+ AC_MSG_CHECKING([for easter eggs])
+ AC_MSG_RESULT([none found])
+
+else
+ have_ssl=no
+fi
+
+if test "$have_ssl" = yes; then
+ AC_MSG_CHECKING(for OpenSSL version)
+ dnl Check for SSL version
+ AC_CACHE_VAL(ac_cv_ssl_version,
+ [
+
+ cat >conftest.$ac_ext <<EOF
+#include <openssl/opensslv.h>
+#include <stdio.h>
+ int main() {
+
+#ifndef OPENSSL_VERSION_NUMBER
+ printf("ssl_version=\\"error\\"\n");
+#else
+ if (OPENSSL_VERSION_NUMBER < 0x00906000)
+ printf("ssl_version=\\"old\\"\n");
+ else
+ printf("ssl_version=\\"ok\\"\n");
+#endif
+ return (0);
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ if test "$ac_ssl_includes" != "/usr/include"; then
+ CPPFLAGS="$CPPFLAGS -I$ac_ssl_includes"
+ fi
+
+ if AC_TRY_EVAL(ac_link); then
+
+ if eval `./conftest 2>&5`; then
+ if test $ssl_version = error; then
+ AC_MSG_ERROR([$ssl_incdir/openssl/opensslv.h doesn't define OPENSSL_VERSION_NUMBER !])
+ else
+ if test $ssl_version = old; then
+ AC_MSG_WARN([OpenSSL version too old. Upgrade to 0.9.6 at least, see http://www.openssl.org. SSL support disabled.])
+ have_ssl=no
+ fi
+ fi
+ ac_cv_ssl_version="ssl_version=$ssl_version"
+ else
+ AC_MSG_ERROR([Your system couldn't run a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <[email protected]>, attaching your config.log])
+ fi
+
+ else
+ AC_MSG_ERROR([Your system couldn't link a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <[email protected]>, attaching your config.log])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ ])
+
+ eval "$ac_cv_ssl_version"
+ AC_MSG_RESULT($ssl_version)
+fi
+
+if test "$have_ssl" != yes; then
+ LIBSSL="";
+else
+ AC_DEFINE(HAVE_SSL, 1, [If we are going to use OpenSSL])
+ ac_cv_have_ssl="have_ssl=yes \
+ ac_ssl_includes=$ac_ssl_includes ac_ssl_libraries=$ac_ssl_libraries ac_ssl_rsaref=$ac_ssl_rsaref"
+
+
+ ssl_libraries="$ac_ssl_libraries"
+ ssl_includes="$ac_ssl_includes"
+
+ if test "$ac_ssl_rsaref" = yes; then
+ LIBSSL="-lssl -lcrypto -lRSAglue -lrsaref"
+ fi
+
+ if test $ssl_version = "old"; then
+ AC_DEFINE(HAVE_OLD_SSL_API, 1, [Define if you have OpenSSL < 0.9.6])
+ fi
+fi
+
+SSL_INCLUDES=
+
+if test "$ssl_includes" = "/usr/include"; then
+ if test -f /usr/kerberos/include/krb5.h; then
+ SSL_INCLUDES="-I/usr/kerberos/include"
+ fi
+elif test "$ssl_includes" != "/usr/local/include" && test -n "$ssl_includes"; then
+ SSL_INCLUDES="-I$ssl_includes"
+fi
+
+if test "$ssl_libraries" = "/usr/lib" || test "$ssl_libraries" = "/usr/local/lib" || test -z "$ssl_libraries" || test "$ssl_libraries" = "NONE"; then
+ SSL_LDFLAGS=""
+else
+ SSL_LDFLAGS="-L$ssl_libraries -R$ssl_libraries"
+fi
+
+AC_SUBST(SSL_INCLUDES)
+AC_SUBST(SSL_LDFLAGS)
+AC_SUBST(LIBSSL)
+])
+
+AC_DEFUN([KDE_CHECK_STRLCPY],
+[
+ AC_REQUIRE([AC_CHECK_STRLCAT])
+ AC_REQUIRE([AC_CHECK_STRLCPY])
+ AC_CHECK_SIZEOF(size_t)
+ AC_CHECK_SIZEOF(unsigned long)
+
+ AC_MSG_CHECKING([sizeof size_t == sizeof unsigned long])
+ AC_TRY_COMPILE(,[
+ #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG
+ choke me
+ #endif
+ ],AC_MSG_RESULT([yes]),[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([
+ Apparently on your system our assumption sizeof size_t == sizeof unsigned long
+ does not apply. Please mail [email protected] with a description of your system!
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_BINUTILS],
+[
+ AC_MSG_CHECKING([if ld supports unversioned version maps])
+
+ kde_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+ echo "{ local: extern \"C++\" { foo }; };" > conftest.map
+ AC_TRY_LINK([int foo;],
+[
+#ifdef __INTEL_COMPILER
+icc apparently does not support libtools version-info and version-script
+at the same time. Dunno where the bug is, but until somebody figured out,
+better disable the optional version scripts.
+#endif
+
+ foo = 42;
+], kde_supports_versionmaps=yes, kde_supports_versionmaps=no)
+ LDFLAGS="$kde_save_LDFLAGS"
+ rm -f conftest.map
+ AM_CONDITIONAL(include_VERSION_SCRIPT,
+ [test "$kde_supports_versionmaps" = "yes" && test "$kde_use_debug_code" = "no"])
+
+ AC_MSG_RESULT($kde_supports_versionmaps)
+])
+
+AC_DEFUN([AM_PROG_OBJC],[
+AC_CHECK_PROGS(OBJC, gcc, gcc)
+test -z "$OBJC" && AC_MSG_ERROR([no acceptable objective-c gcc found in \$PATH])
+if test "x${OBJCFLAGS-unset}" = xunset; then
+ OBJCFLAGS="-g -O2"
+fi
+AC_SUBST(OBJCFLAGS)
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(OBJC)])
+])
+
+AC_DEFUN([KDE_CHECK_PERL],
+[
+ KDE_FIND_PATH(perl, PERL, [$bindir $exec_prefix/bin $prefix/bin], [
+ AC_MSG_ERROR([No Perl found in your $PATH.
+We need perl to generate some code.])
+ ])
+ AC_SUBST(PERL)
+])
+
+AC_DEFUN([KDE_CHECK_LARGEFILE],
+[
+AC_SYS_LARGEFILE
+if test "$ac_cv_sys_file_offset_bits" != no; then
+ CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
+fi
+
+if test "x$ac_cv_sys_large_files" != "xno"; then
+ CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=1"
+fi
+
+])
+
+dnl A small extension to PKG_CHECK_MODULES (defined in pkg.m4.in)
+dnl which allows to search for libs that get installed into the KDE prefix.
+dnl
+dnl Syntax: KDE_PKG_CHECK_MODULES(KSTUFF, libkexif >= 0.2 glib = 1.3.4, action-if, action-not)
+dnl defines KSTUFF_LIBS, KSTUFF_CFLAGS, see pkg-config man page
+dnl also defines KSTUFF_PKG_ERRORS on error
+AC_DEFUN([KDE_PKG_CHECK_MODULES], [
+
+ PKG_CONFIG_PATH="$prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ if test "$prefix" != "$kde_libs_prefix"; then
+ PKG_CONFIG_PATH="$kde_libs_prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ fi
+ export PKG_CONFIG_PATH
+ PKG_CHECK_MODULES([$1],[$2],[$3],[$4])
+])
+
+
+dnl Check for PIE support in the compiler and linker
+AC_DEFUN([KDE_CHECK_PIE_SUPPORT],
+[
+ AC_CACHE_CHECK([for PIE support], kde_cv_val_pie_support,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIE"
+ LDFLAGS="$LDFLAGS -pie"
+
+ AC_TRY_LINK([int foo;], [], [kde_cv_val_pie_support=yes], [kde_cv_val_pie_support=no])
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ])
+
+ AC_MSG_CHECKING(if enabling -pie/fPIE support)
+
+ AC_ARG_ENABLE(pie,
+ AC_HELP_STRING([--enable-pie],[platform supports PIE linking [default=detect]]),
+ [kde_has_pie_support=$enableval],
+ [kde_has_pie_support=detect])
+
+ if test "$kde_has_pie_support" = "detect"; then
+ kde_has_pie_support=$kde_cv_val_pie_support
+ fi
+
+ AC_MSG_RESULT([$kde_has_pie_support])
+
+ KDE_USE_FPIE=""
+ KDE_USE_PIE=""
+
+ AC_SUBST([KDE_USE_FPIE])
+ AC_SUBST([KDE_USE_PIE])
+
+ if test "$kde_has_pie_support" = "yes"; then
+ KDE_USE_FPIE="-fPIE"
+ KDE_USE_PIE="-pie"
+ fi
+])
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_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.
+Xsed='sed -e 1s/^X//'
+[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 avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+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_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+ [AC_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=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])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_AC_SYS_COMPILER
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+AC_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_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$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.
+AC_DEFUN([_LT_LINKER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$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 conftest*
+])# _LT_LINKER_BOILERPLATE
+
+
+# _LT_AC_SYS_LIBPATH_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.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_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.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${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 <<EOF
+[$]*
+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 "$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 &&
+ echo_test_string=`eval $cmd` &&
+ (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.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|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-*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-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ 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_TRY_LINK([],[],[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" ;;
+ *) LD="${LD-ld} -64" ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$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
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$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 conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# 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*)
+ # 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
+ ;;
+ *)
+ # 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.
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+ = "XX$teststring") >/dev/null 2>&1 &&
+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ 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`
+ ;;
+ 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
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# ------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ---------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_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 <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#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
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#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 ());
+
+ exit (status);
+}]
+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_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# ----------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_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*)
+ 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="-dld"],
+ [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="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ 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_AC_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_AC_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
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$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_AC_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 ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_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
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_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
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_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_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; 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
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[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"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+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"
+if test "$GCC" = yes; then
+ 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 ';' >/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.
+ 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
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+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'
+ ;;
+
+aix4* | aix5*)
+ 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<name>.so
+ # instead of lib<name>.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*)
+ 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'
+ ;;
+
+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*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ 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'
+ 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*)
+ # 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}${versuffix}$shared_ext ${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`'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
+ 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
+ ;;
+ freebsd*) # from 4.6 on
+ 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'
+ ;;
+
+interix3*)
+ 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
+ # 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
+
+ # 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)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
+ ;;
+
+netbsdelf*-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
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_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=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
+ ;;
+
+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"
+ ;;
+
+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
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ 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
+ 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'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ 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'
+ ;;
+
+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
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+ if test -z "$LTCFLAGS"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ 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_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 DLLs
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+# set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_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="ifelse([$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 <<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
+
+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
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_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
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+ [AC_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])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])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 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+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
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[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
+aix4* | aix5*)
+ 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'.
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ 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
+ ;;
+
+interix3*)
+ # 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* | netbsdelf*-gnu)
+ 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=unknown
+ ;;
+
+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
+ ;;
+
+solaris*)
+ 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
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ 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
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible 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
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[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_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
+# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
+# (note the single quotes!). If your package is not flat and you're not
+# using automake, define top_builddir and top_srcdir appropriately in
+# the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# and an installed libltdl is not found, it is assumed to be `libltdl'.
+# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and top_srcdir
+# appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ------------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([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
+fi
+])# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# -------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[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_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF
+
+# 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
+ ;;
+
+aix4* | aix5*)
+ 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])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_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_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ 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
+ 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]].*|aix5*)
+ 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_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ 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
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_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
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_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 "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_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_AC_SYS_LIBPATH_AIX
+ _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes ; then
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_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'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_AC_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) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_AC_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 $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_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_AC_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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ 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_AC_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_AC_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 $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc*)
+ # 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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_AC_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'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_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 $templist | $SED "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 $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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::"'
+ ;;
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_AC_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_AC_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_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd='echo'
+ ;;
+ osf3*)
+ 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_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 $templist | $SED "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 $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_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 ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_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 -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_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 $templist | $SED "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 $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_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` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker. We must also pass each convience library through
+ # to the system linker between allextract/defaultextract.
+ # The C++ compiler will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_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_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_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.
+ # 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.
+ # So that behaviour is only enabled if SCOABSPATH is set to a
+ # non-empty value in the environment. Most likely only useful for
+ # creating official distributions of packages.
+ # This is a hack until libtool officially supports absolute path
+ # names for shared libraries.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+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
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([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.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+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...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+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
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+
+ 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_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_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_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_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_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_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
+ifelse([$1],[CXX],
+[case $host_os in
+interix3*)
+ # 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_AC_TAGVAR(predep_objects,$1)=
+ _LT_AC_TAGVAR(postdep_objects,$1)=
+ _LT_AC_TAGVAR(postdeps,$1)=
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # 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.
+ _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_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_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_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"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+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
+ ;;
+aix4* | aix5*)
+ 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_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_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"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# -------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# 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_AC_SYS_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"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then 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
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # 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
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ SED SHELL STRIP \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <[email protected]>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# 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//"
+
+# 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
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# 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
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# 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
+
+# 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
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# 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
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# 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
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# 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
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $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.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# 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=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# 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
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\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
+EOF
+ ;;
+ esac
+
+ # 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 '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+ if test -f "$ltmain_in"; then
+ test -f Makefile && make "$ltmain"
+ fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# 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]]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+linux* | k*bsd*-gnu)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDGIRSTW]]'
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ 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
+
+# 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
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, 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.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+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 <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+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_AC_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 -f 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
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix3*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # 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*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_AC_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
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc* | ecpc*)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC*)
+ # Portland Group C++ compiler.
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ interix3*)
+ # 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_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | pw32* | os2*)
+ # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # 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_AC_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_AC_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_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_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'
+ ;;
+ linux* | k*bsd*-gnu)
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_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_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # 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.
+ extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ _LT_CC_BASENAME([$compiler])
+ 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
+
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` 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
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<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.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <[email protected]> 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 can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_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_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix3*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_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_AC_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_AC_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'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_AC_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_AC_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' ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ _LT_AC_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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<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.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_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_AC_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
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_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_AC_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_AC_TAGVAR(hardcode_direct, $1)=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
+ 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_AC_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_AC_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]].*|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
+
+ 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_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ 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
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_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
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_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 "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_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_AC_SYS_LIBPATH_AIX
+ _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_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*)
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi[[45]]*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ 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.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ if test "$GCC" = yes ; then
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_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_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_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~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_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}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ wlarc=''
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_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'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine linker options so we
+ # cannot just pass the convience library names through
+ # without $wl, iff we do not link with $LD.
+ # Luckily, gcc supports the same syntax we need for Sun Studio.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ case $wlarc in
+ '')
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ *)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ esac ;;
+ esac
+ _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_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*
+ printf "$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_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# 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. #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_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
+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_MSG_RESULT([$SED])
+])
+
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN([PKG_CHECK_MODULES], [
+ succeeded=no
+
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ if test "$PKG_CONFIG" = "no" ; then
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ AC_MSG_CHECKING(for $2)
+
+ if $PKG_CONFIG --exists "$2" ; then
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+
+ AC_MSG_CHECKING($1_CFLAGS)
+ $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+ AC_MSG_RESULT($$1_CFLAGS)
+
+ AC_MSG_CHECKING($1_LIBS)
+ $1_LIBS=`$PKG_CONFIG --libs "$2"`
+ AC_MSG_RESULT($$1_LIBS)
+ else
+ $1_CFLAGS=""
+ $1_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+ $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ ifelse([$4], ,echo $$1_PKG_ERRORS,)
+ fi
+
+ AC_SUBST($1_CFLAGS)
+ AC_SUBST($1_LIBS)
+ else
+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
+ fi
+ fi
+
+ if test $succeeded = yes; then
+ ifelse([$3], , :, [$3])
+ else
+ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+ fi
+])
+
+
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright 1997, 2000, 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 5
+
+AC_PREREQ(2.52)
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+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])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# 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.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 10
+
+AC_PREREQ([2.54])
+
+# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
+# the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+
+# 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_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+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
+ 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)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+# 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([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
+])
+])
+
+
+# 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_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright 2002 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+
+# 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.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.7.9])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright 2001, 2002 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 2
+
+# _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],
+[AC_FOREACH([_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])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright 1996, 1997, 2000, 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 3
+
+# 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
+# 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)])
+
+# -*- Autoconf -*-
+
+
+# Copyright 1997, 1999, 2000, 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 3
+
+# 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
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# 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
+])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# 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.
+
+# Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_AUX_DIR_EXPAND], [
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# 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="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# -*- Autoconf -*-
+# Copyright (C) 2003 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 1
+
+# 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])])
+
+# serial 5 -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+
+# 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], 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
+ 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
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} 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
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' 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 builds
+ --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])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright 1999, 2000, 2001, 2002 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; 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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # 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 -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //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"])
+])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 2
+
+# 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 done
+.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
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+
+# Copyright 1998, 1999, 2000, 2001, 2002 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# serial 3
+
+AC_PREREQ(2.50)
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright 1996, 1997, 2000, 2001 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+AC_PREREQ([2.52])
+
+# serial 6
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# LIBTAGCOLL2_DEFS([LIBTAGCOLL2_REQS=libtagcoll2])
+# ---------------------------------------
+AC_DEFUN([LIBTAGCOLL2_DEFS],
+[
+ dnl Import libtagcoll data
+ PKG_CHECK_MODULES(LIBTAGCOLL2,m4_default([$1], libtagcoll2))
+ AC_SUBST(LIBTAGCOLL2_CFLAGS)
+ AC_SUBST(LIBTAGCOLL2_LIBS)
+])
+
+# LIBAPT_FRONT_DEFS([LIBAPT_FRONT_REQS=libapt-front])
+# ---------------------------------------
+AC_DEFUN([LIBAPT_FRONT_DEFS],
+[
+ dnl Import libapt-front data
+ PKG_CHECK_MODULES(LIBAPT_FRONT,m4_default([$1], libapt-front))
+ AC_SUBST(LIBAPT_FRONT_CFLAGS)
+ AC_SUBST(LIBAPT_FRONT_LIBS)
+])
+
+# LIBEPT_DEFS([LIBEPT_REQS=libtagcoll2])
+# ---------------------------------------
+AC_DEFUN([LIBEPT_DEFS],
+[
+ dnl Import libtagcoll data
+ PKG_CHECK_MODULES(LIBEPT,m4_default([$1], libept))
+ AC_SUBST(LIBEPT_CFLAGS)
+ AC_SUBST(LIBEPT_LIBS)
+])
+
+# LIBWIBBLE_DEFS([LIBWIBBLE_REQS=libwibble])
+# ---------------------------------------
+AC_DEFUN([LIBWIBBLE_DEFS],
+[
+ dnl Import libtagcoll data
+ PKG_CHECK_MODULES(LIBWIBBLE,m4_default([$1], libwibble))
+ AC_SUBST(LIBWIBBLE_CFLAGS)
+ AC_SUBST(LIBWIBBLE_LIBS)
+])
+
diff --git a/adept/COPYING b/adept/COPYING
new file mode 100644
index 0000000..5ce2405
--- /dev/null
+++ b/adept/COPYING
@@ -0,0 +1,29 @@
+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 [original copyright holder] nor the names of
+ its 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/adept/Makefile.am b/adept/Makefile.am
new file mode 100644
index 0000000..d0531ef
--- /dev/null
+++ b/adept/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = kubuntu_upgrader adept installer manager updater notifier icons batch
diff --git a/adept/NEWS b/adept/NEWS
new file mode 100644
index 0000000..a3dc72a
--- /dev/null
+++ b/adept/NEWS
@@ -0,0 +1,2 @@
+good bye kapture, hello ept
+ept - kde apt frontend based on libapt-front
diff --git a/adept/TODO b/adept/TODO
new file mode 100644
index 0000000..504a439
--- /dev/null
+++ b/adept/TODO
@@ -0,0 +1,33 @@
+the 1.88 milestone:
+* the most "intrusive" changes to ui should be done at this point: the detailed
+ package view and package browsing interface, improvements to the filtering ui
+- make the filter area resize itself to fit the contained filters [done]
+- clean up individual filters (their extended state that is) [done]
+- implement a sidebar for listing available filtering options
+- implement "buckets" for wanted and unwanted tags (these are basically a
+ want/unwant anded tag filters)
+- implement drag&drop from sidebar to buckets and to filter list
+- implement shuffling of items in the filter list by d&d (needs fixes in
+ extendablelist)
+- implement detailed package view
+- implement package browsing (needs thinking)
+
+* basic pinning support in the libraries should be done (the ui will possibly
+ have to wait till beta)
+
+* the ui should be fully i18n'd
+- libapt-front needs to be i18n'd
+- strings in libept and apps need to be wrapped in i18n
+
+* skeleton of the update notifier should be done
+
+* purge and reinstall options in the UI
+- need respective options in libapt-front
+- add actions to context menu
+- think about semantics...
+
+* support for individual deb handling in the libraries (possibly without
+ ui)
+
+* at least basic support for konsole hiding (eventually without "waiting
+ for input" detection)
diff --git a/adept/adept/Makefile.am b/adept/adept/Makefile.am
new file mode 100644
index 0000000..ffec465
--- /dev/null
+++ b/adept/adept/Makefile.am
@@ -0,0 +1,35 @@
+noinst_LTLIBRARIES = libadept.la
+libadept_la_SOURCES = changelog.cpp\
+ acqprogresswidgetui.ui acqprogress.cpp \
+ tagchooser.cpp filtersidebarui.ui filtersidebar.cpp \
+ application.cpp \
+ tagfilterui.ui tagfilter.cpp taglist.cpp \
+ packageinfoui.ui packageinfo.cpp \
+ commitprogressui.ui commitprogress.cpp \
+ progress.cpp \
+ sourceseditorui.ui sourceseditor.cpp \
+ acqprogresswidget.cpp dpkgpm.cpp \
+ dpkgpm-gui.cpp \
+ extendablelist.cpp \
+ desktopentryui.ui desktoplist.cpp \
+ groupeddesktopselector.cpp \
+ packagedetailsui.ui packagedetails.cpp view.cpp \
+ listerextenderui.ui lister.cpp filterlist.cpp \
+ filterwidget.cpp \
+ quickfilterui.ui quickfilter.cpp \
+ statefilterui.ui statefilter.cpp \
+ easytagfilterui.ui easytagfilter.cpp \
+ actor.h threadutils.cpp \
+ installerviewui.ui installerview.cpp
+libadept_la_LDFLAGS = -L/usr/lib/debug $(all_libraries)
+libadept_la_LIBADD = -lapt-front $(LIBTAGCOLL2_LIBS)
+
+acqprogress.cpp: acqprogress.moc
+
+INCLUDES = -I$(srcdir)/.. -I.. $(all_includes) $(LIBEPT_CFLAGS) $(LIBTAGCOLL2_CFLAGS) $(LIBAPT_FRONT_CFLAGS) $(LIBWIBBLE_CFLAGS)
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII -DDEFAULT_KONSOLE_HIDDEN=true
+METASOURCES = AUTO
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/libept.pot
diff --git a/adept/adept/acqprogress.cpp b/adept/adept/acqprogress.cpp
new file mode 100644
index 0000000..4b0643f
--- /dev/null
+++ b/adept/adept/acqprogress.cpp
@@ -0,0 +1,295 @@
+// -*- C++ -*-
+
+#include <qprogressbar.h>
+#include <klistview.h>
+#include <kapplication.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qstyle.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "acqprogress.h"
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire-worker.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/configuration.h>
+
+#include <adept/utils.h>
+
+#include <stdio.h>
+#include <signal.h>
+#include <iostream>
+
+#define _(a...) (a) // XXX
+
+using namespace std;
+
+namespace adept {
+
+AcqStatus::Item::Item (KListView *parent, pkgAcquire::ItemDesc &item, bool hit)
+: KListViewItem( parent )
+{
+ m_pbcol = 0;
+ m_prog = new ItemProgress( 0, 0 );
+ m_prog->setStatus( "waiting" );
+ m_prog->setTotalSteps( 100 );
+ m_item = item;
+ m_id = m_item.Owner->ID;
+ /* if (item.Owner->FileSize > 0)
+ setText( 1, SizeToStr( item.Owner->FileSize ).c_str() + QString( "B" ) ); */
+ setText( 1, u8( item.Description ) );
+ // cerr << "create: id = " << item . Owner -> ID << ", myId = " << m_item . Owner -> ID << endl;
+ if (hit) {
+ m_prog->setStatus( "hit" );
+ } else
+ m_prog->setStatus( "waiting" );
+ // QString (SizeToStr (Itm.Owner -> FileSize) . c_str ()) + QString ("B"),
+ // /* QString (Itm . Owner -> ID) + */ QString (Itm.Description . c_str ()));
+}
+
+AcqStatus::Item::~Item ()
+{
+ delete m_prog;
+}
+
+int AcqStatus::Item::compare (QListViewItem *i, int /*col*/, bool /*ascend*/) const
+{
+ int id1 = m_id;
+ int id2 = ((Item *) i) -> m_id;
+ return (id2 >= id1) - (id2 <= id1);
+}
+
+void AcqStatus::Item::pulse (pkgAcquire::Worker *w)
+{
+ if (w) {
+ if (w->TotalSize)
+ setStatus( "progress", long( double(
+ w -> CurrentSize * 100.0)
+ / double( w->TotalSize ) ) );
+ else
+ setStatus( "downloading", 0 );
+ }
+}
+
+void AcqStatus::Item::setStatus( const std::string &s, int i )
+{
+ m_prog->setStatus( s, i );
+}
+
+void AcqStatus::Item::paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ QColorGroup _cg( cg );
+ QColor c = _cg.text();
+
+ if ( column == m_pbcol ) {
+ const QRect bar = QRect( 0, 0, width, height() );
+ m_prog->resize( width, height() );
+ QPixmap pm = QPixmap::grabWidget( m_prog );
+ // p->fillRect( bar, listView()->paletteBackgroundColor() );
+ p->drawPixmap( bar.x(), bar.y(), pm );
+ } else {
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ _cg.setColor( QColorGroup::Text, c );
+ KListViewItem::paintCell( &_p, _cg, column, width, alignment );
+ p->drawPixmap( 0, 0, pm );
+ }
+}
+
+AcqStatus::Item *AcqStatus::findItem (pkgAcquire::ItemDesc &Itm)
+{
+ if ( Itm.Owner->ID < m_idOffset )
+ return 0;
+ if ( Itm.Owner->ID - m_idOffset >= m_items.size() )
+ return 0;
+ return m_items[ Itm.Owner->ID - m_idOffset ];
+}
+
+AcqStatus::AcqStatus(QWidget *parent, const char *name)
+ : KListView (parent, name), m_idOffset( 0 ), m_continue( true )
+{
+ // m_lastItem = 0;
+ addColumn( i18n( "Progress" ) );
+ addColumn( i18n( "Description" ) );
+ setSorting (1);
+ setColumnWidth (0, 220);
+ setColumnWidth (1, 300);
+ setResizeMode (LastColumn);
+ ID = 0;
+}
+
+void AcqStatus::Done (pkgAcquire::ItemDesc &Itm)
+{
+ Item *i = findItem (Itm);
+ if (i) {
+ i->setStatus( "done" );
+ }
+ emit statusChanged( StWaiting );
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+}
+
+void AcqStatus::clear()
+{
+ KListView::clear();
+ m_idOffset += m_items.size();
+ m_items.clear(); // got deleted by klistview already
+}
+
+void AcqStatus::Start()
+{
+ clear();
+ pkgAcquireStatus::Start();
+ kdDebug() << "AcqStatus::Start ()" << endl;
+ _config -> Set ("APT::Fetcher::Select-Timeout-Usec", 100000);
+ emit statusChanged( StWaiting );
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+}
+
+void AcqStatus::IMSHit(pkgAcquire::ItemDesc &Itm)
+{
+ Itm.Owner->ID = ID++;
+ Item *i = new Item( this, Itm, true );
+ // ensureItemVisible( i );
+ i->setStatus( "hit" );
+ m_items.push_back( i );
+
+ kdDebug() << "imshit called on ID = " << ID - 1 << " i = " << (void *)i << endl;
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+};
+
+void AcqStatus::Fetch(pkgAcquire::ItemDesc &Itm)
+ // an item started to download
+{
+ Update = true;
+ if (Itm.Owner->Complete == true) // XXX?
+ return;
+
+ Itm.Owner->ID = ID++;
+
+ Item *i = new Item( this, Itm );
+ // ensureItemVisible( i );
+ m_items.push_back( i );
+
+ kdDebug() << "fetch called on ID = " << ID - 1 << " i = " << (void *)i << endl;
+ emit statusChanged( StDownloading );
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+};
+
+void AcqStatus::Fail(pkgAcquire::ItemDesc &Itm)
+ // item failed to download
+{
+ kdDebug() << "fail, status = " << Itm.Owner->Status
+ << " ID = " << Itm.Owner->ID << endl;
+ // Ignore certain kinds of transient failures (bad code)
+ if (Itm.Owner->Status == pkgAcquire::Item::StatIdle) {
+ kdDebug() << "fail with StatIdle, ignoring" << endl;
+ return;
+ }
+
+ Item *i = findItem (Itm);
+ kdDebug() << "fail, i = " << i << endl;
+ if (! i)
+ return;
+ if (Itm.Owner->Status == pkgAcquire::Item::StatDone) {
+ i->setStatus( "ignored" );
+ } else {
+ i->setStatus( "error" );
+ }
+
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+};
+
+void AcqStatus::Stop()
+{
+ pkgAcquireStatus::Stop();
+ emit statusChanged( StDone );
+ triggerUpdate ();
+ KApplication::kApplication()->processEvents();
+}
+
+bool AcqStatus::Pulse(pkgAcquire *Owner)
+{
+ pkgAcquireStatus::Pulse(Owner);
+
+ for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
+ I = Owner->WorkerStep(I)) {
+ if (I -> CurrentItem) {
+ Item *i = findItem (* (I -> CurrentItem));
+ if (i)
+ i -> pulse (I);
+ }
+ }
+
+ triggerUpdate ();
+ // repaint ();
+
+ if (TotalBytes > 0)
+ emit totalProgress(
+ long( double(
+ (CurrentBytes +
+ CurrentItems)*100.0)/double(TotalBytes+TotalItems) ) );
+ else
+ emit totalProgress (-1);
+ KApplication::kApplication () -> processEvents ();
+
+ if ( m_continue )
+ return true;
+
+ m_continue = true;
+ return false;
+}
+
+bool AcqStatus::MediaChange(string Media,string Drive)
+{
+ int res = KMessageBox::warningContinueCancel(
+ this, i18n( "Please insert the disc "
+ "labeled '%1' in the drive "
+ "'%2' and press enter" ).arg(
+ u8( Media ) ).arg( u8( Drive ) ),
+ i18n( "Media Change" ) );
+ if ( res == KMessageBox::Cancel )
+ cancel();
+ return true;
+}
+
+void AcqStatus::cancel()
+{
+ m_continue = false;
+}
+
+AcqStatusDialog::AcqStatusDialog (QWidget *parent, const char *name, bool modal)
+ : KDialogBase( parent, name, modal,
+ u8( "progress dialog (FIXME: waiting for headers, done)" ),
+ Ok|Cancel, Cancel, true )
+{
+ m_status = new AcqStatus (this, "");
+ setMainWidget( m_status.data() );
+ enableButton (Ok, false);
+ connect (m_status.data(), SIGNAL (statusChanged (AcqStatus::Status)),
+ this, SLOT (statusChange (AcqStatus::Status)));
+}
+
+void AcqStatusDialog::statusChange (AcqStatus::Status st)
+{
+ if (st == AcqStatus::StDownloading || st == AcqStatus::StWaiting) {
+ enableButton (Ok, false);
+ // XXX: cancel should be true; but needs implementation first
+ enableButton (Cancel, false);
+ } else if (st == AcqStatus::StDone) {
+ enableButton (Ok, true);
+ enableButton (Cancel, false);
+ }
+}
+
+}
+
+#include "acqprogress.moc"
diff --git a/adept/adept/acqprogress.h b/adept/adept/acqprogress.h
new file mode 100644
index 0000000..9510825
--- /dev/null
+++ b/adept/adept/acqprogress.h
@@ -0,0 +1,127 @@
+/** -*- C++ -*-
+ @file adept/acqprogress.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#ifndef ACQPROGRESS_H
+#define ACQPROGRESS_H
+
+#include <klocale.h>
+#include <kdialogbase.h>
+#include <klistview.h>
+#include <kprogress.h>
+
+#include <vector>
+#include <apt-pkg/acquire.h>
+#include <apt-front/progresscallback.h>
+
+class AcqStatus;
+class QLabel;
+class QProgressBar;
+class QSpacer;
+class QGridLayout;
+
+namespace adept {
+
+class AcqStatus : public KListView, public aptFront::ProgressCallback
+{
+ Q_OBJECT
+protected:
+ class ItemProgress: public KProgress {
+ public:
+ ItemProgress( QWidget *parent, const char *name = 0 )
+ : KProgress( parent, name ), m_spin( 0 ) {}
+ void setStatus( const std::string &s,
+ int prog = 0 ) {
+ m_status = s;
+ if (m_status == "hit"
+ || m_status == "ignored"
+ || m_status == "done")
+ prog = 100;
+ if (m_status == "waiting") {
+ prog = 0;
+ }
+ if (m_status == "progress" && prog != 100)
+ setFormat( i18n( "downloading (%p%)" ) );
+ else if (prog == 100) // who cares about hit/ignore anyway?
+ setFormat( i18n( "done (%p%)" ) );
+ else
+ setFormat( m_status );
+ setProgress( prog );
+ }
+ protected:
+ std::string m_status;
+ int m_spin;
+ };
+ class Item : public KListViewItem {
+ protected:
+ ItemProgress *m_prog;
+ int m_pbcol;
+ unsigned long m_id;
+ pkgAcquire::ItemDesc m_item;
+
+ public:
+ Item (KListView *parent, pkgAcquire::ItemDesc &item,
+ bool hit = false);
+ virtual ~Item ();
+
+ virtual void paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment);
+
+ void setProgress (int);
+ virtual int compare (QListViewItem *i, int col, bool ascend) const;
+ virtual void pulse (pkgAcquire::Worker *);
+ void setStatus( const std::string &, int = 0 );
+
+ void setup() {
+ KListViewItem::setup();
+ setHeight( height() + 6 );
+ }
+ };
+ unsigned long ID;
+ unsigned long m_idOffset;
+ std::vector <Item *> m_items;
+ bool m_continue;
+
+public:
+
+ enum Status { StWaiting, StDownloading, StDone };
+
+ AcqStatus (QWidget *parent, const char *name);
+ Item *findItem (pkgAcquire::ItemDesc &Itm);
+
+ virtual bool MediaChange (string Media,string Drive);
+ virtual void IMSHit (pkgAcquire::ItemDesc &Itm);
+ virtual void Fetch (pkgAcquire::ItemDesc &Itm);
+ virtual void Done (pkgAcquire::ItemDesc &Itm);
+ virtual void Fail (pkgAcquire::ItemDesc &Itm);
+ virtual void Start ();
+ virtual void Stop ();
+ void addLine (QWidget *l, QWidget *s, QWidget *prog);
+ void clear();
+
+ bool Pulse (pkgAcquire *Owner);
+
+public slots:
+ void cancel();
+
+signals:
+ void statusChanged (AcqStatus::Status st);
+ void totalProgress (int percent);
+
+ //AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet);
+};
+
+class AcqStatusDialog : public KDialogBase
+{
+ Q_OBJECT
+protected:
+ aptFront::SharedPtr<AcqStatus> m_status;
+public:
+ aptFront::SharedPtr<aptFront::ProgressCallback> callback() { return m_status.data(); };
+ AcqStatusDialog (QWidget *parent, const char *name, bool modal);
+public slots:
+ void statusChange (AcqStatus::Status st);
+};
+}
+#endif
diff --git a/adept/adept/acqprogresswidget.cpp b/adept/adept/acqprogresswidget.cpp
new file mode 100644
index 0000000..dd02f03
--- /dev/null
+++ b/adept/adept/acqprogresswidget.cpp
@@ -0,0 +1,53 @@
+#include <kprogress.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <klocale.h>
+#include "acqprogresswidget.h"
+#include "acqprogress.h"
+
+using namespace adept;
+
+AcqProgressWidget::AcqProgressWidget( QWidget *parent, const char *name )
+ : AcqProgressWidgetUi( parent, name )
+{
+ m_statusRef = m_status;
+ m_progress->setTotalSteps( 100 );
+ m_progress->setProgress( 0 );
+ connect(m_status, SIGNAL( totalProgress( int ) ),
+ this, SLOT( setProgress( int ) ) );
+ connect(m_status, SIGNAL( statusChanged( AcqStatus::Status ) ),
+ this, SLOT( statusChange( AcqStatus::Status ) ) );
+ connect( m_cancel, SIGNAL( clicked() ),
+ m_status, SLOT( cancel() ) );
+}
+
+void AcqProgressWidget::statusChange( AcqStatus::Status s )
+{
+ QString t;
+ switch (s) {
+ case AcqStatus::StWaiting:
+ t = i18n( "Waiting for headers (%p%)" );
+ break;
+ case AcqStatus::StDownloading:
+ t = i18n( "Downloading (%p%)" );
+ break;
+ case AcqStatus::StDone:
+ t = i18n( "Done (%p%)" );
+ m_progress->setProgress( 100 );
+ break;
+ }
+ m_progress->setFormat( t );
+}
+
+void AcqProgressWidget::setProgress( int p )
+{
+ if (p < 0) {
+ m_progress->setTotalSteps( 0 );
+ m_progress->setProgress( m_progress->progress() + 1 );
+ } else {
+ m_progress->setTotalSteps( 100 );
+ m_progress->setProgress( p );
+ }
+}
+
+#include "acqprogresswidget.moc"
diff --git a/adept/adept/acqprogresswidget.h b/adept/adept/acqprogresswidget.h
new file mode 100644
index 0000000..54359c7
--- /dev/null
+++ b/adept/adept/acqprogresswidget.h
@@ -0,0 +1,30 @@
+/** -*- C++ -*-
+ @file adept/acqprogresswidget.h
+ @author Peter Rockai <[email protected]>
+ @todo Close button!
+*/
+
+#ifndef PROGRESSWIDGET_H
+# define PROGRESSWIDGET_H
+
+#include <adept/acqprogresswidgetui.h>
+#include <adept/acqprogress.h>
+
+namespace adept {
+
+class AcqProgressWidget : public AcqProgressWidgetUi {
+ Q_OBJECT
+public:
+ AcqProgressWidget (QWidget *parent = 0, const char *name = 0);
+ aptFront::SharedPtr<aptFront::ProgressCallback> callback() { return m_statusRef.data(); };
+public slots:
+ void statusChange( AcqStatus::Status );
+ void setProgress( int );
+protected:
+ aptFront::SharedPtr<AcqStatus> m_statusRef;
+};
+
+}
+
+#endif /* ifndef PROGRESSWIDGET_H */
+
diff --git a/adept/adept/acqprogresswidgetui.ui b/adept/adept/acqprogresswidgetui.ui
new file mode 100644
index 0000000..26baa21
--- /dev/null
+++ b/adept/adept/acqprogresswidgetui.ui
@@ -0,0 +1,79 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::AcqProgressWidgetUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>adept::AcqProgressWidgetUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>705</width>
+ <height>289</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Download Progress</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::AcqStatus" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_status</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>150</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="KProgress" row="1" column="0">
+ <property name="name">
+ <cstring>m_progress</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>m_cancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel Download</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::AcqStatus</class>
+ <header location="global">acqprogress.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154388dad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e0582c261e95f8bfc04f1a1e8bc5c4dfe0a190172af6a9690000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/acqprogress.h</includehint>
+ <includehint>kprogress.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/actor.h b/adept/adept/actor.h
new file mode 100644
index 0000000..115b202
--- /dev/null
+++ b/adept/adept/actor.h
@@ -0,0 +1,43 @@
+/** -*- C++ -*-
+ @file adept/actor.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qobject.h>
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/actor.h>
+
+#ifndef EPT_ACTOR_H
+#define EPT_ACTOR_H
+
+namespace adept {
+
+using namespace aptFront;
+
+class EntityActor : public QObject
+{
+ Q_OBJECT
+public:
+ EntityActor( actor::Bound< cache::entity::Entity > a )
+ : m_actor( a ), m_dead( false )
+ {}
+ actor::Bound< cache::entity::Entity > actor() const {
+ return m_actor;
+ }
+public slots:
+ void act() { m_actor(); }
+ void destructiveAct() {
+ // in case we don't get deleted soon enough
+ if ( m_dead ) return;
+ m_dead = true;
+ act();
+ deleteLater();
+ }
+protected:
+ actor::Bound< cache::entity::Entity > m_actor;
+ bool m_dead;
+};
+
+}
+
+#endif
diff --git a/adept/adept/application.cpp b/adept/adept/application.cpp
new file mode 100644
index 0000000..5f2eb2a
--- /dev/null
+++ b/adept/adept/application.cpp
@@ -0,0 +1,350 @@
+/** -*- C++ -*-
+ @file adept/application.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qprocess.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kstatusbar.h>
+#include <kdebug.h>
+
+#include <apt-front/init.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/component/state.h>
+
+#include <adept/commitprogress.h>
+#include <adept/application.h>
+#include <adept/packageinfo.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+namespace adept {
+using namespace cache;
+
+#ifdef KUBUNTU
+#include <qstringlist.h>
+#define DPKG_FIXER_ARGS QStringList::split(QString(" "), QString("dpkg --configure -a"), false)
+
+DpkgFixer::DpkgFixer(struct Application* parent)
+ : m_parent(parent)
+{
+ m_fixer = 0;
+ m_waiter = 0;
+ m_output = "";
+ m_done = false;
+}
+
+DpkgFixer::~DpkgFixer()
+{
+ if (m_fixer != 0) {
+ delete m_fixer;
+ }
+ if (m_waiter != 0) {
+ delete m_waiter;
+ }
+
+ std::cout << "Got output " << m_output.latin1() << std::endl;
+}
+
+void DpkgFixer::fixDpkgLock()
+{
+ kdDebug() << "Asking user if they would like to fix dpkg lock..." << endl;
+ int decision = KMessageBox::warningYesNoCancel(m_parent->mainWindow(),
+ i18n("Another process is using the packaging system database "
+ "(probably some other Adept application or apt-get or "
+ "aptitude).\nWould you like to attempt to resolve this problem? "
+ "No will enter read-only mode and Cancel to quit and resolve "
+ "this issue yourself."),
+ i18n( "Database Locked" ) );
+ switch (decision) {
+ case KMessageBox::Yes:
+ kdDebug() << "User opted to fix the dpkg database. Trying to run the process..." << endl;
+ cache::Global::get().close();
+ // Call the dpkg fixer.
+ m_fixer = new QProcess(dynamic_cast<QObject*>(this));
+ m_fixer->setArguments(DPKG_FIXER_ARGS);
+
+ // Handle when the process exits
+ connect(dynamic_cast<QObject*>(m_fixer), SIGNAL( processExited() ),
+ dynamic_cast<QObject*>(this), SLOT( retryOpen() ));
+
+ // Handle when the process has stdout output
+ connect(dynamic_cast<QObject*>(m_fixer), SIGNAL( readyReadStdout() ),
+ dynamic_cast<QObject*>(this), SLOT( handleStdout() ));
+
+ // Handle when the process has stderr output
+ connect(dynamic_cast<QObject*>(m_fixer), SIGNAL( readyReadStderr() ),
+ dynamic_cast<QObject*>(this), SLOT( handleStderr() ));
+
+ // Fire off the waiter...
+ m_waiter = new KProgressDialog(m_parent->mainWindow(), "waiter",
+ i18n("Unlocking; Please Wait..."), i18n("Unlocking dpkg database; Please wait..."));
+ m_waiter->setAllowCancel(false);
+ m_waiter->show();
+
+ m_fixer->start();
+ kdDebug() << "dpkg fixer fired off." << endl;
+
+ break;
+
+ case KMessageBox::Cancel:
+ kdDebug() << "User opted to cancel and repair manually." << endl;
+ exit(1);
+ break;
+
+ default:
+ kdDebug() << "User opted to continue in read-only mode." << endl;
+ m_parent->updateStatusbar();
+ m_parent->cacheOpenedNowFinishInit();
+ break;
+ }
+
+ return;
+}
+
+void DpkgFixer::retryOpen()
+{
+ kdDebug() << "Retrying the open..." << endl;
+ m_waiter->setLabel(i18n("Reopening the dpkg database..."));
+ m_waiter->progressBar()->setValue(50);
+ try {
+ if (!m_fixer->normalExit()) {
+ kdDebug() << "The fixer command did not exit normally. Throwing exception." << endl;
+ throw 0;
+ }
+
+ kdDebug() << "The fixer command exited normally, trying to reopen the database." << endl;
+ cache::Global::get().open( m_parent->openFlags() );
+ } catch (...) {
+ KMessageBox::information(m_parent->mainWindow(),
+ i18n( "Failed to unlock the database. "
+ "Please try to resolve this issue. "
+ "`sudo dpkg --configure -a` may help." ),
+ i18n( "Unlock Failed." ) );
+ exit( 1 );
+ }
+
+ m_waiter->progressBar()->setValue(100);
+ m_waiter->close();
+ m_parent->updateStatusbar();
+ m_parent->cacheOpenedNowFinishInit();
+}
+
+void DpkgFixer::outputUpdated()
+{
+}
+
+void DpkgFixer::handleStdout()
+{
+// m_output += m_fixer->readStdout();
+// outputUpdated();
+}
+
+void DpkgFixer::handleStderr()
+{
+// m_output += m_fixer->readStderr();
+// outputUpdated();
+}
+#endif // KUBUNTU
+
+Application::Application()
+ : m_acceptReadOnly( false ), m_main( 0 ), m_history( 0 ), m_statusBar( 0 )
+{
+#ifdef KUBUNTU
+ m_dpkgfixer = 0;
+#endif // KUBUNTU
+}
+
+Application::~Application()
+{
+#ifdef KUBUNTU
+ if (m_dpkgfixer != 0) {
+ delete m_dpkgfixer;
+ }
+#endif // KUBUNTU
+}
+
+void Application::openCache( unsigned flags )
+{
+ m_flags = flags;
+ bool ro = m_acceptReadOnly;
+ bool root = ::getuid() == 0 || ::geteuid() == 0;
+
+ try {
+ cache::Global::get().open( m_flags );
+ } catch (...) {
+ try {
+ cache::Global::get().open( m_flags | Cache::OpenReadOnly );
+ if ( ro && root ) {
+#ifndef KUBUNTU
+ kdDebug() << "ro && root -- Database locked." << endl;
+ KMessageBox::information(
+ m_main, i18n(
+ "You will not be able to change your system settings "
+ "in any way (install, remove or upgrade software), "
+ "because another process is using the packaging system database "
+ "(probably some other Adept application or apt-get or "
+ "aptitude). Please close the other application before "
+ "using this one." ),
+ i18n( "Read Only mode: Database Locked" ) );
+#else
+ kdDebug() << "Firing off the Kubuntu dpkg database lock fixer..." << endl;
+ m_dpkgfixer = new DpkgFixer(this);
+ m_dpkgfixer->fixDpkgLock();
+ return;
+#endif // KUBUNTU
+ } else if ( !root && ro ) {
+ kdDebug() << "!root && ro -- Need root privileges." << endl;
+ KMessageBox::information(
+ m_main, i18n(
+ "You will not be able to change your system settings "
+ "in any way (install, remove or upgrade software), "
+ "because this application needs special administrator "
+ "(root) privileges. Please run it as root or "
+ "through kdesu or sudo programs to be able to perform "
+ "these actions" ),
+ i18n( "Read Only mode: Need root privileges" ) );
+ } else if ( root && !ro ) {
+#ifndef KUBUNTU
+ kdDebug() << "root && !ro -- Database locked." << endl;
+ KMessageBox::information(m_main,
+ i18n("Another process is using the packaging system database "
+ "(probably some other Adept application or apt-get or "
+ "aptitude). Please close the other application before "
+ "using this one." ),
+ i18n( "Read Only mode: Database Locked" ) );
+#else
+ kdDebug() << "Firing off the Kubuntu dpkg database lock fixer..." << endl;
+ m_dpkgfixer = new DpkgFixer(this);
+ m_dpkgfixer->fixDpkgLock();
+ return;
+#endif // KUBUNTU
+ } else if ( !root && !ro ) {
+ kdDebug() << "!root && !ro -- Needs root privileges." << endl;
+ KMessageBox::information(
+ m_main, i18n( "This application needs special administrator "
+ "(root) privileges. Please run it as root or "
+ "through kdesu or sudo programs" ),
+ i18n( "Need root privileges" ) );
+ }
+ if ( !ro ) {
+ kdDebug() << "cannot continue, exiting" << endl;
+ exit( 1 );
+ }
+ } catch (...) {
+ KMessageBox::sorry(
+ m_main, i18n(
+ "The APT Database could not be opened!"
+ " This may be caused by incorrect APT configuration"
+ " or some similar problem. Try running apt-setup and"
+ " apt-get update in terminal and see if it helps"
+ " to resolve the problem." ), i18n( "Could not open cache" ));
+ exit( 1 );
+ }
+ }
+
+ updateStatusbar();
+ cacheOpenedNowFinishInit();
+}
+
+void Application::initHistory() {
+ cache::Global::get().addComponent(
+ m_history = new History() );
+}
+
+void Application::initKDEDebconf()
+{
+ // xxx unhardcode the package name somehow?
+ if (cache::Global::get().packages()
+ .packageByName( "libqt-perl" ).isInstalled())
+ putenv( "DEBIAN_FRONTEND=kde" );
+}
+
+void Application::initialize()
+{
+ CommitProgress::initSystem();
+ aptFront::init();
+ openCache();
+}
+
+void Application::cacheOpenedNowFinishInit() {
+ initKDEDebconf();
+ initHistory();
+ observeComponent< component::State >();
+
+ initFinished();
+}
+
+void Application::checkpoint() {
+ if ( !history() ) return;
+ setHistoryEnabled( false );
+ history()->checkpoint();
+ setHistoryEnabled( true );
+}
+
+void Application::undo() {
+ if ( !history() ) return;
+ setHistoryEnabled( false );
+ history()->undo();
+ setHistoryEnabled( true );
+}
+
+void Application::redo() {
+ if ( !history() ) return;
+ setHistoryEnabled( false );
+ history()->redo();
+ setHistoryEnabled( true );
+}
+
+QString Application::changeString() {
+ component::State &s = cache().state();
+ return i18n( " Install %1, upgrade %2, remove %3 " )
+ .arg( s.newInstallCount() ).arg( s.upgradeCount() )
+ .arg( s.removeCount() );
+}
+
+QString Application::statusString() {
+ component::State &s = cache().state();
+ return i18n( " %1 installed, %2 upgradable, %3 available " )
+ .arg( s.installedCount() ).arg( s.upgradableCount() )
+ .arg( s.availableCount() );
+}
+
+QString Application::sizesString() {
+ QString dl = cache().state().downloadSizeString();
+ QString inst = cache().state().installSizeString();
+ return i18n( " download: %1, installation: %2 " ).arg( dl ).arg( inst );
+}
+
+void Application::setStatusBar( KStatusBar *s ) {
+ m_statusBar = s;
+ if ( s ) {
+ s->message( i18n( "Initializing..." ) );
+ s->insertItem( u8( "" ), 0 );
+ s->insertItem( u8( "" ), 1 );
+ s->insertItem( u8( "" ), 2 );
+ adjustFontSize( s, -1 );
+
+ adept::Progress *pr = new adept::Progress();
+ pr->setStatusBar( s );
+ cache::Global::get().setProgress( pr );
+ }
+}
+
+void Application::notifyPostChange( component::Base * )
+{
+ updateStatusbar();
+}
+
+void Application::updateStatusbar()
+{
+ if ( m_statusBar ) {
+ m_statusBar->changeItem( changeString(), 0 );
+ m_statusBar->changeItem( statusString(), 1 );
+ m_statusBar->changeItem( sizesString(), 2 );
+ }
+}
+
+}
diff --git a/adept/adept/application.h b/adept/adept/application.h
new file mode 100644
index 0000000..0416b70
--- /dev/null
+++ b/adept/adept/application.h
@@ -0,0 +1,102 @@
+/** -*- C++ -*-
+ @file adept/application.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <vector>
+
+#include <qobject.h>
+#include <qprocess.h>
+#include <kprogress.h>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+
+#ifndef EPT_APPLICATION_H
+#define EPT_APPLICATION_H
+
+#define KUBUNTU
+
+class KStatusBar;
+
+namespace adept {
+using namespace aptFront;
+using cache::Cache;
+
+class Lister;
+
+#ifdef KUBUNTU
+class DpkgFixer : public QObject {
+ Q_OBJECT;
+public:
+ DpkgFixer(struct Application* app);
+ ~DpkgFixer();
+
+ bool done() { return m_done; };
+public slots:
+ void fixDpkgLock();
+
+
+protected slots:
+ void retryOpen();
+ void outputUpdated();
+ void handleStdout();
+ void handleStderr();
+
+protected:
+ QProcess* m_fixer;
+ Application* m_parent;
+ QString m_output;
+ KProgressDialog* m_waiter;
+ bool m_done;
+};
+#endif // KUBUNTU
+
+struct Application : cache::Observer {
+ Application();
+ ~Application();
+ void setAcceptReadOnly( bool ro ) { m_acceptReadOnly = ro; }
+ bool writeable() { return cache::Global::get().writeable(); }
+ Cache &cache() { return cache::Global::get(); }
+ void openCache( unsigned flags = Cache::OpenDefault | Cache::OpenDebtags );
+ void initialize();
+ void cacheOpenedNowFinishInit();
+ void initKDEDebconf();
+ void initHistory();
+ void setMainWidget( QWidget *w ) { m_main = w; }
+ void setStatusBar( KStatusBar *s );
+ void updateStatusbar();
+ virtual void initFinished() { return; };
+ virtual void checkpoint();
+ virtual void undo();
+ virtual void redo();
+
+ int test_this_shit;
+
+ virtual void notifyPostChange( cache::component::Base * );
+
+ QString changeString();
+ QString statusString();
+ QString sizesString();
+ QWidget* mainWindow() { return m_main; };
+ unsigned openFlags() { return m_flags; };
+
+protected:
+ virtual void setHistoryEnabled( bool ) {}
+ typedef cache::component::History< cache::component::State > History;
+ virtual History *history() { return m_history; }
+ bool m_acceptReadOnly;
+ unsigned m_flags;
+ QWidget *m_main;
+ KStatusBar *m_statusBar;
+ History *m_history;
+
+#ifdef KUBUNTU
+ DpkgFixer* m_dpkgfixer;
+#endif // KUBUNTU
+};
+
+}
+
+#endif
diff --git a/adept/adept/changelog.cpp b/adept/adept/changelog.cpp
new file mode 100644
index 0000000..5dd47ed
--- /dev/null
+++ b/adept/adept/changelog.cpp
@@ -0,0 +1,145 @@
+/* -*- C++ -*- */
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qhttp.h>
+#include <qbuffer.h>
+
+#include <kdebug.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <adept/lister.h>
+
+#include "changelog.h"
+
+using namespace adept;
+
+#ifdef KUBUNTU
+ItemChangelog::ItemChangelog() {
+ connect(this, SIGNAL( changelogNeeded() ),
+ this, SLOT( requestChangelog() ));
+ m_http = 0;
+ m_content_catcher = 0;
+}
+
+ItemChangelog::~ItemChangelog() {
+ if (m_http != 0) {
+ delete m_http;
+ }
+ if (m_content_catcher != 0) {
+ delete m_content_catcher;
+ }
+}
+
+/*
+ * So this method is *very* specific to the ubuntu package
+ * changelog repository. If you want to modify this to meet the needs
+ * of another distro, you may want to implement your own method here.
+ */
+QString ItemChangelog::changelogUrl() {
+ // The list of known sections...
+ QStringList knownSections(QString("main"));
+ knownSections += QString("multiverse");
+ knownSections += QString("restricted");
+ knownSections += QString("universe");
+
+ // The parts of the package that form the URL...
+ QStringList pkgParts( QString(BASE_CHANGELOG_URL) );
+ QStringList sectionParts;
+ QString section;
+ QString urlBase;
+ QString pkgName;
+ bool found = false;
+
+ try {
+ if (&m_pkg == 0x0) {
+ throw 0;
+ }
+ std::string theSection(m_pkg.section(std::string("/")));
+ if (!theSection.length()) {
+ throw 0;
+ }
+ //// Get the section
+ section = QString( theSection );
+ /* now convert the section into something
+ usable for the changelog URL. */
+ sectionParts = QStringList::split(QString("/"), section);
+
+ /* If we have more than one piece, that means we've got a
+ non-main repo. Let's make sure it's one we can use. */
+ if (sectionParts.size() > 1) {
+ // Walk through known sections
+ for (QStringList::Iterator it = knownSections.begin();
+ it != knownSections.end(); ++it) {
+ // If we found it, let's say we found it.
+ if (sectionParts[0] == *it) {
+ pkgParts += sectionParts[0];
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ return QString::null; // didn't find the repo!
+ }
+ } else {
+ pkgParts += QString("main");
+ }
+
+ //// Get the package name and prefix
+ pkgName += QString( m_pkg.source() );
+ pkgParts += QString(pkgName[0]);
+ pkgParts += pkgName;
+
+ //// Get the version string.
+ QString version = QString( m_pkg.candidateVersion().versionString() );
+ int epoch = version.find(':');
+ if (epoch > -1) {
+ version = version.mid(epoch + 1);
+ }
+ pkgName += "_" + version;
+ pkgParts += pkgName;
+ pkgParts += QString("changelog");
+
+ return pkgParts.join(QString("/"));
+ } catch (...) {
+ kdDebug() << "GOT ME AN EXCEPTION!!!! THIS IS NOT GOOD!!!!";
+ }
+
+ return QString::null;
+}
+
+void ItemChangelog::requestChangelog() {
+// emit changelogReady(changelogUrl());
+
+// return;
+
+ /* Removing temporarilly */
+ m_http = new QHttp(QString(BASE_CHANGELOG_HOST),
+ BASE_CHANGELOG_PORT,
+ this, "changelog_loader");
+ connect(dynamic_cast<QObject*>(m_http), SIGNAL( requestFinished(int,bool) ),
+ dynamic_cast<QObject*>(this), SLOT( contentReady(int,bool) ));
+ m_content_catcher = new QBuffer();
+ QString theUrl( changelogUrl() );
+
+ if ( theUrl == QString::null ) {
+ emit changelogReady(QString("No change log found."));
+ } else {
+ m_http->get( changelogUrl(), dynamic_cast<QIODevice*>(m_content_catcher) );
+ }
+}
+
+void ItemChangelog::contentReady( int id, bool error ) {
+ QString msg("Unable to fetch the Developer Changelog.");
+
+ if (!error) {
+ msg = QString( m_content_catcher->buffer() );
+ } else {
+ msg += ": " + m_http->errorString();
+ }
+
+ emit changelogReady( msg );
+}
+
+#endif /*KUBUNTU*/
diff --git a/adept/adept/changelog.h b/adept/adept/changelog.h
new file mode 100644
index 0000000..8db861b
--- /dev/null
+++ b/adept/adept/changelog.h
@@ -0,0 +1,45 @@
+/* -*- C++ -*- */
+#ifndef CHANGELOG_H
+#define CHANGELOG_H
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qhttp.h>
+#include <qbuffer.h>
+
+#include <adept/lister.h>
+
+#ifdef KUBUNTU
+#define BASE_CHANGELOG_HOST "changelogs.ubuntu.com"
+#define BASE_CHANGELOG_PORT 80
+#define BASE_CHANGELOG_URL "/changelogs/pool"
+
+namespace adept {
+
+ class ItemChangelog : public QObject {
+ Q_OBJECT
+ public:
+ ItemChangelog();
+ ~ItemChangelog();
+
+ // Give me the changelog's URL
+ QString changelogUrl();
+ void setParent(entity::Package parent) { m_pkg = parent; }
+ signals:
+ void changelogNeeded();
+ void changelogReady(QString content);
+
+ protected slots:
+ // Give me the changelog's text
+ void requestChangelog();
+ void contentReady(int id, bool error);
+
+ protected:
+ entity::Package m_pkg;
+ QHttp* m_http;
+ QBuffer* m_content_catcher;
+ };
+}
+
+#endif /* KUBUNTU */
+#endif /*CHANGELOG_H*/
diff --git a/adept/adept/commitprogress.cpp b/adept/adept/commitprogress.cpp
new file mode 100644
index 0000000..9322e27
--- /dev/null
+++ b/adept/adept/commitprogress.cpp
@@ -0,0 +1,117 @@
+#include <cassert>
+
+#include <qwidgetstack.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <kprogress.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <ktrader.h>
+#include <klibloader.h>
+
+#include <apt-front/init.h>
+#include <adept/commitprogress.h>
+#include <adept/utils.h>
+
+using namespace adept;
+using namespace aptFront;
+
+PkgSystem *CommitProgress::s_system = 0;
+
+void CommitProgress::initSystem() {
+ CommitProgress::s_system = new PkgSystem();
+}
+
+CommitProgress::CommitProgress( QWidget *p, const char *n )
+ : CommitProgressUi( p, n )
+{
+ assert( s_system );
+ m_konsoleFrame->installEventFilter( this );
+ loadKonsole();
+ connect( s_system, SIGNAL( statusChanged( int, QString ) ),
+ this, SLOT( updateProgress( int, QString ) ) );
+ connect( m_details, SIGNAL( clicked() ),
+ this, SLOT( toggleDetails() ) );
+ m_progress->setTotalSteps( 100 );
+}
+
+bool CommitProgress::eventFilter( QObject *o, QEvent *e ) {
+ // o == m_konsoleFrame
+ if ( e->type() == QEvent::Resize ) {
+ QResizeEvent *re = dynamic_cast< QResizeEvent * >( e );
+ if ( !re ) return false;
+ m_konsole->widget()->setGeometry( 0, 0, re->size().width(), re->size().height() );
+ m_occlude->setGeometry( 0, 0, re->size().width(), re->size().height() );
+ }
+ return false;
+};
+
+void CommitProgress::toggleDetails()
+{
+ if ( !m_occlude->isVisible() ) {
+ // if ( m_stack->visibleWidget() == m_konsole->widget() ) { // hide
+ // m_stack->raiseWidget( m_emptyPage );
+ m_occlude->show();
+ m_occlude->setFocus();
+ m_bottomSpace->changeSize( 10, 10, QSizePolicy::Fixed, QSizePolicy::Expanding );
+ m_details->setText( i18n( "Show Details" ) );
+ } else { // show
+ m_occlude->hide();
+ m_konsole->widget()->setFocus();
+ // m_stack->raiseWidget( m_konsole->widget() );
+ m_bottomSpace->changeSize( 10, 10, QSizePolicy::Fixed, QSizePolicy::Fixed );
+ m_details->setText( i18n( "Hide Details" ) );
+ }
+}
+
+void CommitProgress::updateProgress( int p, QString msg )
+{
+ m_operation->setText( msg );
+ m_progress->setProgress( p );
+}
+
+void CommitProgress::loadKonsole()
+{
+ if ( s_system->terminal() )
+ kdDebug() << "WARNING: Hijacking PkgSystem terminal" << endl;
+
+ KLibFactory* factory = KLibLoader::self()->factory( "libsanekonsolepart" );
+ if (!factory)
+ factory = KLibLoader::self()->factory( "libkonsolepart" );
+
+ assert( factory );
+
+ delete m_occlude;
+ m_konsole = static_cast<KParts::Part*>(
+ factory->create( m_konsoleFrame, "konsolepart", "QObject",
+ u8( "KParts::ReadOnlyPart" ) ) );
+ // m_konsole->widget()->setGeometry( QRect( 0, 0, 40, 40 ) );
+
+ m_occlude = new QFrame( m_konsoleFrame, "m_occlude" );
+ // m_occlude->setGeometry( QRect( 0, 0, 10, 10 ) );
+ m_occlude->setFrameShape( QFrame::NoFrame );
+
+ assert( terminal() );
+
+ terminal()->setAutoDestroy( false );
+ terminal()->setAutoStartShell( false );
+ // m_stack->addWidget( m_konsole->widget() );
+
+ QStrList l; l.append( "echo" ); l.append( "-n" );
+ terminal()->startProgram( u8( "/bin/echo" ), l );
+
+ s_system->setTerminal( m_konsole );
+
+ // m_stack->raiseWidget( m_konsole->widget() );
+ // m_konsole->widget()->show();
+ // m_stack->raiseWidget( m_emptyPage );
+ m_operation->setText( i18n( "Idle" ) );
+ QTimer::singleShot( 0, this, SLOT( toggleDetails() ) );
+ if ( DEFAULT_KONSOLE_HIDDEN )
+ QTimer::singleShot( 0, this, SLOT( toggleDetails() ) );
+ QTimer::singleShot( 0, this, SLOT( hide() ) );
+}
+
diff --git a/adept/adept/commitprogress.h b/adept/adept/commitprogress.h
new file mode 100644
index 0000000..ed557d7
--- /dev/null
+++ b/adept/adept/commitprogress.h
@@ -0,0 +1,41 @@
+/* -*- C++ -*- file adept/commitprogress.h
+ written by Peter Rockai <[email protected]> */
+
+#include <kde_terminal_interface.h>
+#include <adept/dpkgpm-gui.h>
+#include <adept/commitprogressui.h>
+#include <kparts/part.h>
+
+#ifndef EPT_COMMITPROGRESS_H
+#define EPT_COMMITPROGRESS_H
+
+namespace adept {
+
+class CommitProgress : public CommitProgressUi
+{
+ Q_OBJECT
+public:
+ CommitProgress( QWidget *p = 0, const char *n = 0 );
+
+ ExtTerminalInterface *terminal() {
+ return static_cast<ExtTerminalInterface*>(
+ m_konsole->qt_cast( "ExtTerminalInterface" ) );
+ }
+
+ // needs to be called before aptFront::init() :'((
+ static void initSystem();
+ virtual bool eventFilter( QObject *o, QEvent *e );
+
+public slots:
+ void updateProgress( int p, QString msg );
+ void toggleDetails();
+protected:
+ void loadKonsole();
+ KParts::Part *m_konsole;
+ static adept::PkgSystem *s_system; // bla...
+};
+
+}
+
+
+#endif
diff --git a/adept/adept/commitprogressui.ui b/adept/adept/commitprogressui.ui
new file mode 100644
index 0000000..5ccecbf
--- /dev/null
+++ b/adept/adept/commitprogressui.ui
@@ -0,0 +1,197 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::CommitProgressUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>CommitProgressUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>542</width>
+ <height>303</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_konsoleFrame</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_occlude</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>10</y>
+ <width>460</width>
+ <height>60</height>
+ </rect>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>m_details</cstring>
+ </property>
+ <property name="text">
+ <string>(details)</string>
+ </property>
+ </widget>
+ <widget class="KProgress" row="1" column="0">
+ <property name="name">
+ <cstring>m_progress</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_operation</cstring>
+ </property>
+ <property name="text">
+ <string>Preparing...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>m_bottomSpace</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kprogress.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/desktopentryui.ui b/adept/adept/desktopentryui.ui
new file mode 100644
index 0000000..a40c766
--- /dev/null
+++ b/adept/adept/desktopentryui.ui
@@ -0,0 +1,116 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::DesktopEntryUi</class>
+<widget class="adept::ItemExtender">
+ <property name="name">
+ <cstring>DesktopEntryUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>52</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>6</number>
+ </property>
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <widget class="QLabel" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>m_icon</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>m_check</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="text">
+ <string>(name)</string>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="text">
+ <string>(description)</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <spacer row="0" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>6</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/extendablelist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/adept/desktoplist.cpp b/adept/adept/desktoplist.cpp
new file mode 100644
index 0000000..de64f11
--- /dev/null
+++ b/adept/adept/desktoplist.cpp
@@ -0,0 +1,194 @@
+/** -*- C++ -*-
+ @file adept/desktoplist.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qimage.h>
+#include <qlabel.h>
+#include <qcursor.h>
+#include <qcheckbox.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+#include <kapplication.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <adept/desktoplist.h>
+#include <adept/utils.h>
+
+namespace adept {
+
+DesktopEntry::DesktopEntry( QWidget *p, const char *n )
+ : DesktopEntryUi( p, n )
+{
+ adjustFontSize( m_description, -1 );
+}
+
+void DesktopEntry::resize( int w, int h )
+{
+ // kdDebug() << "DesktopEntry::resize( " << w << ", " << h << " )" << endl;
+ int margin = layout()->margin() + layout()->spacing() * 2
+ + 6 /* spacer */ + m_icon->width() + m_check->width();
+ if ( m_check->isVisible() ) margin += m_check->width() + layout()->spacing();
+ int hFW1 = m_name->heightForWidth( w - margin );
+ int hFW2 = m_description->heightForWidth( w - margin );
+ /* kdDebug() << "margin = " << margin << ", hFW1 = " << hFW1 << ", hFW2 = "
+ << hFW2 << endl; */
+ int height = 2 * layout()->margin() + layout()->spacing() + hFW1 + hFW2;
+ if ( height < 32 + 2*layout()->margin() /* icon size + margin */ )
+ height = 32 + 2*layout()->margin();
+ // m_description->resize( w - margin, m_description->heightForWidth( w - margin ) );
+ QWidget::resize( w, height );
+}
+
+void DesktopEntry::setItem( ExtendableItem *i ) {
+ m_polished = false;
+ ItemExtender::setItem( i );
+ m_name->setText( u8( "<b>" ) + u8( entity().name() ) + u8( "</b>" ) );
+ m_description->setText( u8( entity().description() ) );
+ if ( !item()->list()->displayCheckboxes() ) {
+ m_check->hide();
+ }
+ if ( !package().valid() || !package().hasVersion() ) {
+ setEnabled( false );
+ } else {
+ connect( m_check, SIGNAL( toggled( bool ) ),
+ this, SLOT( toggled() ) );
+ notifyPostChange();
+ }
+}
+
+void DesktopEntry::mousePressEvent( QMouseEvent *e ) {
+ kdDebug() << "DesktopEntry::mousePressEvent" << endl;
+ e->ignore();
+}
+
+void DesktopEntry::mouseReleaseEvent( QMouseEvent *e ) {
+ kdDebug() << "DesktopEntry::mouseReleaseEvent" << endl;
+ e->ignore();
+}
+
+void DesktopEntry::showEvent( QShowEvent *e ) {
+ DesktopEntryUi::showEvent( e );
+ // DesktopEntryUi::polish();
+ if ( m_polished ) return;
+ item()->list()->polishing();
+ kdDebug() << "polish for " << entity().name() << endl;
+ QImage icon( KGlobal::iconLoader()->iconPath( entity().icon(), -32, true ) );
+ if ( icon.isNull() ) {
+ icon = QImage( KGlobal::dirs()->findResource( "desktopicon", entity().icon() ) );
+ }
+ m_icon->setPixmap( icon.isNull() ? item()->list()->emptyIcon() :
+ QPixmap( icon.smoothScale( 32, 32, QImage::ScaleMin ) ) );
+ item()->list()->polished();
+ m_polished = true;
+}
+
+void DesktopEntry::toggled() {
+ /* if ( package().isInstalled() ) {
+ if ( package().markedRemove() )
+ package().markKeep();
+ else
+ package().markRemove();
+ } else if ( package().markedInstall() )
+ package().markKeep();
+ else
+ package().markInstall(); */
+
+ if ( package().isInstalled() ) {
+ if ( package().markedRemove() )
+ item()->list()->fireRequest( package(), component::State::AKeep );
+ else
+ item()->list()->fireRequest( package(), component::State::ARemove );
+ } else if ( package().markedInstall() )
+ item()->list()->fireRequest( package(), component::State::AKeep );
+ else
+ item()->list()->fireRequest( package(), component::State::AInstall );
+ notifyPostChange();
+}
+
+void DesktopList::polishing() {
+ if ( m_polishing == 0 )
+ QApplication::setOverrideCursor( QCursor( Qt::BusyCursor ) );
+ m_polishing++;
+ if ( m_polishing % 10 == 0 )
+ kapp->processEvents();
+}
+
+void DesktopList::polished() {
+ if ( m_polishing == childCount() )
+ QApplication::restoreOverrideCursor();
+}
+
+void DesktopList::notifyPostChange( component::Base * ) {
+ utils::Range< ExtendableItem * > r = extenders();
+ for ( ; r != r.end(); ++r ) {
+ dynamic_cast< DesktopEntry * >( (*r)->extender() )->notifyPostChange();
+ }
+}
+
+void DesktopEntry::notifyPostChange() {
+ if ( !package().valid() || !package().hasVersion() )
+ return;
+
+ m_check->blockSignals( true );
+ m_check->setChecked( ( package().isInstalled()
+ || entity().package().markedInstall() )
+ && !entity().package().markedRemove() );
+ m_check->blockSignals( false );
+}
+
+DesktopList::DesktopList( QWidget *parent, const char *name )
+ : ExtendableList( parent, name ), m_polishing( 0 ), m_displayCheckboxes( true )
+{
+ observeComponent< component::State >();
+ addColumn( i18n( "Application" ) );
+ setResizeMode( LastColumn );
+ setToggleColumn( -1 ); // no toggling, thanks
+ setExtenderHighlight( true );
+ m_emptyIcon = QPixmap(
+ QImage(
+ KGlobal::iconLoader()->iconPath( u8( "exec" ), -32, false )
+ ).smoothScale( 32, 32, QImage::ScaleMin ) );
+ connect( this, SIGNAL( clicked( QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( processClick( QListViewItem *, const QPoint &, int ) ) );
+}
+
+void DesktopList::processClick( QListViewItem *it, const QPoint &, int ) {
+ kdDebug() << "DesktopList::processClick..." << endl;
+ DesktopItem *i = dynamic_cast< DesktopItem * >( it );
+ if ( !i ) return;
+ emit showDescription( i->entity() );
+}
+
+void DesktopList::insertRange( Range r ) {
+ m_range = r;
+ DesktopItem *last = 0;
+ int i = 0;
+ QApplication::setOverrideCursor( QCursor( Qt::BusyCursor ) );
+ for( ; r != r.end(); r.advance() ) {
+ if ( i % 20 == 0 )
+ kapp->processEvents();
+ if ( !r->package( entity::Package() ).valid() )
+ continue;
+ DesktopItem *i = last ? new DesktopItem( this, last ) : new DesktopItem( this );
+ last = i;
+ i->setEntity( *r );
+ ++ i;
+ }
+ QApplication::restoreOverrideCursor();
+}
+
+ItemExtender *DesktopItem::createExtender() {
+ return new DesktopEntry();
+}
+
+DesktopItem *DesktopEntry::item() const {
+ return dynamic_cast< DesktopItem * >( m_item );
+}
+
+entity::Desktop DesktopEntry::entity() const {
+ return item()->entity();
+}
+
+}
diff --git a/adept/adept/desktoplist.h b/adept/adept/desktoplist.h
new file mode 100644
index 0000000..207b9a7
--- /dev/null
+++ b/adept/adept/desktoplist.h
@@ -0,0 +1,117 @@
+/** -*- C++ -*-
+ @file adept/desktoplist.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qimage.h>
+#include <klocale.h>
+
+#include <apt-front/cache/entity/desktop.h>
+#include <adept/extendablelist.h>
+#include <adept/desktopentryui.h>
+
+#ifndef EPT_DESKTOPLIST_H
+#define EPT_DESKTOPLIST_H
+
+class QPopupMenu;
+
+namespace adept {
+using namespace aptFront;
+using namespace aptFront::cache;
+
+class DesktopItem;
+
+class DesktopList : public ExtendableList, public cache::Observer
+{
+ Q_OBJECT
+public:
+ typedef utils::Range< entity::Desktop > Range;
+ DesktopList( QWidget *parent = 0, const char *name = 0 );
+ void insertRange( Range );
+ QPixmap emptyIcon() { return m_emptyIcon; }
+ void polishing();
+ void polished();
+
+ void setTitle( QString s ) {
+ setColumnText( 0, i18n( "Application (" ) + s + i18n( ")" ) );
+ }
+
+ void setDisplayCheckboxes( bool d ) { m_displayCheckboxes = d; }
+ bool displayCheckboxes() { return m_displayCheckboxes; }
+ virtual void notifyPostChange( cache::component::Base * );
+ void fireRequest( entity::Package p, component::State::Action a ) {
+ emit request( p, a );
+ }
+protected slots:
+ void processClick( QListViewItem *, const QPoint &, int );
+signals:
+ void request( cache::entity::Package, cache::component::State::Action );
+ void showDescription( cache::entity::Desktop );
+protected:
+ Range m_range;
+ QPixmap m_emptyIcon;
+ int m_polishing;
+ bool m_displayCheckboxes;
+};
+
+class DesktopEntry : public DesktopEntryUi
+{
+ Q_OBJECT
+public:
+ DesktopEntry( QWidget * = 0, const char * = 0 );
+ DesktopItem *item() const;
+ entity::Desktop entity() const;
+ void setItem( ExtendableItem * );
+ entity::Package package() { return entity().package(); }
+ virtual void notifyPostChange();
+ virtual void resize( int, int );
+ // virtual void polish();
+public slots:
+ void toggled();
+protected:
+ virtual void mousePressEvent( QMouseEvent *e );
+ virtual void mouseReleaseEvent( QMouseEvent *e );
+ virtual void showEvent( QShowEvent * );
+ bool m_polished;
+};
+
+class DesktopItem : public ExtendableItem
+{
+public:
+ ItemExtender *createExtender();
+ DesktopItem( DesktopList *l )
+ : ExtendableItem( l ), m_delayedDone( false )
+ {
+ }
+ DesktopItem( DesktopList *v, DesktopItem *i )
+ : ExtendableItem( v, i ), m_delayedDone( false )
+ {
+ }
+
+ void setup() {
+ ExtendableItem::setup();
+ if (m_delayedDone)
+ return;
+ m_delayedDone = true;
+ showExtender();
+ }
+
+ DesktopList *list() { return dynamic_cast< DesktopList * >( listView() ); }
+
+ QString text( int ) const { return QString( "you shouldn't see this" ); }
+ entity::Desktop entity() const { return m_entity; }
+ void setEntity( entity::Desktop e ) { m_entity = e; }
+
+ virtual bool less( const ExtendableItem *other ) const {
+ const DesktopItem *o = dynamic_cast< const DesktopItem * >( other );
+ return entity() < o->entity();
+ }
+
+protected:
+ entity::Desktop m_entity;
+ bool m_delayedDone:1;
+};
+
+}
+
+#endif
diff --git a/adept/adept/dpkgpm-gui.cpp b/adept/adept/dpkgpm-gui.cpp
new file mode 100644
index 0000000..828d18f
--- /dev/null
+++ b/adept/adept/dpkgpm-gui.cpp
@@ -0,0 +1,258 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm-gui.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <fcntl.h>
+#include <iostream>
+
+#include <qstrlist.h>
+#include <kapplication.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kparts/part.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <adept/dpkgpm-gui.h>
+#include <adept/utils.h>
+
+using namespace aptFront;
+using namespace cache;
+
+namespace adept {
+
+PkgSystem::PkgSystem()
+ : m_terminalPart( 0 )
+{
+ std::cerr << "kapture::PkgSystem::PkgSystem()" << std::endl;
+ Label = "adeptDPkgSystem";
+}
+
+void PkgSystem::setTerminal( KParts::Part *t )
+{
+ m_terminalPart = t;
+}
+
+pkgPackageManager *PkgSystem::CreatePM( pkgDepCache *c ) const
+{
+ std::cerr << "kapture::PkgSystem::CreatePM()" << std::endl;
+ adept::DPkgPM *pm = new adept::DPkgPM( c, m_terminalPart );
+ connect( pm, SIGNAL( statusChanged( int, QString ) ),
+ this, SIGNAL( statusChanged( int, QString ) ) );
+ return pm;
+}
+
+DPkgPM::DPkgPM( pkgDepCache *cache, KParts::Part *t )
+ : aptFront::DPkgPM (cache), m_terminalPart (t)
+{
+}
+
+bool DPkgPM::forkDpkg( char *const argv[] )
+{
+ bool ok = true;
+ std::cerr << "adept::DPkgPM::forkDpkg ()" << std::endl;
+ QStrList l;
+ for (int i = 0; argv[i]; i ++)
+ l.append( argv[i] );
+
+ m_processRunning = true;
+ connect( m_terminalPart, SIGNAL( processExited( KProcess * ) ),
+ this, SLOT( processExit( KProcess * ) ) );
+ connect( m_terminalPart, SIGNAL( processExited( const KProcess * ) ),
+ this, SLOT( processExitC( const KProcess * ) ) );
+ connect( m_terminalPart, SIGNAL( forkedChild() ),
+ this, SLOT( setupDpkgChild() ) );
+
+ terminal()->startProgram( u8( argv[0] ), l );
+
+ ::close( m_dpkgPipe[1] );
+ ::fcntl( m_dpkgPipe[0], F_SETFL, O_NONBLOCK );
+
+ while (m_processRunning) {
+ dpkgMonitor();
+ usleep( 50000 );
+ }
+
+ if (m_exitedProcess->normalExit()) {
+ if (m_exitedProcess->exitStatus() != 0) {
+ ok = _error->Error( "Child for %s exited with error %d",
+ argv [0], m_exitedProcess->exitStatus());
+ }
+ } else {
+ ok = _error->Error( "Child for %s was killed by signal %d",
+ argv [0], m_exitedProcess->exitSignal());
+ }
+
+ if (ok) // do we run scripts in case dpkg died???
+ ok = runScripts ("DPkg::Post-Invoke", false);
+
+ return ok;
+}
+
+ExtTerminalInterface *DPkgPM::terminal() {
+ return static_cast<ExtTerminalInterface *>(
+ m_terminalPart->qt_cast( "ExtTerminalInterface" ) );
+}
+
+bool DPkgPM::forkScript (const char *cmd, bool fP)
+{
+ std::cerr << "adept::DPkgPM::forkScript(\"" << cmd << "\")" << std::endl;
+ if (fP) {
+ if (pipe( m_scriptPipe ) != 0)
+ return _error->Errno(
+ "pipe","Failed to create IPC pipe to subprocess");
+ SetCloseExec (m_scriptPipe[0], true);
+ SetCloseExec (m_scriptPipe[1], true);
+ }
+ QStrList l;
+ l.append ("/bin/sh");
+ l.append ("-c");
+ l.append (cmd);
+ if (fP) {
+ connect( m_terminalPart, SIGNAL( forkedChild() ),
+ this, SLOT( setupScriptPipe() ) );
+ }
+
+ connect( m_terminalPart, SIGNAL( processExited( KProcess * ) ),
+ this, SLOT( processExit( KProcess * ) ) );
+ connect( m_terminalPart, SIGNAL( processExited( const KProcess * ) ),
+ this, SLOT( processExitC( const KProcess * ) ) );
+
+ m_processRunning = true;
+ terminal()->startProgram( u8( "/bin/sh" ), l);
+
+ if (fP) {
+ if (!feedPackages())
+ return _error->Error("Failed feeding packages to script");
+ }
+
+ while (m_processRunning) {
+ kapp->processEvents();
+ usleep(50000);
+ }
+
+ std::cerr << "END: adept::DPkgPM::forkScript(\""
+ << cmd << "\")" << std::endl;
+
+ if (m_exitedProcess->normalExit()) {
+ if (m_exitedProcess->exitStatus() != 0) {
+ return _error -> Error("Child for %s exited with error %d",
+ cmd, m_exitedProcess->exitStatus());
+ } else {
+ return true;
+ }
+ } else {
+ return _error->Error("Child for %s was killed by signal %d",
+ cmd, m_exitedProcess->exitSignal());
+ }
+}
+
+void DPkgPM::processExit(KProcess *p) {
+ processExitC( p );
+}
+
+void DPkgPM::processExitC(const KProcess *p)
+{
+ std::cerr << "a process exited!" << std::endl;
+ m_processRunning = false;
+ m_exitedProcess = p;
+}
+
+void DPkgPM::setupScriptPipe()
+{
+ // setupScript();
+ // std::cerr << "setupScriptPipe()" << std::endl;
+ dup2 (m_scriptPipe[0], STDIN_FILENO);
+}
+
+void DPkgPM::setupDpkgChild()
+{
+ // setupScript();
+ // std::cerr << "setupDpkgChild()" << std::endl;
+ setupChild();
+}
+
+bool DPkgPM::Go( int )
+{
+ std::cerr << "kapture::DPkgPM::Go ()" << std::endl;
+ statusChanged( 0, i18n( "Preparing..." ) );
+ bool ret = aptFront::DPkgPM::Go(-1);
+ QStrList l;
+ l.append("echo");
+ l.append("dpkg run finished!");
+ terminal()->startProgram( u8( "echo" ), l );
+ statusChanged( 100, i18n( "Done" ) );
+ return ret;
+}
+
+void DPkgPM::dpkgMonitor ()
+{
+ aptFront::DPkgPM::dpkgMonitor();
+ kapp->processEvents();
+}
+
+void DPkgPM::updateStatus( std::string pkg, std::string ev, std::string r )
+{
+ std::string op, msg;
+ aptFront::DPkgPM::updateStatus( pkg, ev, r );
+ entity::Package p = cache::Global::get().packages().packageByName( pkg );
+
+ if ( m_currentOp == OInstall ) {
+ if ( p.markedNewInstall() ) {
+ if ( ev == "half-installed" )
+ msg = u8( i18n( "Preparing installation of %1..." ) );
+ else if ( ev == "unpacked" )
+ msg = u8( i18n( "Unpacking %1..." ) );
+ } else if ( p.markedUpgrade() ) {
+ if ( ev == "half-installed" )
+ msg = u8( i18n( "Preparing upgrade of %1..." ) );
+ else if ( ev == "unpacked" || ev == "half-configured" )
+ msg = u8( i18n( "Replacing %1 with new version..." ) );
+ }
+ } else if ( m_currentOp == OConfigure ) {
+ if ( p.markedNewInstall() ) {
+ if ( ev == "unpacked" )
+ msg = u8( i18n( "Preparing to configure %1..." ) );
+ else if ( ev == "half-configured" )
+ msg = u8( i18n( "Configuring %1..." ) );
+ else if ( ev == "installed" )
+ msg = u8( i18n( "Installed %1" ) );
+ } else if ( p.markedUpgrade() ) {
+ if ( ev == "unpacked" )
+ msg = u8( i18n( "Preparing to configure new version of %1..." ) );
+ else if ( ev == "half-configured" )
+ msg = u8( i18n( "Configuring new version of %1..." ) );
+ else if ( ev == "installed" )
+ msg = u8( i18n( "Upgraded %1" ) );
+ }
+ } else if ( m_currentOp == ORemove ) {
+ if ( ev == "installed" )
+ msg = u8( i18n( "Preparing to remove %1..." ) );
+ else if ( ev == "half-configured" || ev == "half-installed" )
+ msg = u8( i18n( "Removing %1..." ) );
+ else if ( ev == "config-files" || ev == "not-installed" )
+ msg = u8( i18n( "Removed %1" ) );
+ } else if ( m_currentOp == OPurge ) {
+ if ( ev == "config-files" )
+ msg = u8( i18n( "Preparing to purge %1..." ) );
+ else if ( ev == "not-installed" )
+ msg = u8( i18n( "Purged %1" ) );
+ }
+
+ std::cerr << "updateStatus( " << pkg << ", " << ev << ", " << r << ")" << std::endl;
+ std::cerr << "updateStatus: msg = " << msg << std::endl;
+ std::cerr << "updateStatus: seen = " << m_seenOpCount
+ << ", total = " << m_totalOpCount << std::endl;
+ statusChanged( ( m_seenOpCount * 100 ) / m_totalOpCount,
+ u8( msg ).arg( pkg ) + ( ( r == "") ? "" : (" (" + r + ")") ) );
+}
+
+}
+
+#include "dpkgpm-gui.moc"
diff --git a/adept/adept/dpkgpm-gui.h b/adept/adept/dpkgpm-gui.h
new file mode 100644
index 0000000..435ee7f
--- /dev/null
+++ b/adept/adept/dpkgpm-gui.h
@@ -0,0 +1,68 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm-gui.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#ifndef EPT_DPKGPM_H
+# define EPT_DPKGPM_H
+
+#include <apt-pkg/debsystem.h>
+#include <adept/dpkgpm.h>
+#include <kde_terminal_interface.h>
+#include <kprocess.h>
+#include <kdialogbase.h>
+
+class KListBox;
+namespace KParts {
+class Part;
+}
+
+namespace adept {
+
+class PkgSystem : public QObject, public debSystem
+{
+ Q_OBJECT
+public:
+ PkgSystem ();
+ virtual pkgPackageManager *CreatePM( pkgDepCache *Cache ) const;
+ virtual void setTerminal( KParts::Part *t );
+ KParts::Part *terminal() { return m_terminalPart; }
+ virtual int Score( Configuration const &Cnf ) {
+ return debSystem::Score (Cnf) + 2; };
+protected:
+ KParts::Part *m_terminalPart;
+signals:
+ void statusChanged( int p, QString m );
+};
+
+class DPkgPM : public QObject, public aptFront::DPkgPM
+{
+ Q_OBJECT
+public:
+ DPkgPM (pkgDepCache *c, KParts::Part *t);
+ virtual bool forkDpkg (char *const argv[]);
+ virtual void dpkgMonitor (void);
+ virtual bool Go (int);
+ virtual bool forkScript (const char *, bool);
+ ExtTerminalInterface *terminal();
+ virtual void updateStatus( std::string pkg, std::string ev, std::string r );
+
+public slots:
+ void processExitC(const KProcess *p);
+ void processExit(KProcess *p);
+ void setupScriptPipe();
+ void setupDpkgChild();
+
+signals:
+ void statusChanged( int p, QString m );
+
+protected:
+ KParts::Part *m_terminalPart;
+ // DPkgProgress *m_prog;
+ bool m_processRunning:1;
+ const KProcess *m_exitedProcess;
+};
+
+}
+
+#endif
diff --git a/adept/adept/dpkgpm.cpp b/adept/adept/dpkgpm.cpp
new file mode 100644
index 0000000..f4b4f0d
--- /dev/null
+++ b/adept/adept/dpkgpm.cpp
@@ -0,0 +1,462 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include "dpkgpm.h"
+#include <signal.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <iostream>
+#include <sstream>
+
+using namespace std;
+using namespace aptFront;
+using namespace cache;
+
+/* === PkgSystem === */
+DPkgPM::DPkgPM (pkgDepCache *C)
+ : pkgDPkgPM (C), m_seenOpCount( 0 ), m_totalOpCount( 0 )
+{
+}
+
+bool DPkgPM::Go( int )
+{
+ cerr << "DPkgPM::Go()" << endl;
+ computeTotals();
+ if (runScripts ("DPkg::Pre-Invoke", false) == false)
+ return false;
+ if (runScripts ("DPkg::Pre-Install-Pkgs", true) == false)
+ return false;
+
+ for (vector<Item>::iterator I = List.begin(); I != List.end();) {
+ char *const *argv;
+ if (! setupArgs (&argv, I))
+ return false;
+
+ cerr << "running '";
+ for (unsigned int k = 0; argv [k]; k++)
+ cerr << argv[k] << ' ';
+ cerr << "'" << endl;
+ if (_config->FindB("Debug::pkgDPkgPM",false) == true)
+ {
+ for (unsigned int k = 0; argv [k]; k++)
+ cerr << argv[k] << ' ';
+ cerr << endl;
+ continue;
+ }
+
+ if (! forkDpkg (argv))
+ return false;
+ delete[] argv;
+ if (! runScripts ("DPkg::Post-Invoke", false))
+ return false;
+ }
+ return true;
+}
+
+void DPkgPM::computeTotals()
+{
+ m_totalOpCount = 0;
+ for (vector<Item>::iterator I = List.begin(); I != List.end();I++)
+ {
+ entity::Package p = cache::Global::get().packages().packageByName(
+ I->Pkg.Name() );
+ int x = 0;
+ switch ( I->Op ) {
+ case Item::Remove: x = 4; break;
+ case Item::Install: p.markedUpgrade() ? x = 3 : x = 2; break;
+ case Item::Purge: x = 2; break;
+ case Item::Configure: x = 3; break;
+ }
+ m_totalOpCount += x;
+ }
+}
+
+bool DPkgPM::forkDpkg (char *const argv[])
+{
+ cerr << "DPkgPM::forkDpkg ()" << endl;
+ cout << flush;
+ clog << flush;
+ cerr << flush;
+
+ /* Mask off sig int/quit. We do this because dpkg also does when
+ it forks scripts. What happens is that when you hit ctrl-c it sends
+ it to all processes in the group. Since dpkg ignores the signal
+ it doesn't die but we do! So we must also ignore it */
+ sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
+ sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN);
+
+ // Fork dpkg
+ pid_t Child = ExecFork();
+ if (Child == 0) {
+ if (! setupChild ()) {
+ cerr << "Error in dpkg post-fork setup!" << endl;
+ _exit (100);
+ }
+ execvp (argv [0], argv);
+ cerr << "Error executing dpkg!" << endl;
+ _exit (100);
+ }
+
+ close( m_dpkgPipe[1] );
+ fcntl( m_dpkgPipe[0], F_SETFL, O_NONBLOCK );
+
+ int Status = 0;
+ int ret = 0;
+ while ((ret = waitpid (Child, &Status, WNOHANG)) != Child) {
+ if (errno == EINTR || ret == 0) {
+ dpkgMonitor ();
+ usleep (200000); // 0.2 second hang
+ continue;
+ }
+ runScripts ("DPkg::Post-Invoke", false);
+
+ signal(SIGQUIT,old_SIGQUIT);
+ signal(SIGINT,old_SIGINT);
+ return _error -> Errno ("waitpid","Couldn't wait for subprocess");
+ }
+
+ signal(SIGQUIT,old_SIGQUIT);
+ signal(SIGINT,old_SIGINT);
+
+ // Check for an error code.
+ if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
+ {
+ runScripts ("DPkg::Post-Invoke", false);
+ if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV)
+ return _error->Error("Sub-process %s received a segmentation fault.", argv [0]);
+
+ if (WIFEXITED(Status) != 0)
+ return _error->Error("Sub-process %s returned an error code (%u)", argv[0], WEXITSTATUS(Status));
+
+ return _error->Error("Sub-process %s exited unexpectedly", argv[0]);
+ }
+
+ return true;
+}
+
+bool DPkgPM::setupArgs (char *const**a, std::vector<Item>::iterator &I)
+{
+ cerr << "DPkgPM::setupArgs ()" << endl;
+ unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",350);
+ unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",8192);
+
+ vector<Item>::iterator J = I;
+ for (; J != List.end() && J->Op == I->Op; J++);
+
+ // Generate the argument list
+ const char **Args = new const char *[MaxArgs + 50];
+ if (J - I > (signed)MaxArgs)
+ J = I + MaxArgs;
+
+ unsigned int n = 0;
+ unsigned long Size = 0;
+ string Tmp = _config->Find("Dir::Bin::dpkg","dpkg");
+ Args[n++] = Tmp.c_str();
+ Size += strlen(Args[n-1]);
+
+ // Stick in any custom dpkg options
+ Configuration::Item const *Opts = _config->Tree("DPkg::Options");
+ if (Opts != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ Args[n++] = Opts->Value.c_str();
+ Size += Opts->Value.length();
+ }
+ }
+
+ pipe( m_dpkgPipe );
+ stringstream fds;
+ fds << m_dpkgPipe[1];
+ std::cerr << "reading end of the pipe: " << m_dpkgPipe[0] << std::endl;
+
+ Args[n++] = "--status-fd";
+ Size += strlen(Args[n-1]);
+ // bah, we leak a string every time we run dpkg... silly eh
+ Args[n++] = ( new string( fds.str() ) )->c_str();
+ Size += strlen(Args[n-1]);
+
+ switch (I->Op)
+ {
+ case Item::Remove:
+ Args[n++] = "--force-depends";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--force-remove-essential";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--remove";
+ Size += strlen(Args[n-1]);
+ m_currentOp = ORemove;
+ break;
+
+ case Item::Purge:
+ Args[n++] = "--force-depends";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--force-remove-essential";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--purge";
+ Size += strlen(Args[n-1]);
+ m_currentOp = OPurge;
+ break;
+
+ case Item::Configure:
+ Args[n++] = "--configure";
+ Size += strlen(Args[n-1]);
+ m_currentOp = OConfigure;
+ break;
+
+ case Item::Install:
+ Args[n++] = "--unpack";
+ Size += strlen(Args[n-1]);
+ m_currentOp = OInstall;
+ break;
+ }
+
+ // Write in the file or package names
+ if (I->Op == Item::Install)
+ {
+ for (;I != J && Size < MaxArgBytes; I++)
+ {
+ if (I->File[0] != '/')
+ return _error->Error("Internal Error, Pathname to install is not absolute '%s'",I->File.c_str());
+ Args[n++] = I->File.c_str();
+ Size += strlen(Args[n-1]);
+ }
+ }
+ else
+ {
+ for (;I != J && Size < MaxArgBytes; I++)
+ {
+ Args[n++] = I->Pkg.Name();
+ Size += strlen(Args[n-1]);
+ }
+ }
+ Args[n] = 0;
+ J = I;
+ *a = (char *const *)Args;
+ return true;
+}
+
+bool DPkgPM::setupChild ()
+{
+ // cerr << "DPkgPM::setupChild ()" << endl;
+ if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
+ return false;
+
+ if (_config->FindB("DPkg::FlushSTDIN",true) == true && isatty(STDIN_FILENO))
+ {
+ int Flags,dummy;
+ if ((Flags = fcntl(STDIN_FILENO,F_GETFL,dummy)) < 0)
+ return false;
+
+ // Discard everything in stdin before forking dpkg
+ if (fcntl(STDIN_FILENO,F_SETFL,Flags | O_NONBLOCK) < 0)
+ return false;
+
+ while (read(STDIN_FILENO,&dummy,1) == 1);
+
+ if (fcntl(STDIN_FILENO,F_SETFL,Flags & (~(long)O_NONBLOCK)) < 0)
+ return false;
+ }
+
+ /* No Job Control Stop Env is a magic dpkg var that prevents it
+ from using sigstop */
+ putenv("DPKG_NO_TSTP=yes");
+ close( m_dpkgPipe[0] );
+
+ return true;
+}
+
+void DPkgPM::dpkgMonitor ()
+{
+ char buf[1024];
+ int r = read( m_dpkgPipe[0], buf, 1023 );
+
+ if ( r > 0 ) {
+ buf[r] = 0;
+ std::string b( buf );
+
+ // parse status updates from dpkg
+ while ( true ) {
+ std::string::size_type colon, nl = b.find( '\n' );
+ m_statusBuffer.append( string( b, 0, nl ) );
+ if ( nl == std::string::npos )
+ break;
+
+ // cerr << "dpkg status completed line: " << m_statusBuffer << endl;
+ colon = m_statusBuffer.find( ": " );
+ string l( m_statusBuffer, 0, colon );
+ string r( m_statusBuffer, colon + 2, string::npos );
+
+ if ( l == "status" ) {
+ colon = r.find( ": " );
+ std::string p( r, 0, colon );
+ r = string( r, colon + 2, string::npos );
+
+ colon = r.find( ": " );
+ std::string e( r, 0, colon );
+ if ( colon == string::npos )
+ r = "";
+ else
+ r = string( r, colon + 2, string::npos );
+ updateStatus( p, e, r );
+ }
+
+ b = string( b, nl + 1, string::npos );
+ m_statusBuffer = string();
+ nl = b.find( '\n' );
+ }
+ }
+}
+
+void DPkgPM::updateStatus( std::string pkg, std::string ev, std::string r )
+{
+ //std::cerr << "DPkgPM::updateStatus " << pkg << " " << ev << " " << r
+ // << std::endl;
+ if (ev.find("error") != string::npos) {
+ char* list[5];
+ char *line = strdup(m_statusBuffer.c_str());
+ TokSplitString(':', line, list, sizeof(list)/sizeof(list[0]));
+ WriteApportReport(list[1], list[3]);
+ free(line);
+ return;
+ }
+
+ OpAndStatus os = std::make_pair( m_currentOp, ev );
+ if ( m_seenOps[ std::make_pair( os, pkg ) ] == 0 ) {
+ m_seenOpCount++;
+ m_seenOps[ std::make_pair( os, pkg ) ] = 1;
+ }
+}
+
+bool DPkgPM::runScripts (const char *Cnf, bool sP)
+{
+ cerr << "DPkgPM::runScripts ('" << Cnf << "', " << sP << ")" << endl;
+ Configuration::Item const *Opts = _config->Tree(Cnf);
+ if (Opts == 0 || Opts->Child == 0)
+ return true;
+ Opts = Opts->Child;
+
+ unsigned int Count = 1;
+ for (; Opts != 0; Opts = Opts->Next, Count++)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ // Determine the protocol version
+ string OptSec = Opts->Value;
+ string::size_type Pos;
+ if ((Pos = OptSec.find(' ')) == string::npos || Pos == 0)
+ Pos = OptSec.length();
+ OptSec = "DPkg::Tools::Options::" + string(Opts->Value.c_str(),Pos);
+
+ m_version = _config->FindI (OptSec + "::Version", 1);
+
+ // Purified Fork for running the script
+ // pid_t Process = ExecFork();
+ forkScript (Opts->Value.c_str(), sP);
+ }
+
+ return true;
+}
+
+bool DPkgPM::SendV1Pkgs (FILE *F)
+{
+ bool Die = false;
+ for (vector<Item>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ // Only deal with packages to be installed from .deb
+ if (I->Op != Item::Install)
+ continue;
+
+ // No errors here..
+ if (I->File[0] != '/')
+ continue;
+
+ /* Feed the filename of each package that is pending install
+ into the pipe. */
+ fprintf(F,"%s\n",I->File.c_str());
+ if (ferror(F) != 0)
+ {
+ Die = true;
+ break;
+ }
+ }
+ return ! Die;
+}
+
+bool DPkgPM::forkScript (const char *cmd, bool fP)
+{
+ cerr << "DPkgPM::forkScript ()" << endl;
+ if (fP) {
+ if (pipe( m_scriptPipe ) != 0)
+ return _error -> Errno("pipe", "Failed to create IPC pipe to subprocess");
+ SetCloseExec( m_scriptPipe[ 0 ], true );
+ SetCloseExec( m_scriptPipe[ 1 ], true );
+ }
+ pid_t Process = ExecFork ();
+ if (Process == 0)
+ {
+ setupScript (cmd, fP);
+
+ const char *Args[4];
+ Args[0] = "/bin/sh";
+ Args[1] = "-c";
+ Args[2] = cmd;
+ Args[3] = 0;
+ execv(Args[0],(char **)Args);
+ _exit(100);
+ }
+
+ if (fP) {
+ if (! feedPackages ())
+ return _error -> Error ("Failed feeding packages to script");
+ }
+
+ // Clean up the sub process
+ if (ExecWait (Process, cmd) == false)
+ return _error -> Error("Failure running script %s", cmd);
+}
+
+void DPkgPM::setupScript (const char * /*cmd*/, bool fP)
+{
+ cerr << "DPkgPM::setupScript ()" << endl;
+ if (fP) {
+ dup2 (m_scriptPipe [0], STDIN_FILENO);
+ SetCloseExec(STDOUT_FILENO, false);
+ SetCloseExec(STDIN_FILENO, false);
+ SetCloseExec(STDERR_FILENO, false);
+ }
+}
+
+bool DPkgPM::feedPackages ()
+{
+ close(m_scriptPipe[ 0 ]);
+
+ FILE *F = fdopen(m_scriptPipe[ 1 ], "w");
+ if (F == 0)
+ return _error->Errno("fdopen","Faild to open new FD");
+
+ // Feed it the filenames.
+ bool Die = false;
+ if (m_version <= 1)
+ Die = !SendV1Pkgs (F);
+ else
+ Die = !SendV2Pkgs(F);
+
+ fclose(F);
+ return ! Die;
+}
diff --git a/adept/adept/dpkgpm.h b/adept/adept/dpkgpm.h
new file mode 100644
index 0000000..b899693
--- /dev/null
+++ b/adept/adept/dpkgpm.h
@@ -0,0 +1,49 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-pkg/dpkgpm.h>
+#include <string>
+#include <vector>
+#include <map>
+
+#ifndef DPKGPM_H
+# define DPKGPM_H
+
+namespace aptFront {
+
+class DPkgPM : public pkgDPkgPM {
+protected:
+ enum Op { ORemove, OPurge, OConfigure, OInstall };
+ Op m_currentOp;
+ int m_dpkgPipe[2];
+ int m_scriptPipe[2];
+ unsigned m_version;
+ std::string m_statusBuffer;
+ typedef std::pair< Op, std::string > OpAndStatus;
+ typedef std::map< std::pair< OpAndStatus, std::string >, int > SeenOps;
+ SeenOps m_seenOps;
+ int m_totalOpCount;
+ int m_seenOpCount;
+public:
+ DPkgPM (pkgDepCache *C);
+ virtual bool Go ( int );
+ virtual void computeTotals();
+ virtual bool setupArgs (char *const **a, std::vector<Item>::iterator &I);
+ virtual bool forkDpkg (char *const argv[]);
+ virtual bool forkScript (const char *, bool);
+ virtual bool runScripts (const char *, bool);
+ virtual bool setupChild ();
+ virtual void setupScript (const char *, bool);
+ virtual void dpkgMonitor (void);
+ virtual bool SendV1Pkgs (FILE *);
+ virtual bool feedPackages (void);
+ virtual void updateStatus( std::string pkg, std::string ev, std::string r );
+};
+
+}
+
+
+#endif /* ifndef DPKGPM_H */
+
diff --git a/adept/adept/easytagfilter.cpp b/adept/adept/easytagfilter.cpp
new file mode 100644
index 0000000..3049d60
--- /dev/null
+++ b/adept/adept/easytagfilter.cpp
@@ -0,0 +1,81 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+#include "easytagfilter.h"
+
+using namespace aptFront;
+using namespace adept;
+
+static void fillCombo( QComboBox *c, const std::string f ) {
+ Cache &cache = cache::Global::get(); // FIXME?
+ std::set< ept::debtags::Tag > t;
+ t = cache.tags().tags( f );
+ for (std::set< ept::debtags::Tag >::iterator i = t.begin(); i != t.end(); ++ i) {
+ c->insertItem( i->name() );
+ }
+}
+
+EasyTagFilterWidget::EasyTagFilterWidget( QWidget *parent, const char *name )
+ : EasyTagFilterUi( parent, name )
+{
+ fillCombo( m_use, "use" );
+ fillCombo( m_interface, "interface" );
+ fillCombo( m_worksWith, "works-with" );
+ fillCombo( m_role, "role" );
+ connect( m_use, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_interface, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_worksWith, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_role, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_reset, SIGNAL( clicked() ),
+ this, SLOT( reset() ) );
+}
+
+static void setFacet( QComboBox *c, const std::string fac,
+ EasyTagFilter< entity::Package > &f )
+{
+ if (c->currentItem())
+ f.set( fac, c->currentText() );
+}
+
+EasyTagFilterWidget::Predicate EasyTagFilterWidget::predicate()
+{
+ EasyTagFilter< entity::Package > f;
+ setFacet( m_use, "use", f );
+ setFacet( m_interface, "interface", f );
+ setFacet( m_worksWith, "works-with", f );
+ setFacet( m_role, "role", f );
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void setCombo( QComboBox *c, const std::string &t ) {
+ c->blockSignals( true );
+ if (t == "")
+ c->setCurrentItem( 0 );
+ else
+ c->setCurrentText( t );
+ c->blockSignals( false );
+}
+
+void EasyTagFilterWidget::predicateChanged() {
+ typedef EasyTagFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ setCombo( m_use, f.get( "use" ) );
+ setCombo( m_interface, f.get( "interface" ) );
+ setCombo( m_role, f.get( "role" ) );
+ setCombo( m_worksWith, f.get( "works-with" ) );
+}
+
+void EasyTagFilterWidget::reset() {
+ setCombo( m_use, "" );
+ setCombo( m_interface, "" );
+ setCombo( m_role, "" );
+ setCombo( m_worksWith, "" );
+ emit widgetsChanged();
+}
diff --git a/adept/adept/easytagfilter.h b/adept/adept/easytagfilter.h
new file mode 100644
index 0000000..66977d5
--- /dev/null
+++ b/adept/adept/easytagfilter.h
@@ -0,0 +1,93 @@
+/** -*- C++ -*-
+ @file adept/quickfilter.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <kdebug.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+//#include <apt-front/cache/component/tags.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/easytagfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+
+#ifndef EPT_EASYTAGFILTER_H
+#define EPT_EASYTAGFILTER_H
+
+namespace adept {
+
+template< typename T >
+struct EasyTagFilter : predicate::Implementation< T, EasyTagFilter< T > >,
+ InterfacingPredicate
+{
+ typedef std::map< std::string, std::string > Tags;
+
+ EasyTagFilter() {
+ setupPredicate();
+ }
+
+ void setupPredicate() {
+ Cache &cache = cache::Global::get(); // FIXME?
+ m_op = predicate::True< T >();
+ for (Tags::iterator i = m_tags.begin(); i != m_tags.end(); ++i ) {
+ m_op = m_op and predicate::Factory< T >::tag(
+ cache.tags().tagByName( i->first + "::" + i->second ) );
+ // kdDebug() << t.summary() << endl;
+ }
+ }
+
+ std::string summary() const {
+ std::string r( i18n( "EasyTag filter: " ).local8Bit() );
+ for (Tags::const_iterator j, i = m_tags.begin();
+ i != m_tags.end(); ++i ) {
+ j = i; ++j;
+ r += i->first + ": " + i->second;
+ if (j != m_tags.end())
+ r += ", ";
+ }
+ return r;
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const EasyTagFilter &o ) const {
+ return o.m_tags == m_tags;
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ void set( const std::string &f, const std::string &t ) {
+ m_tags[f] = t;
+ setupPredicate();
+ }
+
+ std::string get( const std::string &f ) {
+ return m_tags[ f ];
+ }
+
+protected:
+ Tags m_tags;
+ predicate::Predicate< T > m_op;
+};
+
+class EasyTagFilterWidget : public EasyTagFilterUi
+{
+ Q_OBJECT
+public:
+ EasyTagFilterWidget( QWidget *parent, const char *name = 0 );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+ void reset();
+};
+
+}
+
+#endif
diff --git a/adept/adept/easytagfilterui.ui b/adept/adept/easytagfilterui.ui
new file mode 100644
index 0000000..998bf2b
--- /dev/null
+++ b/adept/adept/easytagfilterui.ui
@@ -0,0 +1,201 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::EasyTagFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>EasyTagFilterUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>611</width>
+ <height>116</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>QuickFilterUi</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_title</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;Easy Tag Filter&lt;/b&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Works With:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Role:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>Anything</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_worksWith</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="4">
+ <property name="name">
+ <cstring>m_reset</cstring>
+ </property>
+ <property name="text">
+ <string>Reset Filter</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="3">
+ <item>
+ <property name="text">
+ <string>Any</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_interface</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Use:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>Any</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_use</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Any</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_role</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Interface:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>130</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/adept/extendablelist.cpp b/adept/adept/extendablelist.cpp
new file mode 100644
index 0000000..c3abf1d
--- /dev/null
+++ b/adept/adept/extendablelist.cpp
@@ -0,0 +1,339 @@
+#include <kdebug.h>
+#include <qtimer.h>
+#include <qobjectlist.h>
+#include <qpainter.h>
+#include <qimage.h>
+#include <kiconeffect.h>
+#include <kiconloader.h>
+
+#include <adept/extendablelist.h>
+#include <adept/utils.h>
+
+using namespace adept;
+
+ExtendableList::ExtendableList( QWidget *p, const char *n )
+ : KListView( p, n ),
+ m_toggleColumn( 0 ), m_inDtor( false ),
+ m_extenderUpdateScheduled( false ),
+ m_needSort( false ),
+ m_extenderHighlight( false )
+{
+ // kdDebug() << "connecting processClick har har" << endl;
+ connect( this, SIGNAL( clicked( QListViewItem *,
+ const QPoint &, int ) ),
+ this, SLOT( processClick( QListViewItem *,
+ const QPoint &, int ) ) );
+ connect( this, SIGNAL( moved() ),
+ this, SLOT( delayedUpdateExtenders() ) );
+ connect( this, SIGNAL( collapsed( QListViewItem * ) ),
+ this, SLOT( delayedUpdateExtenders() ) );
+ connect( this, SIGNAL( expanded( QListViewItem * ) ),
+ this, SLOT( delayedUpdateExtenders() ) );
+ setTreeStepSize( 15 );
+
+ m_baseIcon = SmallIcon( u8( "extender_closed" ) );
+ m_extendedIcon = SmallIcon( u8( "extender_opened" ) );
+ QImage img;
+ img = m_baseIcon;
+ KIconEffect::toGray( img, 1.0 );
+ m_unextendableIcon = QPixmap( img );
+}
+
+void ExtendableList::keyPressEvent( QKeyEvent *e ) {
+ ExtendableItem *item = dynamic_cast< ExtendableItem* >( currentItem() );
+ if ( item ) {
+ if ( item->extendable() ) {
+ if ( item->extender() && e->key() == Qt::Key_Left ) {
+ return item->hideExtender();
+ } else if ( !item->extender() && e->key() == Qt::Key_Right ) {
+ return item->showExtender();
+ }
+ }
+ KListView::keyPressEvent( e );
+ if ( e->key() == Qt::Key_Left || e->key() == Qt::Key_Right )
+ item->updateIcon();
+ } else return KListView::keyPressEvent( e );
+}
+
+void ExtendableList::openToplevel() {
+ QListViewItem *i;
+ for ( i = firstChild(); i != 0; i = i->nextSibling() ) {
+ i->setOpen( true );
+ }
+}
+
+int ExtendableList::extenderOffset( ExtendableItem *i )
+{
+ int c = 0, x = 0;
+
+ while( c < m_toggleColumn ) {
+ x += columnWidth( c );
+ c ++;
+ }
+
+ if ( m_toggleColumn >= 0 ) {
+ // *sigh*
+ if ( i->pixmap( m_toggleColumn ) )
+ x += i->pixmap( m_toggleColumn )->width();
+ if ( rootIsDecorated() )
+ x += treeStepSize();
+ if ( i->parent() )
+ x += treeStepSize();
+ }
+
+ return x + 2; // + 2 = icon margin, apparently... gnah
+}
+
+void ExtendableList::updateExtender( ExtendableItem *i )
+{
+ // setUpdatesEnabled( false );
+
+ // since updateGeometries is private, we use this dirty trick to
+ // get at it (since setContentsPos in QListView calls it
+ setContentsPos( contentsX(), contentsY() );
+
+ if ( !i->isVisible() || ( i->parent() && !i->parent()->isOpen() ) ) {
+ kdDebug() << "hiding invisible item's extender" << endl;
+ i->hideExtender();
+ return;
+ }
+
+ // QRect rect = itemRect( i );
+ addChild( i->extender(), extenderOffset( i ), itemPos( i ) );
+ // addChild( i->extender(), x, rect.y() );
+ i->extender()->show();
+ i->extender()->resize( visibleWidth() - extenderOffset( i ),
+ i->extender()->height() );
+ if ( i->height() != i->extender()->frameSize().height() ) {
+ i->setHeight( i->extender()->frameSize().height() );
+ delayedUpdateExtenders(); // re-update since we broke layout
+ }
+
+ i->extender()->setupColors();
+
+ // setUpdatesEnabled( true );
+ // addChild( i->extender(), x, itemPos( i ) );
+ // QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) );
+ // QTimer::singleShot( 0, i->extender(), SLOT( setupColors() ) );
+}
+
+void ExtendableList::delayedUpdateExtenders()
+{
+ if ( m_extenderUpdateScheduled )
+ return;
+ m_extenderUpdateScheduled = true;
+ // kdDebug() << "ExtendableList::delayedUpdateExtenders()" << endl;
+ QTimer::singleShot( 0, this, SLOT( updateExtenders() ) );
+}
+
+void ExtendableList::clear()
+{
+ kdDebug() << "ExtendableList::clear()" << endl;
+ KListView::clear();
+ kdDebug() << "end of ExtendableList::clear()" << endl;
+}
+
+void ExtendableList::show()
+{
+ KListView::show();
+ updateExtenders();
+}
+
+void ExtendableList::showEvent( QShowEvent *e )
+{
+ KListView::showEvent( e );
+ updateExtenders();
+}
+
+void ExtendableList::resizeEvent( QResizeEvent *e )
+{
+ KListView::resizeEvent( e );
+ updateExtenders();
+ // delayedUpdateExtenders();
+}
+
+void ExtendableList::updateExtenders()
+{
+ m_extenderUpdateScheduled = false;
+ setUpdatesEnabled( false );
+ // updateGeometries();
+ // since updateGeometries is private, we use this dirty trick to
+ // get at it (since setContentsPos in QListView calls it
+ setContentsPos( contentsX(), contentsY() );
+ extendersChanged();
+ kdDebug() << "ExtendableList::updateExtenders(); count = "
+ << m_extenders.size() << endl;
+ if ( m_needSort ) {
+ std::sort( m_extenders.begin(), m_extenders.end(), ExtendableItem::s_less );
+ m_needSort = false;
+ }
+
+ std::for_each( m_extenders.begin(), m_extenders.end(),
+ std::bind1st( std::mem_fun( &ExtendableList::updateExtender ),
+ this ) );
+
+ setUpdatesEnabled( true );
+ // triggerUpdate();
+ if ( !m_extenderUpdateScheduled )
+ QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) );
+ /* if ( m_extenders.empty() )
+ QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) ); */
+ // QTimer::singleShot( 0, this, SIGNAL( extendersChanged() ) );
+}
+
+void ExtendableList::addExtender( ExtendableItem *item )
+{
+ m_extenders.push_back( item );
+ m_needSort = true;
+ // std::sort( m_extenders.begin(), m_extenders.end(), ExtendableItem::s_less );
+ // updateExtender( item );
+ delayedUpdateExtenders();
+}
+
+void ExtendableList::removeExtender( ExtendableItem *i )
+{
+ kdDebug() << "ExtendableList::removeExtender( " << i << " )" << endl;
+ m_extenders.erase( std::remove( m_extenders.begin(),
+ m_extenders.end(), i ),
+ m_extenders.end() );
+ // the above retains ordering so no need to re-sort
+ if (!m_inDtor)
+ delayedUpdateExtenders();
+}
+
+void ExtendableList::processClick( QListViewItem *it,
+ const QPoint &pt, int c )
+{
+ // if (! it) return;
+ ExtendableItem *item = dynamic_cast< ExtendableItem* >( it );
+ if (!item) return;
+ kdDebug() << "ExtendableList::processClick (a real item)" << endl;
+
+ if (c == m_toggleColumn)
+ item->toggleExtender();
+ if ( item->extender() )
+ item->extender()->setupColors();
+ delayedUpdateExtenders();
+ /* if (item->extender()) {
+ if (c == m_toggleColumn)
+ item->toggleExtender();
+ } else
+ item->toggleExtender(); */
+}
+
+ExtendableList::~ExtendableList() {
+}
+
+ExtendableList *ExtendableItem::list()
+{
+ return dynamic_cast< ExtendableList * >( listView() );
+}
+
+bool ExtendableItem::s_less(
+ const ExtendableItem *a, const ExtendableItem *b )
+{
+ return a->less( b );
+}
+
+int ExtendableItem::compare( QListViewItem *i, int c, bool asc ) const
+{
+ ExtendableItem *o = dynamic_cast< ExtendableItem * >( i );
+ return int( o->less( this ) ) - int( less( o ) );
+}
+
+void ExtendableItem::updateIcon() {
+ QPixmap p;
+ if ( !extender() ) {
+ p = list()->baseIcon();
+ if ( !extendable() && !firstChild() ) {
+ p = list()->unextendableIcon();
+ } else if ( isOpen() ) {
+ p = list()->extendedIcon();
+ }
+ } else {
+ p = list()->extendedIcon();
+ }
+ setPixmap( list()->toggleColumn(), p );
+ setUpdatedIcon(p);
+
+ // umm hack
+ if ( dynamic_cast< ExtendableItem * >( parent() ) )
+ dynamic_cast< ExtendableItem * >( parent() )->updateIcon();
+}
+
+
+void ExtendableItem::toggleExtender()
+{
+ if (m_extender) {
+ setup();
+ if( list() ) // this could as well be 0... bah
+ list()->removeExtender( this );
+ delete m_extender;
+ m_extender = 0;
+ } else {
+ m_extender = createExtender();
+ if (m_extender) {
+ m_extender->setItem( this );
+ list()->addExtender( this );
+ }
+ if ( !m_extender && firstChild() ) {
+ setOpen( !isOpen() );
+ }
+ }
+ updateIcon();
+}
+
+void ExtendableItem::paintBranches( QPainter *p,
+ const QColorGroup &cg, int w, int y, int h )
+{
+ /* if (!isAlternate())
+ p->setBackgroundColor(
+ KGlobalSettings::alternateBackgroundColor() );
+ p->eraseRect( 0, y, w, h ); */
+ p->eraseRect( 0, 0, w, h );
+}
+
+/* void ExtendableItem::paintCell( QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ KListViewItem::paintCell( &_p, cg, column, width, alignment );
+ p->drawPixmap( 0, 0, pm );
+ } */
+
+
+static void setcolor( QWidget *w, ExtendableItem *i ) {
+ if ( i->isSelected() && i->list()->extenderHighlight() )
+ w->setPaletteBackgroundColor( w->colorGroup().highlight() );
+ else if ( i->isAlternate() )
+ w->setPaletteBackgroundColor(
+ KGlobalSettings::alternateBackgroundColor() );
+ else
+ w->setPaletteBackgroundColor( w->colorGroup().base() );
+ // w->setBackgroundMode( QWidget::PaletteBase );
+}
+void ItemExtender::setupColors()
+{
+ if ( !item() ) return;
+ setcolor( this, item() );
+ QObjectList *chld = queryList( "QWidget" );
+ QObjectListIt it( *chld );
+ QWidget *o;
+ while ((o = dynamic_cast< QWidget * >( it.current() )) != 0) {
+ setcolor( o, item() );
+ ++it;
+ }
+}
+
+ExtendableItem::~ExtendableItem()
+{
+ // kdDebug() << "~ExtendableList; list = " << list() << endl;
+ // kdDebug() << "extender() = " << extender() << endl;
+ while ( firstChild() )
+ delete firstChild(); // har har
+ if( extender() && list() ) // list() could be 0...
+ list()->removeExtender( this );
+ if (extender())
+ extender()->deleteLater();
+}
diff --git a/adept/adept/extendablelist.h b/adept/adept/extendablelist.h
new file mode 100644
index 0000000..e95df03
--- /dev/null
+++ b/adept/adept/extendablelist.h
@@ -0,0 +1,166 @@
+// -*- C++ -*-
+#include <klistview.h>
+#include <qpixmap.h>
+#include <qlayout.h>
+#include <kglobalsettings.h>
+#include <vector>
+
+#include <apt-front/utils/range.h>
+
+#ifndef EPT_EXTENDABLELIST_H
+#define EPT_EXTENDABLELIST_H
+namespace adept {
+
+using namespace aptFront;
+
+class ExtendableItem;
+class ExtendableList;
+class ItemExtender;
+
+class ExtendableList : public KListView {
+ Q_OBJECT
+public:
+ typedef bool(*ItemCompare)( const ExtendableItem *,
+ const ExtendableItem * );
+ ExtendableList( QWidget *p = 0, const char *n = 0 );
+ virtual ~ExtendableList();
+ QPixmap extendedIcon() { return m_extendedIcon; }
+ QPixmap baseIcon() { return m_baseIcon; }
+ QPixmap unextendableIcon() { return m_unextendableIcon; }
+ int extenderOffset( ExtendableItem *i );
+ void setExtenderHighlight( bool e ) { m_extenderHighlight = e; }
+ bool extenderHighlight() { return m_extenderHighlight; }
+public slots:
+ void addExtender( ExtendableItem *i );
+ void removeExtender( ExtendableItem *i );
+ void updateExtender( ExtendableItem *i );
+ void delayedUpdateExtenders();
+ void updateExtenders();
+ void setToggleColumn( int c ) {
+ m_toggleColumn = c;
+ }
+ unsigned toggleColumn() { return m_toggleColumn; }
+ virtual void show();
+ virtual void clear();
+ utils::Range< ExtendableItem * > extenders() {
+ return utils::range( m_extenders.begin(), m_extenders.end() ); }
+ void openToplevel();
+protected slots:
+ void processClick( QListViewItem *, const QPoint &, int );
+signals:
+ void extendersChanged();
+protected:
+ virtual void resizeEvent( QResizeEvent * );
+ virtual void showEvent( QShowEvent * );
+ virtual void keyPressEvent( QKeyEvent * );
+ std::vector< ExtendableItem * > m_extenders;
+ QPixmap m_extendedIcon;
+ QPixmap m_baseIcon;
+ QPixmap m_unextendableIcon;
+ int m_toggleColumn;
+ bool m_inDtor:1;
+ bool m_extenderUpdateScheduled:1;
+ bool m_needSort:1;
+ bool m_extenderHighlight:1;
+};
+
+class ExtendableItem : public KListViewItem {
+public:
+
+ ExtendableItem( ExtendableList *l )
+ : KListViewItem( l ), m_extender( 0 ) {
+ }
+
+ ExtendableItem( ExtendableList *l, ExtendableItem *prev )
+ : KListViewItem( l, prev ), m_extender( 0 ) {
+ }
+
+ ExtendableItem( ExtendableItem *p, ExtendableItem *prev )
+ : KListViewItem( p, prev ), m_extender( 0 ) {
+ }
+
+ ExtendableItem( ExtendableItem *p )
+ : KListViewItem( p ), m_extender( 0 ) {
+ }
+
+ virtual void setup() {
+ KListViewItem::setup();
+ updateIcon();
+ }
+ void toggleExtender();
+
+ void hideExtender() {
+ if (extender())
+ toggleExtender();
+ }
+
+ void showExtender() {
+ if (!extender())
+ toggleExtender();
+ }
+
+ ItemExtender *extender() { return m_extender; }
+
+ static bool s_less( const ExtendableItem *a, const ExtendableItem *b );
+
+ ExtendableList *list();
+
+ virtual void updateIcon();
+ virtual void setUpdatedIcon(QPixmap& pm) { return; };
+
+ virtual void paintBranches( QPainter *, const QColorGroup &, int, int, int );
+
+ virtual ItemExtender *createExtender() = 0;
+ virtual bool extendable() const { return false; }
+ virtual bool less( const ExtendableItem * ) const = 0;
+ virtual int compare( QListViewItem *other, int col, bool ascending ) const;
+
+ virtual ~ExtendableItem();
+ virtual void setHeight( int h ) { KListViewItem::setHeight( h ); }
+protected:
+ ItemExtender *m_extender;
+};
+
+class ItemExtender : public QWidget {
+ Q_OBJECT
+public:
+ // ItemExtender( ExtendableItem *item );
+ ItemExtender( QWidget *parent, const char *n )
+ : QWidget( parent, n ), m_item( 0 )
+ {}
+
+ virtual void setItem( ExtendableItem *i ) {
+ m_item = i;
+ }
+
+ virtual void polish() {
+ setupColors();
+ }
+
+ ExtendableItem *item() {
+ return m_item;
+ }
+
+ void resize( int w, int h ) {
+ setUpdatesEnabled( false );
+ QWidget::resize( w, h );
+ setUpdatesEnabled( true );
+ QWidget::resize( w, layout()->minimumSize().height() );
+ }
+
+ void resize( const QSize &s ) {
+ resize( s.width(), s.height() );
+ }
+
+public slots:
+ void setupColors();
+protected:
+ virtual void mouseReleaseEvent( QMouseEvent *e ) {
+ e->accept();
+ } // throw away mouse clicks :-)
+ ExtendableItem *m_item;
+};
+
+}
+
+#endif
diff --git a/adept/adept/filterlist.cpp b/adept/adept/filterlist.cpp
new file mode 100644
index 0000000..bb798cd
--- /dev/null
+++ b/adept/adept/filterlist.cpp
@@ -0,0 +1,232 @@
+#include <kdebug.h>
+#include <qpopupmenu.h>
+#include <qheader.h>
+#include <klineedit.h>
+
+//#include <tagcoll/InputMerger.h>
+
+//#include <apt-front/cache/component/tags.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <adept/lister.h>
+#include <adept/filterlist.h>
+#include <adept/quickfilter.h>
+#include <adept/statefilter.h>
+#include <adept/easytagfilter.h>
+#include <adept/tagfilter.h>
+
+
+using namespace adept;
+
+/*
+// TODO: Beat enrico till this lands in some of our libs...
+template< typename PKG, typename TAG >
+class TagcollConsumerAdaptor :
+ public utils::ConsumerImpl< PKG,TagcollConsumerAdaptor<PKG, TAG> >
+{
+protected:
+ Consumer<PKG, TAG>& m_out;
+
+public:
+ TagcollConsumerAdaptor( Consumer<PKG, TAG>& out) : m_out( out ) {}
+ virtual void consume( const PKG& a ) {
+ if (a != PKG())
+ m_out.consume(a, a.tags());
+ }
+};
+*/
+
+PredicateInterface::PredicateInterface( QWidget *w, const char *n )
+ : ItemExtender( w, n )
+{
+}
+
+void PredicateInterface::widgetsChanged() {
+ kdDebug() << "PredicateInterface::widgetsChanged()" << endl;
+ emit predicateDrop( m_pred );
+ m_pred = predicate();
+ emit predicateAdd( m_pred );
+ downcast< FilterItem >( item() ).setPredicate( m_pred );
+}
+
+FilterList::FilterList( QWidget *parent, const char *name )
+ : ExtendableList( parent, name ),
+ m_pred( predicate::True< entity::Entity >() ),
+ m_hidden( predicate::True< entity::Entity >() )
+{
+ m_itemsSeen = 0;
+ // addColumn( " ", 20 );
+ addColumn( i18n( "Active filters" ), 240 );
+ // setSortColumn( -1 );
+ /* setItemsMovable( true );
+ setDragEnabled( true );
+ setAcceptDrops( true ); */
+ setResizeMode( LastColumn );
+ setAllColumnsShowFocus (true);
+
+ resize( 240, 180 );
+ connect( this, SIGNAL(
+ contextMenuRequested( QListViewItem *, const QPoint
+ &, int ) ),
+ this, SLOT( contextMenu( QListViewItem *, const
+ QPoint &, int) ) );
+ connect( this, SIGNAL( extendersChanged() ),
+ this, SLOT( updateHeight() ) );
+}
+
+void FilterList::emitPredicateChanged() {
+ predicateChanged( m_hidden and m_pred );
+}
+
+void FilterList::updateHeight() {
+ int h = header()->height() + 4;
+ for ( QListViewItem *i = firstChild(); i != 0; i = i->nextSibling() ) {
+ h += i->totalHeight();
+ }
+ // int h = contentsHeight() + header()->height() + 4; // magic constant
+ setMinimumHeight( h );
+ setMaximumHeight( h );
+}
+
+void FilterList::drawContents( QPainter *p, int a, int b, int c, int d ) {
+ if ( m_itemsSeen != childCount() ) {
+ m_itemsSeen = childCount();
+ updateHeight();
+ } // hmm, doesn't work... bah :p
+ KListView::drawContents( p, a, b, c, d );
+}
+
+void FilterList::plugLister( Lister *l ) {
+ m_lister = l;
+ connect( this, SIGNAL( predicateChanged( ListerPredicate ) ),
+ l, SLOT( baseSet( ListerPredicate ) ) );
+}
+
+void FilterList::setPredicate( Predicate p ) {
+ clear();
+ m_pred = p;
+ appendPredicate( p );
+ emitPredicateChanged();
+}
+
+void FilterList::setHiddenPredicate( Predicate p ) {
+ m_hidden = p;
+ emitPredicateChanged();
+}
+
+void FilterList::editorPredicateDrop( Predicate p ) {
+ m_pred = predicate::remove( m_pred, p );
+ emitPredicateChanged();
+}
+
+void FilterList::editorPredicateAdd( Predicate p ) {
+ kdDebug() << "FilterList::editorPredicateAdd" << endl;
+ m_pred = m_pred and p;
+ emitPredicateChanged();
+}
+
+void FilterList::appendPredicate( Predicate p ) {
+ if (p.is< And >()) {
+ And a = p;
+ for (utils::Range< Predicate > r = a.parts();
+ r != r.end(); ++r )
+ appendPredicate( *r );
+ } else if (p.is< predicate::True< entity::Entity > >() ) {
+ // we generally ignore truth
+ } else {
+ m_pred = m_pred and p;
+ // kdDebug() << p.serialize() << endl;
+ // kdDebug() << p.prettyPrint() << endl;
+ FilterItem *i;
+ i = new FilterItem( this );
+ i->setPredicate( p );
+ }
+}
+
+void FilterList::contextMenu( QListViewItem *it, const QPoint &pt, int /*c*/ )
+{
+ std::cerr << "FilterList::contextMenu(p);" << std::endl;
+ FilterItem *i = dynamic_cast< FilterItem * >( it );
+ if (! i)
+ return;
+ QPopupMenu *m = new QPopupMenu( this );
+ m->insertItem( i18n( "Reset Filter" ), 1 );
+ m->insertItem( i18n( "Remove Filter" ), 0 );
+ m->insertSeparator();
+ m->insertItem( i18n( "Add Quick Filter" ), 8 );
+ m->insertItem( i18n( "Add State Filter" ), 9 );
+ m->insertItem( i18n( "Add Tag Filter" ), 10 );
+ m->insertItem( i18n( "Add Easy Tag Filter" ), 11 );
+ // m->insertItem( "Add Tag Filter", tagMenu() );
+ m_context = i;
+ connect(m, SIGNAL(activated(int)), this, SLOT(contextActivated(int)));
+ m->exec(pt);
+ delete m;
+}
+
+
+void FilterList::contextActivated( int i )
+{
+ predicate::Predicate< entity::Entity > p;
+ switch (i) {
+ case 0:
+ m_pred = predicate::remove( m_pred, m_context->predicate() );
+ delete m_context;
+ emitPredicateChanged();
+ return;
+ case 1:
+ m_context->reset();
+ return;
+ case 8:
+ p = predicate::adapt< entity::Entity >(
+ QuickFilter< entity::Package >() );
+ break;
+ case 9:
+ p = predicate::adapt< entity::Entity >(
+ StateFilter< entity::Package >() );
+ break;
+ case 10:
+ p = predicate::adapt< entity::Entity >(
+ TagFilter< entity::Package >() );
+ break;
+ case 11:
+ p = predicate::adapt< entity::Entity >(
+ EasyTagFilter< entity::Package >() );
+ break;
+ }
+ if (p.impl()) {
+ kdDebug() << "summary: " <<
+ downcast< InterfacingPredicate >( p ).summary() << endl;
+ appendPredicate( p );
+ emitPredicateChanged();
+ }
+}
+
+ItemExtender *FilterItem::createExtender()
+{
+ PredicateInterface *o = 0;
+ if (m_pred.is< QuickFilter< entity::Package > >()) {
+ o = new QuickFilterWidget( list(), 0 );
+ } else if (m_pred.is< StateFilter< entity::Package > >()) {
+ o = new StateFilterWidget( list(), 0 );
+ } else if (m_pred.is< EasyTagFilter< entity::Package > >()) {
+ o = new EasyTagFilterWidget( list(), 0 );
+ } else if (m_pred.is< TagFilter< entity::Package > >()) {
+ o = new TagFilterWidget( list(), 0 );
+ }
+ if (o) {
+ o->setPredicate( m_pred );
+ QObject::connect( o, SIGNAL( predicateAdd( Predicate ) ),
+ list(), SLOT( editorPredicateAdd( Predicate ) ) );
+ QObject::connect( o, SIGNAL( predicateDrop( Predicate ) ),
+ list(), SLOT( editorPredicateDrop( Predicate ) ) );
+ }
+ return o;
+}
+
+QString FilterItem::text( int c ) const {
+ InterfacingPredicate &ip = downcast< InterfacingPredicate >( m_pred.impl() );
+ if (c == 0)
+ return ip.summary();
+ return u8( "" );
+}
diff --git a/adept/adept/filterlist.h b/adept/adept/filterlist.h
new file mode 100644
index 0000000..212ab5a
--- /dev/null
+++ b/adept/adept/filterlist.h
@@ -0,0 +1,149 @@
+/** -*- C++ -*-
+ @file adept/filterlist.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qtooltip.h>
+#include <kdebug.h>
+
+#include <apt-front/predicate/matchers.h>
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/component/packagetags.h>
+//#include <apt-front/cache/component/tags.h>
+
+#include <adept/listerpredicate.h>
+#include <adept/extendablelist.h>
+
+#ifndef EPT_FILTERLIST_H
+#define EPT_FILTERLIST_H
+
+class QPopupMenu;
+
+namespace adept {
+using namespace aptFront;
+using namespace aptFront::cache;
+class Lister;
+
+struct InterfacingPredicate
+{
+public:
+ virtual std::string summary() const = 0;
+ virtual void reset() {}
+signals:
+ void changed();
+};
+
+
+class PredicateInterface: public ItemExtender
+{
+ Q_OBJECT
+public:
+ typedef predicate::Predicate< entity::Entity > Predicate;
+ PredicateInterface( QWidget *w = 0, const char *n = 0 );
+ virtual Predicate predicate() = 0;
+signals:
+ void predicateAdd( Predicate );
+ void predicateDrop( Predicate );
+public slots:
+ virtual void setPredicate( const Predicate &p ) {
+ m_pred = p;
+ predicateChanged();
+ }
+ virtual void widgetsChanged();
+ virtual void predicateChanged() = 0;
+protected:
+ predicate::Predicate< entity::Entity > m_pred;
+};
+
+class FilterItem;
+
+class FilterList : public ExtendableList
+{
+ Q_OBJECT
+public:
+ friend class FilterItem;
+ typedef predicate::Predicate< entity::Entity > Predicate;
+ // typedef std::map< KListViewItem *, Predicate > Map;
+ FilterList( QWidget *parent = 0, const char *name = 0 );
+ typedef predicate::And< entity::Entity > And;
+ void appendPredicate( Predicate p );
+ void plugLister( Lister *l );
+ void emitPredicateChanged();
+signals:
+ void predicateChanged( ListerPredicate p );
+public slots:
+ void setPredicate( Predicate p );
+ void setHiddenPredicate( Predicate p );
+protected slots:
+ void editorPredicateDrop( Predicate );
+ void editorPredicateAdd( Predicate );
+ void contextMenu( QListViewItem *, const QPoint &, int );
+ // QPopupMenu *tagMenu();
+ void contextActivated( int );
+ // void tagMenuActivated( int );
+ void updateHeight();
+protected:
+ void drawContents( QPainter *, int, int, int, int );
+ Predicate m_pred;
+ Predicate m_hidden;
+ FilterItem *m_context;
+ bool m_changed;
+ Lister *m_lister;
+ int m_itemsSeen;
+ std::vector< ept::debtags::Tag > m_tagMenuMap;
+};
+
+class FilterItem : public ExtendableItem
+{
+public:
+ ItemExtender *createExtender();
+ FilterItem( FilterList *l )
+ : ExtendableItem( l ), m_delayedDone( false )
+ {
+ }
+ void setup() {
+ ExtendableItem::setup();
+ if (m_delayedDone)
+ return;
+ m_delayedDone = true;
+ showExtender();
+ }
+
+ QString text( int ) const;
+
+ virtual bool less( const ExtendableItem *other ) const {
+ const FilterItem *o = dynamic_cast< const FilterItem * >( other );
+ return downcast< InterfacingPredicate >( m_pred ).summary() <
+ downcast< InterfacingPredicate >( o->m_pred ).summary();
+ }
+
+ void setPredicate( predicate::Predicate< entity::Entity > p ) {
+ m_pred = p;
+ }
+
+ FilterList::Predicate predicate() const {
+ return m_pred;
+ }
+
+ FilterList *filterList() { return dynamic_cast< FilterList * >( list() ); }
+
+ void reset() {
+ filterList()->editorPredicateDrop( m_pred );
+ downcast< InterfacingPredicate >( m_pred ).reset();
+ if ( extender() ) {
+ downcast< PredicateInterface >( extender() ).setPredicate( m_pred );
+ extender()->setFocus();
+ }
+ filterList()->editorPredicateAdd( m_pred );
+ }
+
+protected:
+ predicate::Predicate< entity::Entity > m_pred;
+ bool m_delayedDone:1;
+};
+
+}
+
+#endif
diff --git a/adept/adept/filtersidebar.cpp b/adept/adept/filtersidebar.cpp
new file mode 100644
index 0000000..777fa44
--- /dev/null
+++ b/adept/adept/filtersidebar.cpp
@@ -0,0 +1,72 @@
+#include <functional>
+#include <ext/functional>
+#include <algorithm>
+#include <cmath>
+#include <ept/debtags/tag.h>
+#include <ept/debtags/vocabulary.h>
+#include <adept/filtersidebar.h>
+#include <adept/tagchooser.h>
+
+using namespace adept;
+using namespace aptFront;
+using namespace std;
+using namespace __gnu_cxx;
+
+template< typename H, typename G1, typename G2 >
+struct _compose2_binary {
+ _compose2_binary( H _h, G1 _g1, G2 _g2 )
+ : h( _h ), g1( _g1 ), g2( _g2 )
+ {}
+
+ typename H::result_type operator()(
+ typename G1::argument_type a,
+ typename G2::argument_type b )
+ {
+ return h( g1( a ), g2( b ) );
+ }
+
+ H h;
+ G1 g1;
+ G2 g2;
+};
+
+template< typename H, typename G1, typename G2 >
+_compose2_binary< H, G1, G2 > compose2_binary( H h, G1 g1, G2 g2 ) {
+ return _compose2_binary< H, G1, G2 >( h, g1, g2 );
+}
+
+void FilterSidebar::setCardinality( const Lister::Cardinality &c )
+{
+ using namespace wibble::operators;
+ ept::debtags::Tag::Set all, smart;
+
+ kdDebug() << "FilterSidebar::setCardinality" << endl;
+ Lister::Cardinality cprime;
+ remove_copy_if( c.begin(), c.end(), inserter( cprime, cprime.begin() ),
+ compose1( bind1st( equal_to< int >(), 0 ),
+ select2nd<
+ Lister::Cardinality::value_type >() ) );
+ transform( cprime.begin(), cprime.end(), inserter( all, all.begin() ),
+ select1st< Lister::Cardinality::value_type >() );
+ m_all->setTags( all );
+ ept::debtags::Vocabulary &t = cache::Global().get().tags();
+ m_easy->setTags( all & ( t.facetByName( "interface" ).tags()
+ | t.facetByName( "works-with" ).tags()
+ | t.facetByName( "use" ).tags()
+ | t.facetByName( "role" ).tags() ) );
+
+ typedef vector< pair< ept::debtags::Tag, int > > Vec;
+ Vec vec;
+ copy( cprime.begin(), cprime.end(), back_inserter( vec ) );
+ sort( vec.begin(), vec.end(),
+ compose2_binary( less< int >(),
+ select2nd< Vec::value_type >(),
+ select2nd< Vec::value_type >() ) );
+ Vec::reverse_iterator end = vec.rbegin();
+ advance( end, vec.size() < 10 ? vec.size() : 10 );
+ transform( vec.rbegin(), end, inserter( smart, smart.begin() ),
+ select1st< Vec::value_type >() );
+
+ m_smart->setTags( smart );
+ m_smart->openToplevel();
+}
diff --git a/adept/adept/filtersidebar.h b/adept/adept/filtersidebar.h
new file mode 100644
index 0000000..0fac201
--- /dev/null
+++ b/adept/adept/filtersidebar.h
@@ -0,0 +1,26 @@
+/* -*- C++ -*- file adept/filtersidebar.h
+ written by Peter Rockai <[email protected]> */
+
+#include <adept/filtersidebarui.h>
+#include <adept/lister.h>
+
+#ifndef EPT_FILTERSIDEBAR_H
+#define EPT_FILTERSIDEBAR_H
+
+namespace adept {
+
+// using namespace aptFront;
+
+class FilterSidebar : public FilterSidebarUi {
+ Q_OBJECT
+public:
+ FilterSidebar( QWidget *p = 0, const char *n = 0 )
+ : FilterSidebarUi( p, n )
+ {}
+public slots:
+ void setCardinality( const Lister::Cardinality & );
+};
+
+}
+
+#endif
diff --git a/adept/adept/filtersidebarui.ui b/adept/adept/filtersidebarui.ui
new file mode 100644
index 0000000..0f2efb4
--- /dev/null
+++ b/adept/adept/filtersidebarui.ui
@@ -0,0 +1,119 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::FilterSidebarUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>adept::FilterSidebarUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>227</width>
+ <height>469</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form2</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QTabWidget" row="0" column="0">
+ <property name="name">
+ <cstring>m_tabs</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab0</cstring>
+ </property>
+ <attribute name="title">
+ <string>Smart</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::TagChooser" row="0" column="0">
+ <property name="name">
+ <cstring>m_smart</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab1</cstring>
+ </property>
+ <attribute name="title">
+ <string>Simple</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::TagChooser" row="0" column="0">
+ <property name="name">
+ <cstring>m_easy</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab2</cstring>
+ </property>
+ <attribute name="title">
+ <string>All</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::TagChooser" row="0" column="0">
+ <property name="name">
+ <cstring>m_all</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::TagChooser</class>
+ <header location="global">adept/tagchooser.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </customwidget>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/tagchooser.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/filterwidget.cpp b/adept/adept/filterwidget.cpp
new file mode 100644
index 0000000..f294327
--- /dev/null
+++ b/adept/adept/filterwidget.cpp
@@ -0,0 +1,36 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <klocale.h>
+#include <klineedit.h>
+#include "filterwidget.h"
+
+using namespace aptFront;
+using namespace adept;
+
+void FilterWidget::connectLister( Lister *l ) {
+ connect( this, SIGNAL( drop( ListerPredicate ) ),
+ l, SLOT( interactiveDrop( ListerPredicate ) ) );
+ connect( this, SIGNAL( changed( ListerPredicate ) ),
+ l, SLOT( interactiveAnd( ListerPredicate ) ) );
+ connect( this, SIGNAL( apply( ListerPredicate ) ),
+ l, SLOT( baseAnd( ListerPredicate ) ) );
+
+}
+
+void FilterWidget::changedInternal() {
+ setEnabled( false );
+ emit drop( m_old );
+ emit changed( m_old = predicate() );
+ setEnabled( true );
+ setFocus();
+}
+
+void FilterWidget::applyInternal() {
+ // check for emptiness?
+ setEnabled( false );
+ emit drop( m_old );
+ emit apply( m_old = predicate() );
+ reset();
+ setEnabled( true );
+ setFocus();
+}
diff --git a/adept/adept/filterwidget.h b/adept/adept/filterwidget.h
new file mode 100644
index 0000000..78b0c38
--- /dev/null
+++ b/adept/adept/filterwidget.h
@@ -0,0 +1,39 @@
+/** -*- C++ -*-
+ @file adept/filterwidgets.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <adept/lister.h>
+
+#ifndef EPT_FILTERWIDGET_H
+#define EPT_FILTERWIDGET_H
+
+class KLineEdit;
+
+namespace adept {
+
+class FilterWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ FilterWidget( QWidget *parent = 0, const char *n = 0 )
+ : QWidget( parent, n ) {}
+ virtual ListerPredicate predicate() = 0;
+ void connectLister( Lister *l );
+protected slots:
+ void changedInternal();
+ void applyInternal();
+ virtual void reset() = 0;
+signals:
+ void changed( ListerPredicate op );
+ void apply( ListerPredicate op );
+ void drop( ListerPredicate op );
+protected:
+ ListerPredicate m_old;
+};
+
+}
+
+#endif
diff --git a/adept/adept/groupeddesktopselector.cpp b/adept/adept/groupeddesktopselector.cpp
new file mode 100644
index 0000000..68afa98
--- /dev/null
+++ b/adept/adept/groupeddesktopselector.cpp
@@ -0,0 +1,137 @@
+/** -*- C++ -*-
+ @file adept/groupeddestkopselector.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qobjectlist.h>
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <kiconloader.h>
+#include <kglobal.h>
+#include <kseparator.h>
+#include <kapplication.h>
+
+#include <apt-front/cache/component/desktop.h>
+#include <adept/groupeddesktopselector.h>
+#include <adept/desktoplist.h>
+#include <adept/utils.h>
+
+using namespace aptFront;
+using namespace cache;
+
+namespace adept {
+
+GroupedDesktopSelector::GroupedDesktopSelector( QWidget *p, const char *n )
+ : KJanusWidget( p, n, IconList ), m_policy( 0 )
+{
+ observeComponent< cache::component::Packages >();
+ m_pages.push_back( addPage( QString( "Initializing..." ) ) );
+ QObjectList *chld = queryList( "QWidget" );
+ QObjectListIt it( *chld ); QWidget *o;
+ while ((o = dynamic_cast< QWidget * >( it.current() )) != 0) {
+ if ( dynamic_cast< QLabel * >( o ) != 0 )
+ o->hide();
+ if ( dynamic_cast< KSeparator * >( o ) != 0 )
+ o->hide();
+ ++it;
+ } // *hack*
+
+ // AAAA hack
+ QLayoutIterator li = layout()->iterator();
+ QHBoxLayout *hbox = 0;
+ while ( li.current() != 0 ) {
+ hbox = dynamic_cast< QHBoxLayout * >( li.current() );
+ if ( hbox ) break;
+ ++li;
+ }
+ kdDebug() << "hacking hbox = " << hbox << endl;
+ if ( hbox ) {
+ li = hbox->iterator();
+ while ( li.current() != 0 ) {
+ QSpacerItem *spacer = dynamic_cast< QSpacerItem * >( li.current() );
+ if ( spacer ) {
+ hbox->removeItem( spacer );
+ delete spacer;
+ }
+ ++li;
+ }
+ }
+}
+
+void GroupedDesktopSelector::notifyPreRebuild( component::Base * ) {
+ clear();
+}
+
+void GroupedDesktopSelector::notifyPostRebuild( component::Base * ) {
+ // QTimer::singleShot( 0, this, SLOT( fill() ) );
+}
+
+void GroupedDesktopSelector::clear()
+{
+ if ( !m_pages.empty() )
+ showPage( m_pages.front() );
+ while ( !m_pages.empty() ) {
+ removePage( m_pages.back() );
+ delete m_pages.back();
+ m_pages.pop_back();
+ }
+}
+
+void GroupedDesktopSelector::fill()
+{
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ fill( d.entries() );
+}
+
+void GroupedDesktopSelector::fill( component::Desktop::EntityRange r )
+{
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ utils::Range< std::string > gr;
+ QString last = pageTitle( activePageIndex() );
+
+ clear();
+
+ bool shown = false;
+
+ for ( gr = d.availableGroups( r ); gr != gr.end(); gr.advance() ) {
+
+ component::Desktop::EntityRange cr = d.group( *gr );
+ QString name = u8( *gr );
+ std::cerr << "group for " << cr->name() << ": " << r->group() << std::endl;
+ name = ( name != u8( "" ) ? name : u8( "Legacy" ) );
+
+ QPixmap icon( KGlobal::iconLoader()->iconPath(
+ policy() ? policy()->iconForGroup( name ) : u8( "" ), -32 ) );
+
+ QVBox *b = addVBoxPage( name, name, icon );
+ m_pages.push_back( b );
+ std::cerr << "creating list for " << *gr << std::endl;
+
+ DesktopList *l = new DesktopList( b );
+ l->setTitle( name );
+ connect( l, SIGNAL( request( cache::entity::Package,
+ cache::component::State::Action ) ),
+ this, SIGNAL( request( cache::entity::Package,
+ cache::component::State::Action ) ) );
+ connect( l, SIGNAL( showDescription( cache::entity::Desktop ) ),
+ this, SIGNAL( showDescription( cache::entity::Desktop ) ) );
+
+ l->insertRange( intersectionRange( r, cr ) );
+ // l->insertRange( cr );
+
+ std::cerr << "created list for " << *gr << std::endl;
+ if ( name == last ) {
+ showPage( b );
+ shown = true;
+ }
+ kapp->processEvents();
+ }
+
+ if ( m_pages.empty() )
+ m_pages.push_back( addPage( QString( "No Results" ) ) );
+ if ( !shown )
+ showPage( pageIndex( m_pages.front() ) );
+}
+
+}
diff --git a/adept/adept/groupeddesktopselector.h b/adept/adept/groupeddesktopselector.h
new file mode 100644
index 0000000..a54f7aa
--- /dev/null
+++ b/adept/adept/groupeddesktopselector.h
@@ -0,0 +1,39 @@
+/** -*- C++ -*-
+ @file adept/groupeddestkopselector.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <kjanuswidget.h>
+#include <apt-front/cache/entity/desktop.h>
+
+namespace adept {
+using namespace aptFront;
+using namespace aptFront::cache;
+
+// XXX needs fixing
+class GroupedDesktopSelector : public KJanusWidget, cache::Observer
+{
+ Q_OBJECT
+public:
+ struct IconPolicy {
+ virtual QString iconForGroup( QString group ) { return group; }
+ };
+ GroupedDesktopSelector( QWidget *p = 0, const char *n = 0 );
+ void fill( component::Desktop::EntityRange r );
+ void setPolicy( IconPolicy *p ) { m_policy = p; }
+ IconPolicy *policy() { return m_policy; }
+ virtual void notifyPreRebuild( cache::component::Base * );
+ virtual void notifyPostRebuild( cache::component::Base * );
+public slots:
+ void clear();
+ void fill();
+signals:
+ void request( cache::entity::Package, cache::component::State::Action );
+ void showDescription( cache::entity::Desktop );
+protected:
+ IconPolicy *m_policy;
+ std::vector< QWidget * > m_pages;
+ // IconPolicy m_defaultPolicy;
+};
+
+}
diff --git a/adept/adept/installerview.cpp b/adept/adept/installerview.cpp
new file mode 100644
index 0000000..052fa41
--- /dev/null
+++ b/adept/adept/installerview.cpp
@@ -0,0 +1,112 @@
+#include <qlineedit.h>
+#include <qcombobox.h>
+#include <qtextbrowser.h>
+#include <qcheckbox.h>
+#include <klocale.h>
+#include <kconfig.h>
+
+#include <cmath>
+
+#include <apt-front/cache/entity/desktop.h>
+#include <apt-front/predicate/factory.h>
+#include <ept/debtags/vocabulary.h>
+#include <adept/installerview.h>
+#include <adept/packageinfo.h>
+#include <adept/utils.h>
+
+using namespace adept;
+using namespace aptFront;
+using namespace cache;
+
+void InstallerView::rebuild()
+{
+ typedef predicate::Factory< entity::Desktop > Factory;
+ if ( m_inRebuild ) {
+ QTimer::singleShot( 500, this, SLOT( rebuild() ) );
+ return;
+ }
+ m_inRebuild = true;
+
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ ept::debtags::Vocabulary &t =
+ cache::Global::get().tags();
+
+ Predicate p = predicate::True< entity::Desktop >();
+ if ( m_search->text() != u8( "" ) ) {
+ Predicate tmp = Factory::name( u8( m_search->text() ) )
+ or Factory::description( u8( m_search->text() ) );
+ p = p and tmp;
+ }
+
+ std::string st = "";
+ int si = m_suite->currentItem();
+
+ if ( si == 0 ) st = "suite::kde";
+ if ( si == 1 ) st = "suite::gnome";
+
+ if ( st != "" )
+ p = p and Factory::tag( t.tagByName( st ) );
+
+ if ( !m_unsupported->isChecked() ) {
+ p = p and not Factory::sectionSubstring( "contrib" )
+ and not Factory::sectionSubstring( "universe" )
+ and not Factory::sectionSubstring( "multiverse" );
+ }
+
+ if ( !m_nonfree->isChecked() ) {
+ p = p and not Factory::sectionSubstring( "non-free" )
+ and not Factory::sectionSubstring( "multiverse" )
+ and not Factory::sectionSubstring( "restricted" );
+ }
+
+ selector()->fill( filteredRange( d.entries(), p ) );
+
+ m_inRebuild = false;
+}
+
+InstallerView::InstallerView( QWidget *p , const char *n )
+ : InstallerViewUi( p, n ), m_inRebuild( false )
+{
+ connect( m_search, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( textChanged() ) );
+ connect( &timer, SIGNAL( timeout() ), this, SLOT( rebuild() ) );
+ connect( m_suite, SIGNAL( activated( int ) ), this, SLOT( rebuild() ) );
+ connect( m_unsupported, SIGNAL( toggled( bool ) ), this, SLOT( rebuild() ) );
+ connect( m_nonfree, SIGNAL( toggled( bool ) ), this, SLOT( rebuild() ) );
+ connect( selector(), SIGNAL( showDescription( cache::entity::Desktop ) ),
+ this, SLOT( showDescription( cache::entity::Desktop ) ) );
+}
+
+void InstallerView::textChanged() {
+ timer.start( 1000, true );
+}
+
+void InstallerView::showDescription( entity::Desktop e )
+{
+ kdDebug() << "InstallerView::showDescription..." << endl;
+ QString file("/usr/share/app-install/desktop/" + e.package().name() + ".desktop");
+ KConfig desktopFile(QString("/usr/share/app-install/desktop/" + e.package().name() + ".desktop"), false, false);
+ QString name(desktopFile.name());
+
+ desktopFile.setGroup("Desktop Entry");
+ int popularity = desktopFile.readNumEntry("X-AppInstall-Popcon");
+
+ int popcon_max = 64284; //FIXME should be read at startup, this will change
+ int rank = 0;
+ if (popularity > 0) {
+ rank = (int)(5.0* log(popularity) / log(popcon_max+1));
+ }
+
+ QString rankText(" ");
+ for (int i = 0; i < rank; i++) {
+ rankText = rankText + "<img src='/usr/share/icons/crystalsvg/16x16/actions/bookmark.png' />";
+ }
+
+ QString l = u8(e.package().longDescription(
+ u8( i18n( "No long description available" ) ) ) );
+
+ m_description->setText( u8( "<b>" ) + e.name() + u8( "</b>" )
+ + u8("<br /><b>") + i18n("Rank: ") + u8("</b>") + rankText.latin1()
+ + i18n( "<br><b>Package:</b> " ) + e.package().name()
+ + formatLongDescription( l ) );
+}
diff --git a/adept/adept/installerview.h b/adept/adept/installerview.h
new file mode 100644
index 0000000..ed955dc
--- /dev/null
+++ b/adept/adept/installerview.h
@@ -0,0 +1,33 @@
+/** -*- C++ -*-
+ @file adept/installerview.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qtimer.h>
+#include <adept/installerviewui.h>
+#include <adept/groupeddesktopselector.h>
+
+#ifndef EPT_INSTALLERVIEW_H
+#define EPT_INSTALLERVIEW_H
+
+namespace adept {
+class InstallerView : public InstallerViewUi
+{
+ Q_OBJECT
+public:
+ typedef predicate::Predicate< entity::Desktop > Predicate;
+ InstallerView( QWidget *p = 0, const char *n = 0 );
+ GroupedDesktopSelector *selector() { return m_selector; }
+protected slots:
+ void textChanged();
+ void showDescription( cache::entity::Desktop );
+public slots:
+ void rebuild();
+protected:
+ bool m_inRebuild;
+ QTimer timer;
+};
+
+}
+
+#endif
diff --git a/adept/adept/installerviewui.ui b/adept/adept/installerviewui.ui
new file mode 100644
index 0000000..b289650
--- /dev/null
+++ b/adept/adept/installerviewui.ui
@@ -0,0 +1,203 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>InstallerViewUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>InstallerViewUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>666</width>
+ <height>314</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>4</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Search:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_search</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>KDE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>GNOME</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Any Suite</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_suite</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentItem">
+ <number>2</number>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Show:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_unsupported</cstring>
+ </property>
+ <property name="text">
+ <string>unsupported,</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_nonfree</cstring>
+ </property>
+ <property name="text">
+ <string>proprietary software.</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="adept::GroupedDesktopSelector" row="1" column="0">
+ <property name="name">
+ <cstring>m_selector</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>6</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QTextBrowser" row="1" column="1">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>4</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::GroupedDesktopSelector</class>
+ <header location="local">adept/groupeddesktopselector.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1122">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042949444154388db5954d6c545514c77ff7de37eff1a6a550da994e5ba798868f948fc847a2a2911816c436b0a02ed0083161a1981877ee10d90aa94656063491882c5cd4c4b8103f20cd806909a98604da8482341de80cb69de9bcd799799d79efba980f1da3a80b4f727273939bdff99f9b93f3175a6b6a21849080020c4002a29a8f0a5dcd002803bed63a1035f0d0d0504b6f6fef51d7758fa4d3e98d8ee3fc03af128ee3303939399548242eb8aefb09300f78464de9f0f0f0d148cc7caf3d5424de97a7ec17104220242805520a44557bbd4b21f083801d33e63a6d1bc7bf19c6064e0319a35a58b9ae7ba43d54e4d7c54b64dc097c7f09d30ef04b36736983cc7c11b4456b9b492c5e20dc54a6540e00896a8268a7017010f8bcae1830d2e9f4c69ebe3c197782b2ce60d94ddc9b30f9feeb45ae5d7181c5ead35636ef08d3ffe26a76ee3208b4031a56d80aa00768fda362e9380e25bf80ef3b587613d7afc099533380a4b5dda46fcb5aa42998b9eb7173dce5e6788e434763ec7fc942532008ea436003660d2caa7f8d69c3bd8910674e4d033e83877ad8d36fb0aa4d6058658ac5358c5df6383bf480f31fdda5a3632bbbfb6da4ccd5c00a10b2012cc12fd97cfb5516f0187c25cee0619396480ec3ca909d0f3372d1e5f9fe66de3ad605587c712ec55256a2540d5519d19ae24a29057329839f7ecc138944d833102290f3184ae1e6d6f0e98739c61229e6d21eafbed1c9c8c5558c8f3ee4ceed76946a1c43d97091828585223e2eebfbc295f60d45de89707628cb58224577bc85a79e5d4d786581cddb9b0148259711b20145836221400416e0232d1f6595c9ce4538773ac7b54406f0b15784e8e80aa1ac2594190220d021e49f2437960156b70ba095e95f96f18acd8c263cc6122962b1167a7ba34cdd7ec8c977a699bed546722a8fc2a02b6e2185fff78ab586ce78894ddb9ab9f5738ed14b1e030756929d8ff2e4ae5544632b38f96e89a99b298ebd6950cc2d12ed0eb3618b26f520788462ad09877df60db600f0f1fb49c646f21c7ebd836dcf94e9d9b4c0db27d6d3bd36c6426a96bce731703046d7da129a4670836284a054869d4f1b1c7e2dca67676ef3c1898091ef5ad8bc358c3205c93bf7c9a40ad4c660f4728edd7bbb3142ea2fc1da711cfc200011e08b45f6bd1c261adbce9717928c5f9d63fc6a19f0014567773303073790f8214bd6f5282dfbb8b9fa1f6b40d7c1939393533b92e63ad9240990484aec7e41b27d579cbb531e0f67023492d86316ebb768ba1e0f786e6f37e56550c62237aee7011e54abd7c1412291b8a06de378b4d3c0b215da9708e5a3a442192085404a83d4accfecac067c0c43e13a70e3fa12e96409e0325000966bbb354465339d04a6f9dd15fe6dde07ce030780278088d05ad72cc9a6b2f2daaaa74d75a1f0e8d0d5f60b40868a8364ead6248430000b0857a126ffcdf396abf03ce089ffcb4c7f033046c6b4a995e7a00000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/groupeddesktopselector.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/lister.cpp b/adept/adept/lister.cpp
new file mode 100644
index 0000000..ddd70d8
--- /dev/null
+++ b/adept/adept/lister.cpp
@@ -0,0 +1,818 @@
+// -*- Mode: C++; c-basic-offset: 4; -*-
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qpainter.h>
+#include <qpushbutton.h>
+#include <qthread.h>
+#include <qtextbrowser.h>
+#include <qpixmap.h>
+#include <qheader.h>
+
+#include <kpopupmenu.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+
+#include <functional>
+#include <iostream>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/actor.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/utils.h>
+#include <adept/lister.h>
+#include <adept/packageinfo.h>
+
+using namespace aptFront;
+using namespace aptFront::predicate;
+using namespace aptFront::cache;
+using namespace aptFront::utils;
+using namespace adept;
+
+#ifdef KUBUNTU
+QPixmap* main_icon = 0;
+QPixmap* non_main_icon = 0;
+#endif
+
+Lister::Lister( QWidget *parent, const char *name )
+ : ExtendableList( parent, name ),
+ m_rangeProvider( 0 ),
+ m_baseF( predicate::True< entity::Entity >() ),
+ m_interactiveF( True<entity::Entity>() ), m_itemCount( -1 ),
+ m_rebuildScheduled( false ), m_inRebuild( false ), m_cancelRebuild( false ),
+ m_openToplevel( false ), m_rebuildMutex( true )
+{
+ observeComponent< component::State >();
+ observeComponent< component::Packages >();
+ observeComponent< component::PackageTags >();
+ setRootIsDecorated( false );
+ setSelectionModeExt( Extended );
+ setAllColumnsShowFocus (true);
+
+#ifdef KUBUNTU
+ // The tip
+ // ListerItemTooltip* i_tip = new ListerItemTooltip(this);
+ setTooltipColumn(Lister::ColIcon);
+#endif //KUBUNTU
+
+ m_icons[ u8( "package-install" ) ] = u8( "adept_install" );
+ m_icons[ u8( "package-remove" ) ] = u8( "adept_remove" );
+ m_icons[ u8( "package-upgrade" ) ] = u8( "adept_upgrade" );
+ m_icons[ u8( "package-keep" )] = u8( "adept_keep" );
+ m_icons[ u8( "package-reinstall" )] = u8( "adept_reinstall" );
+ m_icons[ u8( "package-purge" )] = u8( "adept_purge" );
+
+ setSorting( -1 );
+ // addColumn(" ", 40);
+ // addColumn(" ", 18);
+ QFontMetrics met( font() );
+
+ // BE SURE TO UPDATE THE Column ENUM WHEN YOU UPDATE HERE!
+ addColumn( i18n( "Package" ), 180);
+#ifdef KUBUNTU
+ addColumn( i18n( " " ), 18); // This column is for identifying
+ // main packages. (manchicken)
+#endif
+ addColumn( i18n( "Status" ), met.width( i18n( "not installed" ) ) + 10 );
+ addColumn( i18n( "Requested" ), met.width( i18n( "Requested" ) ) + 10 );
+ addColumn( i18n( "Description" ), 300);
+ setToggleColumn( Lister::ColFirst );
+
+ for ( int col = ColFirst; col < ColLast; ++col )
+ setColumnAlignment( col, Qt::AlignLeft | Qt::AlignVCenter );
+
+ setResizeMode( LastColumn );
+ connect( this, SIGNAL( selectionChanged() ), SLOT( updateActions() ) );
+ connect( this,
+ SIGNAL( contextMenuRequested( QListViewItem *,
+ const QPoint &, int ) ),
+ this, SLOT(
+ contextMenu( QListViewItem *, const QPoint &, int) ) );
+ m_tip = 0;
+ // m_tip = new ListerTooltip( viewport(), this );
+}
+
+Lister::~Lister()
+{
+ delete m_tip;
+}
+
+void Lister::scheduleRebuild()
+{
+ if (!m_rebuildScheduled) {
+ // kdDebug() << "Lister scheduling rebuild" << endl;
+ QTimer::singleShot( 0, this, SLOT( rebuild() ) );
+ }
+ m_rebuildScheduled = true;
+}
+
+void Lister::updateActions()
+{
+ emit actionsChanged( this );
+}
+
+void Lister::notifyPostChange( component::Base * )
+{
+ kdDebug() << "notifyRefresh()" << endl;
+ updateActions();
+ triggerUpdate();
+}
+
+void Lister::notifyPreRebuild( component::Base *b )
+{
+ kdDebug() << "Lister::notifyPreRebuild( " << b << " )" << endl;
+ // Cache &c = cache::Global::get( m_cache );
+ setEnabled( false );
+ if ( dynamic_cast< component::PackageTags * >( b ) != 0 ) {
+ kdDebug() << "clearing cardinality" << endl;
+ m_cardinality.clear();
+ }
+ if ( dynamic_cast< component::Packages * >( b ) != 0 ) {
+ kdDebug() << "clearing lister" << endl;
+ clear();
+ m_items.clear();
+ m_cardinality.clear();
+ }
+}
+
+void Lister::notifyPostRebuild( component::Base *b )
+{
+ kdDebug() << "Lister::notifyPostRebuild( " << b << " )" << endl;
+ scheduleRebuild();
+ if ( dynamic_cast< component::State * >( b ) != 0 ) {
+ setEnabled( true );
+ }
+}
+
+bool lessByName( const entity::Entity &e1, const entity::Entity &e2 )
+{
+ if ( e1.is< entity::Named >() && e2.is< entity::Named >() ) {
+ entity::Named &n1 = downcast< entity::Named >( e1 ),
+ &n2 = downcast< entity::Named >( e2 );
+ return n1.name() < n2.name();
+ }
+ return e1 < e2;
+}
+
+bool Lister::cancelRebuild() {
+ // kdDebug() << "cancel rebuild: " << m_inRebuild << ", " << m_cancelRebuild << endl;
+ if ( m_inRebuild ) {
+ m_rebuildScheduled = false;
+ m_cancelRebuild = true;
+ }
+ if ( !cache::Global::get( m_cache ).isOpen() ) {
+ m_rebuildScheduled = false;
+ return true;
+ }
+ return m_cancelRebuild;
+}
+
+void Lister::cleanRebuild()
+{
+ scheduleRebuild();
+}
+
+Lister::CreateItem::CreateItem( Lister *_l, ListerItem *p )
+ : l( _l ), time( 0 ), items( 0 ), last( 0 ), parent( p )
+{
+}
+
+Lister::CreateItem::~CreateItem()
+{
+ // delete timer;
+}
+
+Lister::Map::value_type Lister::CreateItem::operator()( entity::Entity e )
+{
+ items ++;
+ if ( l->m_cancelRebuild ) throw 0; // XXX proper exception please
+ // kdDebug() << "trying to acquire mutex" << endl;
+ l->m_rebuildMutex.lock();
+ // kdDebug() << "mutex acquired" << endl;
+
+ // count tags
+ if ( e.is< entity::Package >() ) {
+ const std::set<ept::debtags::Tag> &tags = downcast< entity::Package >( e ).tags();
+ for (std::set<ept::debtags::Tag>::iterator i = tags.begin(); i != tags.end(); ++ i )
+ l->m_cardinality[ *i ] ++;
+ }
+
+ if ( last ) {
+ if ( parent )
+ last = new ListerItem( parent, last, e );
+ else
+ last = new ListerItem( l, last, e );
+ } else {
+ if ( parent )
+ last = new ListerItem( parent, e );
+ else
+ last = new ListerItem( l, e );
+ }
+ l->m_rebuildMutex.unlock();
+ if ( e.is< entity::Relation >() )
+ // this should be safe because the parent thread is waiting
+ // for us and ensures that universe (libapt-front) is kept
+ // unchanged while we run
+ l->insertRangeInternal( InsertRangePair(
+ last, downcast< entity::Relation >( e ).targetPackages() ) );
+ // we may want to use recursive async call instead? why?
+ /* Threads::enqueue(
+ asyncCall( std::bind2nd( std::mem_fun( &Lister::insertRangeInternal ),
+ InsertRangePair(
+ last,
+ downcast< entity::Relation >( e ).targetPackages() ) ),
+ l ), &(l->m_rebuildMutex) );
+ */
+ return std::make_pair( e, last );
+}
+
+void Lister::reallyUpdate()
+{
+ bool en = isUpdatesEnabled();
+ setUpdatesEnabled( true );
+ triggerUpdate();
+ setUpdatesEnabled( en );
+}
+
+void Lister::insertRange( Range r ) {
+ insertRangeInternal( InsertRangePair( 0, r ) );
+}
+void Lister::insertRangeInternal( InsertRangePair a )
+{
+ // kdDebug() << "insertRange running..." << endl;
+ try {
+ std::transform( a.second, a.second.end(),
+ inserter( m_items, m_items.begin() ),
+ CreateItem( this, a.first ) );
+ } catch ( ... ) {}
+ m_itemCount = m_items.size();
+}
+
+/* void Lister::rebuildInsertRange( Range r ) {
+ insertRange( 0, r );
+ } */
+
+void Lister::rebuild()
+{
+ Cache &c = cache::Global::get( m_cache );
+ if ( cancelRebuild() ) {
+ scheduleRebuild();
+ return;
+ }
+
+ m_inRebuild = true;
+ m_rebuildMutex.lock();
+
+ emit rebuildStarted();
+
+ c.progress().OverallProgress( 0, 0, 0, i18n( "Filtering" ) );
+ kdDebug() << "rebuild running" << endl;
+ clock_t _c = clock(), C;
+ for ( Cardinality::iterator i = m_cardinality.begin();
+ i != m_cardinality.end(); ++i )
+ i->second = 0;
+
+ kdDebug() << "querying m_rangeProvider " << m_rangeProvider << "..." << endl;
+
+ Range r = filteredRange( m_rangeProvider ?
+ m_rangeProvider->listerRange() : range( VectorRange() ),
+ m_baseF );
+ C = (clock() - _c) / 1000; _c = clock();
+
+ setUpdatesEnabled( false );
+ kdDebug() << "clearing..." << endl;
+ clear();
+ m_items.clear();
+
+ kdDebug() << "asyncCall to rebuildInsertRange..." << endl;
+ QThread *t = asyncCall( std::bind2nd(
+ std::mem_fun( &Lister::insertRangeInternal ),
+ InsertRangePair( 0, r ) ),
+ this );
+
+ kdDebug() << "starting the thread..." << endl;
+
+ QTimer timer;
+ connect( &timer, SIGNAL( timeout() ),
+ this, SLOT( reallyUpdate() ) );
+ timer.start( 0 );
+
+ m_rebuildMutex.unlock();
+ Threads::enqueue( t, &m_rebuildMutex );
+ Threads::wait();
+
+ timer.stop();
+
+ kdDebug() << "thread finished..." << endl;
+ C = (clock() - _c) / 1000; _c = clock();
+ kdDebug() << m_items.size() << " entities synced, time = " << C << endl;
+
+ setUpdatesEnabled( true );
+ c.progress().Done();
+ if ( m_openToplevel ) openToplevel();
+ triggerUpdate();
+
+ if ( !m_cancelRebuild ) {
+ for ( Cardinality::iterator i = m_cardinality.begin();
+ i != m_cardinality.end(); ++i )
+ if ( i->second == m_itemCount )
+ i->second = -1;
+ emit cardinalityChanged( m_cardinality );
+ }
+
+ m_inRebuild = false;
+ m_rebuildScheduled = false;
+ m_cancelRebuild = false;
+ emit rebuildFinished();
+}
+
+void Lister::baseAnd( Predicate o )
+{
+ m_baseF = predicate::predicate( m_baseF and o );
+ // emit filterChanged( m_baseF );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+void Lister::baseSet( Predicate o )
+{
+ m_baseF = o;
+ // emit filterChanged( m_baseF );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+void Lister::interactiveAnd( Predicate o )
+{
+ m_interactiveF = predicate::predicate( m_interactiveF and o );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+void Lister::interactiveDrop( Predicate o )
+{
+ m_interactiveF = predicate::remove( m_interactiveF, o );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+bool Lister::itemSelected( Map::value_type i )
+{
+ return not i.second->isSelected();
+}
+
+entity::Entity Lister::extractKey( Map::value_type i )
+{
+ return i.first;
+}
+
+Lister::VectorRange Lister::selection()
+{
+ VectorRange ret;
+ Map m;
+ std::remove_copy_if( m_items.begin(), m_items.end(),
+ inserter( m, m.begin() ),
+ itemSelected );
+ std::transform( m.begin(), m.end(),
+ consumer( ret ),
+ extractKey );
+ return ret;
+}
+
+Lister::VectorRange Lister::content()
+{
+ VectorRange ret;
+ std::transform( m_items.begin(), m_items.end(),
+ consumer( ret ),
+ extractKey );
+ return ret;
+}
+
+QString ListerItem::text( int column ) const
+{
+ // if (column == 0) return ""; // until we redo paintcell for the col
+ if (entity().is<entity::Package>()) {
+ entity::Package p = entity();
+ switch (column) {
+
+ case Lister::ColPackage: return u8( p.name( u8( i18n( "n/a" ) ) ) );
+ case Lister::ColStatus: return u8( p.statusString( u8( i18n( "n/a" ) ) ) );
+ case Lister::ColRequested: return u8( p.actionString( u8( i18n( "n/a" ) ) ) );
+ case Lister::ColDescription: return u8( p.shortDescription( u8( i18n( "n/a" ) ) ) );
+ // case 2: return p.candidateVersion().versionString();
+ }
+ }
+ if ( entity().is< entity::Relation >() && column == 0 )
+ return downcast< entity::Relation >( entity() ).format();
+ return u8( "" );
+}
+
+#ifdef KUBUNTU
+const QPixmap* ListerItem::pixmap( int column ) const
+{
+ if (entity().is<entity::Package>()) {
+ entity::Package p = entity();
+
+ // Are we in a main repo? A slash indicates a non-main repo.
+ if (column == Lister::ColIcon &&
+ p.section(string("/")).find("/") == string::npos) {
+
+ // Load the icon if it hasn't been created.
+ if (main_icon == 0) {
+ main_icon = new QPixmap(SmallIcon(u8("adept_main_indicator")));
+ }
+
+ // Return the icon...
+ return main_icon;
+ } else if (column == Lister::ColFirst) {
+ return static_cast<const QPixmap*>(&m_pixmap);
+ }
+ }
+
+ if (non_main_icon == 0) {
+ non_main_icon = new QPixmap();
+ }
+
+ return non_main_icon;
+}
+#endif /* KUBUNTU */
+
+ListerItem::~ListerItem()
+{
+}
+
+void ListerItem::paintCell ( QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ if ( width <= 0 )
+ return;
+ QColorGroup _cg( cg );
+ QColor c = _cg.text();
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ if ( entity().is<entity::Package>() ) {
+ entity::Package p = entity();
+
+ // Paint the status column
+ if ( column == Lister::ColStatus ) {
+ c = statusColor( p );
+ }
+
+ // Paint the action column
+ if ( column == Lister::ColRequested ) {
+ c = actionColor( p );
+ }
+ }
+ _cg.setColor( QColorGroup::Text, c );
+ if ( extender() ) { // make the icon appear at top... this
+ // probably breaks big-text displays?
+ // --> somewhat, but not too badly
+ alignment &= ~AlignVertical_Mask;
+ alignment |= AlignTop;
+ }
+ KListViewItem::paintCell( &_p, _cg, column, width, alignment );
+ p->drawPixmap( 0, 0, pm );
+}
+
+void Lister::contextMenu( QListViewItem *it, const QPoint &pt, int /*c*/ )
+{
+ if (! it) // check for actor when we have one...
+ return;
+ m_context = dynamic_cast< ListerItem * >( it );
+ VectorRange sel = selection();
+ // entity::Package p = (dynamic_cast<ListerItem *>(it)->entity());
+ KPopupMenu *m = new KPopupMenu (this);
+ utils::Range< Actor > r = actor::Global< entity::Package >::list();
+ int id = 8;
+ try {
+ for (; r != r.end(); ++r) {
+ m->insertItem( SmallIconSet( m_icons[ u8( r->name() ) ] ),
+ i18n(QString(r->prettyName()).ascii()), id );
+ m->setItemEnabled(
+ id, r->possible( utils::upcastRange< entity::Package >( sel ) ) );
+ ++id;
+ }
+ } catch ( std::bad_cast ) {} // ignore (this is broken, but
+ // easiest fix)
+ bool open = m_context->extender();
+ m->insertItem( open ? i18n( "Hide details" ) :
+ i18n( "Show details" ), open ? 1 : 0 );
+ connect(m, SIGNAL(activated(int)), this, SLOT(contextActivated(int)));
+ m->exec(pt);
+ delete m;
+}
+
+void Lister::contextActivated( int id )
+{
+ VectorRange sel = selection();
+ try {
+ if (id >= 8) {
+ utils::Range< Actor > r = actor::Global< entity::Package >::list();
+ std::advance( r, id - 8 );
+ (*r)( utils::upcastRange< entity::Package >( sel ) );
+ updateActions();
+ }
+ if (id < 8) {
+ VectorRange i = sel.begin();
+ while (i != i.end()) {
+ if (id == 0)
+ m_items[*i]->showExtender();
+ if (id == 1)
+ m_items[*i]->hideExtender();
+ ++ i;
+ }
+ }
+ } catch ( std::bad_cast ) {} // ignore (this is broken, but
+}
+
+ListerItemExtender::~ListerItemExtender()
+{
+}
+
+ListerItemExtender::ListerItemExtender( QWidget *parent, const char * n)
+ : ListerItemExtenderUi( parent, n )
+{
+ observeComponent< component::State >();
+ adjustFontSize( m_description, -1 );
+ connect( m_details, SIGNAL( clicked() ),
+ this, SLOT( detailsClicked() ) );
+
+ m_packageInfo->adjustFontSize( -1 );
+ m_packageInfo->hideStatus();
+}
+
+void ListerItemExtender::detailsClicked() {
+ detailsRequested( m_entity );
+}
+
+ListerItem *ListerItemExtender::item()
+{
+ return dynamic_cast< ListerItem * >( m_item );
+}
+
+void ListerItemExtender::mouseReleaseEvent( QMouseEvent *e ) {
+ e->ignore();
+ if ( childAt( e->pos() ) != static_cast< QWidget * >( m_name ) )
+ e->accept();
+}
+void ListerItemExtender::setItem( ExtendableItem *i )
+{
+ ItemExtender::setItem( i );
+ m_entity = item()->entity();
+ // setupColors();
+ m_indicator->setPixmap(*(item()->pixmap(Lister::ColIcon)));
+ m_indicator->setMinimumWidth(18);
+
+ kdDebug() << "ListerItemExtender::setItem connecting" << endl;
+ connect( this, SIGNAL( detailsRequested( Lister::Entity ) ),
+ item()->list(), SIGNAL( detailsRequested( Lister::Entity ) ) );
+
+ entity::Version v;
+ entity::Package p;
+
+ if ( m_entity.is< entity::Version >() ) {
+ v = m_entity;
+ p = v.package();
+ }
+
+ if ( m_entity.is< entity::Package >() ) {
+ p = m_entity;
+ v = p.anyVersion();
+ }
+
+ if ( !v.valid() ) {
+ m_logical->setText( i18n( "Immutable" ) );
+ m_logical->setEnabled( false );
+ m_details->setEnabled( false );
+ return;
+ }
+
+ m_name->setText( /* QString( "<b>" ) + */
+ v.package().name( std::string( "oops" ) ) /* + "</b>" */ );
+ QString l = u8( v.longDescription(
+ u8( i18n( "No long description available" ) ) ) );
+
+ m_description->setText( QString( "<qt>" )
+ + formatLongDescription( l ) + "</qt>" );
+ m_description->adjustSize();
+ m_description->installEventFilter( this );
+
+ m_packageInfo->setVersion( v, m_entity.is< entity::Version >() );
+
+ notifyPostChange( 0 );
+}
+
+void ListerItemExtender::notifyPostRebuild( component::Base *b )
+{ // need to catch undo/redo effects
+ return notifyPostChange( b );
+}
+
+void ListerItemExtender::notifyPostChange( component::Base * )
+{
+ // without the timer to break it, there could be a loop where
+ // we connect the clicked() signal to a slot which would be
+ // invoked right away when we return -> evil
+ QTimer::singleShot( 0, this, SLOT( updateLogical() ) );
+}
+
+void ListerItemExtender::updateLogical() {
+ entity::Package pkg = entity();
+ EntityActor *a = 0;
+
+ m_status->setText( colorify(
+ statusColor( pkg ),
+ u8( pkg.statusString( u8( i18n( "Unknown" ) ) ) ) ) );
+ m_change->setText( colorify(
+ actionColor( pkg ),
+ u8( pkg.actionString( u8( i18n( "Unknown" ) ) ) ) ) );
+
+
+ m_logical->setEnabled( true );
+ if (pkg.canKeep()) {
+ a = new EntityActor( pkg.keep() );
+ } else if (pkg.canUpgrade()) {
+ a = new EntityActor( pkg.upgrade() );
+ } else if (pkg.canInstall()) {
+ a = new EntityActor( pkg.install() );
+ } else if (pkg.canRemove()) {
+ a = new EntityActor( pkg.remove() );
+ }
+
+ if (a) {
+ m_logical->setText( u8( a->actor().prettyName() ) );
+ connect( m_logical, SIGNAL( clicked() ),
+ a, SLOT( destructiveAct() ) );
+ } else {
+ m_logical->setText( i18n( "Immutable" ) );
+ m_logical->setEnabled( false );
+ }
+
+}
+
+bool ListerItemExtender::eventFilter( QObject *o, QEvent *e )
+{
+ if (o == m_description && e->type() == QEvent::Wheel) {
+ // kdDebug() << "discarding wheel event..." << endl;
+ QApplication::sendEvent( this, e );
+ return true;
+ }
+ return false;
+}
+
+void ListerItemExtender::resize( int w, int h )
+{
+ // XXX the magic constants are probably style-dependent... AW
+ int namew = - item()->lister()->extenderOffset( item() )
+ - layout()->margin()
+ - layout()->spacing()
+ + item()->lister()->columnWidth( 0 );
+ int statw = item()->lister()->columnWidth( Lister::ColStatus )
+ - layout()->spacing();
+ int chw = item()->lister()->columnWidth( Lister::ColRequested )
+ - layout()->spacing() - 3; // wth...
+ m_name->setMinimumWidth( namew );
+ m_status->setMinimumWidth( statw );
+ m_change->setMinimumWidth( chw );
+ m_packageInfo->adjustSize();
+ m_leftHeight = m_name->height() + m_packageInfo->height()
+ + m_logical->height() + 20;
+ QWidget::resize( w, 500 );
+ QWidget::resize(
+ w,
+ QMAX( m_description->contentsHeight() + 16,
+ m_leftHeight ) );
+}
+
+bool entityLess::operator()( entity::Entity e1, entity::Entity e2 )
+{
+ if ( e1.is< entity::Package >() ) {
+ if ( e2.is< entity::Package >() )
+ return e1 < e2;
+ return true;
+ }
+
+ if ( e1.is< entity::Version >() ) {
+ if ( e2.is< entity::Package >() )
+ return false;
+ if ( e2.is< entity::Version >() )
+ return e1 < e2;
+ return true;
+ }
+
+ if ( e1.is< entity::Relation >() ) {
+ if ( e2.is< entity::Package >() )
+ return false;
+ if ( e2.is< entity::Version >() )
+ return false;
+ if ( e2.is< entity::Relation >() )
+ return e1 < e2;
+ return true;
+ }
+ return true;
+}
+
+bool ListerItem::less( const ExtendableItem *b ) const
+{
+ entity::Entity e1 = entity(), e2 = dynamic_cast< const ListerItem * >( b )->entity();
+ return entityLess()( e1, e2 );
+}
+
+bool ListerItem::keepLess( const ListerItem *o ) const
+{
+ const ListerItem *b = o;
+ while ( b != 0 ) {
+ if ( b == this )
+ return false;
+ b = b->m_previous;
+ }
+ while ( o != 0 ) {
+ o = dynamic_cast< const ListerItem * >( o->nextSibling() );
+ if ( o == this )
+ return true;
+ }
+ return false;
+}
+
+QString ListerTooltip::format( const QString &what,
+ const QString &txt, bool nobr )
+{
+ QString ret = "<b>" + what + "</b>&nbsp;" + (nobr ? "<nobr>" : "")
+ + txt + (nobr ? "</nobr>" : "") + "<br>";
+ return ret;
+}
+
+void ListerTooltip::maybeTip( const QPoint &pt )
+{
+ if ( !m_parent )
+ return;
+ kdDebug() << "ListTreeWidgetTooltip::maybeTip ()" << endl;
+ ListerItem *x = dynamic_cast<ListerItem *>( m_parent->itemAt( pt ) );
+ if ( !x )
+ return;
+ if ( x->extender() )
+ return; // no tips for extended items, thank you
+ QString str = u8( "<qt>" );
+ QString descr, cand, cur;
+ descr = cand = cur = i18n( "<i>Not available</i>" );
+ entity::Package p( x->entity() );
+ descr = p.shortDescription( std::string(
+ i18n( "<i>Not available</i>" ).local8Bit() ) );
+ try {
+ cand = u8( p.candidateVersion().versionString() );
+ } catch (...) {}
+ try {
+ cur = u8( p.installedVersion().versionString() );
+ } catch (...) {}
+
+ str += format( i18n( "Package:" ), u8( p.name() ) );
+ str += format( i18n( "Description:" ), descr );
+ str += format( i18n( "Current&nbsp;Version:" ), cur );
+ str += format( i18n( "Candidate&nbsp;Version:" ), cand );
+
+ str.append( u8( "</qt>" ) );
+ tip( m_parent->itemRect( x ), str );
+}
+
+void ListerItemTooltip::maybeTip(const QPoint& pt) {
+ if (!m_parent) {
+ return;
+ }
+
+ // Grab the column
+ const int col = m_parent->header()->sectionAt(pt.x());
+ if (col != Lister::ColIcon) {
+ return;
+ }
+
+ // Grab the item
+ const QListViewItem* item = m_parent->itemAt(pt);
+ if (!item) {
+ return;
+ } else if (item->pixmap(col) != main_icon) {
+ // Ignore items without pixmaps, as they have no indicator.
+ return;
+ }
+
+ // Grab the item rectangle
+ const QRect irect = m_parent->itemRect(item);
+ if (!irect.isValid()) {
+ return;
+ }
+
+ // Grab the header rectangle
+ const QRect hrect = m_parent->header()->sectionRect(col);
+ if (!hrect.isValid()) {
+ return;
+ }
+
+ // Grab the cell rectangle
+ const QRect cell(hrect.left(), irect.top(),
+ hrect.width(), irect.height());
+ tip(cell, i18n("This logo indicates that this package is officially supported by the Kubuntu development and support teams."));
+}
diff --git a/adept/adept/lister.h b/adept/adept/lister.h
new file mode 100644
index 0000000..6270c42
--- /dev/null
+++ b/adept/adept/lister.h
@@ -0,0 +1,261 @@
+/** -*- C++ -*-
+ @file adept/lister.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#define KUBUNTU
+
+#include <qtooltip.h>
+#include <qmap.h>
+#include <qmutex.h>
+#include <set>
+#include <qpixmap.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/actor.h>
+#include <apt-front/predicate/matchers.h>
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/utils/range.h>
+
+#include <adept/extendablelist.h>
+#include <adept/listerextenderui.h>
+#include <adept/actor.h>
+#include <adept/listerpredicate.h>
+
+#ifndef EPT_LISTER_H
+#define EPT_LISTER_H
+
+class KLineEdit;
+
+namespace adept {
+
+using namespace aptFront;
+using namespace aptFront::cache;
+class ListerTooltip;
+class ListerItemTooltip;
+class ListerItemExtender;
+class ListerItem;
+class Lister;
+
+struct entityLess {
+ bool operator()( entity::Entity e1, entity::Entity e2 );
+};
+
+class Lister: public ExtendableList, public Observer
+{
+ Q_OBJECT;
+public:
+ static const int ColPackage = 0;
+#ifdef KUBUNTU
+ static const int ColIcon = 1;
+ static const int ColStatus = 2;
+ static const int ColRequested = 3;
+ static const int ColDescription = 4;
+ static const int ColLast = 4;
+#else
+ static const int ColStatus = 1;
+ static const int ColRequested = 2;
+ static const int ColDescription = 3;
+ static const int ColLast = 3;
+#endif
+ static const int ColFirst = 0;
+ typedef entity::Entity Entity;
+ typedef std::vector< Entity > Vector;
+ typedef utils::Range< Entity > Range;
+ typedef utils::VectorRange< Entity > VectorRange;
+ typedef std::set< Entity > Set;
+ typedef std::map< Entity, ListerItem *, entityLess > Map;
+ typedef actor::Actor< entity::Package > Actor;
+ typedef predicate::Predicate< Entity > Predicate;
+ typedef std::map< ept::debtags::Tag, int > Cardinality;
+ struct RangeProvider {
+ virtual Range listerRange() = 0;
+ };
+
+ Lister (QWidget *parent = 0, const char *name = 0);
+ ~Lister();
+ void setSource();
+ virtual void notifyPostChange( component::Base * );
+ virtual void notifyPreRebuild( component::Base * );
+ virtual void notifyPostRebuild( component::Base * );
+ VectorRange selection();
+ VectorRange content();
+ int itemCount() { return m_itemCount; }
+ // void setRange( const Range &r ) { m_range = r; }
+ void setRangeProvider( RangeProvider *r ) { m_rangeProvider = r; }
+ void insertRange( Range );
+ void setOpenToplevel( bool o ) { m_openToplevel = o; }
+
+ bool busy() { return m_rebuildScheduled || m_inRebuild; }
+
+signals:
+ // this is adept::Lister because of braindead moc
+ void actionsChanged( adept::Lister * );
+ void cardinalityChanged( const Lister::Cardinality & );
+ void detailsRequested( Lister::Entity );
+ void rebuildStarted();
+ void rebuildFinished();
+ // void filterChanged( Lister::Predicate );
+
+public slots:
+ virtual void cleanRebuild();
+ virtual void rebuild();
+ virtual void baseAnd( ListerPredicate );
+ virtual void interactiveDrop( ListerPredicate );
+ virtual void interactiveAnd( ListerPredicate );
+ virtual void baseSet( ListerPredicate );
+ virtual void updateActions();
+ virtual void scheduleRebuild();
+ virtual void reallyUpdate();
+protected slots:
+ void contextMenu( QListViewItem *, const QPoint &, int );
+ void contextActivated( int );
+protected:
+ typedef std::pair< ListerItem *, Range > InsertRangePair;
+ void insertRangeInternal( InsertRangePair );
+ ListerTooltip *m_tip;
+
+ static Entity extractKey( Map::value_type );
+ static bool itemSelected( Map::value_type );
+
+ struct CreateItem {
+ CreateItem( Lister *, ListerItem * );
+ ~CreateItem();
+ Map::value_type operator()( Entity );
+ Lister *l;
+ int time;
+ int items;
+ ListerItem *last;
+ ListerItem *parent;
+ };
+
+ bool cancelRebuild();
+ void rebuildInsertRange( Range );
+
+ ListerItem *m_context;
+ QMap< QString, QString > m_icons;
+ Map m_items;
+ Vector m_all;
+ RangeProvider *m_rangeProvider;
+ Predicate m_baseF, m_interactiveF;
+ int m_itemCount;
+ bool m_rebuildScheduled:1;
+ bool m_inRebuild:1;
+ bool m_cancelRebuild:1;
+ bool m_openToplevel:1;
+ Cardinality m_cardinality;
+ QMutex m_rebuildMutex;
+};
+
+class ListerTooltip : public QToolTip
+{
+public:
+ ListerTooltip (QWidget *v, Lister *p) : QToolTip (v, 0), m_parent (p) {};
+ ListerTooltip(Lister*p) : QToolTip(p,0), m_parent(p) {};
+protected:
+ QString format( const QString &, const QString &, bool = true );
+ virtual void maybeTip (const QPoint &p);
+ Lister *m_parent;
+};
+
+class ListerItemTooltip : public QToolTip {
+public:
+ ListerItemTooltip(const Lister* parent) :
+ QToolTip(parent->viewport(),0),
+ m_parent(parent) {};
+
+protected:
+ const Lister* m_parent;
+ virtual void maybeTip (const QPoint& p);
+};
+
+class ListerItemExtender : public ListerItemExtenderUi,
+ public cache::Observer {
+ Q_OBJECT
+public:
+ ListerItemExtender( QWidget *parent = 0, const char * n = 0 );
+ ~ListerItemExtender();
+ virtual void resize( int w, int h );
+ void setItem( ExtendableItem *i );
+ ListerItem *item();
+ entity::Entity entity() const { return m_entity; }
+ void notifyPostChange( component::Base * );
+ void notifyPostRebuild( component::Base * );
+protected slots:
+ void detailsClicked();
+ void updateLogical();
+signals:
+ void detailsRequested( Lister::Entity );
+protected:
+ bool eventFilter( QObject *o, QEvent *e );
+ void mouseReleaseEvent( QMouseEvent *e );
+ entity::Entity m_entity;
+ unsigned m_leftHeight;
+};
+
+class ListerItem: public ExtendableItem
+{
+public:
+ ListerItem(Lister *v, entity::Entity e)
+ : ExtendableItem (v), m_previous( 0 ), m_entity( e )
+ {};
+
+ ListerItem(Lister *v, ListerItem *i, entity::Entity e)
+ : ExtendableItem( v, i ), m_previous( i ), m_entity( e )
+ {};
+
+ ListerItem(ListerItem *p, ListerItem *i, entity::Entity e)
+ : ExtendableItem( p, i ), m_previous( i ), m_entity( e )
+ {};
+
+ ListerItem(ListerItem *p, entity::Entity e)
+ : ExtendableItem( p ), m_previous( 0 ), m_entity( e )
+ {};
+
+ ~ListerItem();
+
+ virtual ItemExtender *createExtender() {
+ if ( extendable() )
+ return new ListerItemExtender();
+ return 0;
+ }
+
+ /* virtual void updateIcon( const QPixmap &p ) {
+ if ( m_entity.is< entity::Package >()
+ || m_entity.is< entity::Version >() )
+ return ExtendableItem::updateIcon( p );
+ setPixmap( list()->toggleColumn(), QPixmap() );
+ } */
+
+ virtual QString text( int column ) const;
+#ifdef KUBUNTU
+ virtual void setUpdatedIcon(QPixmap& pm) { m_pixmap=pm; };
+ virtual const QPixmap* pixmap( int column ) const;
+#endif
+ entity::Entity entity() { return m_entity; }
+ const entity::Entity entity() const { return m_entity; }
+ virtual void paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment);
+ virtual bool less( const ExtendableItem * ) const;
+ Lister *lister() {
+ return dynamic_cast< Lister* >( listView() );
+ }
+
+ // beware, makes sort O(n^2lg(n^2))
+ bool keepLess( const ListerItem *o ) const;
+ virtual bool extendable() const {
+ return ( entity().is< entity::Package >()
+ || m_entity.is< entity::Version >() );
+ }
+
+protected:
+ ListerItem *m_previous;
+ entity::Entity m_entity;
+ QPixmap m_pixmap;
+ // ListerItemTooltip* m_tip;
+};
+
+}
+
+#endif /* ifndef PKGLIST_H */
diff --git a/adept/adept/listerextenderui.ui b/adept/adept/listerextenderui.ui
new file mode 100644
index 0000000..3f89eaf
--- /dev/null
+++ b/adept/adept/listerextenderui.ui
@@ -0,0 +1,309 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::ListerItemExtenderUi</class>
+<widget class="adept::ItemExtender">
+ <property name="name">
+ <cstring>ListerItemExtenderrUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>587</width>
+ <height>230</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>ListerItemExtenderrUi</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>4</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="2" column="3">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>4</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>name</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_indicator</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_status</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>status</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_change</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>change</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTextBrowser" row="0" column="2" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ <property name="vScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="text">
+ <string>description...</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_logical</cstring>
+ </property>
+ <property name="text">
+ <string>logical</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_details</cstring>
+ </property>
+ <property name="text">
+ <string>Details</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="adept::PackageInfo" row="1" column="1">
+ <property name="name">
+ <cstring>m_packageInfo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>80</height>
+ </size>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>1</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::PackageInfo</class>
+ <header location="global">adept/packageinfo.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1003">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b249444154388db5944d4c5c5518869f73ce9db9cc40f929cc30300e18129a50685268a28291982e1a2175212eaab1c49d3f8971e7aec6aedb54a32b435dd8685cb8c0c4b8b0feb421b7bd8186a069d23209144b18cb0c02f3732ff3c3ccbdd705a571941213f1dd9d93739ef37e6fbeef08d334d9d5d0d090c701c8344d2176c1a6697a5d5d5dd8b64d2a95c2b2ac7f05b12c8b783c8e6118d8b6fd685fdb753a39394928e2a7c55724d693a7e214104220242805520a84d8b9e4790f0b1302c7751958f1e30534be9fa41a0c60db362dbe227f64af91b6e7719c2dfc0117a71c603da591de2882a7d3d4ec27122b10acad50aeb88044d542b84de3af7ab44aa55274f4e449dbf354bc347aa096fbf37e7efa2ecbad1b36907d78b289de8120232f37726250c3f52cf0a026a0f6065b9645d929e038167aa096d91b307171059034b5f8e9e9eb44fa052b4b25eeccd9dc99cb71f6ad082fbea2e351c075bdbdc13b9109fc01b83fef63e2e232e03076b68393231a0dcd024daf502c1e66e67a89cb971ef0e5a74bb4b61e6378248094b92ab0ac024b70ca017ef8360394187b2dc6d8b89ffa500e4d4f93d9083275d5e6f9913ade3dd70ee87c7d25c95646a25415aadab152b09ed4f8c5cc130a853839eac3951b684a61e70ef3f9c739668c24eba912afbfddc6d4d506e6a6d7b8b7d082aa8eb8dab19482cdcd220e36dd3dc19df23545de0a71f952861923493456cfd3cf36123c54a0b7bf0e8064621b21f7712c040857071ca4eea0f40a99f510573ec971cb48030e811a1faded3e94be85f2fb00703d1ff26f96ab9f011a5b04d0c4f26fdb948a754c1b25668c2491483d5d5d611617d6b8f0fe32cb779b492ce65168b4c774a4701eefd8f3a02d56e6e8f13aeefe9a63fa5a89d1970e91d908f3d46003e1480d173e28b37827c9b977348ab92ce16890237d1ec907ee3e8e3d8f60d0e1f4583d009f7d9860662acff89bad1c1faad0717493f7ce7713ed8cb0995c255f2a317a26427b67198f6a70f51c0a41b902279ed1187f23cc17130b7c74de65eac77a7a8f05517e41e2deefa4930576db60fa7a8ee1535134df3e93e7b82e0817476439fd6a9070a49f6fbe4a3077739db99b15c001146dd13a46cf1cc1f83943c62e51de76b0738fc9381e8f3390f0236b252e124999e11724fd833196164bacadb87848224fe874f779b43fe9f2dca928956d505a96dbb3f9bdc18661e00534c26d1a7a40e13912a11c9454280da41048a9915c75585df500074d53d816dc9edd229528ef0db66dbbea3ffdaffa471f1f28d8344df1bf800f1a6e9aa6f813c39885bc050f269c0000000049454e44ae426082</data>
+ </image>
+</images>
+<includes>
+ <include location="global" impldecl="in declaration">adept/extendablelist.h</include>
+</includes>
+<layoutdefaults spacing="0" margin="4"/>
+<includehints>
+ <includehint>adept/packageinfo.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/listerpredicate.h b/adept/adept/listerpredicate.h
new file mode 100644
index 0000000..98f1b41
--- /dev/null
+++ b/adept/adept/listerpredicate.h
@@ -0,0 +1,14 @@
+// -*- C++ -*-
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/predicate/predicate.h>
+
+#ifndef EPT_LISTERPREDICATE_H
+#define EPT_LISTERPREDICATE_H
+
+namespace adept {
+using namespace aptFront;
+using namespace cache;
+typedef predicate::Predicate< entity::Entity > ListerPredicate;
+}
+
+#endif
diff --git a/adept/adept/packagedetails.cpp b/adept/adept/packagedetails.cpp
new file mode 100644
index 0000000..56dd80b
--- /dev/null
+++ b/adept/adept/packagedetails.cpp
@@ -0,0 +1,273 @@
+#include <qtoolbutton.h>
+#include <qtextbrowser.h>
+#include <qlabel.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <qpushbutton.h>
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+
+#include <kfileitem.h>
+#include <kfiledetailview.h>
+#include <kapplication.h>
+
+#include <adept/lister.h>
+#include <adept/tagchooser.h>
+#include <adept/packageinfo.h>
+#include <adept/packagedetails.h>
+#include <adept/utils.h>
+#include <adept/changelog.h>
+
+#include <fstream>
+
+using namespace adept;
+
+ItemChangelog* global_changelog = new ItemChangelog();
+
+PackageDetails::PackageDetails( QWidget *w, const char *n )
+ : PackageDetailsUi( w, n ),
+ m_thread( 0 ),
+ m_qtMutex( true ),
+ m_logicalAct( 0 ), m_removeAct( 0 ),
+ m_fileListRunning( false )
+{
+ m_toolbar->setIconSize( 22 );
+ m_toolbar->setIconText( KToolBar::IconTextRight );
+
+ m_toolbar->insertButton( u8( "back" ), BBack, false, i18n( "Back" ) );
+ m_toolbar->insertButton( u8( "forward" ), BForward, false, i18n( "Forward" ) );
+ m_toolbar->insertLineSeparator();
+ m_toolbar->insertButton( u8( "" ), BShow, true, i18n( "Show List" ) );
+
+ m_tags->setTitle( i18n( "Assigned Tags" ) );
+
+ m_lister->setRangeProvider( this ); // wee
+ // m_lister->setOpenToplevel( true );
+
+ m_description->setPaper( QBrush( colorGroup().background() ) );
+
+ connect( m_toolbar->getButton( BShow ), SIGNAL( clicked() ),
+ this, SIGNAL( showList() ) );
+ connect( m_toolbar->getButton( BBack ), SIGNAL( clicked() ),
+ this, SIGNAL( back() ) );
+ connect( m_toolbar->getButton( BForward ), SIGNAL( clicked() ),
+ this, SIGNAL( forward() ) );
+ connect( m_lister, SIGNAL( detailsRequested( Lister::Entity ) ),
+ this, SIGNAL( detailsRequested( Lister::Entity ) ) );
+
+ observeComponent< component::State >();
+
+ adjustFontSize( m_name, 1 );
+
+ Cache &c = cache::Global::get( m_cache );
+ component::Packages::iterator i = c.packages().packagesBegin();
+ while ( !i->hasVersion() ) ++i; // ha hum...
+ setPackage( *i );
+}
+
+Lister::Range PackageDetails::listerRange() {
+ utils::Range< entity::Relation > r = m_package.depends();
+ utils::VectorRange< entity::Entity > vr;
+ while ( r != r.end() ) {
+ if ( !r->targetPackages().empty() )
+ std::cerr << r->targetPackages()->name() << std::endl;
+ vr.consume( *r );
+ r = r.next();
+ }
+ return vr.sorted();
+}
+
+void PackageDetails::loadFileListWorker()
+{
+ entity::Package p = m_package;
+
+ std::string fl, flfile = "/var/lib/dpkg/info/" + p.name() + ".list";
+ std::ifstream ifl( flfile.c_str() );
+
+ int i = 0;
+ kdDebug() << "PackageDetails::loadFileListWorker() entering loop" << endl;
+
+ while ( ifl.is_open() && !ifl.eof() ) {
+ std::string line;
+ getline( ifl, line );
+ if ( line == "/." || line == "" )
+ continue; // nasty evil thing go away
+ m_qtMutex.lock();
+ KURL url( "file:///" );
+ url.addPath( u8( line ) );
+ KFileItem *it = new KFileItem( url, u8( "" ), 0 );
+ it->setName( u8( line ) );
+ m_fileList->insertItem( it );
+ ++i;
+ m_qtMutex.unlock();
+ }
+ kdDebug() << "PackageDetails::loadFileListWorker() leaving loop" << endl;
+ ifl.close();
+}
+
+void PackageDetails::notifyPreRebuild( component::Base * ) {
+ kdDebug() << "PackageDetails::notifyPreRebuild()" << endl;
+ Threads::wait();
+ m_logical->setEnabled( false );
+ m_remove->setEnabled( false );
+ m_logical->disconnect( SIGNAL( clicked() ) );
+ m_remove->disconnect( SIGNAL( clicked() ) );
+ delete m_logicalAct;
+ delete m_removeAct;
+ kdDebug() << "PackageDetails::notifyPreRebuild() done" << endl;
+}
+
+void PackageDetails::loadFileList() {
+ Cache &c = cache::Global::get( m_cache );
+ if ( m_fileListRunning || !c.isOpen() ) {
+ QTimer::singleShot( 100, this, SLOT( loadFileList() ) );
+ return;
+ }
+
+ kdDebug() << "PackageDetails::loadFileList()" << endl;
+ m_fileListRunning = true;
+
+ // the following call is neccessary to invoke buildDefaultType of KMimeType
+ // the first time the method is called it will check for
+ // existence of application/octet-stream and *popup a dialog* if
+ // not found -- we don't want that to happen in a non-gui thread
+ KMimeType::defaultMimeTypePtr();
+ m_thread = asyncCall( std::mem_fun( &PackageDetails::loadFileListWorker ), this );
+
+ m_qtMutex.lock();
+ m_fileList->KFileView::clear();
+ c.progress().OverallProgress( 0, 0, 0, i18n( "Loading filelist..." ) );
+
+ m_qtMutex.unlock();
+ Threads::enqueue( m_thread, &m_qtMutex );
+ Threads::wait();
+ c.progress().Done();
+ m_fileListRunning = false;
+ kdDebug() << "PackageDetails::loadFileList() finished" << endl;
+}
+
+void PackageDetails::setPackage( cache::entity::Package p )
+{
+ kdDebug() << "PackageDetails::setPackage()" << endl;
+ m_package = p.stable();
+ m_name->setText( QString( "<b>" ) +
+ p.name( std::string( "No package" ) ) + "</b>" );
+ m_info->setPackage( p );
+ QString l = u8( p.longDescription(
+ std::string( i18n( "No long description available" ).local8Bit() ) ) );
+ m_description->setText( QString( "<qt>" )
+ + formatLongDescription( l ) + "</qt>" );
+
+ std::string na = u8( i18n( "not available" ) );
+ m_tags->setTags( p.tags( entity::Package::TagSet() ) );
+ m_tags->openToplevel();
+ m_architecture->setText( labelFormat( i18n( "Architecture: " ),
+ p.architecture( na ) ) );
+ m_filename->setText( labelFormat( i18n( "Filename: " ), p.fileName( na ) ) );
+ m_md5->setText( labelFormat( i18n( "MD5: " ), p.md5sum( na ) ) );
+ m_source->setText( labelFormat( i18n( "Source Package: " ), p.source( na ) ) );
+
+ /* IF IT ISN'T KUBUNTU, DON'T SUPPORT CHANGELOGS! */
+#ifdef KUBUNTU
+ // Lets go ahead and stick the changelog in there....
+ try {
+ global_changelog->setParent(p);
+ m_changelog->setText(i18n("Loading..."));
+ connect(dynamic_cast<QObject*>(global_changelog), SIGNAL( changelogReady(QString) ),
+ dynamic_cast<QObject*>(this), SLOT( changelogDisplay(QString) ));
+ connect(dynamic_cast<QObject*>(this), SIGNAL( requestTheChangelog() ),
+ dynamic_cast<QObject*>(global_changelog), SIGNAL( changelogNeeded() ));
+ emit requestTheChangelog();
+ } catch (...) {};
+#endif /* KUBUNTU */
+
+ notifyPostChange( 0 );
+ m_lister->cleanRebuild();
+ loadFileList();
+}
+
+void PackageDetails::changelogDisplay( QString content ) {
+ m_changelog->setText(content);
+}
+
+void PackageDetails::notifyPostChange( cache::component::Base * )
+{
+ kdDebug() << "PackageDetails::notifyPostChange()" << endl;
+ // without the timer to break it, there could be a loop where
+ // we connect the clicked() signal to a slot which would be
+ // invoked right away when we return -> evil
+ QTimer::singleShot( 0, this, SLOT( updateLogical() ) );
+}
+
+void PackageDetails::notifyPostRebuild( cache::component::Base *b )
+{
+ kdDebug() << "PackageDetails::notifyPostRebuild( " << b << " )" << endl;
+ // can't call directly because stable entities are not guaranteed
+ // to be stabilised at this point yet
+ QTimer::singleShot( 0, this, SLOT( updateLogical() ) );
+ QTimer::singleShot( 0, this, SLOT( loadFileList() ) );
+ m_lister->cleanRebuild();
+}
+
+void PackageDetails::updateLogical()
+{
+ Cache &c = cache::Global::get( m_cache );
+ if ( !c.isOpen() ) {
+ QTimer::singleShot( 100, this, SLOT( updateLogical() ) );
+ return;
+ }
+ kdDebug() << "PackageDetails::updateLogical()" << endl;
+ entity::Package p = m_package;
+ kdDebug() << "PackageDetails::updateLogical: p = " << p.name()
+ << " p.component() = " << &p.component() << endl;
+ if ( !p.valid() ) return; // nothing to update
+ EntityActor *a = 0, *b = 0;
+
+ if ( p.canUpgrade() ) {
+ a = new EntityActor( p.upgrade() );
+ } else if ( p.canInstall() ) {
+ a = new EntityActor( p.install() );
+ } else if ( p.canKeep() ) {
+ a = new EntityActor( p.keep() );
+ }
+
+ if ( p.canRemove() ) {
+ b = new EntityActor( p.remove() );
+ }
+
+ if ( a ) {
+ m_logical->setEnabled( true );
+ m_logical->setText( u8( a->actor().prettyName() ) );
+ connect( m_logical, SIGNAL( clicked() ),
+ a, SLOT( destructiveAct() ) );
+ } else {
+ m_logical->setText( i18n( "Install" ) );
+ m_logical->setEnabled( false );
+ }
+
+ if ( b ) {
+ m_remove->setEnabled( true );
+ m_remove->setText( u8( b->actor().prettyName() ) );
+ connect( m_remove, SIGNAL( clicked() ),
+ b, SLOT( destructiveAct() ) );
+ } else {
+ m_remove->setText( i18n( "Remove" ) );
+ m_remove->setEnabled( false );
+ }
+
+ m_logicalAct = a;
+ m_removeAct = b;
+ // std::copy( r, r.last(), vr );
+
+ // r.consume( utils::upcastRange< entity::Entity >( p.depends() ) );
+}
+
+void PackageDetails::setHasForward( bool e ) {
+ m_toolbar->setItemEnabled( BForward, e );
+ // m_forward->setEnabled( e );
+}
+
+void PackageDetails::setHasBack( bool e ) {
+ m_toolbar->setItemEnabled( BBack, e );
+ // m_back->setEnabled( e );
+}
diff --git a/adept/adept/packagedetails.h b/adept/adept/packagedetails.h
new file mode 100644
index 0000000..6d15185
--- /dev/null
+++ b/adept/adept/packagedetails.h
@@ -0,0 +1,58 @@
+/* -*- C++ -*- adept/packagedetails.h
+ written by Peter Rockai <[email protected]> */
+
+#include <apt-front/cache/entity/package.h>
+#include <adept/packagedetailsui.h>
+#include <adept/lister.h>
+#include <adept/changelog.h>
+
+#include <qmutex.h>
+#include <qguardedptr.h>
+
+#ifndef EPT_PACKGEDETAILS_H
+#define EPT_PACKGEDETAILS_H
+
+class KToolBarButton;
+class QThread;
+
+namespace adept {
+
+using namespace aptFront;
+
+class PackageDetails : public PackageDetailsUi, public Lister::RangeProvider,
+ public cache::Observer
+{
+ Q_OBJECT
+public:
+ enum ButtonID { BForward, BBack, BShow };
+ PackageDetails( QWidget *p = 0, const char *n = 0 );
+ void setPackage( cache::entity::Package );
+ void setHasForward( bool );
+ void setHasBack( bool );
+ virtual Lister::Range listerRange();
+ void notifyPostChange( cache::component::Base * );
+ void notifyPreRebuild( cache::component::Base * );
+ void notifyPostRebuild( cache::component::Base * );
+signals:
+ void showList();
+ void back();
+ void forward();
+ void detailsRequested( Lister::Entity );
+ void requestTheChangelog();
+protected slots:
+ void loadFileList();
+ void updateLogical();
+ void changelogDisplay(QString content);
+protected:
+ void loadFileListWorker();
+ cache::entity::StablePackage m_package;
+ QMutex m_qtMutex;
+ QThread *m_thread;
+ QGuardedPtr< EntityActor > m_logicalAct, m_removeAct;
+ int m_fileListRunning;
+
+};
+
+}
+
+#endif
diff --git a/adept/adept/packagedetailsui.ui b/adept/adept/packagedetailsui.ui
new file mode 100644
index 0000000..06e436a
--- /dev/null
+++ b/adept/adept/packagedetailsui.ui
@@ -0,0 +1,506 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>PackageDetailsUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PackageDetailsUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>705</width>
+ <height>529</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="KToolBar">
+ <property name="name">
+ <cstring>m_toolbar</cstring>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>8</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>(title)</string>
+ </property>
+ </widget>
+ <widget class="adept::PackageInfo" row="1" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>m_info</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>8</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>75</height>
+ </size>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="3" column="2">
+ <property name="name">
+ <cstring>m_remove</cstring>
+ </property>
+ <property name="text">
+ <string>(remove)</string>
+ </property>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>m_logical</cstring>
+ </property>
+ <property name="text">
+ <string>(logical)</string>
+ </property>
+ </widget>
+ <spacer row="3" column="3">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QTextBrowser" row="0" column="4" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>28</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ <property name="vScrollBarMode">
+ <enum>Auto</enum>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="text">
+ <string>description...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>16</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Package Relationships</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::Lister" row="0" column="0">
+ <property name="name">
+ <cstring>m_lister</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>120</height>
+ </size>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Installed Files</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KFileDetailView" row="0" column="0">
+ <property name="name">
+ <cstring>m_fileList</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Additional Information</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="adept::TagChooser">
+ <property name="name">
+ <cstring>m_tags</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_source</cstring>
+ </property>
+ <property name="text">
+ <string>source</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_architecture</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>architecture</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_filename</cstring>
+ </property>
+ <property name="text">
+ <string>file</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_md5</cstring>
+ </property>
+ <property name="text">
+ <string>md5</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>61</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>changelog_tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Developer Changelog</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QTextBrowser" row="0" column="0">
+ <property name="name">
+ <cstring>m_changelog</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ <property name="vScrollBarMode">
+ <enum>Auto</enum>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="text">
+ <string>description...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::TagChooser</class>
+ <header location="global">adept/tagchooser.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>adept::PackageInfo</class>
+ <header location="global">adept/packageinfo.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>adept::Lister</class>
+ <header location="global">adept/lister.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KToolBar</class>
+ <header location="global">ktoolbar.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>1</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KFileDetailView</class>
+ <header location="global">kfiledetailview.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1003">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b249444154388db5944d4c5c5518869f73ce9db9cc40f929cc30300e18129a50685268a28291982e1a2175212eaab1c49d3f8971e7aec6aedb54a32b435dd8685cb8c0c4b8b0feb421b7bd8186a069d23209144b18cb0c02f3732ff3c3ccbdd705a571941213f1dd9d93739ef37e6fbeef08d334d9d5d0d090c701c8344d2176c1a6697a5d5d5dd8b64d2a95c2b2ac7f05b12c8b783c8e6118d8b6fd685fdb753a39394928e2a7c55724d693a7e214104220242805520a84d8b9e4790f0b1302c7751958f1e30534be9fa41a0c60db362dbe227f64af91b6e7719c2dfc0117a71c603da591de2882a7d3d4ec27122b10acad50aeb88044d542b84de3af7ab44aa55274f4e449dbf354bc347aa096fbf37e7efa2ecbad1b36907d78b289de8120232f37726250c3f52cf0a026a0f6065b9645d929e038167aa096d91b307171059034b5f8e9e9eb44fa052b4b25eeccd9dc99cb71f6ad082fbea2e351c075bdbdc13b9109fc01b83fef63e2e232e03076b68393231a0dcd024daf502c1e66e67a89cb971ef0e5a74bb4b61e6378248094b92ab0ac024b70ca017ef8360394187b2dc6d8b89ffa500e4d4f93d9083275d5e6f9913ade3dd70ee87c7d25c95646a25415aadab152b09ed4f8c5cc130a853839eac3951b684a61e70ef3f9c739668c24eba912afbfddc6d4d506e6a6d7b8b7d082aa8eb8dab19482cdcd220e36dd3dc19df23545de0a71f952861923493456cfd3cf36123c54a0b7bf0e8064621b21f7712c040857071ca4eea0f40a99f510573ec971cb48030e811a1faded3e94be85f2fb00703d1ff26f96ab9f011a5b04d0c4f26fdb948a754c1b25668c2491483d5d5d611617d6b8f0fe32cb779b492ce65168b4c774a4701eefd8f3a02d56e6e8f13aeefe9a63fa5a89d1970e91d908f3d46003e1480d173e28b37827c9b977348ab92ce16890237d1ec907ee3e8e3d8f60d0e1f4583d009f7d9860662acff89bad1c1faad0717493f7ce7713ed8cb0995c255f2a317a26427b67198f6a70f51c0a41b902279ed1187f23cc17130b7c74de65eac77a7a8f05517e41e2deefa4930576db60fa7a8ee1535134df3e93e7b82e0817476439fd6a9070a49f6fbe4a3077739db99b15c001146dd13a46cf1cc1f83943c62e51de76b0738fc9381e8f3390f0236b252e124999e11724fd833196164bacadb87848224fe874f779b43fe9f2dca928956d505a96dbb3f9bdc18661e00534c26d1a7a40e13912a11c9454280da41048a9915c75585df500074d53d816dc9edd229528ef0db66dbbea3ffdaffa471f1f28d8344df1bf800f1a6e9aa6f813c39885bc050f269c0000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>ktoolbar.h</includehint>
+ <includehint>adept/packageinfo.h</includehint>
+ <includehint>adept/lister.h</includehint>
+ <includehint>kfiledetailview.h</includehint>
+ <includehint>adept/tagchooser.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/packageinfo.cpp b/adept/adept/packageinfo.cpp
new file mode 100644
index 0000000..dac788b
--- /dev/null
+++ b/adept/adept/packageinfo.cpp
@@ -0,0 +1,181 @@
+/** -*- C++ -*-
+ @file adept/packageinfo.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qcolor.h>
+#include <qlabel.h>
+#include <qregexp.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <adept/packageinfo.h>
+#include <adept/utils.h>
+
+using namespace adept;
+using namespace cache;
+
+PackageInfo::PackageInfo( QWidget *p, const char *n )
+ : PackageInfoUi( p, n ), m_specificVersion( false )
+{
+ observeComponent< component::State >();
+}
+
+void PackageInfo::adjustFontSize( int s ) {
+ adept::adjustFontSize( m_status, s );
+ adept::adjustFontSize( m_change, s );
+ adept::adjustFontSize( m_section, s );
+ adept::adjustFontSize( m_installedSize, s );
+ adept::adjustFontSize( m_maintainer, s );
+ adept::adjustFontSize( m_candidateVer, s );
+ adept::adjustFontSize( m_installedVer, s );
+}
+
+void PackageInfo::hideStatus() {
+ m_status->hide();
+ m_change->hide();
+}
+
+namespace adept {
+
+QColor statusColor( entity::Package p )
+{
+ if ( !p.valid() )
+ return Qt::black;
+
+ QColor c = Qt::blue;
+ if (p.isInstalled())
+ c = Qt::darkGreen;
+ if (p.isUpgradable())
+ c = Qt::darkYellow;
+ if (p.isBroken())
+ c = Qt::red;
+ return c;
+}
+
+QColor actionColor( entity::Package p )
+{
+ if ( !p.valid() )
+ return Qt::black;
+
+ QColor c = Qt::blue;
+ if (p.markedNewInstall())
+ c = Qt::darkGreen;
+ if (p.markedUpgrade())
+ c = Qt::darkYellow;
+ if (p.markedReInstall())
+ c = Qt::darkYellow;
+ if (p.markedRemove())
+ c = Qt::darkRed;
+ if (p.markedPurge())
+ c = Qt::red;
+ if (p.willBreak())
+ c = Qt::red;
+ return c;
+}
+
+/* QString hexColor( QColor c )
+{
+ QString r( "#%1%2%3" );
+ return r.arg( c.red(), -2, 16 ).arg( c.green(), -2, 16 ).arg( c.blue(), -2, 16 );
+ } */
+
+QString colorify( QColor c, QString s )
+{
+ return QString( "<font color=\"" ) + c.name()
+ + "\">" + s + "</font>";
+}
+
+QString formatLongDescription( QString l )
+{
+ QRegExp rx( u8( "^(.*)\n" ) );
+ rx.setMinimal( true );
+ l.replace( rx, u8( "\\1</p><p>" ) );
+ rx = QRegExp( u8( "\\n[ ]*\\.\\n" ) );
+ l.replace( rx, u8( "</p><p>" ) );
+ rx = QRegExp( u8( "\n " ) );
+ l.replace( rx, u8( " " ) );
+ rx = QRegExp( u8( "\n - (.*)(\n|$)" ) );
+ rx.setMinimal( true );
+ l.replace( rx, u8( "\n<li>\\1</li>\n" ) );
+ l.replace( rx, u8( "\n<li>\\1</li>\n" ) );
+ return QString( "<p>" ) + l + u8( "</p>" );
+}
+
+void PackageInfo::setPackage( entity::Package p )
+{
+ kdDebug() << "PackageInfo::setPackage()" << endl;
+ // ho hum, probably XXX fix libapt-front?
+ setVersion( p.valid() ? p.anyVersion() : entity::Version(), false );
+}
+
+void PackageInfo::setVersion( entity::Version v, bool specific )
+{
+ m_specificVersion = specific;
+ m_version = v.stable();
+ if ( !m_version.valid() ) return;
+ kdDebug() << "PackageInfo::setVersion() (valid)" << endl;
+ m_section->setText(
+ labelFormat( i18n( "Section:" ), u8( v.section( u8( i18n( "Unknown" ) ) ) ) ) );
+ m_maintainer->setText(
+ labelFormat( i18n( "Maintainer:" ), u8( v.maintainer( u8( i18n( "Unknown" ) ) ) ),
+ false ) );
+
+ notifyPostChange( 0 );
+}
+
+void PackageInfo::notifyPostRebuild( component::Base *b ) {
+ return notifyPostChange( b );
+}
+
+void PackageInfo::notifyPostChange( component::Base * )
+{
+ if ( !m_version.valid() ) return;
+ entity::Version v = m_version;
+ entity::Package p = v.package();
+ QString cv = i18n( "n/a" ), iv = i18n( "n/a" ), is = i18n( "n/a" ), status, action;
+
+ if (p.valid()) {
+ entity::Version _cv = p.candidateVersion();
+ entity::Version _iv = p.installedVersion();
+
+ if (_cv.valid()) {
+ cv = u8( _cv.versionString() );
+ is = u8( _cv.installedSizeString() );
+ }
+
+ if (_iv.valid()) {
+ iv = _iv.versionString();
+ }
+ }
+
+ std::string unk = u8( i18n( "unknown" ) );
+ /* m_status->setText( i18n( "<nobr>Currently " ) + colorify(
+ statusColor( p ),
+ u8( p.statusString( unk ) ) )
+ + i18n( ", " ) + colorify(
+ actionColor( p ),
+ u8( p.actionString( unk ) ) ) + i18n( "
+ requested</nobr>" ) ); */
+ m_status->setText(
+ labelFormat( i18n( "Status:" ), colorify(
+ statusColor( p ),
+ u8( p.statusString( u8( i18n( "Unknown" ) ) ) ) ) ) );
+ m_change->setText(
+ labelFormat( i18n( "Requested change:" ), colorify(
+ actionColor( p ),
+ u8( p.actionString( u8( i18n( "Unknown" ) ) )
+ ) ) ) );
+
+ m_candidateVer->setText(
+ m_specificVersion ?
+ labelFormat( i18n( "Version:" ),
+ v.versionString() + "(" + i18n( "candidate" ) + " " + cv + ")" )
+ : labelFormat( i18n( "Candidate Version:" ), cv ) );
+ m_installedVer->setText(
+ labelFormat( i18n( "Installed Version:" ), iv ) );
+ m_installedSize->setText(
+ labelFormat( i18n( "Installed Size:" ), is ) );
+}
+
+}
diff --git a/adept/adept/packageinfo.h b/adept/adept/packageinfo.h
new file mode 100644
index 0000000..1a83c0d
--- /dev/null
+++ b/adept/adept/packageinfo.h
@@ -0,0 +1,49 @@
+/* -*- C++ -*- adept/packageinfo.h
+ written by Peter Rockai <[email protected]> */
+
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/cache.h>
+#include <adept/packageinfoui.h>
+
+#ifndef EPT_PACKAGEINFO_H
+#define EPT_PACKAGEINFO_H
+
+namespace adept {
+
+using namespace aptFront;
+
+class PackageInfo : public PackageInfoUi, public cache::Observer
+{
+ Q_OBJECT
+public:
+ PackageInfo( QWidget *p, const char *n = 0 );
+public slots:
+ void setVersion( cache::entity::Version v, bool = true );
+ void setPackage( cache::entity::Package v );
+ void adjustFontSize( int );
+public:
+ void notifyPostChange( cache::component::Base * );
+ void notifyPostRebuild( cache::component::Base * );
+ void hideStatus();
+protected:
+ cache::entity::StableVersion m_version;
+ bool m_specificVersion;
+};
+
+inline QString labelFormat( const QString &what,
+ const QString &txt, bool nobr = true )
+{
+ QString ret = "<b><nobr>" + what + "</nobr></b>&nbsp;" + (nobr ? "<nobr>" : "")
+ + txt + (nobr ? "</nobr>" : "");
+ return ret;
+}
+
+QColor actionColor( cache::entity::Package p );
+QColor statusColor( cache::entity::Package p );
+
+QString formatLongDescription( QString in );
+QString colorify( QColor c, QString s );
+
+}
+
+#endif
diff --git a/adept/adept/packageinfoui.ui b/adept/adept/packageinfoui.ui
new file mode 100644
index 0000000..d7d5dc5
--- /dev/null
+++ b/adept/adept/packageinfoui.ui
@@ -0,0 +1,180 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>PackageInfoUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>details</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>253</width>
+ <height>128</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form2</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>m_indent</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>16</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_maintainer</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>maintainer</string>
+ </property>
+ <property name="alignment">
+ <set>AlignBottom</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>m_candidateVer</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>candidate version</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="1">
+ <property name="name">
+ <cstring>m_installedVer</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>installed version</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_section</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>section</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_installedSize</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>installed size</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_status</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>status</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_change</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>change</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/adept/progress.cpp b/adept/adept/progress.cpp
new file mode 100644
index 0000000..60a3bd3
--- /dev/null
+++ b/adept/adept/progress.cpp
@@ -0,0 +1,58 @@
+#include <kapplication.h>
+#include <qcursor.h>
+#include <kdebug.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+using namespace adept;
+
+Progress::Progress()
+ : m_pbar( 0 ), m_sbar( 0 ), m_busy( false )
+{
+}
+
+void Progress::Update ()
+{
+ if (!m_sbar)
+ return;
+ if (!m_pbar) {
+ if (Percent) {
+ m_pbar = new KProgress( m_sbar );
+ m_pbar->setMinimumWidth( 80 );
+ m_pbar->setMaximumWidth( 120 );
+ m_pbar->setTextEnabled( false );
+ m_pbar->show();
+ m_sbar->addWidget( m_pbar, 0, true );
+ m_pbar->setTotalSteps( 100 );
+ }
+ MajorChange = true;
+ }
+ if (MajorChange) {
+ if ( !m_busy ) {
+ QApplication::setOverrideCursor( QCursor( Qt::BusyCursor ) );
+ m_busy = true;
+ }
+ m_sbar->message( u8( Op + "..." ) );
+ }
+ if (CheckChange (0.05) == false)
+ return;
+ // kdDebug() << "Progress::Update()" << endl;
+ if (m_pbar)
+ m_pbar->setProgress( Percent );
+ kapp->processEvents();
+}
+
+void Progress::Done ()
+{
+ kdDebug() << "Progress::Done()" << endl;
+
+ QApplication::restoreOverrideCursor();
+ m_busy = false;
+
+ if (m_sbar)
+ m_sbar->clear();
+ delete m_pbar;
+ m_pbar = 0;
+}
+
+Progress::~Progress() {}
diff --git a/adept/adept/progress.h b/adept/adept/progress.h
new file mode 100644
index 0000000..aef3d92
--- /dev/null
+++ b/adept/adept/progress.h
@@ -0,0 +1,30 @@
+/** -*- C++ -*-
+ @file adept/progress.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <kprogress.h>
+#include <kstatusbar.h>
+#include <apt-pkg/progress.h>
+
+#ifndef EPT_PROGRESS_H
+#define EPT_PROGRESS_H
+
+namespace adept {
+
+class Progress : public OpProgress {
+public:
+ Progress();
+ virtual ~Progress();
+ virtual void Update();
+ virtual void Done();
+ void setStatusBar( KStatusBar *b ) { m_sbar = b; }
+protected:
+ KProgress *m_pbar;
+ KStatusBar *m_sbar;
+ bool m_busy;
+};
+
+}
+
+#endif
diff --git a/adept/adept/quickfilter.cpp b/adept/adept/quickfilter.cpp
new file mode 100644
index 0000000..2cb0577
--- /dev/null
+++ b/adept/adept/quickfilter.cpp
@@ -0,0 +1,79 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <qobjectlist.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <qcheckbox.h>
+
+#include "quickfilter.h"
+
+using namespace aptFront;
+using namespace adept;
+
+QuickFilterWidget::QuickFilterWidget( QWidget *parent, const char *name )
+ : QuickFilterUi( parent, name )
+{
+ setFocusProxy( m_match );
+ connect( m_match, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( textChanged( const QString & ) ) );
+ /* connect( m_reset, SIGNAL( clicked() ),
+ this, SLOT( reset() ) ); */
+ connect( m_match, SIGNAL( returnPressed() ),
+ this, SLOT( widgetsChanged() ) );
+ connect( &timer, SIGNAL( timeout() ),
+ this, SLOT( widgetsChanged() ) );
+
+ QObjectList *chld = queryList( "QCheckBox" );
+ QObjectListIt it( *chld );
+ while( it.current() != 0 ) {
+ connect( it.current(), SIGNAL( toggled( bool ) ),
+ this, SLOT( widgetsChanged() ) );
+ ++it;
+ }
+}
+
+void QuickFilterWidget::mouseReleaseEvent( QMouseEvent *e ) {
+ m_match->setFocus();
+ QuickFilterUi::mouseReleaseEvent( e );
+}
+
+void QuickFilterWidget::textChanged( const QString & )
+{
+ kdDebug() << "QuickFilterWidget::textChanged" << endl;
+ timer.start( 1000, true );
+}
+
+QuickFilterWidget::Predicate QuickFilterWidget::predicate()
+{
+ typedef QuickFilter< entity::Package > F;
+ F f; int w = 0;
+ if ( m_name->isChecked() ) w |= F::Name;
+ if ( m_description->isChecked() ) w |= F::Description;
+ if ( m_maintainer->isChecked() ) w |= F::Maintainer;
+
+ f.setMatch( u8( m_match->text() ) );
+ f.setWhat( w );
+
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void blockedSet( QCheckBox *b, bool v ) {
+ b->blockSignals( true );
+ b->setChecked( v );
+ b->blockSignals( false );
+}
+
+void QuickFilterWidget::predicateChanged() {
+ typedef QuickFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ m_match->blockSignals( true );
+ m_match->setText( f.match() );
+ m_match->blockSignals( false );
+ int w = f.what();
+
+ blockedSet( m_name, w & F::Name );
+ blockedSet( m_description, w & F::Description );
+ blockedSet( m_maintainer, w & F::Maintainer );
+}
+
diff --git a/adept/adept/quickfilter.h b/adept/adept/quickfilter.h
new file mode 100644
index 0000000..788c9da
--- /dev/null
+++ b/adept/adept/quickfilter.h
@@ -0,0 +1,119 @@
+/** -*- C++ -*-
+ @file adept/quickfilter.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/predicate/factory.h>
+#include <adept/quickfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+#include <adept/utils.h>
+
+#ifndef EPT_QUICKFILTER_H
+#define EPT_QUICKFILTER_H
+
+class KLineEdit;
+
+namespace adept {
+
+template< typename T >
+struct QuickFilter : predicate::Implementation< T, QuickFilter< T > >,
+ InterfacingPredicate
+{
+ enum Type { Regex, Substring, Exact };
+ enum What { Name = 0x1, Description = 0x2, Maintainer = 0x4 };
+
+ QuickFilter()
+ : m_type( Substring ), m_match( "" ), m_what( Name | Description ) {
+ setupPredicate();
+ }
+
+ void setupPredicate() {
+ predicate::ArgumentList l;
+ l.push_back( m_match );
+ predicate::Predicate< T > a = not predicate::True< T >();
+ if ( m_what & Name ) a = a or predicate::Factory< T >::name( m_match );
+ if ( m_what & Description )
+ a = a or predicate::Factory< T >::description( m_match );
+ if ( m_what & Maintainer )
+ a = a or predicate::Factory< T >::maintainer( m_match );
+ m_op = a;
+ /* m_op = predicate::map(
+ predicate::predicate( predicate::Factory< T >::description( "" )
+ or predicate::Factory< T >::name( "" )
+ or predicate::Factory< T
+ >::maintainer( "" ) ), l ); */
+ }
+
+ std::string summary() const {
+ return u8( i18n( "Search: " ) ) + "\"" + m_match + "\"";
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const QuickFilter &o ) const {
+ return o.m_type == m_type && o.m_match == m_match;
+ }
+
+ std::string typeString() const {
+ if (m_type == Regex) return "Regular Expression";
+ if (m_type == Substring) return "Substring";
+ if (m_type == Exact) return "Exact Match";
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ std::string match() const {
+ return m_match;
+ }
+
+ void setMatch( const std::string &s ) {
+ m_match = s;
+ setupPredicate();
+ }
+
+ void setWhat( int w ) {
+ m_what = w;
+ setupPredicate();
+ }
+
+ int what() { return m_what; }
+
+ virtual void reset() {
+ m_match = "";
+ setupPredicate();
+ }
+
+protected:
+ Type m_type;
+ std::string m_match;
+ int m_what;
+ predicate::Predicate< T > m_op;
+};
+
+class QuickFilterWidget : public QuickFilterUi
+{
+ Q_OBJECT
+public:
+ QuickFilterWidget( QWidget *parent, const char *name = 0 );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+protected slots:
+ void textChanged( const QString & );
+protected:
+ void mouseReleaseEvent( QMouseEvent *e );
+ QTimer timer;
+};
+
+}
+
+#endif
diff --git a/adept/adept/quickfilterui.ui b/adept/adept/quickfilterui.ui
new file mode 100644
index 0000000..d45c154
--- /dev/null
+++ b/adept/adept/quickfilterui.ui
@@ -0,0 +1,130 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::QuickFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>QuickFilterUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>805</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>QuickFilterUi</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_title</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;Search:&amp;nbsp;&lt;/b&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_match</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Match: </string>
+ </property>
+ <property name="textFormat">
+ <enum>AutoText</enum>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="text">
+ <string>package name,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="text">
+ <string>description,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_maintainer</cstring>
+ </property>
+ <property name="text">
+ <string>maintainer.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>41</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/adept/sourceseditor.cpp b/adept/adept/sourceseditor.cpp
new file mode 100644
index 0000000..3b04cf6
--- /dev/null
+++ b/adept/adept/sourceseditor.cpp
@@ -0,0 +1,165 @@
+#include <fstream>
+#include <iostream>
+
+#include <qpushbutton.h>
+#include <qlineedit.h>
+#include <qpainter.h>
+
+#include <kdebug.h>
+#include <kpopupmenu.h>
+#include <klocale.h>
+
+#include "sourceseditor.h"
+#include <adept/utils.h>
+
+using namespace aptFront;
+using namespace adept;
+
+SourcesEditor::SourcesEditor( std::string f, QWidget *p, const char *n )
+ : SourcesEditorUi( p, n ), m_filename( f )
+{
+ m_list->setSorting( -1 );
+ m_list->setAcceptDrops( true );
+ connect( m_close, SIGNAL( clicked() ),
+ this, SIGNAL( close() ) );
+ connect( m_apply, SIGNAL( clicked() ),
+ this, SLOT( save() ) );
+ connect( m_reset, SIGNAL( clicked() ),
+ this, SLOT( reset() ) );
+
+ connect( m_list, SIGNAL( contextMenuRequested(
+ QListViewItem *, const QPoint &, int) ),
+ this, SLOT( contextMenu( QListViewItem *, const QPoint & ) ) );
+
+ connect( m_newAdd, SIGNAL( clicked() ),
+ this, SLOT( newAdd() ) );
+
+ reset();
+}
+
+void SourcesEditor::newAdd()
+{
+ Sources::Entry e( true, Sources::Entry::Binary );
+ std::string s = m_newLine->text();
+ std::istringstream i( s );
+ i >> e;
+ new EntryItem( e, m_list );
+ m_newLine->setText( u8( "" ) );
+}
+
+void SourcesEditor::contextMenu( QListViewItem *, const QPoint &pt ) {
+ EntryItem *s = dynamic_cast< EntryItem * >( m_list->selectedItem() );
+ if (!s) return;
+ KPopupMenu *m = new KPopupMenu (this);
+ m->insertItem( s->entry().enabled() ? i18n( "Disable" ) : i18n( "Enable" ), 0 );
+ m->insertItem( i18n( "Clone" ), 1 );
+ m->insertItem( i18n( "Remove" ), 2 );
+ connect( m, SIGNAL( activated( int ) ),
+ this, SLOT( contextMenuActivated( int ) ) );
+ m->exec( pt );
+ delete m;
+}
+
+void SourcesEditor::contextMenuActivated( int i ) {
+ EntryItem *s = dynamic_cast< EntryItem * >( m_list->selectedItem() );
+ Sources::Entry e = s->entry();
+ if (i == 0) {
+ e.setEnabled( !e.enabled() );
+ s->setEntry( e );
+ }
+ if (i == 2)
+ delete s;
+ if (i == 1)
+ new EntryItem( e, m_list, s );
+}
+
+void SourcesEditor::reset() {
+ std::ifstream in( m_filename.c_str() );
+ m_sources.clear();
+ in >> m_sources;
+ utils::Range< Sources::Entry > r = m_sources.entries();
+ EntryItem *last = 0;
+ m_list->clear();
+ while( r != r.end() ) {
+ last = last ? new EntryItem( *r, m_list, last ) :
+ new EntryItem( *r, m_list );
+ ++ r;
+ }
+}
+
+void SourcesEditor::save() {
+ m_sources.clear();
+ EntryItem *i = dynamic_cast< EntryItem * >( m_list->firstChild() );
+ while (i) {
+ m_sources.add( i->entry() );
+ i = dynamic_cast< EntryItem * >( i->nextSibling() );
+ }
+ std::ofstream out( m_filename.c_str() );
+ out << m_sources;
+ std::cerr << "--" << m_sources << "--" << std::endl;
+ out.close();
+ reset(); // re-parse
+}
+
+/* void SourcesEditor::toggleSelectionEnabled()
+{
+ EntryItem *s = dynamic_cast< EntryItem * >( m_list->selectedItem() );
+ if (s) {
+ Sources::Entry e = s->entry();
+ e.setEnabled( !e.enabled() );
+ s->setEntry( e );
+ updateActions();
+ }
+ } */
+
+QString EntryItem::text( int c ) const {
+ if (entry().type() == Sources::Entry::Comment) {
+ if (c == 0)
+ if (entry().comment() == "")
+ return u8( "" );
+ else
+ return entry().typeString();
+ if (c == 1)
+ return entry().comment();
+ return u8( "" );
+ }
+
+ if (c == 0) return entry().typeString();
+ if (c == 1) return entry().url();
+ if (c == 2) return entry().distribution();
+ if (c == 3) return entry().components();
+ return u8( "" );
+}
+
+void EntryItem::setText( int c, const QString &_s )
+{
+ kdDebug() << "setText on column " << c << endl;
+ Sources::Entry e = entry();
+ std::string s;
+ s = _s.local8Bit();
+ if (c == 0) e.setTypeString( s );
+ if (c == 1)
+ if (entry().type() == Sources::Entry::Comment)
+ e.setComment( s );
+ else
+ e.setUrl( s );
+ if (c == 2) e.setDistribution( s );
+ if (c == 3) e.setComponents( s );
+ setEntry( e );
+ KListViewItem::setText( c, _s ); // stop qlistview from looping infinitely
+}
+
+void EntryItem::paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ QColorGroup _cg( cg );
+ QColor c = _cg.text();
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ if (!entry().enabled())
+ c = Qt::gray;
+ _cg.setColor( QColorGroup::Text, c );
+ KListViewItem::paintCell( &_p, _cg, column, width, AlignTop );
+ p->drawPixmap( 0, 0, pm );
+}
+
diff --git a/adept/adept/sourceseditor.h b/adept/adept/sourceseditor.h
new file mode 100644
index 0000000..32b474f
--- /dev/null
+++ b/adept/adept/sourceseditor.h
@@ -0,0 +1,63 @@
+/** -*- C++ -*-
+ @file adept/sourceseditor.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-front/sources.h>
+#include <adept/sourceseditorui.h>
+#include <klistview.h>
+
+namespace adept {
+
+using namespace aptFront;
+
+class SourcesEditor : public SourcesEditorUi
+{
+ Q_OBJECT
+public:
+ SourcesEditor( std::string f, QWidget *p = 0, const char *n = 0 );
+public slots:
+ void save();
+ void reset();
+protected slots:
+ void contextMenu( QListViewItem *, const QPoint & );
+ void contextMenuActivated( int );
+ void newAdd();
+signals:
+ void close();
+protected:
+ aptFront::Sources m_sources;
+ std::string m_filename;
+};
+
+class EntryItem : public KListViewItem {
+public:
+ Sources::Entry entry() const {
+ return m_entry;
+ }
+ void setEntry( const Sources::Entry &e ) {
+ m_entry = e;
+ }
+ EntryItem( Sources::Entry e, KListView *v, EntryItem *prev )
+ : KListViewItem( v, prev ), m_entry( e ) {
+ init();
+ }
+ EntryItem( Sources::Entry e, KListView *v )
+ : KListViewItem( v ), m_entry( e ) {
+ init();
+ }
+ void init() {
+ setRenameEnabled( 0, false );
+ setRenameEnabled( 1, true );
+ setRenameEnabled( 2, true );
+ setRenameEnabled( 3, true );
+ }
+ QString text( int c ) const;
+ void setText( int c, const QString &s );
+ virtual void paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment);
+protected:
+ Sources::Entry m_entry;
+};
+
+}
diff --git a/adept/adept/sourceseditorui.ui b/adept/adept/sourceseditorui.ui
new file mode 100644
index 0000000..43397d3
--- /dev/null
+++ b/adept/adept/sourceseditorui.ui
@@ -0,0 +1,173 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::SourcesEditorUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>adept::SourcesEditorUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>683</width>
+ <height>442</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>adept::SourcesEditorUi</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>URL</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Distribution</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Components</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_list</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ <property name="itemsMovable">
+ <bool>true</bool>
+ </property>
+ <property name="itemsRenameable">
+ <bool>true</bool>
+ </property>
+ <property name="dragEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>New Repository:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_newLine</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Write or paste a normal sources.list line here to add it to your sources</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_newAdd</cstring>
+ </property>
+ <property name="text">
+ <string>Add</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_reset</cstring>
+ </property>
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_apply</cstring>
+ </property>
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_close</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<tabstops>
+ <tabstop>m_newLine</tabstop>
+ <tabstop>m_newAdd</tabstop>
+ <tabstop>m_reset</tabstop>
+ <tabstop>m_apply</tabstop>
+ <tabstop>m_close</tabstop>
+ <tabstop>m_list</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klistview.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/statefilter.cpp b/adept/adept/statefilter.cpp
new file mode 100644
index 0000000..45ee470
--- /dev/null
+++ b/adept/adept/statefilter.cpp
@@ -0,0 +1,60 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qcheckbox.h>
+#include <qobjectlist.h>
+#include "statefilter.h"
+
+using namespace aptFront;
+using namespace adept;
+
+StateFilterWidget::StateFilterWidget( QWidget *parent, const char *name )
+ : StateFilterUi( parent, name )
+{
+ QObjectList *chld = queryList( "QCheckBox" );
+ QObjectListIt it( *chld );
+ while( it.current() != 0 ) {
+ connect( it.current(), SIGNAL( toggled( bool ) ),
+ this, SLOT( widgetsChanged() ) );
+ ++it;
+ }
+}
+
+StateFilterWidget::Predicate StateFilterWidget::predicate()
+{
+ typedef StateFilter< entity::Package > F;
+ unsigned mask = 0;
+ if (m_installed->isChecked()) mask |= F::Installed;
+ if (m_notInstalled->isChecked()) mask |= F::NotInstalled;
+ if (m_upgradable->isChecked()) mask |= F::Upgradable;
+ if (m_keep->isChecked()) mask |= F::Keep;
+ if (m_install->isChecked()) mask |= F::Install;
+ if (m_remove->isChecked()) mask |= F::Remove;
+ if (m_upgrade->isChecked()) mask |= F::Upgrade;
+
+ StateFilter< entity::Package > f;
+ f.setMask( mask );
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void blockedSet( QCheckBox *b, bool v ) {
+ b->blockSignals( true );
+ b->setChecked( v );
+ b->blockSignals( false );
+}
+
+void StateFilterWidget::predicateChanged()
+{
+ typedef StateFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ unsigned mask = f.mask();
+ blockedSet( m_installed, mask & F::Installed );
+ blockedSet( m_notInstalled, mask & F::NotInstalled );
+ blockedSet( m_upgradable, mask & F::Upgradable );
+ blockedSet( m_keep, mask & F::Keep );
+ blockedSet( m_install, mask & F::Install );
+ blockedSet( m_upgrade, mask & F::Upgrade );
+ blockedSet( m_remove, mask & F::Remove );
+}
+
diff --git a/adept/adept/statefilter.h b/adept/adept/statefilter.h
new file mode 100644
index 0000000..570edb1
--- /dev/null
+++ b/adept/adept/statefilter.h
@@ -0,0 +1,144 @@
+/** -*- C++ -*-
+ @file adept/filterwidgets.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/statefilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <iostream>
+#include <sstream>
+
+#ifndef EPT_STATEFILTER_H
+#define EPT_STATEFILTER_H
+
+class KLineEdit;
+
+namespace adept {
+
+template< typename T >
+struct StateFilter : predicate::Implementation< T, StateFilter< T > >,
+ InterfacingPredicate
+{
+ enum Mask { Installed = 1 << 0,
+ NotInstalled = 1 << 1,
+ Upgradable = 1 << 2,
+ Install = 1 << 3,
+ Remove = 1 << 4,
+ Keep = 1 << 5,
+ Upgrade = 1 << 6 };
+
+ StateFilter()
+ : m_mask( 0xff ) {
+ setupPredicate();
+ }
+
+ void setupPredicate() {
+ predicate::Predicate< T >
+ p0 = not predicate::True< T >(),
+ p1 = not predicate::True< T >();
+ if (m_mask & Installed)
+ p0 = p0 or (predicate::Factory< T >::member( &T::isInstalled )
+ and not predicate::Factory< T >::member( &T::isUpgradable ) );
+ if (m_mask & NotInstalled)
+ p0 = p0 or not predicate::Factory< T >::member( &T::isInstalled );
+ if (m_mask & Upgradable)
+ p0 = p0 or predicate::Factory< T >::member( &T::isUpgradable );
+
+ if (m_mask & Install)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedNewInstall );
+ if (m_mask & Remove)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedRemove );
+ if (m_mask & Keep)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedKeep );
+ if (m_mask & Upgrade)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedUpgrade );
+
+ m_op = p0 and p1;
+ }
+
+ std::string summary() const {
+ std::ostringstream s;
+ std::vector< std::string > r;
+ s << "State filter: ";
+ if (m_mask & Installed && m_mask & NotInstalled && m_mask & Upgradable)
+ r.push_back( "Any State" );
+ else {
+ if (m_mask & Installed)
+ r.push_back( i18n( "Installed" ) );
+ if (m_mask & NotInstalled)
+ r.push_back( i18n( "Not Installed" ) );
+ if (m_mask & Upgradable)
+ r.push_back( i18n( "Upgradable" ) );
+ }
+ std::copy( r.begin(), r.end(),
+ std::ostream_iterator< std::string >( s, " " ) );
+ s << "; ";
+ r.clear();
+ if (m_mask & Install && m_mask & Remove
+ && m_mask & Keep && m_mask & Upgrade)
+ r.push_back( i18n( "Any Action" ) );
+ else {
+ if (m_mask & Install)
+ r.push_back( i18n( "Install" ) );
+ if (m_mask & Remove)
+ r.push_back( i18n( "Remove" ) );
+ if (m_mask & Keep)
+ r.push_back( i18n( "Keep" ) );
+ if (m_mask & Upgrade)
+ r.push_back( i18n( "Upgrade" ) );
+ }
+ std::copy( r.begin(), r.end(),
+ std::ostream_iterator< std::string >( s, " " ) );
+ return s.str();
+ }
+
+ unsigned mask() const {
+ return m_mask;
+ }
+
+ void setMask( unsigned m ) {
+ m_mask = m;
+ setupPredicate();
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const StateFilter &o ) const {
+ return o.m_op == m_op;
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ virtual void reset() {
+ m_mask = 0xff;
+ setupPredicate();
+ }
+
+protected:
+ unsigned m_mask;
+ predicate::Predicate< T > m_op;
+};
+
+class StateFilterWidget : public StateFilterUi
+{
+ Q_OBJECT
+public:
+ StateFilterWidget( QWidget *parent, const char *name = 0 );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+};
+
+}
+
+#endif
diff --git a/adept/adept/statefilterui.ui b/adept/adept/statefilterui.ui
new file mode 100644
index 0000000..1ef19e0
--- /dev/null
+++ b/adept/adept/statefilterui.ui
@@ -0,0 +1,166 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::StateFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>StateFilterUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>574</width>
+ <height>55</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>StateFilterUi</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>m_title</cstring>
+ </property>
+ <property name="text">
+ <string>Show: </string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_notInstalled</cstring>
+ </property>
+ <property name="text">
+ <string>not installed,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_installed</cstring>
+ </property>
+ <property name="text">
+ <string>installed,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_upgradable</cstring>
+ </property>
+ <property name="text">
+ <string>upgradable packages,</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>195</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_keep</cstring>
+ </property>
+ <property name="text">
+ <string>no changes,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_install</cstring>
+ </property>
+ <property name="text">
+ <string>install,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_remove</cstring>
+ </property>
+ <property name="text">
+ <string>removal,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_upgrade</cstring>
+ </property>
+ <property name="text">
+ <string>upgrade requested.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>195</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>with: </string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="3" margin="11"/>
+</UI>
diff --git a/adept/adept/tagchooser.cpp b/adept/adept/tagchooser.cpp
new file mode 100644
index 0000000..d596133
--- /dev/null
+++ b/adept/adept/tagchooser.cpp
@@ -0,0 +1,147 @@
+#include <klocale.h>
+#include <qdragobject.h>
+
+#include <ept/debtags/vocabulary.h>
+#include <apt-front/cache/component/packagetags.h>
+#include <adept/tagchooser.h>
+#include <adept/taglist.h>
+#include <adept/utils.h>
+#include <wibble/operators.h>
+
+using namespace adept;
+
+FacetItem::FacetItem( TagChooser *t )
+ : KListViewItem( t )
+{
+}
+
+void FacetItem::removeTag( TagItem::Tag t ) {
+ // kdDebug() << "removing tag " << t.fullname() << endl;
+ for ( QListViewItem *n, *i = firstChild(); i != 0; i = n ) {
+ n = i->nextSibling();
+ if ( dynamic_cast< TagItem * >( i )->tag() == t )
+ delete i;
+ }
+}
+
+TagItem::TagItem( FacetItem *p )
+ : KListViewItem( p ), m_toplevel( false )
+{
+}
+
+TagItem::TagItem( TagChooser *l )
+ : KListViewItem( l ), m_toplevel( true )
+{
+}
+
+QString TagItem::text( int c ) const
+{
+ if (c != 0) return u8( "" );
+ return QString( "[" ) + m_tag.name() + "] " + m_tag.shortDescription("");
+}
+
+TagChooser::TagChooser( QWidget *p, const char *n )
+ : KListView( p, n )
+{
+ observeComponent< cache::component::PackageTags >();
+ // addColumn( " ", 20 );
+ setRootIsDecorated( true );
+ addColumn( i18n( "Available Tags" ) );
+ setResizeMode( LastColumn );
+ setDragEnabled( true );
+ setAcceptDrops( true );
+ viewport()->setAcceptDrops( false );
+ // kdDebug() << "TagChooser: tags set" << endl;
+}
+
+void TagChooser::openToplevel() {
+ QListViewItem *i;
+ for ( i = firstChild(); i != 0; i = i->nextSibling() ) {
+ i->setOpen( true );
+ }
+}
+
+QDragObject *TagChooser::dragObject()
+{
+ TagItem *sel = dynamic_cast< TagItem * >( selectedItem() );
+ if (sel)
+ return new QTextDrag( sel->tag().fullname(), this );
+ return 0;
+}
+
+void TagChooser::dragEnterEvent( QDragEnterEvent *e )
+{
+ // hmmmmm :-)
+ kdDebug() << "TagChooser::dragEnterEvent" << endl;
+ e->accept( dynamic_cast< TagList * >( e->source() )
+ && QTextDrag::canDecode( e ) );
+ kdDebug() << dynamic_cast< TagList * >( e->source() )
+ << "; can decode " << QTextDrag::canDecode( e ) << endl;
+}
+
+void TagChooser::dropEvent( QDropEvent* e )
+{
+ using namespace wibble::operators;
+ TagList *tl = dynamic_cast< TagList * >( e->source() );
+ QString tag;
+ QTextDrag::decode( e, tag );
+ tl->setTags( tl->tags() - cache::Global::get().tags().tagByName(
+ static_cast< const char * >( tag.local8Bit() ) ) );
+}
+
+QString FacetItem::text( int column ) const
+{
+ if ( column == 0 )
+ return QString( "[" ) + m_facet.name() + "] " + m_facet.shortDescription( "" );
+ return u8( "" );
+}
+
+static bool drop( TagChooser::Tag t ) {
+ if ( t.facet().name() == "special" )
+ return true;
+ if ( t.name() == "TODO" )
+ return true;
+ return false;
+}
+
+void TagChooser::setTags( Tag::Set s )
+{
+ using namespace wibble::operators;
+ std::set<Tag> remove = m_tags - s;
+ std::set<Tag> add = s - m_tags;
+ m_tags = s;
+ Tag::Set::iterator i;
+
+ for ( i = add.begin(); i != add.end(); ++i ) {
+
+ if ( drop( *i ) )
+ continue;
+
+ FacetItem *fi = m_facets[ i->facet() ];
+ if ( fi == 0 ) {
+ fi = m_facets[ i->facet() ] = new FacetItem( this );
+ fi->setFacet( i->facet() );
+ }
+
+ TagItem *ti = new TagItem( fi );
+ ti->setTag( *i );
+ }
+
+ for ( i = remove.begin(); i != remove.end(); ++i ) {
+
+ if ( drop( *i ) )
+ continue;
+
+ FacetItem *fi = m_facets[ i->facet() ];
+ fi->removeTag( *i );
+ if ( fi->childCount() == 0 ) {
+ m_facets[ i->facet() ] = 0;
+ delete fi;
+ }
+ }
+
+}
+
+void TagChooser::notifyPreRebuild( cache::component::Base *b ) {
+ setTags( Tag::Set() );
+}
diff --git a/adept/adept/tagchooser.h b/adept/adept/tagchooser.h
new file mode 100644
index 0000000..f6c6e2e
--- /dev/null
+++ b/adept/adept/tagchooser.h
@@ -0,0 +1,83 @@
+/* -*- C++ -*- file adept/tagchooser.h
+ written by Peter Rockai <[email protected]> */
+
+#include <kdebug.h>
+#include <qlayout.h>
+
+#include <apt-front/utils/range.h>
+#include <apt-front/cache/cache.h>
+
+#include <ept/debtags/tag.h>
+
+#include <adept/extendablelist.h>
+
+#ifndef EPT_TAGCHOOSER_H
+#define EPT_TAGCHOOSER_H
+
+namespace adept {
+
+using namespace aptFront;
+
+class FacetItem;
+class FacetExtender;
+class TagChooser;
+
+class TagItem : public KListViewItem {
+public:
+ typedef ept::debtags::Tag Tag;
+ virtual QString text( int ) const;
+ TagItem( TagChooser *t );
+ TagItem( FacetItem *t );
+ void setTag( Tag t ) { m_tag = t; }
+ Tag tag() { return m_tag; }
+protected:
+ bool m_toplevel;
+ Tag m_tag;
+};
+
+class FacetItem : public KListViewItem
+{
+public:
+ typedef ept::debtags::Facet Facet;
+ virtual QString text( int ) const;
+ FacetItem( TagChooser *t );
+ void setFacet( Facet f ) { m_facet = f; }
+ void removeTag( TagItem::Tag );
+protected:
+ Facet m_facet;
+};
+
+class TagChooser : public KListView, public cache::Observer // ExtendableList
+{
+ Q_OBJECT
+public:
+ typedef ept::debtags::Tag Tag;
+ typedef ept::debtags::Facet Facet;
+ TagChooser( QWidget *p = 0, const char *n = 0 );
+ virtual void notifyPreRebuild( cache::component::Base * );
+public slots:
+ virtual void setTags( TagChooser::Tag::Set );
+ void setTitle( QString s ) {
+ setColumnText( 0, s );
+ }
+ void openToplevel();
+
+protected:
+ virtual void dragEnterEvent( QDragEnterEvent *e );
+ virtual void dropEvent( QDropEvent* e );
+ virtual void contentsDragEnterEvent( QDragEnterEvent *e ) {
+ kdDebug() << "TagChooser::contentsDragEnterEvent" << endl;
+ dragEnterEvent( e );
+ }
+ virtual void contentsDropEvent( QDropEvent *e ) {
+ kdDebug() << "TagChooser::contentsDropEvent" << endl;
+ dropEvent( e );
+ }
+ virtual QDragObject *dragObject();
+ Tag::Set m_tags;
+ std::map< Facet, FacetItem * > m_facets;
+};
+
+}
+
+#endif
diff --git a/adept/adept/tagfilter.cpp b/adept/adept/tagfilter.cpp
new file mode 100644
index 0000000..fb17f8c
--- /dev/null
+++ b/adept/adept/tagfilter.cpp
@@ -0,0 +1,67 @@
+/* -*- C++ -*- libapt/tagfilter.h
+ written by Peter Rockai <[email protected]> */
+
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+
+#include <adept/tagfilter.h>
+#include <adept/taglist.h>
+
+using namespace adept;
+
+TagFilterWidget::TagFilterWidget( QWidget *w, const char *n )
+ : TagFilterUi( w, n )
+{
+ m_wanted->setName( i18n( "Tags I Want (drop tags here)" ) );
+ m_unwanted->setName( i18n( "Tags I Do Not Want (drop tags here)" ) );
+
+ connect( m_wanted, SIGNAL( tagsChanged( TagList::Tag::Set ) ),
+ this, SLOT( wantedChanged() ) );
+ connect( m_unwanted, SIGNAL( tagsChanged( TagList::Tag::Set ) ),
+ this, SLOT( unwantedChanged() ) );
+}
+
+TagFilterWidget::Predicate TagFilterWidget::predicate()
+{
+ TagFilter< entity::Package > f;
+ f.setWanted( m_wanted->tags() );
+ f.setUnwanted( m_unwanted->tags() );
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void setTagsBlocking( TagList *l, TagList::Tag::Set s ) {
+ l->blockSignals( true );
+ l->setTags( s );
+ l->blockSignals( false );
+}
+
+void TagFilterWidget::predicateChanged()
+{
+ typedef TagFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ setTagsBlocking( m_wanted, f.wanted() );
+ setTagsBlocking( m_unwanted, f.unwanted() );
+ if ( item() && item()->list() ) {
+ setupColors();
+ item()->list()->delayedUpdateExtenders();
+ }
+}
+
+void TagFilterWidget::wantedChanged()
+{
+ using namespace wibble::operators;
+ setTagsBlocking( m_unwanted, m_unwanted->tags() - m_wanted->tags() );
+ setupColors();
+ widgetsChanged();
+ item()->list()->delayedUpdateExtenders();
+}
+
+void TagFilterWidget::unwantedChanged()
+{
+ using namespace wibble::operators;
+ setTagsBlocking( m_wanted, m_wanted->tags() - m_unwanted->tags() );
+ setupColors();
+ widgetsChanged();
+ item()->list()->delayedUpdateExtenders();
+}
diff --git a/adept/adept/tagfilter.h b/adept/adept/tagfilter.h
new file mode 100644
index 0000000..5ff8e47
--- /dev/null
+++ b/adept/adept/tagfilter.h
@@ -0,0 +1,110 @@
+/* -*- C++ -*- adept/tagfilter.h
+ written by Peter Rockai <[email protected]> */
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qpoint.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/quickfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+#include <adept/taglist.h>
+#include <adept/tagfilterui.h>
+#include <adept/utils.h>
+
+#ifndef EPT_TAGFILTER_H
+#define EPT_TAGFILTER_H
+
+namespace adept {
+
+template< typename T >
+struct TagFilter : predicate::Implementation< T, TagFilter< T > >,
+ InterfacingPredicate, cache::Observer
+{
+ typedef ept::debtags::Tag Tag;
+
+ TagFilter() {
+ setupPredicate();
+ observeComponent< cache::component::PackageTags >();
+ }
+
+ void setupPredicate() {
+ Cache &cache = cache::Global::get(); // FIXME?
+ m_op = predicate::Factory< T >::tagSet( m_wanted );
+ for (Tag::Set::iterator i = m_unwanted.begin(); i != m_unwanted.end(); ++i ) {
+ m_op = m_op and not predicate::Factory< T >::tag( *i );
+ }
+ }
+
+ std::string summary() const {
+ return u8( i18n( "Tag Filter" ) );
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const TagFilter &o ) const {
+ return o.m_wanted == m_wanted && o.m_unwanted == m_unwanted;
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ void setWanted( Tag::Set t ) {
+ m_wanted = t;
+ setupPredicate();
+ }
+
+ void setUnwanted( Tag::Set t ) {
+ m_unwanted = t;
+ setupPredicate();
+ }
+
+ Tag::Set wanted() const { return m_wanted; }
+ Tag::Set unwanted() const { return m_unwanted; }
+
+ void notifyPreRebuild( cache::component::Base * ) {
+ kdDebug() << "TagFilter pre-rebuild" << endl;
+ m_unwanted.clear(); m_wanted.clear();
+ }
+
+ void notifyPostRebuild( cache::component::Base * ) {
+ Cache &c = cache::Global::get( m_cache );
+ setupPredicate();
+ }
+
+ virtual void reset() {
+ m_wanted.clear();
+ m_unwanted.clear();
+ setupPredicate();
+ }
+
+protected:
+ predicate::Predicate< T > m_op;
+ Tag::Set m_wanted;
+ Tag::Set m_unwanted;
+};
+
+class TagFilterWidget : public TagFilterUi
+{
+ Q_OBJECT
+public:
+ TagFilterWidget( QWidget *p, const char *n );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+ void wantedChanged();
+ void unwantedChanged();
+protected:
+ TagList *m_addingTo;
+ std::vector< ept::debtags::Tag > m_tagMenuMap;
+};
+
+}
+
+#endif
diff --git a/adept/adept/tagfilterui.ui b/adept/adept/tagfilterui.ui
new file mode 100644
index 0000000..1f78b8a
--- /dev/null
+++ b/adept/adept/tagfilterui.ui
@@ -0,0 +1,95 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::TagFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>TagFilterUi</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>627</width>
+ <height>130</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="adept::TagList">
+ <property name="name">
+ <cstring>m_wanted</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>90</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="adept::TagList">
+ <property name="name">
+ <cstring>m_unwanted</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::TagList</class>
+ <header location="global">adept/taglist.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1003">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b249444154388db5944d4c5c5518869f73ce9db9cc40f929cc30300e18129a50685268a28291982e1a2175212eaab1c49d3f8971e7aec6aedb54a32b435dd8685cb8c0c4b8b0feb421b7bd8186a069d23209144b18cb0c02f3732ff3c3ccbdd705a571941213f1dd9d93739ef37e6fbeef08d334d9d5d0d090c701c8344d2176c1a6697a5d5d5dd8b64d2a95c2b2ac7f05b12c8b783c8e6118d8b6fd685fdb753a39394928e2a7c55724d693a7e214104220242805520a84d8b9e4790f0b1302c7751958f1e30534be9fa41a0c60db362dbe227f64af91b6e7719c2dfc0117a71c603da591de2882a7d3d4ec27122b10acad50aeb88044d542b84de3af7ab44aa55274f4e449dbf354bc347aa096fbf37e7efa2ecbad1b36907d78b289de8120232f37726250c3f52cf0a026a0f6065b9645d929e038167aa096d91b307171059034b5f8e9e9eb44fa052b4b25eeccd9dc99cb71f6ad082fbea2e351c075bdbdc13b9109fc01b83fef63e2e232e03076b68393231a0dcd024daf502c1e66e67a89cb971ef0e5a74bb4b61e6378248094b92ab0ac024b70ca017ef8360394187b2dc6d8b89ffa500e4d4f93d9083275d5e6f9913ade3dd70ee87c7d25c95646a25415aadab152b09ed4f8c5cc130a853839eac3951b684a61e70ef3f9c739668c24eba912afbfddc6d4d506e6a6d7b8b7d082aa8eb8dab19482cdcd220e36dd3dc19df23545de0a71f952861923493456cfd3cf36123c54a0b7bf0e8064621b21f7712c040857071ca4eea0f40a99f510573ec971cb48030e811a1faded3e94be85f2fb00703d1ff26f96ab9f011a5b04d0c4f26fdb948a754c1b25668c2491483d5d5d611617d6b8f0fe32cb779b492ce65168b4c774a4701eefd8f3a02d56e6e8f13aeefe9a63fa5a89d1970e91d908f3d46003e1480d173e28b37827c9b977348ab92ce16890237d1ec907ee3e8e3d8f60d0e1f4583d009f7d9860662acff89bad1c1faad0717493f7ce7713ed8cb0995c255f2a317a26427b67198f6a70f51c0a41b902279ed1187f23cc17130b7c74de65eac77a7a8f05517e41e2deefa4930576db60fa7a8ee1535134df3e93e7b82e0817476439fd6a9070a49f6fbe4a3077739db99b15c001146dd13a46cf1cc1f83943c62e51de76b0738fc9381e8f3390f0236b252e124999e11724fd833196164bacadb87848224fe874f779b43fe9f2dca928956d505a96dbb3f9bdc18661e00534c26d1a7a40e13912a11c9454280da41048a9915c75585df500074d53d816dc9edd229528ef0db66dbbea3ffdaffa471f1f28d8344df1bf800f1a6e9aa6f813c39885bc050f269c0000000049454e44ae426082</data>
+ </image>
+</images>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/taglist.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/adept/taglist.cpp b/adept/adept/taglist.cpp
new file mode 100644
index 0000000..c27d74f
--- /dev/null
+++ b/adept/adept/taglist.cpp
@@ -0,0 +1,138 @@
+/* -*- C++ -*- adept/taglist.cpp
+ written by Peter Rockai <[email protected]> */
+
+#include <qlabel.h>
+#include <qtimer.h>
+#include <kdebug.h>
+#include <qdragobject.h>
+#include <qevent.h>
+#include <klocale.h>
+
+#include <apt-front/cache/cache.h>
+#include <ept/debtags/vocabulary.h>
+#include <adept/taglist.h>
+#include <adept/utils.h>
+#include <wibble/operators.h>
+
+using namespace adept;
+
+TagLabel::TagLabel( Tag t, TagList *l, QWidget *p, const char *n )
+ : QHBox( p, n ), m_tag( t ), m_list( l )
+{
+ if ( t == Tag() ) {
+ m_description = new QLabel( QString( " " ) + i18n( "[none]" ), this );
+ } else {
+ m_remove = new QLabel( this );
+ m_remove->setPixmap( SmallIcon( u8( "cancel" ) ) );
+ m_remove->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ m_description = new QLabel( QString( " [" ) + t.fullname( "n/a" ) + "] "
+ + t.shortDescription( "n/a" ), this );
+ }
+}
+
+void TagLabel::mouseReleaseEvent( QMouseEvent *e ) {
+ using namespace wibble::operators;
+ if ( e->button() == Qt::LeftButton &&
+ dynamic_cast< QLabel * >( childAt( e->pos() ) ) == m_remove )
+ m_list->setTags( m_list->tags() - m_tag );
+}
+
+TagList::TagList( QWidget *p, const char *n )
+ : QVBox( p, n )
+{
+ m_name = new QLabel( this );
+ m_tagBox = new QVBox( this );
+ m_tagBox->setFrameShape( QFrame::Panel );
+ m_tagBox->setFrameShadow( QFrame::Sunken );
+ m_updateScheduled = false;
+ setAcceptDrops( true );
+ scheduleUpdateList();
+ m_tagSpacer = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding );
+}
+
+void TagList::setTags( Tag::Set t )
+{
+ m_tags = t;
+ scheduleUpdateList();
+ emit tagsChanged( m_tags );
+}
+
+void TagList::addTag( Tag t )
+{
+ using namespace wibble::operators;
+ if ( t == Tag() )
+ return;
+ m_tags |= t;
+ scheduleUpdateList();
+ emit tagsChanged( m_tags );
+}
+
+void TagList::setName( QString n )
+{
+ m_name->setText( n );
+}
+
+void TagList::scheduleUpdateList()
+{
+ if (! m_updateScheduled) {
+ kdDebug() << "TagList: scheduling update" << endl;
+ QTimer::singleShot( 0, this, SLOT( updateList() ) );
+ m_updateScheduled = true;
+ }
+}
+
+void TagList::updateList()
+{
+ kdDebug() << "TagList (" + m_name->text() + "): updating list" << endl;
+ clearList();
+ if ( m_tags.empty() ) {
+ appendLabel( new TagLabel( Tag(), this, m_tagBox ) );
+ } else {
+ for ( Tag::Set::iterator i = m_tags.begin(); i != m_tags.end(); ++i ) {
+ appendLabel( new TagLabel( *i, this, m_tagBox ) );
+ }
+ }
+ m_tagBox->layout()->addItem( m_tagSpacer );
+ update();
+ parentWidget()->adjustSize();
+ m_updateScheduled = false;
+}
+
+void TagList::appendLabel( TagLabel *l )
+{
+ m_list.push_back( l );
+ l->show();
+}
+
+void TagList::mouseMoveEvent( QMouseEvent *e ) {
+ TagLabel *child = dynamic_cast< TagLabel * >( childAt( e->pos() )->parentWidget() );
+ if ( !child )
+ return;
+ QDragObject *d = new QTextDrag( child->tag().fullname( "" ), this );
+ d->dragCopy();
+}
+
+void TagList::dragEnterEvent( QDragEnterEvent *e ) {
+ kdDebug() << "TagList::dragEnterEvent" << endl;
+ e->accept( QTextDrag::canDecode( e ) );
+}
+
+void TagList::dropEvent( QDropEvent* e ) {
+ QString tag;
+ kdDebug() << "TagList: drop event" << endl;
+ QTextDrag::decode( e, tag );
+ try {
+ addTag( aptFront::cache::Global::get().tags().tagByName(
+ static_cast< const char * >( tag.local8Bit() ) ) );
+ } catch (...) {} // not a tag, ignore
+ scheduleUpdateList();
+}
+
+void TagList::clearList()
+{
+ for (List::iterator i = m_list.begin(); i != m_list.end(); ++i ) {
+ delete *i;
+ }
+ m_list.clear();
+ m_tagBox->layout()->removeItem( m_tagSpacer );
+}
diff --git a/adept/adept/taglist.h b/adept/adept/taglist.h
new file mode 100644
index 0000000..3f652a9
--- /dev/null
+++ b/adept/adept/taglist.h
@@ -0,0 +1,72 @@
+/** -*- C++ -*-
+ @file adept/taglist.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <kiconloader.h>
+#include <vector>
+#include <ept/debtags/tag.h>
+
+#ifndef EPT_TAGLIST_H
+#define EPT_TAGLIST_H
+
+class QLabel;
+
+namespace adept {
+
+class TagList;
+
+class TagLabel : public QHBox
+{
+ Q_OBJECT
+public:
+ typedef ept::debtags::Tag Tag;
+ TagLabel( Tag t, TagList *l, QWidget *p = 0, const char *n = 0 );
+ Tag tag() { return m_tag; }
+protected:
+ void mouseReleaseEvent( QMouseEvent *e );
+ Tag m_tag;
+ QLabel *m_remove;
+ QLabel *m_description;
+ TagList *m_list;
+};
+
+class TagList : public QVBox
+{
+ Q_OBJECT
+public:
+ typedef ept::debtags::Tag Tag;
+ TagList( QWidget *p = 0, const char *n = 0 );
+ void setTags( Tag::Set t );
+ void addTag( Tag t );
+ Tag::Set tags() { return m_tags; }
+ void setName( QString n );
+public slots:
+ void scheduleUpdateList();
+ void updateList();
+signals:
+ void tagsChanged( TagList::Tag::Set );
+protected:
+ void mouseMoveEvent( QMouseEvent *e );
+ void dropEvent( QDropEvent * );
+ void dragEnterEvent( QDragEnterEvent * );
+ void appendLabel( TagLabel * );
+ void clearList();
+
+ bool m_updateScheduled;
+ Tag::Set m_tags;
+ QLabel *m_name;
+ QVBox *m_tagBox;
+ QSpacerItem *m_tagSpacer;
+ typedef std::vector< TagLabel * > List;
+ List m_list;
+};
+
+}
+
+#endif
diff --git a/adept/adept/threadutils.cpp b/adept/adept/threadutils.cpp
new file mode 100644
index 0000000..722f75d
--- /dev/null
+++ b/adept/adept/threadutils.cpp
@@ -0,0 +1,44 @@
+/** -*- C++ -*-
+ @file adept/utils.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <map>
+#include <adept/utils.h>
+
+namespace adept {
+
+QMutex Threads::serialize;
+Threads::Queue Threads::threads;
+
+void Threads::wait() {
+ static std::map< QMutex *, int > locked;
+ while ( !threads.empty() ) {
+ QThread *current = threads.front().first;
+ if ( current->finished() ) {
+ delete current;
+ threads.pop_front();
+ continue;
+ }
+ for ( Queue::iterator thr = threads.begin(); thr != threads.end(); ++thr ) {
+ ++locked[ thr->second ];
+ thr->second->lock();
+ }
+ kapp->processEvents();
+ for ( Queue::iterator thr = threads.begin(); thr != threads.end(); ++thr ) {
+ while ( locked[ thr->second ] > 0 ) {
+ thr->second->unlock();
+ --locked[ thr->second ];
+ }
+ }
+ usleep( 50000 );
+ }
+}
+
+void Threads::enqueue( QThread *t, QMutex *m )
+{
+ threads.push_back( std::make_pair( t, m ) );
+ t->start();
+}
+
+}
diff --git a/adept/adept/utils.h b/adept/adept/utils.h
new file mode 100644
index 0000000..6c3a3d3
--- /dev/null
+++ b/adept/adept/utils.h
@@ -0,0 +1,71 @@
+/** -*- C++ -*-
+ @file adept/utils.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qthread.h>
+#include <qstring.h>
+#include <kapplication.h>
+#include <string>
+#include <queue>
+#include <kdebug.h>
+
+#ifndef EPT_UTILS_H
+#define EPT_UTILS_H
+
+namespace adept {
+
+inline QString u8( std::string s ) {
+ return QString::fromUtf8( s.c_str() );
+}
+
+inline std::string u8( QString s ) {
+ return std::string( s.utf8() );
+}
+
+inline QString u8( const char *s ) {
+ return QString::fromUtf8( s );
+}
+
+struct Threads {
+ static QMutex serialize;
+ typedef std::deque< std::pair< QThread *, QMutex * > > Queue;
+ static Queue threads;
+ static void enqueue( QThread *t, QMutex *m );
+ static void wait();
+};
+
+template< typename F, typename P >
+struct AsyncCall : public QThread
+{
+ AsyncCall( F f, P p ) : func( f ), param( p ) {}
+ virtual void run()
+ {
+ // kdDebug() << "Thread waiting for mutex..." << endl;
+ Threads::serialize.lock();
+ // kdDebug() << "starting thread (mutex acquired)" << endl;
+ func( param );
+ // kdDebug() << "finishing thread (releasing mutex)" << endl;
+ Threads::serialize.unlock();
+ }
+ virtual ~AsyncCall() {}
+protected:
+ F func;
+ P param;
+};
+
+
+template< typename F, typename P > AsyncCall< F, P > *asyncCall( F f, P p ) {
+ return new AsyncCall< F, P >( f, p );
+}
+
+inline static void adjustFontSize( QWidget *w, int off ) {
+ QFont f = w->font();
+ f.setPointSize( f.pointSize() + off ); // a bit smaller font...
+ w->setFont( f );
+ w->updateGeometry();
+}
+
+}
+
+#endif
diff --git a/adept/adept/view.cpp b/adept/adept/view.cpp
new file mode 100644
index 0000000..207277c
--- /dev/null
+++ b/adept/adept/view.cpp
@@ -0,0 +1,153 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/quickfilter.h>
+#include <adept/statefilter.h>
+#include <adept/tagfilter.h>
+
+#include <adept/packagedetails.h>
+#include <adept/view.h>
+#include <adept/filtersidebar.h>
+
+using namespace adept;
+
+View::View( QWidget *p, const char *n )
+ : QSplitter( p, n )
+{
+ setOrientation( Qt::Vertical );
+ m_flist = new FilterList( this );
+ m_bottom = new QSplitter( this );
+ m_bottom->setOrientation( Qt::Horizontal );
+ m_lister = new Lister( m_bottom );
+ m_flist->plugLister( m_lister );
+ m_sidebar = new FilterSidebar( m_bottom );
+
+ connect( m_lister, SIGNAL( cardinalityChanged( const Lister::Cardinality & ) ),
+ m_sidebar, SLOT( setCardinality( const Lister::Cardinality & ) ) );
+
+ m_flist->setHiddenPredicate(
+ predicate::adapt< entity::Entity >(
+ predicate::Package::member( &entity::Package::hasVersion ) ) );
+ m_flist->appendPredicate(
+ predicate::adapt< entity::Entity >(
+ StateFilter< entity::Package >() ) );
+ m_flist->appendPredicate(
+ predicate::adapt< entity::Entity >(
+ TagFilter< entity::Package >() ) );
+ m_flist->appendPredicate(
+ predicate::adapt< entity::Entity >(
+ QuickFilter< entity::Package >() ) );
+
+ m_lister->setRangeProvider( this );
+
+ QTimer::singleShot( 0, this, SLOT( delayed() ) );
+}
+
+Lister::Range View::listerRange() {
+ component::Packages &cp = cache::Global::get().packages();
+ return cp.sorted();
+ // return range( cp.packagesBegin(), cp.packagesEnd() );
+}
+
+void View::hideTags() {
+ QValueList< int > szl;
+ szl.append( 0 ); szl.append( 1 );
+ setSizes( szl );
+}
+
+void View::hideFilters() {
+ QValueList< int > szl;
+ szl.append( 1 ); szl.append( 0 );
+ m_bottom->setSizes( szl );
+}
+
+predicate::Predicate< entity::Entity > View::previewPredicate()
+{
+ return predicate::adapt< entity::Entity >(
+ (not predicate::Package::member( &entity::Package::markedKeep ))
+ or predicate::Package::member( &entity::Package::isBroken )
+ or predicate::Package::member( &entity::Package::willBreak ) );
+}
+
+void View::setUpgradeMode()
+{
+ setPreviewMode();
+ filterList()->setHiddenPredicate(
+ previewPredicate() or predicate::adapt< entity::Entity >(
+ predicate::Package::member( &entity::Package::isUpgradable ) ) );
+}
+
+void View::setPreviewMode()
+{
+ filterList()->setHiddenPredicate( previewPredicate() );
+ hideFilters();
+ hideTags();
+}
+
+void View::delayed()
+{
+ // cleanRebuild();
+}
+
+Browser::Browser( QWidget *p, const char *n )
+ : QWidgetStack( p, n ), m_currentValid( false )
+{
+ m_current = entity::Entity();
+ addWidget( m_view = new View( this ) );
+ addWidget( m_details = new PackageDetails( this ) );
+ connect( m_view->lister(), SIGNAL( detailsRequested( Lister::Entity ) ),
+ this, SLOT( show( Lister::Entity ) ) );
+ connect( m_details, SIGNAL( showList() ),
+ this, SLOT( showList() ) );
+ connect( m_details, SIGNAL( back() ),
+ this, SLOT( back() ) );
+ connect( m_details, SIGNAL( forward() ),
+ this, SLOT( forward() ) );
+ connect( m_details, SIGNAL( detailsRequested( Lister::Entity ) ),
+ this, SLOT( show( Lister::Entity ) ) );
+}
+
+void Browser::showList()
+{
+ raiseWidget( m_view );
+}
+
+void Browser::back()
+{
+ m_forward.push_back( m_current );
+ m_current = m_back.back();
+ m_back.pop_back();
+ doShow( m_current );
+}
+
+void Browser::forward()
+{
+ m_back.push_back( m_current );
+ m_current = m_forward.back();
+ m_forward.pop_back();
+ doShow( m_current );
+}
+
+void Browser::doShow( Lister::Entity e )
+{
+ m_details->setHasForward( !m_forward.empty() );
+ m_details->setHasBack( !m_back.empty() );
+ raiseWidget( m_details );
+ m_details->setPackage( downcast< entity::Package >( e ) );
+}
+
+void Browser::show( Lister::Entity e )
+{
+ m_forward.clear();
+ if ( m_currentValid )
+ m_back.push_back( m_current );
+ m_currentValid = true;
+ m_current = e.stable();
+ doShow( e );
+}
+
+/* Kolik existencialistu je potreba k zasroubovani zarovky?
+ Dva. Jeden sroubuje zarovku, a druhy premysli jak zarovka
+ sama o sobe predstavuje jednotlivy zarivy bod v subjektivni
+ realite v podsveti nekonecne absurdity dosahujici neuprimny
+ vesmir nicoty. */
diff --git a/adept/adept/view.h b/adept/adept/view.h
new file mode 100644
index 0000000..ea6c6f5
--- /dev/null
+++ b/adept/adept/view.h
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+
+#include <deque>
+
+#include <qsplitter.h>
+#include <qwidgetstack.h>
+
+#include <adept/lister.h>
+#include <adept/filterlist.h>
+
+#ifndef EPT_VIEW_H
+#define EPT_VIEW_H
+
+class QSplitter;
+
+namespace adept {
+
+class FilterSidebar;
+class PackageDetails;
+
+class View: public QSplitter, public Lister::RangeProvider {
+ Q_OBJECT
+public:
+ View( QWidget *p = 0, const char *n = 0 );
+ FilterList *filterList() { return m_flist; }
+ Lister *lister() { return m_lister; }
+ virtual Lister::Range listerRange();
+public slots:
+ void cleanRebuild() { m_lister->cleanRebuild(); }
+ void hideFilters();
+ void hideTags();
+ void setPreviewMode();
+ void setUpgradeMode();
+protected slots:
+ void delayed();
+protected:
+ predicate::Predicate< entity::Entity > previewPredicate();
+ QSplitter *m_bottom;
+ FilterList *m_flist;
+ Lister *m_lister;
+ FilterSidebar *m_sidebar;
+};
+
+class Browser : public QWidgetStack {
+ Q_OBJECT
+public:
+ Browser( QWidget *p = 0, const char *n = 0 );
+ View *searchView() const { return m_view; }
+public slots:
+ void forward();
+ void back();
+ void show( Lister::Entity e );
+ void showList();
+ void doShow( Lister::Entity e );
+protected:
+ typedef std::deque< Lister::Entity > Deque;
+ Deque m_forward, m_back;
+ entity::Entity m_current;
+ View *m_view;
+ PackageDetails *m_details;
+ bool m_currentValid;
+};
+
+}
+
+#endif
diff --git a/adept/batch/Makefile.am b/adept/batch/Makefile.am
new file mode 100644
index 0000000..a14de1f
--- /dev/null
+++ b/adept/batch/Makefile.am
@@ -0,0 +1,20 @@
+bin_PROGRAMS = adept_batch
+noinst_HEADERS = app.h
+adept_batch_SOURCES = main.cpp app.cpp
+adept_batch_LDADD = ../adept/libadept.la $(LIBAPT_FRONT_LIBS) $(LIBEPT_LIBS) $(LIBTAGCOLL2_LIBS) $(LIBWIBBLE_LIBS) $(LIB_KIO) $(LIBKDE_UI) ../kubuntu_upgrader/libkubuntuupgradewizard.la
+adept_batch_LDFLAGS = -L/usr/lib/debug
+INCLUDES = $(all_includes) $(LIBAPT_FRONT_CFLAGS) $(LIBEPT_CFLAGS) $(LIBTAGCOLL2_CFLAGS) $(LIBWIBBLE_CFLAGS) -I$(srcdir)/.. -I..
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII
+METASOURCES = AUTO
+KDE_ICON = AUTO
+
+rcdir = $(kde_datadir)/adept_batch
+rc_DATA = adept_batchui.rc
+
+#shelldesktopdir = $(kde_appsdir)/System
+#xdg_apps_DATA = adept_batch.desktop
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(EXTRACTRC) `find . -name "*.rc"` >> rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/adept_batch.pot
diff --git a/adept/batch/adept_batchui.rc b/adept/batch/adept_batchui.rc
new file mode 100644
index 0000000..083b9e8
--- /dev/null
+++ b/adept/batch/adept_batchui.rc
@@ -0,0 +1,16 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui version="6" name="adept-updater">
+ <MenuBar>
+ <Menu name="file" noMerge="1">
+ <text>&amp;Adept</text>
+ <Action name="file_quit" />
+ </Menu>
+ <Menu name="edit" noMerge="1">
+ <text>&amp;Edit</text>
+ <Action name="edit_undo" />
+ <Action name="edit_redo" />
+ </Menu>
+ </MenuBar>
+ <ToolBar name="mainToolBar" noMerge="1">
+ </ToolBar>
+</kpartgui>
diff --git a/adept/batch/adept_updater.desktop b/adept/batch/adept_updater.desktop
new file mode 100644
index 0000000..dedcbab
--- /dev/null
+++ b/adept/batch/adept_updater.desktop
@@ -0,0 +1,70 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Adept Updater
+Name[bg]=Обновяване на Adept
+Name[ca]=Actualitzador Adept
+Name[da]=Adept-opdatering
+Name[el]=Ανανεωτής Adept
+Name[es]=Actualizador experto
+Name[et]=Adepti uuendaja
+Name[fr]=Mise à jour Adept
+Name[ga]=Nuashonróir Adept
+Name[gl]=Actualizador de Adept
+Name[it]=Aggiornamento Adept
+Name[ka]=Adept განმაახლებელი
+Name[lt]=Adept atnaujinimai
+Name[pt]=Actualizador do Adept
+Name[sk]=Adept aktualizácia
+Name[sv]=Adept-uppdaterare
+Name[xx]=xxAdept Updaterxx
+GenericName=System Update Wizard
+GenericName[bg]=Обновяване на Adept
+GenericName[ca]=Assistent d'actualització del sistema
+GenericName[cs]=Průvodce aktualizací systému
+GenericName[da]=Systemopdateringsguide
+GenericName[de]=Systemaktualisierungsassistent
+GenericName[el]=Μάγος ενημέρωσης συστήματος
+GenericName[es]=Asistente de actualización del sistema
+GenericName[et]=Süsteemi uuendamine nõustaja
+GenericName[fr]=Assistant de mise à jour du système
+GenericName[gl]=Asistente de Actualizazón do Sistema
+GenericName[it]=Procedura guidata aggiornamento sistema
+GenericName[ja]=システムアップデートウィザード
+GenericName[ka]=სისტემის განახლების ოსტატი
+GenericName[lt]=Sistemos atnaujinimo vediklis
+GenericName[nl]=Systeem-update-assistent
+GenericName[pt]=Assistente de Actualização do Sistema
+GenericName[sk]=Sprievodca systémovou aktualizáciou
+GenericName[sv]=Systemuppdateringsguide
+GenericName[xx]=xxSystem Update Wizardxx
+Exec=adept_updater %i %m -caption "%c"
+TryExec=adept_updater
+Categories=Qt;KDE;System;
+Icon=adept_updater
+Type=Application
+X-KDE-SubstituteUID=true
+Comment=Update installed software
+Comment[bg]=Обновяване на инсталиран софтуер
+Comment[ca]=Actualitza el programari instal·lat
+Comment[cs]=Aktualizace nainstalovaného softwaru
+Comment[da]=Opdatér installeret programmel
+Comment[de]=Aktualisiert installierte Software
+Comment[el]=Ενημέρωση εγκατεστημένου λογισμικού
+Comment[es]=Actualizar el software instalado
+Comment[et]=Paigaldatud tarkvara uuendamine
+Comment[fr]=Mise à jour des logiciels installés
+Comment[ga]=Nuashonraigh bogearraí suiteáilte
+Comment[gl]=Actualiza o software instalado
+Comment[it]=Aggiorna il software installato
+Comment[ja]=インストール済みのソフトウェアをアップデート
+Comment[ka]=დაყენებული პროგრამების განახლება
+Comment[lt]=Įdiegtų programų atnaujinimas
+Comment[nl]=Geïnstalleerde software bijwerken
+Comment[pt]=Actualiza o 'software' instalado
+Comment[sk]=Aktualizácia inštalovaného softwaru
+Comment[sr]=Ажурира инсталиране програме
+Comment[sr@Latn]=Ažurira instalirane programe
+Comment[sv]=Uppdatera installerad programvara
+Comment[xx]=xxUpdate installed softwarexx
+Terminal=false
+NoDisplay=true
diff --git a/adept/batch/app.cpp b/adept/batch/app.cpp
new file mode 100644
index 0000000..dd99ec1
--- /dev/null
+++ b/adept/batch/app.cpp
@@ -0,0 +1,142 @@
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qsplitter.h>
+#include <qtimer.h>
+#include <qwidgetstack.h>
+
+#include <kpushbutton.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kaction.h>
+#include <kactionclasses.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kparts/part.h>
+#include <ktrader.h>
+#include <klibloader.h>
+#include <kstatusbar.h>
+
+#include <apt-pkg/packagemanager.h>
+#include <apt-front/manager.h>
+#include <apt-front/init.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/acqprogresswidget.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+#include <iostream>
+
+#include "app.h"
+
+using namespace aptFront;
+using namespace aptFront::cache;
+using namespace adept;
+
+App::App( KCmdLineArgs *args ) {
+ setMainWidget( this );
+ initialize();
+ QString qs_pkgname;
+
+ updating = false;
+ enum { None, Remove, Install } m = None;
+ for(int i = 0; i < args->count(); i++) {
+ QCString a = args->arg( i );
+
+ if (m == None ||
+ cache().packages().packageByName( std::string( a ) ).valid()) {
+ if ( m == Install ) {
+ kdDebug() << "installing " << a << endl;
+ cache().packages().packageByName( std::string( a ) ).markInstall();
+ } else if ( m == Remove ) {
+ kdDebug() << "removing " << a << endl;
+ cache().packages().packageByName( std::string( a ) ).markRemove();
+ }
+
+ if ( m == None && a == "install" ) {
+ m = Install;
+ } if ( m == None && a == "remove" ) {
+ m = Remove;
+ } if ( m == None && a == "update" ) {
+ updating = true;
+ }
+ } else {
+ qs_pkgname = a;
+ kdDebug() << "The package '"<<a<<"' could not be found." << endl;
+ KMessageBox::sorry(
+ this, i18n( "The package '%1' could not be found." ).arg(u8(qs_pkgname)),
+ i18n( "Could not commit changes" ) );
+ exit(1);
+ }
+ }
+
+ if (!updating && m == 0) {
+ exit( 1 );
+ }
+
+ observeComponent< component::State >();
+
+ m_all = new QVBox( this );
+ m_stack = new QWidgetStack( m_all );
+
+ m_stack->addWidget( m_progress = new adept::AcqProgressWidget( m_stack ) );
+ m_stack->addWidget( m_commitProgress = new CommitProgress( m_stack ) );
+
+ connect(this, SIGNAL( imDone() ),
+ this, SLOT( handleDone() ));
+
+ setStandardToolBarMenuEnabled( false );
+ createStandardStatusBarAction();
+ setupGUI( Keys|StatusBar|Save|Create );
+ delete toolBar();
+
+ Application::setStatusBar( statusBar() );
+
+ QTimer::singleShot(
+ 0, this,
+ SLOT( delayed() ) );
+
+ m_stack->raiseWidget( m_progress );
+ setCentralWidget( m_all );
+}
+
+void App::delayed() {
+ statusBar()->clear();
+
+ kdDebug() << "App::delayed starting commit" << endl;
+
+ aptFront::Manager m;
+ m.setProgressCallback( m_progress->callback() );
+ m.setUpdateInterval( 100000 );
+ try {
+ if (updating) {
+ m_stack->raiseWidget( m_progress );
+ m.update();
+ } else {
+ m_stack->raiseWidget( m_progress );
+ m.download();
+ m_stack->raiseWidget( m_commitProgress );
+ m.commit();
+ }
+ emit imDone();
+ } catch ( exception::OperationCancelled ) {
+ emit imDone();
+ } catch ( ... ) {
+ KMessageBox::sorry(
+ this, i18n( "There was an error commiting changes. "
+ "Possibly there was a problem downloading some "
+ "packages or the commit would break packages. " ),
+ i18n( "Could not commit changes" ) );
+ emit imDone();
+ }
+}
+
+void App::handleDone() {
+ kdDebug() << "I'm done here" << endl;
+ close();
+}
+
+#include "app.moc"
diff --git a/adept/batch/app.h b/adept/batch/app.h
new file mode 100644
index 0000000..604a5a2
--- /dev/null
+++ b/adept/batch/app.h
@@ -0,0 +1,54 @@
+/* -*- C++ -*- */
+#ifndef APP_H
+#define APP_H
+
+#include <kmainwindow.h>
+#include <kparts/part.h>
+#include <kactionclasses.h>
+#include <kcmdlineargs.h>
+#include <apt-front/cache/observer.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <adept/view.h>
+#include <adept/commitprogress.h>
+#include <adept/application.h>
+
+#include <adept/acqprogresswidget.h>
+
+class QVBox;
+class QWidgetStack;
+class QSplitter;
+class KAction;
+class KPushButton;
+namespace adept {
+class AcqProgressWidget;
+}
+
+using namespace aptFront;
+using namespace adept;
+
+class App : public KMainWindow, Application {
+ Q_OBJECT
+public:
+ void setupActions();
+ ExtTerminalInterface *terminal();
+ App( KCmdLineArgs *a );
+signals:
+ void imDone();
+protected slots:
+ void delayed();
+ void handleDone();
+protected:
+ friend class WaitForLister;
+
+ QWidgetStack *m_stack;
+ QVBox *m_all;
+
+ // stacked widgets
+ adept::AcqProgressWidget *m_progress;
+ adept::CommitProgress *m_commitProgress;
+
+ bool updating;
+};
+
+#endif
diff --git a/adept/batch/main.cpp b/adept/batch/main.cpp
new file mode 100644
index 0000000..7521f6c
--- /dev/null
+++ b/adept/batch/main.cpp
@@ -0,0 +1,48 @@
+// KDE includes
+
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <kuniqueapplication.h>
+
+#include "app.h"
+
+static KCmdLineOptions options[] =
+{
+ { "+command", I18N_NOOP("Command"), 0 },
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+ KLocale::setMainCatalogue("adept");
+
+ QString description = i18n("Adept Batch");
+
+ KAboutData aboutData( "adept_batch",
+ I18N_NOOP("Adept Batch"),
+ "2.1 Cruiser",
+ description.latin1(),
+ KAboutData::License_BSD,
+ I18N_NOOP("(c) 2006 Peter Rockai"),
+ 0,
+ "http://web.mornfall.net/adept.html");
+
+ aboutData.addAuthor ( "Peter Rockai",
+ I18N_NOOP("developer"),
+ "me at mornfall dot net",
+ "http://web.mornfall.net");
+
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+ KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
+ KGlobal::locale()->insertCatalogue(QString::fromUtf8("libept"));
+
+ App *ta = new App( args );
+
+ app.setMainWidget( ta );
+ ta->show();
+
+ return app.exec();
+}
diff --git a/adept/configure.in.in b/adept/configure.in.in
new file mode 100644
index 0000000..eac3946
--- /dev/null
+++ b/adept/configure.in.in
@@ -0,0 +1,5 @@
+AC_ARG_ENABLE(adept, [ --enable-adept compile adept],, [DO_NOT_COMPILE="$DO_NOT_COMPILE adept"])
+LIBTAGCOLL2_DEFS
+LIBAPT_FRONT_DEFS
+LIBEPT_DEFS
+LIBWIBBLE_DEFS
diff --git a/adept/deb-build b/adept/deb-build
new file mode 100755
index 0000000..dcd2967
--- /dev/null
+++ b/adept/deb-build
@@ -0,0 +1,21 @@
+#!/bin/sh
+version=`head -1 debian/changelog | sed -r 's/.+\(([^)]+)\).+/\1/'`
+tgt=_dist/adept-$version
+wd="$(pwd)"
+
+dir=`basename $(pwd)`
+cd ..
+
+rm -rf $tgt
+mkdir -p $tgt
+
+cp -a $dir/debian $tgt/
+cp -a $dir $tgt/adept
+cp -a admin $tgt/
+cp configure.in.in Makefile.am.in $tgt/
+(cd $tgt && patch -p1 < $wd/fix-autoconf.patch)
+(cd $tgt && libtoolize --force)
+cp -f /usr/share/aclocal/libtool.m4 $tgt/admin/libtool.m4.in
+export UNSERMAKE=no
+(cd $tgt && make -f admin/Makefile.common cvs)
+(cd $tgt && debuild $@)
diff --git a/adept/icons/Makefile.am b/adept/icons/Makefile.am
new file mode 100644
index 0000000..e5515a8
--- /dev/null
+++ b/adept/icons/Makefile.am
@@ -0,0 +1 @@
+KDE_ICON = AUTO
diff --git a/adept/icons/cr128-action-adept_notifier_warning.png b/adept/icons/cr128-action-adept_notifier_warning.png
new file mode 100644
index 0000000..49b0960
--- /dev/null
+++ b/adept/icons/cr128-action-adept_notifier_warning.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_commit.png b/adept/icons/cr16-action-adept_commit.png
new file mode 100644
index 0000000..5b0f6a6
--- /dev/null
+++ b/adept/icons/cr16-action-adept_commit.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_distupgrade.png b/adept/icons/cr16-action-adept_distupgrade.png
new file mode 100644
index 0000000..3de9a44
--- /dev/null
+++ b/adept/icons/cr16-action-adept_distupgrade.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_install.png b/adept/icons/cr16-action-adept_install.png
new file mode 100644
index 0000000..e948508
--- /dev/null
+++ b/adept/icons/cr16-action-adept_install.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_keep.png b/adept/icons/cr16-action-adept_keep.png
new file mode 100644
index 0000000..3fe8b17
--- /dev/null
+++ b/adept/icons/cr16-action-adept_keep.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_main_indicator.png b/adept/icons/cr16-action-adept_main_indicator.png
new file mode 100644
index 0000000..cc09bc8
--- /dev/null
+++ b/adept/icons/cr16-action-adept_main_indicator.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_notifier_ok.png b/adept/icons/cr16-action-adept_notifier_ok.png
new file mode 100644
index 0000000..08b9c9d
--- /dev/null
+++ b/adept/icons/cr16-action-adept_notifier_ok.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_notifier_warning.png b/adept/icons/cr16-action-adept_notifier_warning.png
new file mode 100644
index 0000000..c3b9428
--- /dev/null
+++ b/adept/icons/cr16-action-adept_notifier_warning.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_preview.png b/adept/icons/cr16-action-adept_preview.png
new file mode 100644
index 0000000..487a3ec
--- /dev/null
+++ b/adept/icons/cr16-action-adept_preview.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_purge.png b/adept/icons/cr16-action-adept_purge.png
new file mode 100644
index 0000000..145aca4
--- /dev/null
+++ b/adept/icons/cr16-action-adept_purge.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_reinstall.png b/adept/icons/cr16-action-adept_reinstall.png
new file mode 100644
index 0000000..3f1c7ae
--- /dev/null
+++ b/adept/icons/cr16-action-adept_reinstall.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_remove.png b/adept/icons/cr16-action-adept_remove.png
new file mode 100644
index 0000000..d555d92
--- /dev/null
+++ b/adept/icons/cr16-action-adept_remove.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_sourceseditor.png b/adept/icons/cr16-action-adept_sourceseditor.png
new file mode 100644
index 0000000..9d47a67
--- /dev/null
+++ b/adept/icons/cr16-action-adept_sourceseditor.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_update.png b/adept/icons/cr16-action-adept_update.png
new file mode 100644
index 0000000..1c026d3
--- /dev/null
+++ b/adept/icons/cr16-action-adept_update.png
Binary files differ
diff --git a/adept/icons/cr16-action-adept_upgrade.png b/adept/icons/cr16-action-adept_upgrade.png
new file mode 100644
index 0000000..184c118
--- /dev/null
+++ b/adept/icons/cr16-action-adept_upgrade.png
Binary files differ
diff --git a/adept/icons/cr16-action-extender_closed.png b/adept/icons/cr16-action-extender_closed.png
new file mode 100644
index 0000000..24a89b5
--- /dev/null
+++ b/adept/icons/cr16-action-extender_closed.png
Binary files differ
diff --git a/adept/icons/cr16-action-extender_opened.png b/adept/icons/cr16-action-extender_opened.png
new file mode 100644
index 0000000..a4f8e50
--- /dev/null
+++ b/adept/icons/cr16-action-extender_opened.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_commit.png b/adept/icons/cr22-action-adept_commit.png
new file mode 100644
index 0000000..2166fdf
--- /dev/null
+++ b/adept/icons/cr22-action-adept_commit.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_distupgrade.png b/adept/icons/cr22-action-adept_distupgrade.png
new file mode 100644
index 0000000..251f3a0
--- /dev/null
+++ b/adept/icons/cr22-action-adept_distupgrade.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_install.png b/adept/icons/cr22-action-adept_install.png
new file mode 100644
index 0000000..e2823ba
--- /dev/null
+++ b/adept/icons/cr22-action-adept_install.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_keep.png b/adept/icons/cr22-action-adept_keep.png
new file mode 100644
index 0000000..f392596
--- /dev/null
+++ b/adept/icons/cr22-action-adept_keep.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_notifier_ok.png b/adept/icons/cr22-action-adept_notifier_ok.png
new file mode 100644
index 0000000..5cf1392
--- /dev/null
+++ b/adept/icons/cr22-action-adept_notifier_ok.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_notifier_warning.png b/adept/icons/cr22-action-adept_notifier_warning.png
new file mode 100644
index 0000000..5d8fb4f
--- /dev/null
+++ b/adept/icons/cr22-action-adept_notifier_warning.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_preview.png b/adept/icons/cr22-action-adept_preview.png
new file mode 100644
index 0000000..6f5792a
--- /dev/null
+++ b/adept/icons/cr22-action-adept_preview.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_purge.png b/adept/icons/cr22-action-adept_purge.png
new file mode 100644
index 0000000..5d1bce8
--- /dev/null
+++ b/adept/icons/cr22-action-adept_purge.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_reinstall.png b/adept/icons/cr22-action-adept_reinstall.png
new file mode 100644
index 0000000..3054f31
--- /dev/null
+++ b/adept/icons/cr22-action-adept_reinstall.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_remove.png b/adept/icons/cr22-action-adept_remove.png
new file mode 100644
index 0000000..bb16f03
--- /dev/null
+++ b/adept/icons/cr22-action-adept_remove.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_sourceseditor.png b/adept/icons/cr22-action-adept_sourceseditor.png
new file mode 100644
index 0000000..ceb2cbf
--- /dev/null
+++ b/adept/icons/cr22-action-adept_sourceseditor.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_update.png b/adept/icons/cr22-action-adept_update.png
new file mode 100644
index 0000000..0d1ae45
--- /dev/null
+++ b/adept/icons/cr22-action-adept_update.png
Binary files differ
diff --git a/adept/icons/cr22-action-adept_upgrade.png b/adept/icons/cr22-action-adept_upgrade.png
new file mode 100644
index 0000000..7475f6a
--- /dev/null
+++ b/adept/icons/cr22-action-adept_upgrade.png
Binary files differ
diff --git a/adept/icons/cr22-action-extender_closed.png b/adept/icons/cr22-action-extender_closed.png
new file mode 100644
index 0000000..95fc568
--- /dev/null
+++ b/adept/icons/cr22-action-extender_closed.png
Binary files differ
diff --git a/adept/icons/cr22-action-extender_opened.png b/adept/icons/cr22-action-extender_opened.png
new file mode 100644
index 0000000..53c2297
--- /dev/null
+++ b/adept/icons/cr22-action-extender_opened.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_commit.png b/adept/icons/cr32-action-adept_commit.png
new file mode 100644
index 0000000..592ce6f
--- /dev/null
+++ b/adept/icons/cr32-action-adept_commit.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_distupgrade.png b/adept/icons/cr32-action-adept_distupgrade.png
new file mode 100644
index 0000000..63e8ebf
--- /dev/null
+++ b/adept/icons/cr32-action-adept_distupgrade.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_install.png b/adept/icons/cr32-action-adept_install.png
new file mode 100644
index 0000000..90fec1d
--- /dev/null
+++ b/adept/icons/cr32-action-adept_install.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_keep.png b/adept/icons/cr32-action-adept_keep.png
new file mode 100644
index 0000000..2568b59
--- /dev/null
+++ b/adept/icons/cr32-action-adept_keep.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_notifier_ok.png b/adept/icons/cr32-action-adept_notifier_ok.png
new file mode 100644
index 0000000..1914a42
--- /dev/null
+++ b/adept/icons/cr32-action-adept_notifier_ok.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_notifier_warning.png b/adept/icons/cr32-action-adept_notifier_warning.png
new file mode 100644
index 0000000..d2db447
--- /dev/null
+++ b/adept/icons/cr32-action-adept_notifier_warning.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_preview.png b/adept/icons/cr32-action-adept_preview.png
new file mode 100644
index 0000000..e92f3ca
--- /dev/null
+++ b/adept/icons/cr32-action-adept_preview.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_purge.png b/adept/icons/cr32-action-adept_purge.png
new file mode 100644
index 0000000..9a6aadb
--- /dev/null
+++ b/adept/icons/cr32-action-adept_purge.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_reinstall.png b/adept/icons/cr32-action-adept_reinstall.png
new file mode 100644
index 0000000..cb734f8
--- /dev/null
+++ b/adept/icons/cr32-action-adept_reinstall.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_remove.png b/adept/icons/cr32-action-adept_remove.png
new file mode 100644
index 0000000..5a6b15a
--- /dev/null
+++ b/adept/icons/cr32-action-adept_remove.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_sourceseditor.png b/adept/icons/cr32-action-adept_sourceseditor.png
new file mode 100644
index 0000000..ff21ea5
--- /dev/null
+++ b/adept/icons/cr32-action-adept_sourceseditor.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_update.png b/adept/icons/cr32-action-adept_update.png
new file mode 100644
index 0000000..4b0e37a
--- /dev/null
+++ b/adept/icons/cr32-action-adept_update.png
Binary files differ
diff --git a/adept/icons/cr32-action-adept_upgrade.png b/adept/icons/cr32-action-adept_upgrade.png
new file mode 100644
index 0000000..899ad4f
--- /dev/null
+++ b/adept/icons/cr32-action-adept_upgrade.png
Binary files differ
diff --git a/adept/icons/cr32-action-extender_closed.png b/adept/icons/cr32-action-extender_closed.png
new file mode 100644
index 0000000..cd1be0c
--- /dev/null
+++ b/adept/icons/cr32-action-extender_closed.png
Binary files differ
diff --git a/adept/icons/cr32-action-extender_opened.png b/adept/icons/cr32-action-extender_opened.png
new file mode 100644
index 0000000..2c9074d
--- /dev/null
+++ b/adept/icons/cr32-action-extender_opened.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_commit.png b/adept/icons/cr48-action-adept_commit.png
new file mode 100644
index 0000000..3b7a690
--- /dev/null
+++ b/adept/icons/cr48-action-adept_commit.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_distupgrade.png b/adept/icons/cr48-action-adept_distupgrade.png
new file mode 100644
index 0000000..fb43a06
--- /dev/null
+++ b/adept/icons/cr48-action-adept_distupgrade.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_install.png b/adept/icons/cr48-action-adept_install.png
new file mode 100644
index 0000000..1b12d6c
--- /dev/null
+++ b/adept/icons/cr48-action-adept_install.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_keep.png b/adept/icons/cr48-action-adept_keep.png
new file mode 100644
index 0000000..753b14f
--- /dev/null
+++ b/adept/icons/cr48-action-adept_keep.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_notifier_ok.png b/adept/icons/cr48-action-adept_notifier_ok.png
new file mode 100644
index 0000000..5707ba9
--- /dev/null
+++ b/adept/icons/cr48-action-adept_notifier_ok.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_notifier_warning.png b/adept/icons/cr48-action-adept_notifier_warning.png
new file mode 100644
index 0000000..5add449
--- /dev/null
+++ b/adept/icons/cr48-action-adept_notifier_warning.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_preview.png b/adept/icons/cr48-action-adept_preview.png
new file mode 100644
index 0000000..3dc1678
--- /dev/null
+++ b/adept/icons/cr48-action-adept_preview.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_purge.png b/adept/icons/cr48-action-adept_purge.png
new file mode 100644
index 0000000..70e8012
--- /dev/null
+++ b/adept/icons/cr48-action-adept_purge.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_reinstall.png b/adept/icons/cr48-action-adept_reinstall.png
new file mode 100644
index 0000000..00cd6ef
--- /dev/null
+++ b/adept/icons/cr48-action-adept_reinstall.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_remove.png b/adept/icons/cr48-action-adept_remove.png
new file mode 100644
index 0000000..984bf23
--- /dev/null
+++ b/adept/icons/cr48-action-adept_remove.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_sourceseditor.png b/adept/icons/cr48-action-adept_sourceseditor.png
new file mode 100644
index 0000000..cab2a62
--- /dev/null
+++ b/adept/icons/cr48-action-adept_sourceseditor.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_update.png b/adept/icons/cr48-action-adept_update.png
new file mode 100644
index 0000000..248f614
--- /dev/null
+++ b/adept/icons/cr48-action-adept_update.png
Binary files differ
diff --git a/adept/icons/cr48-action-adept_upgrade.png b/adept/icons/cr48-action-adept_upgrade.png
new file mode 100644
index 0000000..6af2494
--- /dev/null
+++ b/adept/icons/cr48-action-adept_upgrade.png
Binary files differ
diff --git a/adept/icons/cr48-action-extender_closed.png b/adept/icons/cr48-action-extender_closed.png
new file mode 100644
index 0000000..fbce893
--- /dev/null
+++ b/adept/icons/cr48-action-extender_closed.png
Binary files differ
diff --git a/adept/icons/cr48-action-extender_opened.png b/adept/icons/cr48-action-extender_opened.png
new file mode 100644
index 0000000..ee52113
--- /dev/null
+++ b/adept/icons/cr48-action-extender_opened.png
Binary files differ
diff --git a/adept/icons/cr64-action-adept_notifier_warning.png b/adept/icons/cr64-action-adept_notifier_warning.png
new file mode 100644
index 0000000..d868276
--- /dev/null
+++ b/adept/icons/cr64-action-adept_notifier_warning.png
Binary files differ
diff --git a/adept/icons/crsc-action-adept_notifier_warning.svgz b/adept/icons/crsc-action-adept_notifier_warning.svgz
new file mode 100644
index 0000000..208a4f6
--- /dev/null
+++ b/adept/icons/crsc-action-adept_notifier_warning.svgz
Binary files differ
diff --git a/adept/installer/Makefile.am b/adept/installer/Makefile.am
new file mode 100644
index 0000000..7275f75
--- /dev/null
+++ b/adept/installer/Makefile.am
@@ -0,0 +1,22 @@
+
+bin_PROGRAMS = adept_installer
+noinst_HEADERS = app.h
+adept_installer_SOURCES = main.cpp app.cpp
+adept_installer_LDADD = ../adept/libadept.la -lapt-front $(LIBTAGCOLL2_LIBS) $(LIB_KIO) $(LIBKDE_UI)
+adept_installer_LDFLAGS = -L/usr/lib/debug
+INCLUDES = $(all_includes) $(LIBEPT_CFLAGS) $(LIBTAGCOLL2_CFLAGS) $(LIBAPT_FRONT_CFLAGS) $(LIBWIBBLE_CFLAGS) -I$(srcdir)/.. -I..
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII \
+ -DINSTALLER_DATA=\"/usr/share/app-install\"
+METASOURCES = AUTO
+KDE_ICON = AUTO
+
+rcdir = $(kde_datadir)/adept_installer
+rc_DATA = adept_installerui.rc
+
+#shelldesktopdir = $(kde_appsdir)/System
+xdg_apps_DATA = adept_installer.desktop
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(EXTRACTRC) `find . -name "*.rc"` >> rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/adept_installer.pot
diff --git a/adept/installer/adept_installer.desktop b/adept/installer/adept_installer.desktop
new file mode 100644
index 0000000..4bba24c
--- /dev/null
+++ b/adept/installer/adept_installer.desktop
@@ -0,0 +1,45 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Add/Remove Programs
+Name[bg]=Добавяне/Премахване на програми
+Name[br]=Ouzhpennañ/Lemel programmoù
+Name[ca]=Afegeix/Elimina programes
+Name[cs]=Přidat/odstranit programy
+Name[da]=Tilføj/Fjern programmer
+Name[de]=Programme hinzufügen/entfernen
+Name[el]=Προσθήκη/Αφαίρεση εφαρμογών
+Name[es]=Añadir/eliminar programas
+Name[gl]=Engade/Quita Programas
+Name[it]=Aggiungi/Rimuovi Programmi
+Name[ja]=プログラムの追加と削除
+Name[ka]=პროგრამების დაყენება/წაშლა
+Name[lt]=Pridėti/šalinti programas
+Name[nl]=Programma's toevoegen/verwijderen
+Name[pt]=Adicionar/Remover Programas
+Name[sk]=Pridať/Odstrániť programy
+Name[sv]=Lägg till/Ta bort program
+Exec=/opt/kde3/bin/adept_installer
+Categories=Qt;KDE;Core;
+Icon=adept_installer
+Type=Application
+X-KDE-SubstituteUID=true
+Comment=Adept Installer: install and remove software packages
+Comment[bg]=Инсталатор Adept: инсталиране на нови софтуерни пакети
+Comment[ca]=Instal·lador Adept: instal·la i elimina paquets de programari
+Comment[cs]=Adept Installer: instalace a smazání softwarových balíčků
+Comment[da]=Adept installationsprogram: installér og fjern programmer
+Comment[de]=Adept Installationsprogramm: Softwarepakete installieren und deinstallieren
+Comment[el]=Εφαρμογή ενημέρωσης λογισμικού Adept: Εγκατάσταση και αφαίρεση πακέτων λογισμικού
+Comment[es]=Instalador Adept: instala y elimina paquetes de software
+Comment[fr]=Installeur Adept : Installation et mise à jour de paquetages logiciels
+Comment[ga]=Suiteálaí Adept: suiteáil agus bain bogearraí
+Comment[gl]=Instalador de Adept; instala e borra pacotes de software
+Comment[it]=Installatore Adept: installa e rimuove pacchetti di programmi
+Comment[ja]=Adept Installer: ソフトウェアパッケージのインストールと削除
+Comment[ka]=Adept დამყენებელი: პაკეტების დაყენება და წაშლა
+Comment[lt]=Adept tvarkytuvė: programų paketų diegimas ir šalinimas
+Comment[nl]=Adept Installer: installeer en verwijder softwarepakketten
+Comment[pt]=Instalador Adept: Instalar e remover pacotes de 'software'
+Comment[sk]=Adept Installer: inštaluje a odstraňuje softwarové balíky
+Comment[sv]=Adept installationsprogram: installera och ta bort programvarupaket
+Terminal=false
diff --git a/adept/installer/adept_installerui.rc b/adept/installer/adept_installerui.rc
new file mode 100644
index 0000000..a4eca27
--- /dev/null
+++ b/adept/installer/adept_installerui.rc
@@ -0,0 +1,20 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui version="6" name="adept-updater">
+ <MenuBar>
+ <Menu name="file" noMerge="1">
+ <text>&amp;Adept</text>
+ <Action name="file_quit" />
+ </Menu>
+ <Menu name="edit" noMerge="1">
+ <text>&amp;Edit</text>
+ <Action name="edit_undo" />
+ <Action name="edit_redo" />
+ </Menu>
+ <Menu name="view" noMerge="1">
+ <text>&amp;View</text>
+ <Action name="review"/>
+ </Menu>
+ </MenuBar>
+ <ToolBar name="mainToolBar" noMerge="1">
+ </ToolBar>
+</kpartgui>
diff --git a/adept/installer/app.cpp b/adept/installer/app.cpp
new file mode 100644
index 0000000..7c82421
--- /dev/null
+++ b/adept/installer/app.cpp
@@ -0,0 +1,416 @@
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qpopupmenu.h>
+#include <qsplitter.h>
+#include <qtimer.h>
+#include <qwidgetstack.h>
+
+#include <kpushbutton.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kaction.h>
+#include <kactionclasses.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kparts/part.h>
+#include <ktrader.h>
+#include <klibloader.h>
+#include <kstatusbar.h>
+#include <kstandarddirs.h>
+#include <kprocess.h>
+#include <kmenubar.h>
+
+#include <apt-pkg/packagemanager.h>
+#include <apt-front/manager.h>
+#include <apt-front/init.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/desktop.h>
+#include <apt-front/cache/component/history.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/acqprogresswidget.h>
+#include <adept/desktoplist.h>
+#include <adept/utils.h>
+
+#include "app.h"
+
+#include <adept/dpkgpm-gui.h> // EVIL
+
+using namespace aptFront;
+using namespace cache;
+using namespace utils;
+using namespace adept;
+
+std::string GroupPolicy::groupForCategories( Range< std::string > r ) {
+ /* std::cerr << "groupForCategories: ";
+ for ( Range< std::string > i = r; i != i.end(); ++i ) {
+ std::cerr << *i << " ";
+ }
+ std::cerr << std::endl; */
+ for ( Range< std::string > i = r; i != i.end(); ++i ) {
+ if ( i->find( "X-KDE-settings" ) != std::string::npos )
+ return "Settings";
+ if ( i->find( "X-KDE-information" ) != std::string::npos )
+ return "Settings";
+ }
+ if ( r.contains( "Development" ) ) return "Development";
+ if ( !r.contains( "Education" ) ) {
+ if ( r.contains( "Astronomy" ) || r.contains( "Biology" )
+ || r.contains( "Chemistry" ) || r.contains( "Geology" )
+ || r.contains( "MedicalSoftware" ) || r.contains( "Physics" )
+ || r.contains( "Math" ) || r.contains( "Science" ) )
+ return "Science";
+ } else {
+ return "Edutainment";
+ }
+ if ( r.contains( "Game" ) ) return "Games";
+ if ( r.contains( "Graphics" ) ) return "Graphics";
+ if ( r.contains( "Network" ) ) return "Internet";
+ if ( r.contains( "AudioVideo" ) ) return "Multimedia";
+ if ( r.contains( "Office" ) ) return "Office";
+ if ( r.contains( "Settings" ) ) return "Settings";
+ if ( r.contains( "System" ) ) return "System";
+ if ( r.contains( "Utility" ) ) {
+ if ( r.contains( "Accessibility" ) )
+ return "Accessibility";
+ return "Utilities";
+ }
+ return "Others";
+}
+
+QString IconPolicy::iconForGroup( QString g ) {
+ if ( g == u8( "Office" ) ) return u8( "package_wordprocessing" );
+ if ( g == u8( "Internet" ) ) return u8( "package_network" );
+ if ( g == u8( "Science" ) ) return u8( "edu_science" );
+ if ( g == u8( "Accessibility" ) ) return u8( "access" );
+ if ( g == u8( "Others" ) ) return u8( "package" );
+ return QString( "package_" ) + g.lower();
+}
+
+void WaitForLister::waiting()
+{
+ kdDebug() << "WaitForLister::waiting()" << endl;
+ /* if (app->m_list->lister()->busy())
+ QTimer::singleShot( 100, this, SLOT( waiting() ) );
+ else */ {
+ QTimer::singleShot( 0, app, slot );
+ deleteLater();
+ }
+}
+
+App::App() {
+
+ m_all = new QVBox( this );
+ m_stack = new QWidgetStack( m_all );
+
+ m_stack->addWidget( m_loading = new QLabel( i18n( "Loading, please wait..." ), m_stack ) );
+ m_loading->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
+
+ m_buttons = new QHBox( m_all );
+ m_editSources = new KPushButton( i18n( "Edit Software Sources" ), m_buttons );
+ m_reviewChanges = new KPushButton( i18n( "Review Changes" ), m_buttons );
+ QLabel *space = new QLabel( m_buttons ); // spacing
+ m_next = new KPushButton( i18n( "Next" ), m_buttons );
+ m_quit = new KPushButton( i18n( "Quit" ), m_buttons );
+ m_editSources->setEnabled( false );
+ m_reviewChanges->setEnabled( false );
+ m_next->setEnabled( false );
+ m_quit->setEnabled( false );
+
+ m_buttons->setSpacing( 2 );
+ m_buttons->setMargin( 2 );
+ QSizePolicy buttons( QSizePolicy::Preferred, QSizePolicy::Fixed, false );
+ m_buttons->setSizePolicy( buttons );
+ m_next->setSizePolicy( buttons );
+ m_quit->setSizePolicy( buttons );
+ space->setSizePolicy( QSizePolicy(
+ QSizePolicy::Expanding,
+ QSizePolicy::Fixed, false ) );
+
+ setStandardToolBarMenuEnabled( false );
+ createStandardStatusBarAction();
+ setupActions();
+ setupGUI( Keys|StatusBar|Save|Create );
+ delete toolBar();
+ menuBar()->hide();
+
+ Application::setStatusBar( statusBar() );
+
+ QTimer::singleShot(
+ 0, this,
+ SLOT( delayed() ) );
+
+ setCentralWidget( m_all );
+ setMinimumSize( 400, 300 );
+}
+
+void App::delayed() {
+
+ initialize();
+ cache().addComponent( new component::Desktop() );
+ KGlobal::dirs()->addResourceDir(
+ "desktopicon",
+ u8( INSTALLER_DATA "/icons/" ) );
+
+ cache().component< component::Desktop >().setPolicy( new GroupPolicy() );
+ cache().component< component::Desktop >().loadDirectory(
+ INSTALLER_DATA "/desktop/" );
+
+ QFile file(QString("/usr/bin/software-properties-kde"));
+ if (file.exists()) {
+ connect( m_editSources, SIGNAL( clicked() ), this, SLOT( editSources() ) );
+ m_editSources->setEnabled( true );
+ }
+
+ connect( m_reviewChanges, SIGNAL( clicked() ), this, SLOT( togglePreview() ) );
+ m_reviewChanges->setEnabled( true );
+
+ connect( m_quit, SIGNAL( clicked() ), this, SLOT( close() ) );
+ m_quit->setEnabled( true );
+
+ m_stack->addWidget( m_view = new InstallerView( m_stack ) );
+ connect( m_view->selector(), SIGNAL( request( cache::entity::Package,
+ cache::component::State::Action ) ),
+ this, SLOT( request( cache::entity::Package,
+ cache::component::State::Action ) ) );
+ m_stack->addWidget( m_preview = new Browser( m_stack ) );
+ m_preview->searchView()->setPreviewMode();
+ m_view->selector()->setPolicy( new IconPolicy() );
+
+ m_stack->addWidget(
+ m_bye = new QLabel( i18n( "Installation Complete!" ), m_stack ) );
+ m_bye->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
+
+ m_stack->addWidget( m_progress = new adept::AcqProgressWidget( m_stack ) );
+ m_stack->addWidget( m_commitProgress = new CommitProgress( m_stack ) );
+
+ m_stack->raiseWidget( m_view );
+
+ statusBar()->clear();
+ m_view->rebuild();
+ start();
+}
+
+bool App::confirmRequest( entity::Package p, component::State::Action a )
+{
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ typedef predicate::AttributeAdaptor< entity::Desktop,
+ predicate::match::Exact< entity::Package > > Adaptor;
+
+ QString t;
+
+ if ( a == component::State::ARemove )
+ t = i18n( "You selected to remove a program. Following applications "
+ "are part of the same package, and they will be removed."
+ " Are you sure you want to remove? " );
+ else
+ return true;
+ // create modal dialog for the question
+ KDialogBase *db = new KDialogBase( KDialogBase::Plain, i18n( "Confirm action" ),
+ KDialogBase::Ok | KDialogBase::Cancel,
+ KDialogBase::Ok, this );
+ QVBoxLayout *layout = new QVBoxLayout( db->plainPage() );
+ layout->setSpacing( 4 );
+ // db->plainPage()->setLayout( layout = new QVBoxLayout( db->plainPage() ) );
+ // QVBox *vb = new QVBox( db );
+ QLabel *txt = new QLabel( db->plainPage() );
+ txt->setAlignment( Qt::AlignLeft | Qt::AlignTop | Qt::WordBreak );
+ txt->setMinimumWidth( 500 );
+ txt->setText( t );
+ txt->setFixedHeight( txt->heightForWidth( 320 ) );
+ txt->setSizePolicy( QSizePolicy(
+ QSizePolicy::Expanding, QSizePolicy::Fixed, false ) );
+ DesktopList *l = new DesktopList( db->plainPage() );
+ l->setMinimumHeight( 220 );
+ l->setMinimumWidth( 320 );
+ l->setDisplayCheckboxes( false );
+ layout->addWidget( txt );
+ layout->addWidget( l );
+ l->insertRange( filteredRange( d.entries(),
+ Adaptor( &entity::Desktop::package, p ) ) );
+ db->adjustSize();
+ connect( db, SIGNAL( okClicked() ), this, SLOT( requestOk() ) );
+ m_currentRequestOk = false;
+ db->exec();
+ return m_currentRequestOk;
+}
+
+void App::request( entity::Package p, component::State::Action a ) {
+ if ( !confirmRequest( p, a ) ) return;
+ RequestList::iterator rm = m_requests.end(), i;
+ for ( i = m_requests.begin(); i != m_requests.end(); ++i ) {
+ if ( i->first == p ) {
+ rm = i;
+ break;
+ }
+ }
+ if ( rm != m_requests.end() )
+ m_requests.erase( rm );
+ if ( a != component::State::AKeep )
+ m_requests.push_back( std::make_pair( p, a ) );
+ cache::Global::get().state().revert();
+ cache::Global::get().state().replay( range( m_requests.begin(),
+ m_requests.end() ) );
+}
+
+bool App::consistent() {
+ int remove = 0;
+ RequestList::iterator i;
+ for ( i = m_requests.begin(); i != m_requests.end(); ++i ) {
+ if ( i->second == component::State::ARemove ) {
+ ++remove;
+ }
+ }
+ if ( remove >= cache::Global::get().state().removeCount() )
+ return true;
+ return false;
+}
+
+void App::setupActions()
+{
+ KStdAction::quit( kapp, SLOT( quit() ), actionCollection() );
+ m_undo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
+ m_redo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
+ m_previewAction = new KToggleAction(
+ i18n( "Review Changes" ), u8( "adept_preview" ),
+ 0, this, SLOT( togglePreview() ), actionCollection(),
+ "review" );
+
+ setHistoryEnabled( false );
+ createStandardStatusBarAction();
+}
+
+void App::togglePreview()
+{
+ if ( m_state == Preview ) {
+ m_previewAction->setChecked( false );
+ setState( Select );
+ m_stack->raiseWidget( m_view );
+ notifyPostChange( 0 );
+ m_reviewChanges->setEnabled(true);
+ } else {
+ setState( Preview );
+ m_stack->raiseWidget( m_preview );
+ setNext( i18n( "Back to Program Selection" ), SLOT( togglePreview() ) );
+ m_previewAction->setChecked( true );
+ m_preview->searchView()->lister()->scheduleRebuild();
+ m_reviewChanges->setEnabled(false);
+ }
+}
+
+void App::inspect()
+{
+ m_state = Inspect;
+ m_stack->raiseWidget( m_preview );
+ setNext( i18n( "Changes are OK, proceed" ), SLOT( commit() ) );
+ m_preview->searchView()->lister()->scheduleRebuild();
+}
+
+void App::setHistoryEnabled( bool e ) {
+ if ( e && history() ) {
+ m_undo->setEnabled( history()->canUndo() );
+ m_redo->setEnabled( history()->canRedo() );
+ } else {
+ m_undo->setEnabled( false );
+ m_redo->setEnabled( false );
+ }
+}
+
+void App::notifyPreRebuild( component::Base *b )
+{
+ m_requests.clear();
+}
+
+void App::notifyPreChange( component::Base *b )
+{
+ Application::notifyPreChange( b );
+ checkpoint();
+}
+
+void App::notifyPostChange( component::Base *b )
+{
+ Application::notifyPostChange( b );
+
+ if ( m_state == Select ) {
+ if ( cache().state().changed() )
+ if ( consistent() )
+ setNext( i18n( "Apply Changes" ), SLOT( commit() ) );
+ else
+ setNext( i18n( "Inspect Changes" ), SLOT( inspect() ) );
+ else
+ disableNext();
+ }
+}
+
+void App::setNext( QString s, const char *slot ) {
+ m_next->setText( s );
+ m_next->setEnabled( true );
+ m_next->disconnect( this );
+ connect( m_next, SIGNAL( clicked() ),
+ this, slot );
+ m_quit->setEnabled( true );
+}
+
+void App::disableNext() {
+ m_next->setText( i18n( "Next" ) );
+ m_next->setEnabled( false );
+ disconnect( m_next, SIGNAL( clicked() ), 0, 0 );
+}
+
+void App::disableButtons() {
+ disableNext();
+ m_quit->setEnabled( false );
+}
+
+void App::editSources() {
+ KProcess* softwarePropertiesProcess = new KProcess(this);
+ *softwarePropertiesProcess << "/usr/bin/software-properties-kde";
+ softwarePropertiesProcess->start();
+}
+
+void App::start() {
+ m_stack->raiseWidget( m_view );
+ m_quit->setText( i18n( "Forget Changes and Quit" ) );
+ disableNext();
+ setState( Select );
+ notifyPostChange( 0 );
+}
+
+void App::commit() {
+ kdDebug() << "App::commit" << endl;
+ setState( Commit );
+ disableButtons();
+ setHistoryEnabled( false );
+
+ aptFront::Manager m;
+ m.setProgressCallback( m_progress->callback() );
+ m.setUpdateInterval( 100000 );
+ try {
+ m_stack->raiseWidget( m_progress );
+ m.download();
+ m_stack->raiseWidget( m_commitProgress );
+ m.commit();
+ } catch ( exception::OperationCancelled ) {
+ return start();
+ } catch ( ... ) {
+ KMessageBox::sorry(
+ this, i18n( "There was an error commiting changes. "
+ "Possibly there was a problem downloading some "
+ "packages or the commit would break packages. " ),
+ i18n( "Could not commit changes" ) );
+ }
+
+ cache().addComponent( new component::Desktop() );
+ cache().component< component::Desktop >().setPolicy( new GroupPolicy() );
+ cache().component< component::Desktop >().loadDirectory(
+ INSTALLER_DATA "/desktop/" );
+ QTimer::singleShot( 500, m_view, SLOT( rebuild() ) );
+
+ m_stack->raiseWidget( m_bye );
+ m_quit->setText( i18n( "Quit" ) );
+ setNext( i18n( "Back to Program Selection" ), SLOT( start() ) );
+ // setNext( i18n( "Done: Quit" ), SLOT( close() ) );
+}
+
+#include "app.moc"
diff --git a/adept/installer/app.h b/adept/installer/app.h
new file mode 100644
index 0000000..02ce2e0
--- /dev/null
+++ b/adept/installer/app.h
@@ -0,0 +1,128 @@
+/* -*- C++ -*- */
+#ifndef TESTUI_APP_H
+#define TESTUI_APP_H
+
+#include <kmainwindow.h>
+#include <kparts/part.h>
+#include <kactionclasses.h>
+#include <apt-front/cache/observer.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <apt-front/cache/component/desktop.h>
+#include <adept/view.h>
+#include <adept/commitprogress.h>
+#include <adept/installerview.h>
+#include <adept/application.h>
+
+class QVBox;
+class QWidgetStack;
+class QSplitter;
+class KAction;
+class KPushButton;
+class KProcess;
+namespace adept {
+class AcqProgressWidget;
+}
+
+using namespace aptFront;
+using namespace adept;
+
+struct GroupPolicy : cache::component::Desktop::GroupPolicy {
+ virtual std::string groupForCategories( utils::Range< std::string > );
+};
+
+struct IconPolicy : GroupedDesktopSelector::IconPolicy {
+ virtual QString iconForGroup( QString );
+};
+
+class App : public KMainWindow, Application {
+ Q_OBJECT
+public:
+ enum State { Select, Preview, Inspect, Commit };
+ void setupActions();
+ ExtTerminalInterface *terminal();
+ App();
+
+ // check if the changes in cache are consistent with what is
+ // checked in the tree and we don't have any suspicious removals
+ // or other artifacts (broken packages)
+ bool consistent();
+
+protected slots:
+ void start();
+ void commit();
+ void inspect();
+
+ void delayed();
+
+ void undo() { Application::undo(); }
+ void redo() { Application::redo(); }
+ void checkpoint() { Application::checkpoint(); }
+
+ void setHistoryEnabled( bool );
+
+ void disableNext();
+ void disableButtons();
+ void setNext( QString str, const char *slot );
+ void togglePreview();
+ void editSources();
+
+ void request( cache::entity::Package, cache::component::State::Action );
+
+ bool confirmRequest( entity::Package, component::State::Action );
+ void requestOk() { m_currentRequestOk = true; }
+
+protected:
+ friend class WaitForLister;
+
+ void setState( State s ) { m_lastState = m_state; m_state = s; }
+
+ virtual void notifyPreRebuild( cache::component::Base * );
+ virtual void notifyPostChange( cache::component::Base * );
+ virtual void notifyPreChange( cache::component::Base * );
+
+ QWidgetStack *m_stack;
+ QVBox *m_all;
+ QHBox *m_buttons;
+ QLabel *m_bye, *m_loading;
+ KPushButton *m_next, *m_quit;
+ KPushButton *m_editSources, *m_reviewChanges;
+
+ // stacked widgets
+ adept::AcqProgressWidget *m_progress;
+ adept::CommitProgress *m_commitProgress;
+ // adept::GroupedDesktopSelector *m_desktopSelector;
+ adept::InstallerView *m_view;
+ adept::Browser *m_preview;
+
+ // other stuff
+ std::vector<KAction *> m_actions;
+ QMap< QString, QString > m_icons;
+ KAction *m_undo, *m_redo;
+ KToggleAction *m_previewAction;
+ State m_state, m_lastState;
+
+ typedef std::list< component::State::Request > RequestList;
+ RequestList m_requests;
+
+ // XXX hack
+ bool m_currentRequestOk;
+};
+
+class WaitForLister : public QObject {
+ Q_OBJECT
+public:
+ WaitForLister( App *a, const char *s )
+ : app( a ), slot( s )
+ {
+ waiting();
+ }
+protected slots:
+ void waiting();
+protected:
+ App *app;
+ const char *slot;
+
+};
+
+#endif
diff --git a/adept/installer/hi128-app-adept_installer.png b/adept/installer/hi128-app-adept_installer.png
new file mode 100644
index 0000000..98f792b
--- /dev/null
+++ b/adept/installer/hi128-app-adept_installer.png
Binary files differ
diff --git a/adept/installer/hi16-app-adept_installer.png b/adept/installer/hi16-app-adept_installer.png
new file mode 100644
index 0000000..7426896
--- /dev/null
+++ b/adept/installer/hi16-app-adept_installer.png
Binary files differ
diff --git a/adept/installer/hi22-app-adept_installer.png b/adept/installer/hi22-app-adept_installer.png
new file mode 100644
index 0000000..d0f221f
--- /dev/null
+++ b/adept/installer/hi22-app-adept_installer.png
Binary files differ
diff --git a/adept/installer/hi32-app-adept_installer.png b/adept/installer/hi32-app-adept_installer.png
new file mode 100644
index 0000000..3f79aa4
--- /dev/null
+++ b/adept/installer/hi32-app-adept_installer.png
Binary files differ
diff --git a/adept/installer/hi48-app-adept_installer.png b/adept/installer/hi48-app-adept_installer.png
new file mode 100644
index 0000000..33f9459
--- /dev/null
+++ b/adept/installer/hi48-app-adept_installer.png
Binary files differ
diff --git a/adept/installer/hi64-app-adept_installer.png b/adept/installer/hi64-app-adept_installer.png
new file mode 100644
index 0000000..e2a2666
--- /dev/null
+++ b/adept/installer/hi64-app-adept_installer.png
Binary files differ
diff --git a/adept/installer/hisc-app-adept_installer.svgz b/adept/installer/hisc-app-adept_installer.svgz
new file mode 100644
index 0000000..00cfa1c
--- /dev/null
+++ b/adept/installer/hisc-app-adept_installer.svgz
Binary files differ
diff --git a/adept/installer/main.cpp b/adept/installer/main.cpp
new file mode 100644
index 0000000..079cb19
--- /dev/null
+++ b/adept/installer/main.cpp
@@ -0,0 +1,51 @@
+// KDE includes
+
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <kuniqueapplication.h>
+
+#include "app.h"
+
+static KCmdLineOptions options[] =
+{
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+
+ KLocale::setMainCatalogue("adept_installer");
+
+ putenv( "QT_IM_MODULE=xim" );
+ QString description = i18n("Adept Installer");
+
+ KAboutData aboutData( "adept_installer",
+ I18N_NOOP("Adept Installer"),
+ "2.1 Cruiser",
+ description.latin1(),
+ KAboutData::License_BSD,
+ I18N_NOOP("(c) 2005, 2006 Peter Rockai"),
+ 0,
+ "http://web.mornfall.net/adept.html");
+
+ aboutData.addAuthor ( "Peter Rockai",
+ I18N_NOOP("developer"),
+ "me at mornfall dot net",
+ "http://web.mornfall.net");
+
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+
+ KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
+
+ KGlobal::locale()->insertCatalogue(QString::fromUtf8("libept"));
+
+ App *ta = new App();
+
+ app.setMainWidget(ta);
+ ta->show();
+
+ return app.exec();
+}
diff --git a/adept/kubuntu_upgrader/Makefile.am b/adept/kubuntu_upgrader/Makefile.am
new file mode 100644
index 0000000..63e9569
--- /dev/null
+++ b/adept/kubuntu_upgrader/Makefile.am
@@ -0,0 +1,11 @@
+METASOURCES = AUTO
+noinst_LTLIBRARIES = libkubuntuupgradewizard.la
+libkubuntuupgradewizard_la_SOURCES = \
+ upgradewizardbase.ui errordialogbase.ui \
+ errordialog.cpp upgradewizard.cpp
+libkubuntuupgradewizard_la_LIBADD = $(LIB_KIO) $(LIBKDE_UI)
+libkubuntuupgradewizard_la_LDFLAGS = -L/usr/lib/debug $(all_libraries)
+
+INCLUDES = $(all_includes)
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII
+
diff --git a/adept/kubuntu_upgrader/errordialog.cpp b/adept/kubuntu_upgrader/errordialog.cpp
new file mode 100644
index 0000000..0a1feb0
--- /dev/null
+++ b/adept/kubuntu_upgrader/errordialog.cpp
@@ -0,0 +1,48 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Vladimir Stefan *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <qlabel.h>
+
+#include "errordialog.h"
+
+ErrorDialog::ErrorDialog(QWidget* parent, QString error_text, const char* name, bool modal, WFlags fl )
+ : ErrorDialogDlg(parent,name, modal,fl)
+{
+ errorLabel->setText( error_text );
+}
+
+ErrorDialog::~ErrorDialog()
+{}
+
+/*$SPECIALIZATION$*/
+void ErrorDialog::reject()
+{
+ QDialog::reject();
+}
+
+void ErrorDialog::accept()
+{
+ QDialog::accept();
+}
+
+
+
+#include "errordialog.moc"
+
diff --git a/adept/kubuntu_upgrader/errordialog.h b/adept/kubuntu_upgrader/errordialog.h
new file mode 100644
index 0000000..cdb7d14
--- /dev/null
+++ b/adept/kubuntu_upgrader/errordialog.h
@@ -0,0 +1,51 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Vladimir Stefan *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef ERRORDIALOG_H
+#define ERRORDIALOG_H
+
+#include "errordialogbase.h"
+
+class QString;
+
+class ErrorDialog : public ErrorDialogDlg
+{
+ Q_OBJECT
+
+public:
+ ErrorDialog(QWidget* parent = 0, QString error_text = QString::null, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~ErrorDialog();
+ /*$PUBLIC_FUNCTIONS$*/
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void reject();
+ virtual void accept();
+
+};
+
+#endif
+
diff --git a/adept/kubuntu_upgrader/errordialogbase.ui b/adept/kubuntu_upgrader/errordialogbase.ui
new file mode 100644
index 0000000..21af975
--- /dev/null
+++ b/adept/kubuntu_upgrader/errordialogbase.ui
@@ -0,0 +1,67 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>ErrorDialogDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>errorform</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>222</width>
+ <height>163</height>
+ </rect>
+ </property>
+ <property name="cursor">
+ <cursor>0</cursor>
+ </property>
+ <property name="caption">
+ <string>Error!</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>errorLabel</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="text">
+ <string>&lt;p align="center"&gt;&lt;/p&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>exitButton</cstring>
+ </property>
+ <property name="text">
+ <string>E&amp;xit</string>
+ </property>
+ <property name="accel">
+ <string>Alt+X</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="0">
+ <property name="name">
+ <cstring>retryButton</cstring>
+ </property>
+ <property name="text">
+ <string>Retr&amp;y</string>
+ </property>
+ <property name="accel">
+ <string>Alt+Y</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/kubuntu_upgrader/upgradewizard.cpp b/adept/kubuntu_upgrader/upgradewizard.cpp
new file mode 100644
index 0000000..9b81c4d
--- /dev/null
+++ b/adept/kubuntu_upgrader/upgradewizard.cpp
@@ -0,0 +1,545 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Vladimir Stefan *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include <kurl.h>
+#include <kio/netaccess.h>
+#include <kio/job.h>
+#include <kprocess.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kconfig.h>
+#include <ktar.h>
+#include <kdebug.h>
+
+#include <qwizard.h>
+#include <qwidget.h>
+#include <qpushbutton.h>
+#include <qtextstream.h>
+#include <qfile.h>
+#include <qtextbrowser.h>
+#include <qmime.h>
+#include <qstring.h>
+#include <qdialog.h>
+#include <qlabel.h>
+#include <qdatetime.h>
+#include <qtextstream.h>
+#include <qptrlist.h>
+#include <qdir.h>
+
+#include <iostream>
+#include <cstdlib>
+
+#include "upgradewizard.h"
+#include "errordialog.h"
+
+DistroEntry::DistroEntry(QString *d_field)
+{
+ dist_field = d_field;
+ supported_field = false;
+ name_field = NULL;
+ version_field = NULL;
+ date_field = NULL;
+ desc_field = NULL;
+ release_file_url = NULL;
+ release_notes_url = NULL;
+ upgrade_tool_url = NULL;
+ upgrade_tool_sig_url = NULL;
+}
+
+DistroEntry::~DistroEntry() {
+ free( dist_field );
+ free( name_field );
+ free( version_field );
+ free( date_field );
+ free( desc_field );
+ free( release_file_url );
+ free( release_notes_url );
+ free( upgrade_tool_url );
+ free( upgrade_tool_sig_url );
+}
+
+UpgradeWizard::UpgradeWizard(QWidget* parent, const char* name, bool modal, WFlags fl)
+ : UpgradeWizardDlg(parent,name, modal,fl)
+{
+ err_dlg = NULL;
+
+ for(int i=0; i<pageCount(); i++) {
+ QWidget* p = page( i );
+ setHelpEnabled( p, false );
+ }
+
+ QWidget *p = page( pageCount()-1 );
+ setBackEnabled( p, false );
+ textLabel3->hide();
+
+ p = page( pageCount()-2 );
+ setNextEnabled( p, false );
+
+ QPushButton *fin = finishButton();
+ connect(fin, SIGNAL( clicked() ), this, SLOT( launchDistUpdater() ) );
+
+}
+
+UpgradeWizard::~UpgradeWizard()
+{}
+
+// ** FUNCTIONS ** //
+
+void UpgradeWizard::removeDirectory(QString directoryName)
+{
+ // recursively delete a directory structure
+ // Mar-22-2007 Billy Pollifrone
+ QDir dir(directoryName);
+ QStringList files(dir.entryList());
+ for (QStringList::Iterator i=files.begin(); i!=files.end(); i++) {
+ QString fileName(*(i));
+ if (fileName == QString(".") || fileName == QString("..")) continue;
+ QFileInfo fileInfo(directoryName, fileName);
+ if (fileInfo.isDir()) {
+ removeDirectory(fileInfo.absFilePath());
+ } else {
+ QFile file(fileInfo.absFilePath());
+ file.remove();
+ }
+ }
+ dir.rmdir(directoryName);
+}
+
+void UpgradeWizard::removeOldUpgradeTool()
+{
+ // remove old files from dist-upgrade when we check if there is a knew one since
+ // adept kills us before we have a chance on the same run.
+ // Mar-22-2007 Billy Pollifrone
+ QString directoryName("/tmp/kde-root");
+ QString directoryFilter("adept_*.tmp*");
+ QDir dir(directoryName, directoryFilter);
+ QStringList files(dir.entryList());
+ for (QStringList::Iterator i=files.begin(); i!=files.end(); i++) {
+ QString fileName(*(i));
+ QFileInfo fileInfo(directoryName, fileName);
+ if (fileInfo.isDir()) {
+ removeDirectory(fileInfo.absFilePath());
+ } else {
+ QFile file(fileInfo.absFilePath());
+ file.remove();
+ }
+ }
+}
+
+bool UpgradeWizard::checkForDistUpgrade(bool skipIntrepid, QString url, bool developmentVersion) {
+ removeOldUpgradeTool();
+ std::cout << "UpgradeWizard::checkForDistUpgrade" << std::endl;
+
+ if (url == QString("")) {
+ url = QString("http://changelogs.ubuntu.com/meta-release");
+ }
+
+ bool upgrade_available = false;
+ KConfig* config = KGlobal::config();
+ config->setGroup("General Settings");
+ QString upgradeURL;
+ upgradeURL = config->readEntry(QString("upgradeURL"), url);
+ KURL metafile_url( upgradeURL );
+
+ QString temp_file_location;
+
+ if( KIO::NetAccess::download( metafile_url, temp_file_location, NULL ) ) {
+ QFile temp_file( temp_file_location );
+ temp_file.open( IO_ReadOnly );
+ QTextIStream *temp_file_stream = new QTextIStream( temp_file.readAll() );
+
+ // need to spawn a process to call lsb_release -c -s
+ // to find out which version of kubuntu we are using
+ KProcess *proc = new KProcess;
+ *proc << "lsb_release";
+ *proc << "-c" << "-s";
+ connect(proc, SIGNAL( receivedStdout( KProcess*, char *, int ) ),
+ this, SLOT( receiveDistroName( KProcess*, char *, int ) ) );
+ proc->start( KProcess::Block, KProcess::Stdout );
+
+ current_dist = 0;
+ QPtrList<DistroEntry> *entry_list = parseMetafile( temp_file_stream, distro_name );
+
+ upgrade_dist = entry_list->last();
+ DistroEntry* entry;
+
+ // if current_dist hasn't been set in parseMetafile then we can't upgrade, since we don't know what we are
+ if (current_dist == 0) {
+ return false;
+ }
+
+ // find the distro version one newer than our current one
+ for( entry = entry_list->first(); entry; entry = entry_list->next() ) {
+ //std::cout << "current date: " << (*current_dist->date_field).toString().latin1() << std::endl;
+ //std::cout << "entry date: " << (*entry->date_field).toString().latin1() << std::endl;
+ if( *entry->date_field > *current_dist->date_field /*&& entry->supported_field == true*/ ) {
+ if (!skipIntrepid || QString::compare(*entry->dist_field, QString("intrepid")) != 0) {
+ upgrade_dist = entry;
+ upgrade_available = true;
+ //std::cout << "entry date: " << (*entry->name_field).latin1() << std::endl;
+ break;
+ }
+ }
+ }
+ // if there isn't one newer, find the current one
+ if (!upgrade_available) {
+ for( entry = entry_list->first(); entry; entry = entry_list->next() ) {
+ //std::cout << "current date: " << (*current_dist->date_field).toString().latin1() << std::endl;
+ //std::cout << "entry date: " << (*entry->date_field).toString().latin1() << std::endl;
+ if( *entry->date_field >= *current_dist->date_field && developmentVersion /*&& entry->supported_field == true*/ ) {
+ upgrade_dist = entry;
+ upgrade_available = true;
+ //std::cout << "entry date: " << (*entry->name_field).latin1() << std::endl;
+ break;
+ }
+ }
+ }
+
+ // DistroEntry *entry = NULL;
+ /*Debugging
+ for( entry = entry_list->first(); entry; entry = entry_list->next() ) {
+ std::cout << "current date: " << (*current_dist->date_field).toString().latin1() << std::endl;
+ std::cout << "entry date: " << (*entry->date_field).toString().latin1() << std::endl;
+
+ std::cout << "Dist: " << *entry->dist_field->latin1() << std::endl;
+ std::cout << "Name: " << *entry->name_field->latin1() << std::endl;
+ std::cout << "Version: " << *entry->version_field->latin1() << std::endl;
+ std::cout << "Date: " << entry->date_field->toString( QString( "ddd, dd MMM yyyy hh:mm:ss UTC" ) ).latin1() << std::endl;
+ //std::cout << "Supported: " << entry->supported_field.latin1() << std::endl;
+ std::cout << "Description: " << *entry->desc_field->latin1() << std::endl;
+ std::cout << "Release-File: " << entry->release_file_url->prettyURL().latin1() << std::endl;
+ if( entry->release_notes_url != NULL ) {
+ std::cout << "ReleaseNotes: " << entry->release_notes_url->prettyURL().latin1() << std::endl;
+ }
+ if( entry->upgrade_tool_url != NULL ) {
+ std::cout << "UpgradeTool: " << entry->upgrade_tool_url->prettyURL().latin1() << std::endl;
+ }
+ if( entry->upgrade_tool_sig_url != NULL ) {
+ std::cout << "UpgradeToolSignature: " << entry->upgrade_tool_sig_url->prettyURL().latin1() << std::endl;
+ }
+
+ std::cout << std::endl;
+ }
+ */
+ temp_file.close();
+ KIO::NetAccess::removeTempFile( temp_file_location );
+ }
+
+ return upgrade_available;
+}
+
+QPtrList<DistroEntry> *UpgradeWizard::parseMetafile( QTextIStream *text_stream,
+ QString my_distro_name )
+{
+ QPtrList<DistroEntry> *metafile_entries = new QPtrList<DistroEntry>();
+ DistroEntry *entry = NULL;
+
+ while( !text_stream->atEnd() ) {
+
+ QStringList line = QStringList::split( QChar(':'), text_stream->readLine() );
+
+ if( !line.isEmpty() ) {
+ QString first = line.first();
+ if( QString::compare( first, QString( "Dist" ) ) == 0 ) {
+ // we've encountered a new entry:
+ // first save the old one
+ if( entry != NULL ) {
+ // if this entry is for the current version we are running,
+ // then add it at the start of the list
+ if( QString::compare( *entry->dist_field, my_distro_name ) == 0) {
+ current_dist = entry;
+ metafile_entries->prepend( entry );
+ } else {
+ metafile_entries->append( entry );
+ }
+ }
+ // now create a new entry
+ line.pop_front();
+ entry = new DistroEntry( new QString( line.first().stripWhiteSpace() ) );
+ }
+
+ else if( QString::compare( first, QString( "Name" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ entry->name_field = new QString( line.first().stripWhiteSpace() );
+ }
+ }
+
+ else if( QString::compare( first, QString( "Version" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ entry->version_field = new QString( line.first().stripWhiteSpace() );
+ }
+ }
+
+ else if( QString::compare( first, QString( "Date" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ QString temp = line.join( QChar(' ') ).stripWhiteSpace();
+ // get the day(verbal)
+ line = QStringList::split( QChar(' '), temp );
+ QString day_verbal = line.first();
+ day_verbal.truncate(3);
+ // get the date
+ line.pop_front();
+ QString date = line.first();
+ // get the month(verbal)
+ line.pop_front();
+ QString month_verbal = line.first();
+ // get the year
+ line.pop_front();
+ QString year = line.first();
+ // get the time
+ line.pop_front();
+ QString time = line.first() + ":";
+ line.pop_front();
+ time += line.first() + ":";
+ line.pop_front();
+ time += line.first();
+
+ QDate the_date( QDate::fromString( day_verbal + " " + month_verbal + " " + date + " " + year) );
+ QTime the_time( QTime::fromString( time ) );
+
+ entry->date_field = new QDateTime( the_date, the_time );
+ }
+ }
+
+ else if( QString::compare( first, QString( "Supported" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ entry->supported_field = line.first().stripWhiteSpace().toInt();
+ }
+ }
+
+ else if( QString::compare( first, QString( "Description" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ entry->desc_field = new QString( line.first().stripWhiteSpace() );
+ }
+ }
+
+ else if( QString::compare( first, QString( "Release-File" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ QString http_part = line.first().stripWhiteSpace() + ":";
+ line.pop_front();
+ QString complete_url = http_part + line.first().stripWhiteSpace();
+ entry->release_file_url = new KURL( complete_url );
+ }
+ }
+
+ else if( QString::compare( first, QString( "ReleaseNotes" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ QString http_part = line.first().stripWhiteSpace() + ":";
+ line.pop_front();
+ QString complete_url = http_part + line.first().stripWhiteSpace();
+ entry->release_notes_url = new KURL( complete_url );
+ }
+ }
+
+ else if( QString::compare( first, QString( "UpgradeTool" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ QString http_part = line.first().stripWhiteSpace() + ":";
+ line.pop_front();
+ QString complete_url = http_part + line.first().stripWhiteSpace();
+ entry->upgrade_tool_url = new KURL( complete_url );
+ }
+ }
+
+ else if( QString::compare( first, QString( "UpgradeToolSignature" ) ) == 0 ) {
+ if( entry != NULL ) {
+ line.pop_front();
+ QString http_part = line.first().stripWhiteSpace() + ":";
+ line.pop_front();
+ QString complete_url = http_part + line.first().stripWhiteSpace();
+ entry->upgrade_tool_sig_url = new KURL( complete_url );
+ }
+ }
+ }
+
+
+ }
+ // add the last one
+ // if this entry is for the current version we are running,
+ // then add it at the start of the list
+ if( QString::compare( *entry->dist_field, my_distro_name ) == 0 ) {
+ current_dist = entry;
+ metafile_entries->prepend( entry );
+ } else {
+ metafile_entries->append( entry );
+ }
+
+ return metafile_entries;
+}
+
+// ** SLOTS ** //
+
+void UpgradeWizard::receiveDistroName( KProcess*, char *buffer, int buflen ) {
+ distro_name = QString::fromAscii( buffer, buflen-1 );
+}
+
+void UpgradeWizard::launchDistUpdater() {
+ QDir dir;
+ dir.mkdir(upgrade_tool_location+"-extract");
+
+ KTar tarFile(upgrade_tool_location, QString("application/x-gzip"));
+ tarFile.open(IO_ReadOnly);
+ //KArchiveDirectory* tarDirectory = tarFile.directory();
+ //tarDirectory->copyTo(upgrade_tool_location+"-extract");
+ tarFile.directory()->copyTo(upgrade_tool_location+"-extract", true);
+
+ KProcess *proc = new KProcess;
+ proc->setWorkingDirectory(upgrade_tool_location+"-extract");
+ *proc << "python" << upgrade_tool_location+"-extract/dist-upgrade.py";
+ *proc << "--frontend" << "DistUpgradeViewKDE";
+ proc->start( KProcess::DontCare );
+
+ // don't kill adept, it stops the app from running
+ // parentWidget()->close();
+}
+
+void UpgradeWizard::fetchReleaseAnnounce() {
+ QString temp_file_location;
+ bool result = false;
+
+ if (upgrade_dist->release_notes_url == NULL) {
+ kdDebug() << "No release notes URL, so I'm skipping the fetch." << endl;
+ } else {
+ KURL my_url(*upgrade_dist->release_notes_url);
+ result = KIO::NetAccess::download(my_url, temp_file_location, NULL );
+ }
+
+ if( result ) {
+ emit killErrorDialog();
+ err_dlg = NULL;
+ textBrowser1->mimeSourceFactory()->setExtensionType( QString("tmp"), "text/plain" );
+ textBrowser1->setSource( temp_file_location );
+ QWidget *p = page( pageCount()-2 );
+ setNextEnabled( p, true );
+ } else {
+ if(err_dlg == NULL ) {
+ err_dlg = new ErrorDialog( this, i18n( "Could not download the release announcement. Please check that your Internet connection is active." ), 0, 1 );
+ connect( err_dlg->retryButton, SIGNAL( clicked() ), this, SLOT( fetchReleaseAnnounce() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), err_dlg, SLOT( close() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), this, SLOT( close() ) );
+ connect( this, SIGNAL( killErrorDialog() ), err_dlg, SLOT( close() ) );
+ err_dlg->show();
+ }
+ }
+}
+
+void UpgradeWizard::fetchUpgradeTool() {
+ // download the upgrade tool
+ KURL my_url(*upgrade_dist->upgrade_tool_url);
+ bool result = KIO::NetAccess::download( my_url, upgrade_tool_location, NULL );
+ // uncomment this to use for testing if you don't want to d/l the file every time
+ //bool result = KIO::NetAccess::download( "/home/vladi/edgy.tar.gz", upgrade_tool_location, NULL );
+ if( result ) {
+ emit killErrorDialog();
+ err_dlg = NULL;
+ fetchUpgradeToolSig();
+ } else {
+ if(err_dlg == NULL ) {
+ err_dlg = new ErrorDialog( this, i18n( "Could not download the upgrade tool. Please check that your Internet connection is active." ), 0, 1 );
+ connect( err_dlg->retryButton, SIGNAL( clicked() ), this, SLOT( fetchUpgradeTool() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), err_dlg, SLOT( close() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), this, SLOT( close() ) );
+ connect( this, SIGNAL( killErrorDialog() ), err_dlg, SLOT( close() ) );
+ err_dlg->show();
+ }
+ }
+}
+
+void UpgradeWizard::fetchUpgradeToolSig() {
+ bool result = KIO::NetAccess::download( *upgrade_dist->upgrade_tool_sig_url, upgrade_tool_sig_location, NULL );
+ if( result) {
+ emit killErrorDialog();
+ err_dlg = NULL;
+ verifyUpgradeTool();
+ } else {
+ if(err_dlg == NULL ) {
+ err_dlg = new ErrorDialog( this, i18n( "Could not download the upgrade tool's GPG signature. Please check that your Internet connection is active." ), 0, 1 );
+ connect( err_dlg->retryButton, SIGNAL( clicked() ), this, SLOT( fetchUpgradeToolSig() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), err_dlg, SLOT( close() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), this, SLOT( close() ) );
+ connect( this, SIGNAL( killErrorDialog() ), err_dlg, SLOT( close() ) );
+ err_dlg->show();
+ }
+ }
+}
+
+void UpgradeWizard::verifyUpgradeTool() {
+ // spawn a process to call gpg and verify the signature
+ KProcess *proc = new KProcess;
+ *proc << "gpg";
+ *proc << "--keyring" << "/etc/apt/trusted.gpg" << "--verify" << upgrade_tool_sig_location << upgrade_tool_location;
+
+ proc->start( KProcess::Block, KProcess::Stdout );
+ // signature verification successful if gpg exist status = 0
+ if( proc->exitStatus() == 0 ) {
+ emit killErrorDialog();
+ err_dlg = NULL;
+ // remove the signature file
+ KIO::file_delete( KURL( upgrade_tool_sig_location ), false );
+ QWidget *p = page( pageCount()-1 );
+ setFinishEnabled( p, true );
+ textLabel3->show();
+ } else {
+ if(err_dlg == NULL ) {
+ err_dlg = new ErrorDialog( this, i18n( "Could not verify the integrity of the upgrader application. This program will now exit." ), 0, 1 );
+ //connect( err_dlg->retryButton, SIGNAL( clicked() ), this, SLOT( verify_upgrade_tool() ) );
+ err_dlg->retryButton->setEnabled( false );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), err_dlg, SLOT( close() ) );
+ connect( err_dlg->exitButton, SIGNAL( clicked() ), this, SLOT( close() ) );
+ connect( this, SIGNAL( killErrorDialog() ), err_dlg, SLOT( close() ) );
+ err_dlg->show();
+ }
+ }
+}
+
+void UpgradeWizard::back()
+{
+ QWizard::back();
+}
+
+void UpgradeWizard::next()
+{
+ QWizard::next();
+
+ // page 1: d/l release announcement
+ // and display it on page1
+ if( indexOf( currentPage() ) == 1 ) {
+ fetchReleaseAnnounce();
+ }
+ else if( indexOf( currentPage() ) == 2 ) {
+ // remove the temp file used to store the release announcement
+ KIO::file_delete( KURL( textBrowser1->source() ), false );
+
+ // download the tool, its signature, and verify
+ fetchUpgradeTool();
+ }
+}
+
+
+
+
+#include "upgradewizard.moc"
+
diff --git a/adept/kubuntu_upgrader/upgradewizard.h b/adept/kubuntu_upgrader/upgradewizard.h
new file mode 100644
index 0000000..21b3f3c
--- /dev/null
+++ b/adept/kubuntu_upgrader/upgradewizard.h
@@ -0,0 +1,96 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Vladimir Stefan *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef UPGRADEWIZARD_H
+#define UPGRADEWIZARD_H
+
+#include <adept/kubuntu_upgrader/upgradewizardbase.h>
+
+class QString;
+class QTextIStream;
+class QDateTime;
+class KProcess;
+class KURL;
+class ErrorDialog;
+
+// ** Represents an entry in the metafile ** //
+class DistroEntry {
+ public:
+ DistroEntry(QString *d_field);
+ ~DistroEntry();
+ QString *dist_field;
+ QString *name_field;
+ QString *version_field;
+ QDateTime *date_field;
+ bool supported_field;
+ QString *desc_field;
+ KURL *release_file_url;
+ KURL *release_notes_url;
+ KURL *upgrade_tool_url;
+ KURL *upgrade_tool_sig_url;
+};
+
+class UpgradeWizard : public UpgradeWizardDlg
+{
+ Q_OBJECT
+
+public:
+ UpgradeWizard(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~UpgradeWizard();
+
+ /*$PUBLIC_FUNCTIONS$*/
+ bool checkForDistUpgrade(bool skipIntrepid=true, QString url=QString(""), bool developmentVersion = false);
+ QPtrList<DistroEntry> *parseMetafile( QTextIStream *text_stream,
+ QString my_distro_name );
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ void receiveDistroName( KProcess* p, char *buffer, int buflen );
+ void launchDistUpdater();
+ void fetchReleaseAnnounce();
+ void fetchUpgradeTool();
+ void fetchUpgradeToolSig();
+ void verifyUpgradeTool();
+
+
+ signals:
+ void killErrorDialog();
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ void removeOldUpgradeTool();
+ void removeDirectory(QString directoryName);
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void back();
+ virtual void next();
+
+private:
+ QString upgrade_tool_location;
+ QString upgrade_tool_sig_location;
+ QString distro_name;
+ DistroEntry* upgrade_dist;
+ DistroEntry* current_dist;
+ ErrorDialog* err_dlg;
+};
+
+#endif
+
diff --git a/adept/kubuntu_upgrader/upgradewizardbase.ui b/adept/kubuntu_upgrader/upgradewizardbase.ui
new file mode 100644
index 0000000..c2d1eee
--- /dev/null
+++ b/adept/kubuntu_upgrader/upgradewizardbase.ui
@@ -0,0 +1,143 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>UpgradeWizardDlg</class>
+<author>Vladimir Stefan</author>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>upgrade_wizard</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>584</width>
+ <height>446</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Upgrade Wizard</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Upgrade Wizard</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>A new distribution version is available! Click next if you wish to upgrade now.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>271</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Upgrade Wizard</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Release Announcement:</string>
+ </property>
+ </widget>
+ <widget class="QTextBrowser" row="1" column="0">
+ <property name="name">
+ <cstring>textBrowser1</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Upgrade Wizard</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Downloading and verifying the upgrade tool ...</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Ready to upgrade! Click finish to close the Adept Package Manager and launch the distribution upgrade tool.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>231</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/libadept/Makefile.am b/adept/libadept/Makefile.am
new file mode 100644
index 0000000..810f516
--- /dev/null
+++ b/adept/libadept/Makefile.am
@@ -0,0 +1,33 @@
+noinst_LTLIBRARIES = libadept.la
+libadept_la_SOURCES = \
+ acqprogresswidgetui.ui acqprogress.cpp \
+ tagchooser.cpp filtersidebarui.ui filtersidebar.cpp \
+ application.cpp \
+ tagfilterui.ui tagfilter.cpp taglist.cpp \
+ packageinfoui.ui packageinfo.cpp \
+ commitprogressui.ui commitprogress.cpp \
+ progress.cpp \
+ sourceseditorui.ui sourceseditor.cpp \
+ acqprogresswidget.cpp dpkgpm.cpp \
+ dpkgpm-gui.cpp \
+ extendablelist.cpp \
+ desktopentryui.ui desktoplist.cpp \
+ groupeddesktopselector.cpp \
+ packagedetailsui.ui packagedetails.cpp view.cpp \
+ listerextenderui.ui lister.cpp filterlist.cpp \
+ filterwidget.cpp \
+ quickfilterui.ui quickfilter.cpp \
+ statefilterui.ui statefilter.cpp \
+ easytagfilterui.ui easytagfilter.cpp \
+ actor.h threadutils.cpp \
+ installerviewui.ui installerview.cpp
+libadept_la_LDFLAGS = -L/usr/lib/debug $(all_libraries)
+libadept_la_LIBADD = -lapt-front -ltagcoll
+
+INCLUDES = -I$(srcdir)/.. -I.. $(all_includes) $(LIBTAGCOLL2_CFLAGS) $(LIBAPT_FRONT_CFLAGS)
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII -DDEFAULT_KONSOLE_HIDDEN=true
+METASOURCES = AUTO
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/libadept.pot
diff --git a/adept/libadept/acqprogress.cpp b/adept/libadept/acqprogress.cpp
new file mode 100644
index 0000000..4b0643f
--- /dev/null
+++ b/adept/libadept/acqprogress.cpp
@@ -0,0 +1,295 @@
+// -*- C++ -*-
+
+#include <qprogressbar.h>
+#include <klistview.h>
+#include <kapplication.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qstyle.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "acqprogress.h"
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire-worker.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/configuration.h>
+
+#include <adept/utils.h>
+
+#include <stdio.h>
+#include <signal.h>
+#include <iostream>
+
+#define _(a...) (a) // XXX
+
+using namespace std;
+
+namespace adept {
+
+AcqStatus::Item::Item (KListView *parent, pkgAcquire::ItemDesc &item, bool hit)
+: KListViewItem( parent )
+{
+ m_pbcol = 0;
+ m_prog = new ItemProgress( 0, 0 );
+ m_prog->setStatus( "waiting" );
+ m_prog->setTotalSteps( 100 );
+ m_item = item;
+ m_id = m_item.Owner->ID;
+ /* if (item.Owner->FileSize > 0)
+ setText( 1, SizeToStr( item.Owner->FileSize ).c_str() + QString( "B" ) ); */
+ setText( 1, u8( item.Description ) );
+ // cerr << "create: id = " << item . Owner -> ID << ", myId = " << m_item . Owner -> ID << endl;
+ if (hit) {
+ m_prog->setStatus( "hit" );
+ } else
+ m_prog->setStatus( "waiting" );
+ // QString (SizeToStr (Itm.Owner -> FileSize) . c_str ()) + QString ("B"),
+ // /* QString (Itm . Owner -> ID) + */ QString (Itm.Description . c_str ()));
+}
+
+AcqStatus::Item::~Item ()
+{
+ delete m_prog;
+}
+
+int AcqStatus::Item::compare (QListViewItem *i, int /*col*/, bool /*ascend*/) const
+{
+ int id1 = m_id;
+ int id2 = ((Item *) i) -> m_id;
+ return (id2 >= id1) - (id2 <= id1);
+}
+
+void AcqStatus::Item::pulse (pkgAcquire::Worker *w)
+{
+ if (w) {
+ if (w->TotalSize)
+ setStatus( "progress", long( double(
+ w -> CurrentSize * 100.0)
+ / double( w->TotalSize ) ) );
+ else
+ setStatus( "downloading", 0 );
+ }
+}
+
+void AcqStatus::Item::setStatus( const std::string &s, int i )
+{
+ m_prog->setStatus( s, i );
+}
+
+void AcqStatus::Item::paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ QColorGroup _cg( cg );
+ QColor c = _cg.text();
+
+ if ( column == m_pbcol ) {
+ const QRect bar = QRect( 0, 0, width, height() );
+ m_prog->resize( width, height() );
+ QPixmap pm = QPixmap::grabWidget( m_prog );
+ // p->fillRect( bar, listView()->paletteBackgroundColor() );
+ p->drawPixmap( bar.x(), bar.y(), pm );
+ } else {
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ _cg.setColor( QColorGroup::Text, c );
+ KListViewItem::paintCell( &_p, _cg, column, width, alignment );
+ p->drawPixmap( 0, 0, pm );
+ }
+}
+
+AcqStatus::Item *AcqStatus::findItem (pkgAcquire::ItemDesc &Itm)
+{
+ if ( Itm.Owner->ID < m_idOffset )
+ return 0;
+ if ( Itm.Owner->ID - m_idOffset >= m_items.size() )
+ return 0;
+ return m_items[ Itm.Owner->ID - m_idOffset ];
+}
+
+AcqStatus::AcqStatus(QWidget *parent, const char *name)
+ : KListView (parent, name), m_idOffset( 0 ), m_continue( true )
+{
+ // m_lastItem = 0;
+ addColumn( i18n( "Progress" ) );
+ addColumn( i18n( "Description" ) );
+ setSorting (1);
+ setColumnWidth (0, 220);
+ setColumnWidth (1, 300);
+ setResizeMode (LastColumn);
+ ID = 0;
+}
+
+void AcqStatus::Done (pkgAcquire::ItemDesc &Itm)
+{
+ Item *i = findItem (Itm);
+ if (i) {
+ i->setStatus( "done" );
+ }
+ emit statusChanged( StWaiting );
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+}
+
+void AcqStatus::clear()
+{
+ KListView::clear();
+ m_idOffset += m_items.size();
+ m_items.clear(); // got deleted by klistview already
+}
+
+void AcqStatus::Start()
+{
+ clear();
+ pkgAcquireStatus::Start();
+ kdDebug() << "AcqStatus::Start ()" << endl;
+ _config -> Set ("APT::Fetcher::Select-Timeout-Usec", 100000);
+ emit statusChanged( StWaiting );
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+}
+
+void AcqStatus::IMSHit(pkgAcquire::ItemDesc &Itm)
+{
+ Itm.Owner->ID = ID++;
+ Item *i = new Item( this, Itm, true );
+ // ensureItemVisible( i );
+ i->setStatus( "hit" );
+ m_items.push_back( i );
+
+ kdDebug() << "imshit called on ID = " << ID - 1 << " i = " << (void *)i << endl;
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+};
+
+void AcqStatus::Fetch(pkgAcquire::ItemDesc &Itm)
+ // an item started to download
+{
+ Update = true;
+ if (Itm.Owner->Complete == true) // XXX?
+ return;
+
+ Itm.Owner->ID = ID++;
+
+ Item *i = new Item( this, Itm );
+ // ensureItemVisible( i );
+ m_items.push_back( i );
+
+ kdDebug() << "fetch called on ID = " << ID - 1 << " i = " << (void *)i << endl;
+ emit statusChanged( StDownloading );
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+};
+
+void AcqStatus::Fail(pkgAcquire::ItemDesc &Itm)
+ // item failed to download
+{
+ kdDebug() << "fail, status = " << Itm.Owner->Status
+ << " ID = " << Itm.Owner->ID << endl;
+ // Ignore certain kinds of transient failures (bad code)
+ if (Itm.Owner->Status == pkgAcquire::Item::StatIdle) {
+ kdDebug() << "fail with StatIdle, ignoring" << endl;
+ return;
+ }
+
+ Item *i = findItem (Itm);
+ kdDebug() << "fail, i = " << i << endl;
+ if (! i)
+ return;
+ if (Itm.Owner->Status == pkgAcquire::Item::StatDone) {
+ i->setStatus( "ignored" );
+ } else {
+ i->setStatus( "error" );
+ }
+
+ triggerUpdate();
+ KApplication::kApplication()->processEvents();
+};
+
+void AcqStatus::Stop()
+{
+ pkgAcquireStatus::Stop();
+ emit statusChanged( StDone );
+ triggerUpdate ();
+ KApplication::kApplication()->processEvents();
+}
+
+bool AcqStatus::Pulse(pkgAcquire *Owner)
+{
+ pkgAcquireStatus::Pulse(Owner);
+
+ for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
+ I = Owner->WorkerStep(I)) {
+ if (I -> CurrentItem) {
+ Item *i = findItem (* (I -> CurrentItem));
+ if (i)
+ i -> pulse (I);
+ }
+ }
+
+ triggerUpdate ();
+ // repaint ();
+
+ if (TotalBytes > 0)
+ emit totalProgress(
+ long( double(
+ (CurrentBytes +
+ CurrentItems)*100.0)/double(TotalBytes+TotalItems) ) );
+ else
+ emit totalProgress (-1);
+ KApplication::kApplication () -> processEvents ();
+
+ if ( m_continue )
+ return true;
+
+ m_continue = true;
+ return false;
+}
+
+bool AcqStatus::MediaChange(string Media,string Drive)
+{
+ int res = KMessageBox::warningContinueCancel(
+ this, i18n( "Please insert the disc "
+ "labeled '%1' in the drive "
+ "'%2' and press enter" ).arg(
+ u8( Media ) ).arg( u8( Drive ) ),
+ i18n( "Media Change" ) );
+ if ( res == KMessageBox::Cancel )
+ cancel();
+ return true;
+}
+
+void AcqStatus::cancel()
+{
+ m_continue = false;
+}
+
+AcqStatusDialog::AcqStatusDialog (QWidget *parent, const char *name, bool modal)
+ : KDialogBase( parent, name, modal,
+ u8( "progress dialog (FIXME: waiting for headers, done)" ),
+ Ok|Cancel, Cancel, true )
+{
+ m_status = new AcqStatus (this, "");
+ setMainWidget( m_status.data() );
+ enableButton (Ok, false);
+ connect (m_status.data(), SIGNAL (statusChanged (AcqStatus::Status)),
+ this, SLOT (statusChange (AcqStatus::Status)));
+}
+
+void AcqStatusDialog::statusChange (AcqStatus::Status st)
+{
+ if (st == AcqStatus::StDownloading || st == AcqStatus::StWaiting) {
+ enableButton (Ok, false);
+ // XXX: cancel should be true; but needs implementation first
+ enableButton (Cancel, false);
+ } else if (st == AcqStatus::StDone) {
+ enableButton (Ok, true);
+ enableButton (Cancel, false);
+ }
+}
+
+}
+
+#include "acqprogress.moc"
diff --git a/adept/libadept/acqprogress.h b/adept/libadept/acqprogress.h
new file mode 100644
index 0000000..9510825
--- /dev/null
+++ b/adept/libadept/acqprogress.h
@@ -0,0 +1,127 @@
+/** -*- C++ -*-
+ @file adept/acqprogress.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#ifndef ACQPROGRESS_H
+#define ACQPROGRESS_H
+
+#include <klocale.h>
+#include <kdialogbase.h>
+#include <klistview.h>
+#include <kprogress.h>
+
+#include <vector>
+#include <apt-pkg/acquire.h>
+#include <apt-front/progresscallback.h>
+
+class AcqStatus;
+class QLabel;
+class QProgressBar;
+class QSpacer;
+class QGridLayout;
+
+namespace adept {
+
+class AcqStatus : public KListView, public aptFront::ProgressCallback
+{
+ Q_OBJECT
+protected:
+ class ItemProgress: public KProgress {
+ public:
+ ItemProgress( QWidget *parent, const char *name = 0 )
+ : KProgress( parent, name ), m_spin( 0 ) {}
+ void setStatus( const std::string &s,
+ int prog = 0 ) {
+ m_status = s;
+ if (m_status == "hit"
+ || m_status == "ignored"
+ || m_status == "done")
+ prog = 100;
+ if (m_status == "waiting") {
+ prog = 0;
+ }
+ if (m_status == "progress" && prog != 100)
+ setFormat( i18n( "downloading (%p%)" ) );
+ else if (prog == 100) // who cares about hit/ignore anyway?
+ setFormat( i18n( "done (%p%)" ) );
+ else
+ setFormat( m_status );
+ setProgress( prog );
+ }
+ protected:
+ std::string m_status;
+ int m_spin;
+ };
+ class Item : public KListViewItem {
+ protected:
+ ItemProgress *m_prog;
+ int m_pbcol;
+ unsigned long m_id;
+ pkgAcquire::ItemDesc m_item;
+
+ public:
+ Item (KListView *parent, pkgAcquire::ItemDesc &item,
+ bool hit = false);
+ virtual ~Item ();
+
+ virtual void paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment);
+
+ void setProgress (int);
+ virtual int compare (QListViewItem *i, int col, bool ascend) const;
+ virtual void pulse (pkgAcquire::Worker *);
+ void setStatus( const std::string &, int = 0 );
+
+ void setup() {
+ KListViewItem::setup();
+ setHeight( height() + 6 );
+ }
+ };
+ unsigned long ID;
+ unsigned long m_idOffset;
+ std::vector <Item *> m_items;
+ bool m_continue;
+
+public:
+
+ enum Status { StWaiting, StDownloading, StDone };
+
+ AcqStatus (QWidget *parent, const char *name);
+ Item *findItem (pkgAcquire::ItemDesc &Itm);
+
+ virtual bool MediaChange (string Media,string Drive);
+ virtual void IMSHit (pkgAcquire::ItemDesc &Itm);
+ virtual void Fetch (pkgAcquire::ItemDesc &Itm);
+ virtual void Done (pkgAcquire::ItemDesc &Itm);
+ virtual void Fail (pkgAcquire::ItemDesc &Itm);
+ virtual void Start ();
+ virtual void Stop ();
+ void addLine (QWidget *l, QWidget *s, QWidget *prog);
+ void clear();
+
+ bool Pulse (pkgAcquire *Owner);
+
+public slots:
+ void cancel();
+
+signals:
+ void statusChanged (AcqStatus::Status st);
+ void totalProgress (int percent);
+
+ //AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet);
+};
+
+class AcqStatusDialog : public KDialogBase
+{
+ Q_OBJECT
+protected:
+ aptFront::SharedPtr<AcqStatus> m_status;
+public:
+ aptFront::SharedPtr<aptFront::ProgressCallback> callback() { return m_status.data(); };
+ AcqStatusDialog (QWidget *parent, const char *name, bool modal);
+public slots:
+ void statusChange (AcqStatus::Status st);
+};
+}
+#endif
diff --git a/adept/libadept/acqprogresswidget.cpp b/adept/libadept/acqprogresswidget.cpp
new file mode 100644
index 0000000..dd02f03
--- /dev/null
+++ b/adept/libadept/acqprogresswidget.cpp
@@ -0,0 +1,53 @@
+#include <kprogress.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <klocale.h>
+#include "acqprogresswidget.h"
+#include "acqprogress.h"
+
+using namespace adept;
+
+AcqProgressWidget::AcqProgressWidget( QWidget *parent, const char *name )
+ : AcqProgressWidgetUi( parent, name )
+{
+ m_statusRef = m_status;
+ m_progress->setTotalSteps( 100 );
+ m_progress->setProgress( 0 );
+ connect(m_status, SIGNAL( totalProgress( int ) ),
+ this, SLOT( setProgress( int ) ) );
+ connect(m_status, SIGNAL( statusChanged( AcqStatus::Status ) ),
+ this, SLOT( statusChange( AcqStatus::Status ) ) );
+ connect( m_cancel, SIGNAL( clicked() ),
+ m_status, SLOT( cancel() ) );
+}
+
+void AcqProgressWidget::statusChange( AcqStatus::Status s )
+{
+ QString t;
+ switch (s) {
+ case AcqStatus::StWaiting:
+ t = i18n( "Waiting for headers (%p%)" );
+ break;
+ case AcqStatus::StDownloading:
+ t = i18n( "Downloading (%p%)" );
+ break;
+ case AcqStatus::StDone:
+ t = i18n( "Done (%p%)" );
+ m_progress->setProgress( 100 );
+ break;
+ }
+ m_progress->setFormat( t );
+}
+
+void AcqProgressWidget::setProgress( int p )
+{
+ if (p < 0) {
+ m_progress->setTotalSteps( 0 );
+ m_progress->setProgress( m_progress->progress() + 1 );
+ } else {
+ m_progress->setTotalSteps( 100 );
+ m_progress->setProgress( p );
+ }
+}
+
+#include "acqprogresswidget.moc"
diff --git a/adept/libadept/acqprogresswidget.h b/adept/libadept/acqprogresswidget.h
new file mode 100644
index 0000000..54359c7
--- /dev/null
+++ b/adept/libadept/acqprogresswidget.h
@@ -0,0 +1,30 @@
+/** -*- C++ -*-
+ @file adept/acqprogresswidget.h
+ @author Peter Rockai <[email protected]>
+ @todo Close button!
+*/
+
+#ifndef PROGRESSWIDGET_H
+# define PROGRESSWIDGET_H
+
+#include <adept/acqprogresswidgetui.h>
+#include <adept/acqprogress.h>
+
+namespace adept {
+
+class AcqProgressWidget : public AcqProgressWidgetUi {
+ Q_OBJECT
+public:
+ AcqProgressWidget (QWidget *parent = 0, const char *name = 0);
+ aptFront::SharedPtr<aptFront::ProgressCallback> callback() { return m_statusRef.data(); };
+public slots:
+ void statusChange( AcqStatus::Status );
+ void setProgress( int );
+protected:
+ aptFront::SharedPtr<AcqStatus> m_statusRef;
+};
+
+}
+
+#endif /* ifndef PROGRESSWIDGET_H */
+
diff --git a/adept/libadept/acqprogresswidgetui.ui b/adept/libadept/acqprogresswidgetui.ui
new file mode 100644
index 0000000..26baa21
--- /dev/null
+++ b/adept/libadept/acqprogresswidgetui.ui
@@ -0,0 +1,79 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::AcqProgressWidgetUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>adept::AcqProgressWidgetUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>705</width>
+ <height>289</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Download Progress</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::AcqStatus" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_status</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>150</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="KProgress" row="1" column="0">
+ <property name="name">
+ <cstring>m_progress</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>m_cancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel Download</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::AcqStatus</class>
+ <header location="global">acqprogress.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154388dad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e0582c261e95f8bfc04f1a1e8bc5c4dfe0a190172af6a9690000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/acqprogress.h</includehint>
+ <includehint>kprogress.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/actor.h b/adept/libadept/actor.h
new file mode 100644
index 0000000..115b202
--- /dev/null
+++ b/adept/libadept/actor.h
@@ -0,0 +1,43 @@
+/** -*- C++ -*-
+ @file adept/actor.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qobject.h>
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/actor.h>
+
+#ifndef EPT_ACTOR_H
+#define EPT_ACTOR_H
+
+namespace adept {
+
+using namespace aptFront;
+
+class EntityActor : public QObject
+{
+ Q_OBJECT
+public:
+ EntityActor( actor::Bound< cache::entity::Entity > a )
+ : m_actor( a ), m_dead( false )
+ {}
+ actor::Bound< cache::entity::Entity > actor() const {
+ return m_actor;
+ }
+public slots:
+ void act() { m_actor(); }
+ void destructiveAct() {
+ // in case we don't get deleted soon enough
+ if ( m_dead ) return;
+ m_dead = true;
+ act();
+ deleteLater();
+ }
+protected:
+ actor::Bound< cache::entity::Entity > m_actor;
+ bool m_dead;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/application.cpp b/adept/libadept/application.cpp
new file mode 100644
index 0000000..8388fa2
--- /dev/null
+++ b/adept/libadept/application.cpp
@@ -0,0 +1,197 @@
+/** -*- C++ -*-
+ @file adept/application.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kstatusbar.h>
+
+#include <apt-front/init.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/component/state.h>
+
+#include <adept/commitprogress.h>
+#include <adept/application.h>
+#include <adept/packageinfo.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+namespace adept {
+using namespace cache;
+
+/* void WaitForLister::waiting()
+{
+ kdDebug() << "WaitForLister::waiting()" << endl;
+ bool done = true;
+ for ( Vector::iterator i = listers.begin(); i != listers.end(); ++i ) {
+ if ( (*i)->busy() ) {
+ done = false;
+ break;
+ }
+ }
+ if ( listers.empty() ) done = false;
+ if ( done ) {
+ QTimer::singleShot( 0, app, slot );
+ deleteLater();
+ } else {
+ QTimer::singleShot( 100, this, SLOT( waiting() ) );
+ }
+ } */
+
+Application::Application()
+ : m_acceptReadOnly( false ), m_main( 0 ), m_history( 0 ), m_statusBar( 0 )
+{
+}
+
+void Application::openCache( unsigned flags )
+{
+ bool ro = m_acceptReadOnly;
+ bool root = ::getuid() == 0 || ::geteuid() == 0;
+ try {
+ cache::Global::get().open( flags );
+ } catch (...) {
+ try {
+ cache::Global::get().open( flags | Cache::OpenReadOnly );
+ if ( ro && root ) {
+ KMessageBox::information(
+ m_main, i18n(
+ "You will not be able to change your system settings "
+ "in any way (install, remove or upgrade software), "
+ "because another process is using the packaging system database "
+ "(probably some other Adept application or apt-get or "
+ "aptitude). Please close the other application before "
+ "using this one." ),
+ i18n( "Read Only mode: Database Locked" ) );
+ } else if ( !root && ro ) {
+ KMessageBox::information(
+ m_main, i18n(
+ "You will not be able to change your system settings "
+ "in any way (install, remove or upgrade software), "
+ "because this application needs special administrator "
+ "(root) privileges. Please run it as root or "
+ "through kdesu or sudo programs to be able to perform "
+ "these actions" ),
+ i18n( "Read Only mode: Need root privileges" ) );
+ } else if ( root && !ro ) {
+ KMessageBox::information(
+ m_main, i18n(
+ "Another process is using the packaging system database "
+ "(probably some other Adept application or apt-get or "
+ "aptitude). Please close the other application before "
+ "using this one." ),
+ i18n( "Database Locked" ) );
+ } else if ( !root && !ro ) {
+ KMessageBox::information(
+ m_main, i18n( "This application needs special administrator "
+ "(root) privileges. Please run it as root or "
+ "through kdesu or sudo programs" ),
+ i18n( "Need root privileges" ) );
+ }
+ if ( !ro ) {
+ kdDebug() << "cannot continue, exiting" << endl;
+ exit( 1 );
+ }
+ } catch (...) {
+ KMessageBox::sorry(
+ m_main, i18n(
+ "The APT Database could not be opened!"
+ " This may be caused by incorrect APT configuration"
+ " or some similar problem. Try running apt-setup and"
+ " apt-get update in terminal and see if it helps"
+ " to resolve the problem." ), i18n( "Could not open cache" ) );
+ exit( 1 );
+ }
+ }
+}
+
+void Application::initHistory() {
+ cache::Global::get().addComponent(
+ m_history = new History() );
+}
+
+void Application::initKDEDebconf()
+{
+ // xxx unhardcode the package name somehow?
+ if (cache::Global::get().packages()
+ .packageByName( "libqt-perl" ).isInstalled())
+ putenv( "DEBIAN_FRONTEND=kde" );
+}
+
+void Application::initialize()
+{
+ CommitProgress::initSystem();
+ aptFront::init();
+ openCache();
+ initKDEDebconf();
+ initHistory();
+ observeComponent< component::State >();
+}
+
+void Application::checkpoint() {
+ if ( !history() ) return;
+ setHistoryEnabled( false );
+ history()->checkpoint();
+ setHistoryEnabled( true );
+}
+
+void Application::undo() {
+ if ( !history() ) return;
+ setHistoryEnabled( false );
+ history()->undo();
+ setHistoryEnabled( true );
+}
+
+void Application::redo() {
+ if ( !history() ) return;
+ setHistoryEnabled( false );
+ history()->redo();
+ setHistoryEnabled( true );
+}
+
+QString Application::changeString() {
+ component::State &s = cache().state();
+ return i18n( " Install %1, upgrade %2, remove %3 " )
+ .arg( s.newInstallCount() ).arg( s.upgradeCount() )
+ .arg( s.removeCount() );
+}
+
+QString Application::statusString() {
+ component::State &s = cache().state();
+ return i18n( " %1 installed, %2 upgradable, %3 available " )
+ .arg( s.installedCount() ).arg( s.upgradableCount() )
+ .arg( s.availableCount() );
+}
+
+QString Application::sizesString() {
+ QString dl = cache().state().downloadSizeString();
+ QString inst = cache().state().installSizeString();
+ return i18n( " download: %1, installation: %2 " ).arg( dl ).arg( inst );
+}
+
+void Application::setStatusBar( KStatusBar *s ) {
+ m_statusBar = s;
+ if ( s ) {
+ s->message( i18n( "Initializing..." ) );
+ s->insertItem( u8( "" ), 0 );
+ s->insertItem( u8( "" ), 1 );
+ s->insertItem( u8( "" ), 2 );
+ adjustFontSize( s, -1 );
+
+ adept::Progress *pr = new adept::Progress();
+ pr->setStatusBar( s );
+ cache::Global::get().setProgress( pr );
+ }
+}
+
+void Application::notifyPostChange( component::Base * )
+{
+ if ( m_statusBar ) {
+ m_statusBar->changeItem( changeString(), 0 );
+ m_statusBar->changeItem( statusString(), 1 );
+ m_statusBar->changeItem( sizesString(), 2 );
+ }
+}
+
+}
diff --git a/adept/libadept/application.h b/adept/libadept/application.h
new file mode 100644
index 0000000..74e9506
--- /dev/null
+++ b/adept/libadept/application.h
@@ -0,0 +1,75 @@
+/** -*- C++ -*-
+ @file adept/application.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <vector>
+
+#include <qobject.h>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+
+#ifndef EPT_APPLICATION_H
+#define EPT_APPLICATION_H
+
+class KStatusBar;
+
+namespace adept {
+using namespace aptFront;
+using cache::Cache;
+
+class Lister;
+
+struct Application : cache::Observer {
+ Application();
+ void setAcceptReadOnly( bool ro ) { m_acceptReadOnly = ro; }
+ bool writeable() { return cache::Global::get().writeable(); }
+ Cache &cache() { return cache::Global::get(); }
+ void openCache( unsigned flags = Cache::OpenDefault | Cache::OpenDebtags );
+ void initialize();
+ void initKDEDebconf();
+ void initHistory();
+ void setMainWidget( QWidget *w ) { m_main = w; }
+ void setStatusBar( KStatusBar *s );
+ virtual void checkpoint();
+ virtual void undo();
+ virtual void redo();
+
+ virtual void notifyPostChange( cache::component::Base * );
+
+ QString changeString();
+ QString statusString();
+ QString sizesString();
+protected:
+ virtual void setHistoryEnabled( bool ) {}
+ typedef cache::component::History< cache::component::State > History;
+ virtual History *history() { return m_history; }
+ bool m_acceptReadOnly;
+ QWidget *m_main;
+ KStatusBar *m_statusBar;
+ History *m_history;
+};
+
+/* class WaitForLister : public QObject {
+ Q_OBJECT
+public:
+ WaitForLister( QObject *a, const char *s )
+ : obj( a ), slot( s )
+ {
+ waiting();
+ }
+ void addLister( Lister *l ) { listers.push_back( l ); }
+protected slots:
+ void waiting();
+protected:
+ QObject *obj;
+ const char *slot;
+ typedef std::vector< Lister * > Vector;
+ Vector listers;
+ }; */
+
+}
+
+#endif
diff --git a/adept/libadept/commitprogress.cpp b/adept/libadept/commitprogress.cpp
new file mode 100644
index 0000000..9100d9b
--- /dev/null
+++ b/adept/libadept/commitprogress.cpp
@@ -0,0 +1,115 @@
+#include <cassert>
+
+#include <qwidgetstack.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <kprogress.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <ktrader.h>
+#include <klibloader.h>
+
+#include <apt-front/init.h>
+#include <adept/commitprogress.h>
+#include <adept/utils.h>
+
+using namespace adept;
+using namespace aptFront;
+
+PkgSystem *CommitProgress::s_system = 0;
+
+void CommitProgress::initSystem() {
+ CommitProgress::s_system = new PkgSystem();
+}
+
+CommitProgress::CommitProgress( QWidget *p, const char *n )
+ : CommitProgressUi( p, n )
+{
+ assert( s_system );
+ m_konsoleFrame->installEventFilter( this );
+ loadKonsole();
+ connect( s_system, SIGNAL( statusChanged( int, QString ) ),
+ this, SLOT( updateProgress( int, QString ) ) );
+ connect( m_details, SIGNAL( clicked() ),
+ this, SLOT( toggleDetails() ) );
+ m_progress->setTotalSteps( 100 );
+}
+
+bool CommitProgress::eventFilter( QObject *o, QEvent *e ) {
+ // o == m_konsoleFrame
+ if ( e->type() == QEvent::Resize ) {
+ QResizeEvent *re = dynamic_cast< QResizeEvent * >( e );
+ if ( !re ) return false;
+ m_konsole->widget()->setGeometry( 0, 0, re->size().width(), re->size().height() );
+ m_occlude->setGeometry( 0, 0, re->size().width(), re->size().height() );
+ }
+ return false;
+};
+
+void CommitProgress::toggleDetails()
+{
+ if ( !m_occlude->isVisible() ) {
+ // if ( m_stack->visibleWidget() == m_konsole->widget() ) { // hide
+ // m_stack->raiseWidget( m_emptyPage );
+ m_occlude->show();
+ m_bottomSpace->changeSize( 10, 10, QSizePolicy::Fixed, QSizePolicy::Expanding );
+ m_details->setText( i18n( "Show Details" ) );
+ } else { // show
+ m_occlude->hide();
+ // m_stack->raiseWidget( m_konsole->widget() );
+ m_bottomSpace->changeSize( 10, 10, QSizePolicy::Fixed, QSizePolicy::Fixed );
+ m_details->setText( i18n( "Hide Details" ) );
+ }
+}
+
+void CommitProgress::updateProgress( int p, QString msg )
+{
+ m_operation->setText( msg );
+ m_progress->setProgress( p );
+}
+
+void CommitProgress::loadKonsole()
+{
+ if ( s_system->terminal() )
+ kdDebug() << "WARNING: Hijacking PkgSystem terminal" << endl;
+
+ KLibFactory* factory = KLibLoader::self()->factory( "libsanekonsolepart" );
+ if (!factory)
+ factory = KLibLoader::self()->factory( "libkonsolepart" );
+
+ assert( factory );
+
+ delete m_occlude;
+ m_konsole = static_cast<KParts::Part*>(
+ factory->create( m_konsoleFrame, "konsolepart", "QObject",
+ u8( "KParts::ReadOnlyPart" ) ) );
+ // m_konsole->widget()->setGeometry( QRect( 0, 0, 40, 40 ) );
+
+ m_occlude = new QFrame( m_konsoleFrame, "m_occlude" );
+ // m_occlude->setGeometry( QRect( 0, 0, 10, 10 ) );
+ m_occlude->setFrameShape( QFrame::NoFrame );
+
+ assert( terminal() );
+
+ terminal()->setAutoDestroy( false );
+ terminal()->setAutoStartShell( false );
+ // m_stack->addWidget( m_konsole->widget() );
+
+ QStrList l; l.append( "echo" ); l.append( "-n" );
+ terminal()->startProgram( u8( "/bin/echo" ), l );
+
+ s_system->setTerminal( m_konsole );
+
+ // m_stack->raiseWidget( m_konsole->widget() );
+ // m_konsole->widget()->show();
+ // m_stack->raiseWidget( m_emptyPage );
+ m_operation->setText( i18n( "Idle" ) );
+ QTimer::singleShot( 0, this, SLOT( toggleDetails() ) );
+ if ( DEFAULT_KONSOLE_HIDDEN )
+ QTimer::singleShot( 0, this, SLOT( toggleDetails() ) );
+ QTimer::singleShot( 0, this, SLOT( hide() ) );
+}
+
diff --git a/adept/libadept/commitprogress.h b/adept/libadept/commitprogress.h
new file mode 100644
index 0000000..ed557d7
--- /dev/null
+++ b/adept/libadept/commitprogress.h
@@ -0,0 +1,41 @@
+/* -*- C++ -*- file adept/commitprogress.h
+ written by Peter Rockai <[email protected]> */
+
+#include <kde_terminal_interface.h>
+#include <adept/dpkgpm-gui.h>
+#include <adept/commitprogressui.h>
+#include <kparts/part.h>
+
+#ifndef EPT_COMMITPROGRESS_H
+#define EPT_COMMITPROGRESS_H
+
+namespace adept {
+
+class CommitProgress : public CommitProgressUi
+{
+ Q_OBJECT
+public:
+ CommitProgress( QWidget *p = 0, const char *n = 0 );
+
+ ExtTerminalInterface *terminal() {
+ return static_cast<ExtTerminalInterface*>(
+ m_konsole->qt_cast( "ExtTerminalInterface" ) );
+ }
+
+ // needs to be called before aptFront::init() :'((
+ static void initSystem();
+ virtual bool eventFilter( QObject *o, QEvent *e );
+
+public slots:
+ void updateProgress( int p, QString msg );
+ void toggleDetails();
+protected:
+ void loadKonsole();
+ KParts::Part *m_konsole;
+ static adept::PkgSystem *s_system; // bla...
+};
+
+}
+
+
+#endif
diff --git a/adept/libadept/commitprogressui.ui b/adept/libadept/commitprogressui.ui
new file mode 100644
index 0000000..5ccecbf
--- /dev/null
+++ b/adept/libadept/commitprogressui.ui
@@ -0,0 +1,197 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::CommitProgressUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>CommitProgressUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>542</width>
+ <height>303</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_konsoleFrame</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_occlude</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>40</x>
+ <y>10</y>
+ <width>460</width>
+ <height>60</height>
+ </rect>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>m_details</cstring>
+ </property>
+ <property name="text">
+ <string>(details)</string>
+ </property>
+ </widget>
+ <widget class="KProgress" row="1" column="0">
+ <property name="name">
+ <cstring>m_progress</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_operation</cstring>
+ </property>
+ <property name="text">
+ <string>Preparing...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>m_bottomSpace</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kprogress.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/desktopentryui.ui b/adept/libadept/desktopentryui.ui
new file mode 100644
index 0000000..a40c766
--- /dev/null
+++ b/adept/libadept/desktopentryui.ui
@@ -0,0 +1,116 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::DesktopEntryUi</class>
+<widget class="adept::ItemExtender">
+ <property name="name">
+ <cstring>DesktopEntryUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>52</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>6</number>
+ </property>
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <widget class="QLabel" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>m_icon</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>m_check</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="text">
+ <string>(name)</string>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="text">
+ <string>(description)</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <spacer row="0" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>6</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/extendablelist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/libadept/desktoplist.cpp b/adept/libadept/desktoplist.cpp
new file mode 100644
index 0000000..de64f11
--- /dev/null
+++ b/adept/libadept/desktoplist.cpp
@@ -0,0 +1,194 @@
+/** -*- C++ -*-
+ @file adept/desktoplist.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qimage.h>
+#include <qlabel.h>
+#include <qcursor.h>
+#include <qcheckbox.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+#include <kapplication.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <adept/desktoplist.h>
+#include <adept/utils.h>
+
+namespace adept {
+
+DesktopEntry::DesktopEntry( QWidget *p, const char *n )
+ : DesktopEntryUi( p, n )
+{
+ adjustFontSize( m_description, -1 );
+}
+
+void DesktopEntry::resize( int w, int h )
+{
+ // kdDebug() << "DesktopEntry::resize( " << w << ", " << h << " )" << endl;
+ int margin = layout()->margin() + layout()->spacing() * 2
+ + 6 /* spacer */ + m_icon->width() + m_check->width();
+ if ( m_check->isVisible() ) margin += m_check->width() + layout()->spacing();
+ int hFW1 = m_name->heightForWidth( w - margin );
+ int hFW2 = m_description->heightForWidth( w - margin );
+ /* kdDebug() << "margin = " << margin << ", hFW1 = " << hFW1 << ", hFW2 = "
+ << hFW2 << endl; */
+ int height = 2 * layout()->margin() + layout()->spacing() + hFW1 + hFW2;
+ if ( height < 32 + 2*layout()->margin() /* icon size + margin */ )
+ height = 32 + 2*layout()->margin();
+ // m_description->resize( w - margin, m_description->heightForWidth( w - margin ) );
+ QWidget::resize( w, height );
+}
+
+void DesktopEntry::setItem( ExtendableItem *i ) {
+ m_polished = false;
+ ItemExtender::setItem( i );
+ m_name->setText( u8( "<b>" ) + u8( entity().name() ) + u8( "</b>" ) );
+ m_description->setText( u8( entity().description() ) );
+ if ( !item()->list()->displayCheckboxes() ) {
+ m_check->hide();
+ }
+ if ( !package().valid() || !package().hasVersion() ) {
+ setEnabled( false );
+ } else {
+ connect( m_check, SIGNAL( toggled( bool ) ),
+ this, SLOT( toggled() ) );
+ notifyPostChange();
+ }
+}
+
+void DesktopEntry::mousePressEvent( QMouseEvent *e ) {
+ kdDebug() << "DesktopEntry::mousePressEvent" << endl;
+ e->ignore();
+}
+
+void DesktopEntry::mouseReleaseEvent( QMouseEvent *e ) {
+ kdDebug() << "DesktopEntry::mouseReleaseEvent" << endl;
+ e->ignore();
+}
+
+void DesktopEntry::showEvent( QShowEvent *e ) {
+ DesktopEntryUi::showEvent( e );
+ // DesktopEntryUi::polish();
+ if ( m_polished ) return;
+ item()->list()->polishing();
+ kdDebug() << "polish for " << entity().name() << endl;
+ QImage icon( KGlobal::iconLoader()->iconPath( entity().icon(), -32, true ) );
+ if ( icon.isNull() ) {
+ icon = QImage( KGlobal::dirs()->findResource( "desktopicon", entity().icon() ) );
+ }
+ m_icon->setPixmap( icon.isNull() ? item()->list()->emptyIcon() :
+ QPixmap( icon.smoothScale( 32, 32, QImage::ScaleMin ) ) );
+ item()->list()->polished();
+ m_polished = true;
+}
+
+void DesktopEntry::toggled() {
+ /* if ( package().isInstalled() ) {
+ if ( package().markedRemove() )
+ package().markKeep();
+ else
+ package().markRemove();
+ } else if ( package().markedInstall() )
+ package().markKeep();
+ else
+ package().markInstall(); */
+
+ if ( package().isInstalled() ) {
+ if ( package().markedRemove() )
+ item()->list()->fireRequest( package(), component::State::AKeep );
+ else
+ item()->list()->fireRequest( package(), component::State::ARemove );
+ } else if ( package().markedInstall() )
+ item()->list()->fireRequest( package(), component::State::AKeep );
+ else
+ item()->list()->fireRequest( package(), component::State::AInstall );
+ notifyPostChange();
+}
+
+void DesktopList::polishing() {
+ if ( m_polishing == 0 )
+ QApplication::setOverrideCursor( QCursor( Qt::BusyCursor ) );
+ m_polishing++;
+ if ( m_polishing % 10 == 0 )
+ kapp->processEvents();
+}
+
+void DesktopList::polished() {
+ if ( m_polishing == childCount() )
+ QApplication::restoreOverrideCursor();
+}
+
+void DesktopList::notifyPostChange( component::Base * ) {
+ utils::Range< ExtendableItem * > r = extenders();
+ for ( ; r != r.end(); ++r ) {
+ dynamic_cast< DesktopEntry * >( (*r)->extender() )->notifyPostChange();
+ }
+}
+
+void DesktopEntry::notifyPostChange() {
+ if ( !package().valid() || !package().hasVersion() )
+ return;
+
+ m_check->blockSignals( true );
+ m_check->setChecked( ( package().isInstalled()
+ || entity().package().markedInstall() )
+ && !entity().package().markedRemove() );
+ m_check->blockSignals( false );
+}
+
+DesktopList::DesktopList( QWidget *parent, const char *name )
+ : ExtendableList( parent, name ), m_polishing( 0 ), m_displayCheckboxes( true )
+{
+ observeComponent< component::State >();
+ addColumn( i18n( "Application" ) );
+ setResizeMode( LastColumn );
+ setToggleColumn( -1 ); // no toggling, thanks
+ setExtenderHighlight( true );
+ m_emptyIcon = QPixmap(
+ QImage(
+ KGlobal::iconLoader()->iconPath( u8( "exec" ), -32, false )
+ ).smoothScale( 32, 32, QImage::ScaleMin ) );
+ connect( this, SIGNAL( clicked( QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( processClick( QListViewItem *, const QPoint &, int ) ) );
+}
+
+void DesktopList::processClick( QListViewItem *it, const QPoint &, int ) {
+ kdDebug() << "DesktopList::processClick..." << endl;
+ DesktopItem *i = dynamic_cast< DesktopItem * >( it );
+ if ( !i ) return;
+ emit showDescription( i->entity() );
+}
+
+void DesktopList::insertRange( Range r ) {
+ m_range = r;
+ DesktopItem *last = 0;
+ int i = 0;
+ QApplication::setOverrideCursor( QCursor( Qt::BusyCursor ) );
+ for( ; r != r.end(); r.advance() ) {
+ if ( i % 20 == 0 )
+ kapp->processEvents();
+ if ( !r->package( entity::Package() ).valid() )
+ continue;
+ DesktopItem *i = last ? new DesktopItem( this, last ) : new DesktopItem( this );
+ last = i;
+ i->setEntity( *r );
+ ++ i;
+ }
+ QApplication::restoreOverrideCursor();
+}
+
+ItemExtender *DesktopItem::createExtender() {
+ return new DesktopEntry();
+}
+
+DesktopItem *DesktopEntry::item() const {
+ return dynamic_cast< DesktopItem * >( m_item );
+}
+
+entity::Desktop DesktopEntry::entity() const {
+ return item()->entity();
+}
+
+}
diff --git a/adept/libadept/desktoplist.h b/adept/libadept/desktoplist.h
new file mode 100644
index 0000000..207b9a7
--- /dev/null
+++ b/adept/libadept/desktoplist.h
@@ -0,0 +1,117 @@
+/** -*- C++ -*-
+ @file adept/desktoplist.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qimage.h>
+#include <klocale.h>
+
+#include <apt-front/cache/entity/desktop.h>
+#include <adept/extendablelist.h>
+#include <adept/desktopentryui.h>
+
+#ifndef EPT_DESKTOPLIST_H
+#define EPT_DESKTOPLIST_H
+
+class QPopupMenu;
+
+namespace adept {
+using namespace aptFront;
+using namespace aptFront::cache;
+
+class DesktopItem;
+
+class DesktopList : public ExtendableList, public cache::Observer
+{
+ Q_OBJECT
+public:
+ typedef utils::Range< entity::Desktop > Range;
+ DesktopList( QWidget *parent = 0, const char *name = 0 );
+ void insertRange( Range );
+ QPixmap emptyIcon() { return m_emptyIcon; }
+ void polishing();
+ void polished();
+
+ void setTitle( QString s ) {
+ setColumnText( 0, i18n( "Application (" ) + s + i18n( ")" ) );
+ }
+
+ void setDisplayCheckboxes( bool d ) { m_displayCheckboxes = d; }
+ bool displayCheckboxes() { return m_displayCheckboxes; }
+ virtual void notifyPostChange( cache::component::Base * );
+ void fireRequest( entity::Package p, component::State::Action a ) {
+ emit request( p, a );
+ }
+protected slots:
+ void processClick( QListViewItem *, const QPoint &, int );
+signals:
+ void request( cache::entity::Package, cache::component::State::Action );
+ void showDescription( cache::entity::Desktop );
+protected:
+ Range m_range;
+ QPixmap m_emptyIcon;
+ int m_polishing;
+ bool m_displayCheckboxes;
+};
+
+class DesktopEntry : public DesktopEntryUi
+{
+ Q_OBJECT
+public:
+ DesktopEntry( QWidget * = 0, const char * = 0 );
+ DesktopItem *item() const;
+ entity::Desktop entity() const;
+ void setItem( ExtendableItem * );
+ entity::Package package() { return entity().package(); }
+ virtual void notifyPostChange();
+ virtual void resize( int, int );
+ // virtual void polish();
+public slots:
+ void toggled();
+protected:
+ virtual void mousePressEvent( QMouseEvent *e );
+ virtual void mouseReleaseEvent( QMouseEvent *e );
+ virtual void showEvent( QShowEvent * );
+ bool m_polished;
+};
+
+class DesktopItem : public ExtendableItem
+{
+public:
+ ItemExtender *createExtender();
+ DesktopItem( DesktopList *l )
+ : ExtendableItem( l ), m_delayedDone( false )
+ {
+ }
+ DesktopItem( DesktopList *v, DesktopItem *i )
+ : ExtendableItem( v, i ), m_delayedDone( false )
+ {
+ }
+
+ void setup() {
+ ExtendableItem::setup();
+ if (m_delayedDone)
+ return;
+ m_delayedDone = true;
+ showExtender();
+ }
+
+ DesktopList *list() { return dynamic_cast< DesktopList * >( listView() ); }
+
+ QString text( int ) const { return QString( "you shouldn't see this" ); }
+ entity::Desktop entity() const { return m_entity; }
+ void setEntity( entity::Desktop e ) { m_entity = e; }
+
+ virtual bool less( const ExtendableItem *other ) const {
+ const DesktopItem *o = dynamic_cast< const DesktopItem * >( other );
+ return entity() < o->entity();
+ }
+
+protected:
+ entity::Desktop m_entity;
+ bool m_delayedDone:1;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/dpkgpm-gui.cpp b/adept/libadept/dpkgpm-gui.cpp
new file mode 100644
index 0000000..828d18f
--- /dev/null
+++ b/adept/libadept/dpkgpm-gui.cpp
@@ -0,0 +1,258 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm-gui.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <fcntl.h>
+#include <iostream>
+
+#include <qstrlist.h>
+#include <kapplication.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kparts/part.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <adept/dpkgpm-gui.h>
+#include <adept/utils.h>
+
+using namespace aptFront;
+using namespace cache;
+
+namespace adept {
+
+PkgSystem::PkgSystem()
+ : m_terminalPart( 0 )
+{
+ std::cerr << "kapture::PkgSystem::PkgSystem()" << std::endl;
+ Label = "adeptDPkgSystem";
+}
+
+void PkgSystem::setTerminal( KParts::Part *t )
+{
+ m_terminalPart = t;
+}
+
+pkgPackageManager *PkgSystem::CreatePM( pkgDepCache *c ) const
+{
+ std::cerr << "kapture::PkgSystem::CreatePM()" << std::endl;
+ adept::DPkgPM *pm = new adept::DPkgPM( c, m_terminalPart );
+ connect( pm, SIGNAL( statusChanged( int, QString ) ),
+ this, SIGNAL( statusChanged( int, QString ) ) );
+ return pm;
+}
+
+DPkgPM::DPkgPM( pkgDepCache *cache, KParts::Part *t )
+ : aptFront::DPkgPM (cache), m_terminalPart (t)
+{
+}
+
+bool DPkgPM::forkDpkg( char *const argv[] )
+{
+ bool ok = true;
+ std::cerr << "adept::DPkgPM::forkDpkg ()" << std::endl;
+ QStrList l;
+ for (int i = 0; argv[i]; i ++)
+ l.append( argv[i] );
+
+ m_processRunning = true;
+ connect( m_terminalPart, SIGNAL( processExited( KProcess * ) ),
+ this, SLOT( processExit( KProcess * ) ) );
+ connect( m_terminalPart, SIGNAL( processExited( const KProcess * ) ),
+ this, SLOT( processExitC( const KProcess * ) ) );
+ connect( m_terminalPart, SIGNAL( forkedChild() ),
+ this, SLOT( setupDpkgChild() ) );
+
+ terminal()->startProgram( u8( argv[0] ), l );
+
+ ::close( m_dpkgPipe[1] );
+ ::fcntl( m_dpkgPipe[0], F_SETFL, O_NONBLOCK );
+
+ while (m_processRunning) {
+ dpkgMonitor();
+ usleep( 50000 );
+ }
+
+ if (m_exitedProcess->normalExit()) {
+ if (m_exitedProcess->exitStatus() != 0) {
+ ok = _error->Error( "Child for %s exited with error %d",
+ argv [0], m_exitedProcess->exitStatus());
+ }
+ } else {
+ ok = _error->Error( "Child for %s was killed by signal %d",
+ argv [0], m_exitedProcess->exitSignal());
+ }
+
+ if (ok) // do we run scripts in case dpkg died???
+ ok = runScripts ("DPkg::Post-Invoke", false);
+
+ return ok;
+}
+
+ExtTerminalInterface *DPkgPM::terminal() {
+ return static_cast<ExtTerminalInterface *>(
+ m_terminalPart->qt_cast( "ExtTerminalInterface" ) );
+}
+
+bool DPkgPM::forkScript (const char *cmd, bool fP)
+{
+ std::cerr << "adept::DPkgPM::forkScript(\"" << cmd << "\")" << std::endl;
+ if (fP) {
+ if (pipe( m_scriptPipe ) != 0)
+ return _error->Errno(
+ "pipe","Failed to create IPC pipe to subprocess");
+ SetCloseExec (m_scriptPipe[0], true);
+ SetCloseExec (m_scriptPipe[1], true);
+ }
+ QStrList l;
+ l.append ("/bin/sh");
+ l.append ("-c");
+ l.append (cmd);
+ if (fP) {
+ connect( m_terminalPart, SIGNAL( forkedChild() ),
+ this, SLOT( setupScriptPipe() ) );
+ }
+
+ connect( m_terminalPart, SIGNAL( processExited( KProcess * ) ),
+ this, SLOT( processExit( KProcess * ) ) );
+ connect( m_terminalPart, SIGNAL( processExited( const KProcess * ) ),
+ this, SLOT( processExitC( const KProcess * ) ) );
+
+ m_processRunning = true;
+ terminal()->startProgram( u8( "/bin/sh" ), l);
+
+ if (fP) {
+ if (!feedPackages())
+ return _error->Error("Failed feeding packages to script");
+ }
+
+ while (m_processRunning) {
+ kapp->processEvents();
+ usleep(50000);
+ }
+
+ std::cerr << "END: adept::DPkgPM::forkScript(\""
+ << cmd << "\")" << std::endl;
+
+ if (m_exitedProcess->normalExit()) {
+ if (m_exitedProcess->exitStatus() != 0) {
+ return _error -> Error("Child for %s exited with error %d",
+ cmd, m_exitedProcess->exitStatus());
+ } else {
+ return true;
+ }
+ } else {
+ return _error->Error("Child for %s was killed by signal %d",
+ cmd, m_exitedProcess->exitSignal());
+ }
+}
+
+void DPkgPM::processExit(KProcess *p) {
+ processExitC( p );
+}
+
+void DPkgPM::processExitC(const KProcess *p)
+{
+ std::cerr << "a process exited!" << std::endl;
+ m_processRunning = false;
+ m_exitedProcess = p;
+}
+
+void DPkgPM::setupScriptPipe()
+{
+ // setupScript();
+ // std::cerr << "setupScriptPipe()" << std::endl;
+ dup2 (m_scriptPipe[0], STDIN_FILENO);
+}
+
+void DPkgPM::setupDpkgChild()
+{
+ // setupScript();
+ // std::cerr << "setupDpkgChild()" << std::endl;
+ setupChild();
+}
+
+bool DPkgPM::Go( int )
+{
+ std::cerr << "kapture::DPkgPM::Go ()" << std::endl;
+ statusChanged( 0, i18n( "Preparing..." ) );
+ bool ret = aptFront::DPkgPM::Go(-1);
+ QStrList l;
+ l.append("echo");
+ l.append("dpkg run finished!");
+ terminal()->startProgram( u8( "echo" ), l );
+ statusChanged( 100, i18n( "Done" ) );
+ return ret;
+}
+
+void DPkgPM::dpkgMonitor ()
+{
+ aptFront::DPkgPM::dpkgMonitor();
+ kapp->processEvents();
+}
+
+void DPkgPM::updateStatus( std::string pkg, std::string ev, std::string r )
+{
+ std::string op, msg;
+ aptFront::DPkgPM::updateStatus( pkg, ev, r );
+ entity::Package p = cache::Global::get().packages().packageByName( pkg );
+
+ if ( m_currentOp == OInstall ) {
+ if ( p.markedNewInstall() ) {
+ if ( ev == "half-installed" )
+ msg = u8( i18n( "Preparing installation of %1..." ) );
+ else if ( ev == "unpacked" )
+ msg = u8( i18n( "Unpacking %1..." ) );
+ } else if ( p.markedUpgrade() ) {
+ if ( ev == "half-installed" )
+ msg = u8( i18n( "Preparing upgrade of %1..." ) );
+ else if ( ev == "unpacked" || ev == "half-configured" )
+ msg = u8( i18n( "Replacing %1 with new version..." ) );
+ }
+ } else if ( m_currentOp == OConfigure ) {
+ if ( p.markedNewInstall() ) {
+ if ( ev == "unpacked" )
+ msg = u8( i18n( "Preparing to configure %1..." ) );
+ else if ( ev == "half-configured" )
+ msg = u8( i18n( "Configuring %1..." ) );
+ else if ( ev == "installed" )
+ msg = u8( i18n( "Installed %1" ) );
+ } else if ( p.markedUpgrade() ) {
+ if ( ev == "unpacked" )
+ msg = u8( i18n( "Preparing to configure new version of %1..." ) );
+ else if ( ev == "half-configured" )
+ msg = u8( i18n( "Configuring new version of %1..." ) );
+ else if ( ev == "installed" )
+ msg = u8( i18n( "Upgraded %1" ) );
+ }
+ } else if ( m_currentOp == ORemove ) {
+ if ( ev == "installed" )
+ msg = u8( i18n( "Preparing to remove %1..." ) );
+ else if ( ev == "half-configured" || ev == "half-installed" )
+ msg = u8( i18n( "Removing %1..." ) );
+ else if ( ev == "config-files" || ev == "not-installed" )
+ msg = u8( i18n( "Removed %1" ) );
+ } else if ( m_currentOp == OPurge ) {
+ if ( ev == "config-files" )
+ msg = u8( i18n( "Preparing to purge %1..." ) );
+ else if ( ev == "not-installed" )
+ msg = u8( i18n( "Purged %1" ) );
+ }
+
+ std::cerr << "updateStatus( " << pkg << ", " << ev << ", " << r << ")" << std::endl;
+ std::cerr << "updateStatus: msg = " << msg << std::endl;
+ std::cerr << "updateStatus: seen = " << m_seenOpCount
+ << ", total = " << m_totalOpCount << std::endl;
+ statusChanged( ( m_seenOpCount * 100 ) / m_totalOpCount,
+ u8( msg ).arg( pkg ) + ( ( r == "") ? "" : (" (" + r + ")") ) );
+}
+
+}
+
+#include "dpkgpm-gui.moc"
diff --git a/adept/libadept/dpkgpm-gui.h b/adept/libadept/dpkgpm-gui.h
new file mode 100644
index 0000000..435ee7f
--- /dev/null
+++ b/adept/libadept/dpkgpm-gui.h
@@ -0,0 +1,68 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm-gui.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#ifndef EPT_DPKGPM_H
+# define EPT_DPKGPM_H
+
+#include <apt-pkg/debsystem.h>
+#include <adept/dpkgpm.h>
+#include <kde_terminal_interface.h>
+#include <kprocess.h>
+#include <kdialogbase.h>
+
+class KListBox;
+namespace KParts {
+class Part;
+}
+
+namespace adept {
+
+class PkgSystem : public QObject, public debSystem
+{
+ Q_OBJECT
+public:
+ PkgSystem ();
+ virtual pkgPackageManager *CreatePM( pkgDepCache *Cache ) const;
+ virtual void setTerminal( KParts::Part *t );
+ KParts::Part *terminal() { return m_terminalPart; }
+ virtual int Score( Configuration const &Cnf ) {
+ return debSystem::Score (Cnf) + 2; };
+protected:
+ KParts::Part *m_terminalPart;
+signals:
+ void statusChanged( int p, QString m );
+};
+
+class DPkgPM : public QObject, public aptFront::DPkgPM
+{
+ Q_OBJECT
+public:
+ DPkgPM (pkgDepCache *c, KParts::Part *t);
+ virtual bool forkDpkg (char *const argv[]);
+ virtual void dpkgMonitor (void);
+ virtual bool Go (int);
+ virtual bool forkScript (const char *, bool);
+ ExtTerminalInterface *terminal();
+ virtual void updateStatus( std::string pkg, std::string ev, std::string r );
+
+public slots:
+ void processExitC(const KProcess *p);
+ void processExit(KProcess *p);
+ void setupScriptPipe();
+ void setupDpkgChild();
+
+signals:
+ void statusChanged( int p, QString m );
+
+protected:
+ KParts::Part *m_terminalPart;
+ // DPkgProgress *m_prog;
+ bool m_processRunning:1;
+ const KProcess *m_exitedProcess;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/dpkgpm.cpp b/adept/libadept/dpkgpm.cpp
new file mode 100644
index 0000000..b38b5fb
--- /dev/null
+++ b/adept/libadept/dpkgpm.cpp
@@ -0,0 +1,451 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include "dpkgpm.h"
+#include <signal.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <iostream>
+#include <sstream>
+
+using namespace std;
+using namespace aptFront;
+using namespace cache;
+
+/* === PkgSystem === */
+DPkgPM::DPkgPM (pkgDepCache *C)
+ : pkgDPkgPM (C), m_seenOpCount( 0 ), m_totalOpCount( 0 )
+{
+}
+
+bool DPkgPM::Go( int )
+{
+ cerr << "DPkgPM::Go()" << endl;
+ computeTotals();
+ if (runScripts ("DPkg::Pre-Invoke", false) == false)
+ return false;
+ if (runScripts ("DPkg::Pre-Install-Pkgs", true) == false)
+ return false;
+
+ for (vector<Item>::iterator I = List.begin(); I != List.end();) {
+ char *const *argv;
+ if (! setupArgs (&argv, I))
+ return false;
+
+ cerr << "running '";
+ for (unsigned int k = 0; argv [k]; k++)
+ cerr << argv[k] << ' ';
+ cerr << "'" << endl;
+ if (_config->FindB("Debug::pkgDPkgPM",false) == true)
+ {
+ for (unsigned int k = 0; argv [k]; k++)
+ cerr << argv[k] << ' ';
+ cerr << endl;
+ continue;
+ }
+
+ if (! forkDpkg (argv))
+ return false;
+ delete[] argv;
+ if (! runScripts ("DPkg::Post-Invoke", false))
+ return false;
+ }
+ return true;
+}
+
+void DPkgPM::computeTotals()
+{
+ m_totalOpCount = 0;
+ for (vector<Item>::iterator I = List.begin(); I != List.end();I++)
+ {
+ entity::Package p = cache::Global::get().packages().packageByName(
+ I->Pkg.Name() );
+ int x = 0;
+ switch ( I->Op ) {
+ case Item::Remove: x = 4; break;
+ case Item::Install: p.markedUpgrade() ? x = 3 : x = 2; break;
+ case Item::Purge: x = 2; break;
+ case Item::Configure: x = 3; break;
+ }
+ m_totalOpCount += x;
+ }
+}
+
+bool DPkgPM::forkDpkg (char *const argv[])
+{
+ cerr << "DPkgPM::forkDpkg ()" << endl;
+ cout << flush;
+ clog << flush;
+ cerr << flush;
+
+ /* Mask off sig int/quit. We do this because dpkg also does when
+ it forks scripts. What happens is that when you hit ctrl-c it sends
+ it to all processes in the group. Since dpkg ignores the signal
+ it doesn't die but we do! So we must also ignore it */
+ sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
+ sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN);
+
+ // Fork dpkg
+ pid_t Child = ExecFork();
+ if (Child == 0) {
+ if (! setupChild ()) {
+ cerr << "Error in dpkg post-fork setup!" << endl;
+ _exit (100);
+ }
+ execvp (argv [0], argv);
+ cerr << "Error executing dpkg!" << endl;
+ _exit (100);
+ }
+
+ close( m_dpkgPipe[1] );
+ fcntl( m_dpkgPipe[0], F_SETFL, O_NONBLOCK );
+
+ int Status = 0;
+ int ret = 0;
+ while ((ret = waitpid (Child, &Status, WNOHANG)) != Child) {
+ if (errno == EINTR || ret == 0) {
+ dpkgMonitor ();
+ usleep (200000); // 0.2 second hang
+ continue;
+ }
+ runScripts ("DPkg::Post-Invoke", false);
+
+ signal(SIGQUIT,old_SIGQUIT);
+ signal(SIGINT,old_SIGINT);
+ return _error -> Errno ("waitpid","Couldn't wait for subprocess");
+ }
+
+ signal(SIGQUIT,old_SIGQUIT);
+ signal(SIGINT,old_SIGINT);
+
+ // Check for an error code.
+ if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
+ {
+ runScripts ("DPkg::Post-Invoke", false);
+ if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV)
+ return _error->Error("Sub-process %s received a segmentation fault.", argv [0]);
+
+ if (WIFEXITED(Status) != 0)
+ return _error->Error("Sub-process %s returned an error code (%u)", argv[0], WEXITSTATUS(Status));
+
+ return _error->Error("Sub-process %s exited unexpectedly", argv[0]);
+ }
+
+ return true;
+}
+
+bool DPkgPM::setupArgs (char *const**a, std::vector<Item>::iterator &I)
+{
+ cerr << "DPkgPM::setupArgs ()" << endl;
+ unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",350);
+ unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",8192);
+
+ vector<Item>::iterator J = I;
+ for (; J != List.end() && J->Op == I->Op; J++);
+
+ // Generate the argument list
+ const char **Args = new const char *[MaxArgs + 50];
+ if (J - I > (signed)MaxArgs)
+ J = I + MaxArgs;
+
+ unsigned int n = 0;
+ unsigned long Size = 0;
+ string Tmp = _config->Find("Dir::Bin::dpkg","dpkg");
+ Args[n++] = Tmp.c_str();
+ Size += strlen(Args[n-1]);
+
+ // Stick in any custom dpkg options
+ Configuration::Item const *Opts = _config->Tree("DPkg::Options");
+ if (Opts != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ Args[n++] = Opts->Value.c_str();
+ Size += Opts->Value.length();
+ }
+ }
+
+ pipe( m_dpkgPipe );
+ stringstream fds;
+ fds << m_dpkgPipe[1];
+ std::cerr << "reading end of the pipe: " << m_dpkgPipe[0] << std::endl;
+
+ Args[n++] = "--status-fd";
+ Size += strlen(Args[n-1]);
+ // bah, we leak a string every time we run dpkg... silly eh
+ Args[n++] = ( new string( fds.str() ) )->c_str();
+ Size += strlen(Args[n-1]);
+
+ switch (I->Op)
+ {
+ case Item::Remove:
+ Args[n++] = "--force-depends";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--force-remove-essential";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--remove";
+ Size += strlen(Args[n-1]);
+ m_currentOp = ORemove;
+ break;
+
+ case Item::Purge:
+ Args[n++] = "--force-depends";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--force-remove-essential";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--purge";
+ Size += strlen(Args[n-1]);
+ m_currentOp = OPurge;
+ break;
+
+ case Item::Configure:
+ Args[n++] = "--configure";
+ Size += strlen(Args[n-1]);
+ m_currentOp = OConfigure;
+ break;
+
+ case Item::Install:
+ Args[n++] = "--unpack";
+ Size += strlen(Args[n-1]);
+ m_currentOp = OInstall;
+ break;
+ }
+
+ // Write in the file or package names
+ if (I->Op == Item::Install)
+ {
+ for (;I != J && Size < MaxArgBytes; I++)
+ {
+ if (I->File[0] != '/')
+ return _error->Error("Internal Error, Pathname to install is not absolute '%s'",I->File.c_str());
+ Args[n++] = I->File.c_str();
+ Size += strlen(Args[n-1]);
+ }
+ }
+ else
+ {
+ for (;I != J && Size < MaxArgBytes; I++)
+ {
+ Args[n++] = I->Pkg.Name();
+ Size += strlen(Args[n-1]);
+ }
+ }
+ Args[n] = 0;
+ J = I;
+ *a = (char *const *)Args;
+ return true;
+}
+
+bool DPkgPM::setupChild ()
+{
+ // cerr << "DPkgPM::setupChild ()" << endl;
+ if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
+ return false;
+
+ if (_config->FindB("DPkg::FlushSTDIN",true) == true && isatty(STDIN_FILENO))
+ {
+ int Flags,dummy;
+ if ((Flags = fcntl(STDIN_FILENO,F_GETFL,dummy)) < 0)
+ return false;
+
+ // Discard everything in stdin before forking dpkg
+ if (fcntl(STDIN_FILENO,F_SETFL,Flags | O_NONBLOCK) < 0)
+ return false;
+
+ while (read(STDIN_FILENO,&dummy,1) == 1);
+
+ if (fcntl(STDIN_FILENO,F_SETFL,Flags & (~(long)O_NONBLOCK)) < 0)
+ return false;
+ }
+
+ /* No Job Control Stop Env is a magic dpkg var that prevents it
+ from using sigstop */
+ putenv("DPKG_NO_TSTP=yes");
+ close( m_dpkgPipe[0] );
+
+ return true;
+}
+
+void DPkgPM::dpkgMonitor ()
+{
+ char buf[1024];
+ int r = read( m_dpkgPipe[0], buf, 1023 );
+
+ if ( r > 0 ) {
+ buf[r] = 0;
+ std::string b( buf );
+
+ // parse status updates from dpkg
+ while ( true ) {
+ std::string::size_type colon, nl = b.find( '\n' );
+ m_statusBuffer.append( string( b, 0, nl ) );
+ if ( nl == std::string::npos )
+ break;
+
+ // cerr << "dpkg status completed line: " << m_statusBuffer << endl;
+ colon = m_statusBuffer.find( ": " );
+ string l( m_statusBuffer, 0, colon );
+ string r( m_statusBuffer, colon + 2, string::npos );
+
+ if ( l == "status" ) {
+ colon = r.find( ": " );
+ std::string p( r, 0, colon );
+ r = string( r, colon + 2, string::npos );
+
+ colon = r.find( ": " );
+ std::string e( r, 0, colon );
+ if ( colon == string::npos )
+ r = "";
+ else
+ r = string( r, colon + 2, string::npos );
+ updateStatus( p, e, r );
+ }
+
+ b = string( b, nl + 1, string::npos );
+ m_statusBuffer = string();
+ nl = b.find( '\n' );
+ }
+ }
+}
+
+void DPkgPM::updateStatus( std::string pkg, std::string ev, std::string r )
+{
+ OpAndStatus os = std::make_pair( m_currentOp, ev );
+ if ( m_seenOps[ std::make_pair( os, pkg ) ] == 0 ) {
+ m_seenOpCount++;
+ m_seenOps[ std::make_pair( os, pkg ) ] = 1;
+ }
+}
+
+bool DPkgPM::runScripts (const char *Cnf, bool sP)
+{
+ cerr << "DPkgPM::runScripts ('" << Cnf << "', " << sP << ")" << endl;
+ Configuration::Item const *Opts = _config->Tree(Cnf);
+ if (Opts == 0 || Opts->Child == 0)
+ return true;
+ Opts = Opts->Child;
+
+ unsigned int Count = 1;
+ for (; Opts != 0; Opts = Opts->Next, Count++)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ // Determine the protocol version
+ string OptSec = Opts->Value;
+ string::size_type Pos;
+ if ((Pos = OptSec.find(' ')) == string::npos || Pos == 0)
+ Pos = OptSec.length();
+ OptSec = "DPkg::Tools::Options::" + string(Opts->Value.c_str(),Pos);
+
+ m_version = _config->FindI (OptSec + "::Version", 1);
+
+ // Purified Fork for running the script
+ // pid_t Process = ExecFork();
+ forkScript (Opts->Value.c_str(), sP);
+ }
+
+ return true;
+}
+
+bool DPkgPM::SendV1Pkgs (FILE *F)
+{
+ bool Die = false;
+ for (vector<Item>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ // Only deal with packages to be installed from .deb
+ if (I->Op != Item::Install)
+ continue;
+
+ // No errors here..
+ if (I->File[0] != '/')
+ continue;
+
+ /* Feed the filename of each package that is pending install
+ into the pipe. */
+ fprintf(F,"%s\n",I->File.c_str());
+ if (ferror(F) != 0)
+ {
+ Die = true;
+ break;
+ }
+ }
+ return ! Die;
+}
+
+bool DPkgPM::forkScript (const char *cmd, bool fP)
+{
+ cerr << "DPkgPM::forkScript ()" << endl;
+ if (fP) {
+ if (pipe( m_scriptPipe ) != 0)
+ return _error -> Errno("pipe", "Failed to create IPC pipe to subprocess");
+ SetCloseExec( m_scriptPipe[ 0 ], true );
+ SetCloseExec( m_scriptPipe[ 1 ], true );
+ }
+ pid_t Process = ExecFork ();
+ if (Process == 0)
+ {
+ setupScript (cmd, fP);
+
+ const char *Args[4];
+ Args[0] = "/bin/sh";
+ Args[1] = "-c";
+ Args[2] = cmd;
+ Args[3] = 0;
+ execv(Args[0],(char **)Args);
+ _exit(100);
+ }
+
+ if (fP) {
+ if (! feedPackages ())
+ return _error -> Error ("Failed feeding packages to script");
+ }
+
+ // Clean up the sub process
+ if (ExecWait (Process, cmd) == false)
+ return _error -> Error("Failure running script %s", cmd);
+}
+
+void DPkgPM::setupScript (const char * /*cmd*/, bool fP)
+{
+ cerr << "DPkgPM::setupScript ()" << endl;
+ if (fP) {
+ dup2 (m_scriptPipe [0], STDIN_FILENO);
+ SetCloseExec(STDOUT_FILENO, false);
+ SetCloseExec(STDIN_FILENO, false);
+ SetCloseExec(STDERR_FILENO, false);
+ }
+}
+
+bool DPkgPM::feedPackages ()
+{
+ close(m_scriptPipe[ 0 ]);
+
+ FILE *F = fdopen(m_scriptPipe[ 1 ], "w");
+ if (F == 0)
+ return _error->Errno("fdopen","Faild to open new FD");
+
+ // Feed it the filenames.
+ bool Die = false;
+ if (m_version <= 1)
+ Die = !SendV1Pkgs (F);
+ else
+ Die = !SendV2Pkgs(F);
+
+ fclose(F);
+ return ! Die;
+}
diff --git a/adept/libadept/dpkgpm.h b/adept/libadept/dpkgpm.h
new file mode 100644
index 0000000..b899693
--- /dev/null
+++ b/adept/libadept/dpkgpm.h
@@ -0,0 +1,49 @@
+/** -*- C++ -*-
+ @file adept/dpkgpm.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-pkg/dpkgpm.h>
+#include <string>
+#include <vector>
+#include <map>
+
+#ifndef DPKGPM_H
+# define DPKGPM_H
+
+namespace aptFront {
+
+class DPkgPM : public pkgDPkgPM {
+protected:
+ enum Op { ORemove, OPurge, OConfigure, OInstall };
+ Op m_currentOp;
+ int m_dpkgPipe[2];
+ int m_scriptPipe[2];
+ unsigned m_version;
+ std::string m_statusBuffer;
+ typedef std::pair< Op, std::string > OpAndStatus;
+ typedef std::map< std::pair< OpAndStatus, std::string >, int > SeenOps;
+ SeenOps m_seenOps;
+ int m_totalOpCount;
+ int m_seenOpCount;
+public:
+ DPkgPM (pkgDepCache *C);
+ virtual bool Go ( int );
+ virtual void computeTotals();
+ virtual bool setupArgs (char *const **a, std::vector<Item>::iterator &I);
+ virtual bool forkDpkg (char *const argv[]);
+ virtual bool forkScript (const char *, bool);
+ virtual bool runScripts (const char *, bool);
+ virtual bool setupChild ();
+ virtual void setupScript (const char *, bool);
+ virtual void dpkgMonitor (void);
+ virtual bool SendV1Pkgs (FILE *);
+ virtual bool feedPackages (void);
+ virtual void updateStatus( std::string pkg, std::string ev, std::string r );
+};
+
+}
+
+
+#endif /* ifndef DPKGPM_H */
+
diff --git a/adept/libadept/easytagfilter.cpp b/adept/libadept/easytagfilter.cpp
new file mode 100644
index 0000000..4fa593b
--- /dev/null
+++ b/adept/libadept/easytagfilter.cpp
@@ -0,0 +1,82 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+#include "easytagfilter.h"
+
+using namespace aptFront;
+using namespace adept;
+using namespace Tagcoll;
+
+static void fillCombo( QComboBox *c, const std::string f ) {
+ Cache &cache = cache::Global::get(); // FIXME?
+ OpSet< entity::Tag > t;
+ t = cache.tags().tags( f );
+ for (OpSet< entity::Tag >::iterator i = t.begin(); i != t.end(); ++ i) {
+ c->insertItem( i->name() );
+ }
+}
+
+EasyTagFilterWidget::EasyTagFilterWidget( QWidget *parent, const char *name )
+ : EasyTagFilterUi( parent, name )
+{
+ fillCombo( m_use, "use" );
+ fillCombo( m_interface, "interface" );
+ fillCombo( m_worksWith, "works-with" );
+ fillCombo( m_role, "role" );
+ connect( m_use, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_interface, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_worksWith, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_role, SIGNAL( activated( int ) ),
+ this, SLOT( widgetsChanged() ) );
+ connect( m_reset, SIGNAL( clicked() ),
+ this, SLOT( reset() ) );
+}
+
+static void setFacet( QComboBox *c, const std::string fac,
+ EasyTagFilter< entity::Package > &f )
+{
+ if (c->currentItem())
+ f.set( fac, c->currentText() );
+}
+
+EasyTagFilterWidget::Predicate EasyTagFilterWidget::predicate()
+{
+ EasyTagFilter< entity::Package > f;
+ setFacet( m_use, "use", f );
+ setFacet( m_interface, "interface", f );
+ setFacet( m_worksWith, "works-with", f );
+ setFacet( m_role, "role", f );
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void setCombo( QComboBox *c, const std::string &t ) {
+ c->blockSignals( true );
+ if (t == "")
+ c->setCurrentItem( 0 );
+ else
+ c->setCurrentText( t );
+ c->blockSignals( false );
+}
+
+void EasyTagFilterWidget::predicateChanged() {
+ typedef EasyTagFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ setCombo( m_use, f.get( "use" ) );
+ setCombo( m_interface, f.get( "interface" ) );
+ setCombo( m_role, f.get( "role" ) );
+ setCombo( m_worksWith, f.get( "works-with" ) );
+}
+
+void EasyTagFilterWidget::reset() {
+ setCombo( m_use, "" );
+ setCombo( m_interface, "" );
+ setCombo( m_role, "" );
+ setCombo( m_worksWith, "" );
+ emit widgetsChanged();
+}
diff --git a/adept/libadept/easytagfilter.h b/adept/libadept/easytagfilter.h
new file mode 100644
index 0000000..edbe8b5
--- /dev/null
+++ b/adept/libadept/easytagfilter.h
@@ -0,0 +1,93 @@
+/** -*- C++ -*-
+ @file adept/quickfilter.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <kdebug.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/component/tags.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/easytagfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+
+#ifndef EPT_EASYTAGFILTER_H
+#define EPT_EASYTAGFILTER_H
+
+namespace adept {
+
+template< typename T >
+struct EasyTagFilter : predicate::Implementation< T, EasyTagFilter< T > >,
+ InterfacingPredicate
+{
+ typedef std::map< std::string, std::string > Tags;
+
+ EasyTagFilter() {
+ setupPredicate();
+ }
+
+ void setupPredicate() {
+ Cache &cache = cache::Global::get(); // FIXME?
+ m_op = predicate::True< T >();
+ for (Tags::iterator i = m_tags.begin(); i != m_tags.end(); ++i ) {
+ m_op = m_op and predicate::Factory< T >::tag(
+ cache.tags().tagByName( i->first + "::" + i->second ) );
+ // kdDebug() << t.summary() << endl;
+ }
+ }
+
+ std::string summary() const {
+ std::string r( i18n( "EasyTag filter: " ).local8Bit() );
+ for (Tags::const_iterator j, i = m_tags.begin();
+ i != m_tags.end(); ++i ) {
+ j = i; ++j;
+ r += i->first + ": " + i->second;
+ if (j != m_tags.end())
+ r += ", ";
+ }
+ return r;
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const EasyTagFilter &o ) const {
+ return o.m_tags == m_tags;
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ void set( const std::string &f, const std::string &t ) {
+ m_tags[f] = t;
+ setupPredicate();
+ }
+
+ std::string get( const std::string &f ) {
+ return m_tags[ f ];
+ }
+
+protected:
+ Tags m_tags;
+ predicate::Predicate< T > m_op;
+};
+
+class EasyTagFilterWidget : public EasyTagFilterUi
+{
+ Q_OBJECT
+public:
+ EasyTagFilterWidget( QWidget *parent, const char *name = 0 );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+ void reset();
+};
+
+}
+
+#endif
diff --git a/adept/libadept/easytagfilterui.ui b/adept/libadept/easytagfilterui.ui
new file mode 100644
index 0000000..998bf2b
--- /dev/null
+++ b/adept/libadept/easytagfilterui.ui
@@ -0,0 +1,201 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::EasyTagFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>EasyTagFilterUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>611</width>
+ <height>116</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>QuickFilterUi</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_title</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;Easy Tag Filter&lt;/b&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Works With:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Role:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>Anything</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_worksWith</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="4">
+ <property name="name">
+ <cstring>m_reset</cstring>
+ </property>
+ <property name="text">
+ <string>Reset Filter</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="3">
+ <item>
+ <property name="text">
+ <string>Any</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_interface</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Use:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>Any</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_use</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Any</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_role</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Interface:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>130</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/libadept/extendablelist.cpp b/adept/libadept/extendablelist.cpp
new file mode 100644
index 0000000..55d1013
--- /dev/null
+++ b/adept/libadept/extendablelist.cpp
@@ -0,0 +1,332 @@
+#include <kdebug.h>
+#include <qtimer.h>
+#include <qobjectlist.h>
+#include <qpainter.h>
+#include <qimage.h>
+#include <kiconeffect.h>
+#include <kiconloader.h>
+
+#include <adept/extendablelist.h>
+#include <adept/utils.h>
+
+using namespace adept;
+
+ExtendableList::ExtendableList( QWidget *p, const char *n )
+ : KListView( p, n ),
+ m_toggleColumn( 0 ), m_inDtor( false ),
+ m_extenderUpdateScheduled( false ),
+ m_needSort( false ),
+ m_extenderHighlight( false )
+{
+ // kdDebug() << "connecting processClick har har" << endl;
+ connect( this, SIGNAL( clicked( QListViewItem *,
+ const QPoint &, int ) ),
+ this, SLOT( processClick( QListViewItem *,
+ const QPoint &, int ) ) );
+ connect( this, SIGNAL( moved() ),
+ this, SLOT( delayedUpdateExtenders() ) );
+ connect( this, SIGNAL( collapsed( QListViewItem * ) ),
+ this, SLOT( delayedUpdateExtenders() ) );
+ connect( this, SIGNAL( expanded( QListViewItem * ) ),
+ this, SLOT( delayedUpdateExtenders() ) );
+ setTreeStepSize( 15 );
+
+ m_baseIcon = SmallIcon( u8( "extender_closed" ) );
+ m_extendedIcon = SmallIcon( u8( "extender_opened" ) );
+ QImage img;
+ img = m_baseIcon;
+ KIconEffect::toGray( img, 1.0 );
+ m_unextendableIcon = QPixmap( img );
+}
+
+void ExtendableList::keyPressEvent( QKeyEvent *e ) {
+ ExtendableItem *item = dynamic_cast< ExtendableItem* >( currentItem() );
+ if ( item && item->extendable() ) {
+ if ( item->extender() && e->key() == Qt::Key_Left ) {
+ return item->hideExtender();
+ } else if ( !item->extender() && e->key() == Qt::Key_Right ) {
+ return item->showExtender();
+ }
+ }
+ return KListView::keyPressEvent( e );
+}
+
+void ExtendableList::openToplevel() {
+ QListViewItem *i;
+ for ( i = firstChild(); i != 0; i = i->nextSibling() ) {
+ i->setOpen( true );
+ }
+}
+
+int ExtendableList::extenderOffset( ExtendableItem *i )
+{
+ int c = 0, x = 0;
+
+ while( c < m_toggleColumn ) {
+ x += columnWidth( c );
+ c ++;
+ }
+
+ if ( m_toggleColumn >= 0 ) {
+ // *sigh*
+ if ( i->pixmap( m_toggleColumn ) )
+ x += i->pixmap( m_toggleColumn )->width();
+ if ( rootIsDecorated() )
+ x += treeStepSize();
+ if ( i->parent() )
+ x += treeStepSize();
+ }
+
+ return x;
+}
+
+void ExtendableList::updateExtender( ExtendableItem *i )
+{
+ // setUpdatesEnabled( false );
+
+ // since updateGeometries is private, we use this dirty trick to
+ // get at it (since setContentsPos in QListView calls it
+ setContentsPos( contentsX(), contentsY() );
+
+ if ( !i->isVisible() || ( i->parent() && !i->parent()->isOpen() ) ) {
+ kdDebug() << "hiding invisible item's extender" << endl;
+ i->hideExtender();
+ return;
+ }
+
+ // QRect rect = itemRect( i );
+ addChild( i->extender(), extenderOffset( i ), itemPos( i ) );
+ // addChild( i->extender(), x, rect.y() );
+ i->extender()->show();
+ i->extender()->resize( visibleWidth() - extenderOffset( i ),
+ i->extender()->height() );
+ if ( i->height() != i->extender()->frameSize().height() ) {
+ i->setHeight( i->extender()->frameSize().height() );
+ delayedUpdateExtenders(); // re-update since we broke layout
+ }
+
+ i->extender()->setupColors();
+
+ // setUpdatesEnabled( true );
+ // addChild( i->extender(), x, itemPos( i ) );
+ // QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) );
+ // QTimer::singleShot( 0, i->extender(), SLOT( setupColors() ) );
+}
+
+void ExtendableList::delayedUpdateExtenders()
+{
+ if ( m_extenderUpdateScheduled )
+ return;
+ m_extenderUpdateScheduled = true;
+ // kdDebug() << "ExtendableList::delayedUpdateExtenders()" << endl;
+ QTimer::singleShot( 0, this, SLOT( updateExtenders() ) );
+}
+
+void ExtendableList::clear()
+{
+ kdDebug() << "ExtendableList::clear()" << endl;
+ KListView::clear();
+ kdDebug() << "end of ExtendableList::clear()" << endl;
+}
+
+void ExtendableList::show()
+{
+ KListView::show();
+ updateExtenders();
+}
+
+void ExtendableList::showEvent( QShowEvent *e )
+{
+ KListView::showEvent( e );
+ updateExtenders();
+}
+
+void ExtendableList::resizeEvent( QResizeEvent *e )
+{
+ KListView::resizeEvent( e );
+ updateExtenders();
+ // delayedUpdateExtenders();
+}
+
+void ExtendableList::updateExtenders()
+{
+ m_extenderUpdateScheduled = false;
+ setUpdatesEnabled( false );
+ // updateGeometries();
+ // since updateGeometries is private, we use this dirty trick to
+ // get at it (since setContentsPos in QListView calls it
+ setContentsPos( contentsX(), contentsY() );
+ extendersChanged();
+ kdDebug() << "ExtendableList::updateExtenders(); count = "
+ << m_extenders.size() << endl;
+ if ( m_needSort ) {
+ std::sort( m_extenders.begin(), m_extenders.end(), ExtendableItem::s_less );
+ m_needSort = false;
+ }
+
+ std::for_each( m_extenders.begin(), m_extenders.end(),
+ std::bind1st( std::mem_fun( &ExtendableList::updateExtender ),
+ this ) );
+
+ setUpdatesEnabled( true );
+ // triggerUpdate();
+ if ( !m_extenderUpdateScheduled )
+ QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) );
+ /* if ( m_extenders.empty() )
+ QTimer::singleShot( 0, this, SLOT( triggerUpdate() ) ); */
+ // QTimer::singleShot( 0, this, SIGNAL( extendersChanged() ) );
+}
+
+void ExtendableList::addExtender( ExtendableItem *item )
+{
+ m_extenders.push_back( item );
+ m_needSort = true;
+ // std::sort( m_extenders.begin(), m_extenders.end(), ExtendableItem::s_less );
+ // updateExtender( item );
+ delayedUpdateExtenders();
+}
+
+void ExtendableList::removeExtender( ExtendableItem *i )
+{
+ kdDebug() << "ExtendableList::removeExtender( " << i << " )" << endl;
+ m_extenders.erase( std::remove( m_extenders.begin(),
+ m_extenders.end(), i ),
+ m_extenders.end() );
+ // the above retains ordering so no need to re-sort
+ if (!m_inDtor)
+ delayedUpdateExtenders();
+}
+
+void ExtendableList::processClick( QListViewItem *it,
+ const QPoint &pt, int c )
+{
+ // if (! it) return;
+ ExtendableItem *item = dynamic_cast< ExtendableItem* >( it );
+ if (!item) return;
+ kdDebug() << "ExtendableList::processClick (a real item)" << endl;
+
+ if (c == m_toggleColumn)
+ item->toggleExtender();
+ if ( item->extender() )
+ item->extender()->setupColors();
+ delayedUpdateExtenders();
+ /* if (item->extender()) {
+ if (c == m_toggleColumn)
+ item->toggleExtender();
+ } else
+ item->toggleExtender(); */
+}
+
+ExtendableList::~ExtendableList() {
+}
+
+ExtendableList *ExtendableItem::list()
+{
+ return dynamic_cast< ExtendableList * >( listView() );
+}
+
+bool ExtendableItem::s_less(
+ const ExtendableItem *a, const ExtendableItem *b )
+{
+ return a->less( b );
+}
+
+int ExtendableItem::compare( QListViewItem *i, int c, bool asc ) const
+{
+ ExtendableItem *o = dynamic_cast< ExtendableItem * >( i );
+ return int( o->less( this ) ) - int( less( o ) );
+}
+
+void ExtendableItem::updateIcon() {
+ QPixmap p;
+ if ( !extender() ) {
+ p = list()->baseIcon();
+ if ( !extendable() && !firstChild() ) {
+ p = list()->unextendableIcon();
+ }
+ } else {
+ p = list()->extendedIcon();
+ }
+ setPixmap( list()->toggleColumn(), p );
+
+ // umm hack
+ if ( dynamic_cast< ExtendableItem * >( parent() ) )
+ dynamic_cast< ExtendableItem * >( parent() )->updateIcon();
+}
+
+
+void ExtendableItem::toggleExtender()
+{
+ if (m_extender) {
+ setup();
+ if( list() ) // this could as well be 0... bah
+ list()->removeExtender( this );
+ delete m_extender;
+ m_extender = 0;
+ } else {
+ m_extender = createExtender();
+ if (m_extender) {
+ m_extender->setItem( this );
+ list()->addExtender( this );
+ }
+ if ( !m_extender && firstChild() ) {
+ setOpen( !isOpen() );
+ }
+ }
+ updateIcon();
+}
+
+void ExtendableItem::paintBranches( QPainter *p,
+ const QColorGroup &cg, int w, int y, int h )
+{
+ /* if (!isAlternate())
+ p->setBackgroundColor(
+ KGlobalSettings::alternateBackgroundColor() );
+ p->eraseRect( 0, y, w, h ); */
+ p->eraseRect( 0, 0, w, h );
+}
+
+/* void ExtendableItem::paintCell( QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ KListViewItem::paintCell( &_p, cg, column, width, alignment );
+ p->drawPixmap( 0, 0, pm );
+ } */
+
+
+static void setcolor( QWidget *w, ExtendableItem *i ) {
+ if ( i->isSelected() && i->list()->extenderHighlight() )
+ w->setPaletteBackgroundColor( w->colorGroup().highlight() );
+ else if ( i->isAlternate() )
+ w->setPaletteBackgroundColor(
+ KGlobalSettings::alternateBackgroundColor() );
+ else
+ w->setPaletteBackgroundColor( w->colorGroup().base() );
+ // w->setBackgroundMode( QWidget::PaletteBase );
+}
+void ItemExtender::setupColors()
+{
+ if ( !item() ) return;
+ setcolor( this, item() );
+ QObjectList *chld = queryList( "QWidget" );
+ QObjectListIt it( *chld );
+ QWidget *o;
+ while ((o = dynamic_cast< QWidget * >( it.current() )) != 0) {
+ setcolor( o, item() );
+ ++it;
+ }
+}
+
+ExtendableItem::~ExtendableItem()
+{
+ // kdDebug() << "~ExtendableList; list = " << list() << endl;
+ // kdDebug() << "extender() = " << extender() << endl;
+ while ( firstChild() )
+ delete firstChild(); // har har
+ if( extender() && list() ) // list() could be 0...
+ list()->removeExtender( this );
+ if (extender())
+ extender()->deleteLater();
+}
diff --git a/adept/libadept/extendablelist.h b/adept/libadept/extendablelist.h
new file mode 100644
index 0000000..53a901b
--- /dev/null
+++ b/adept/libadept/extendablelist.h
@@ -0,0 +1,165 @@
+// -*- C++ -*-
+#include <klistview.h>
+#include <qpixmap.h>
+#include <qlayout.h>
+#include <kglobalsettings.h>
+#include <vector>
+
+#include <apt-front/utils/range.h>
+
+#ifndef EPT_EXTENDABLELIST_H
+#define EPT_EXTENDABLELIST_H
+namespace adept {
+
+using namespace aptFront;
+
+class ExtendableItem;
+class ExtendableList;
+class ItemExtender;
+
+class ExtendableList : public KListView {
+ Q_OBJECT
+public:
+ typedef bool(*ItemCompare)( const ExtendableItem *,
+ const ExtendableItem * );
+ ExtendableList( QWidget *p = 0, const char *n = 0 );
+ virtual ~ExtendableList();
+ QPixmap extendedIcon() { return m_extendedIcon; }
+ QPixmap baseIcon() { return m_baseIcon; }
+ QPixmap unextendableIcon() { return m_unextendableIcon; }
+ int extenderOffset( ExtendableItem *i );
+ void setExtenderHighlight( bool e ) { m_extenderHighlight = e; }
+ bool extenderHighlight() { return m_extenderHighlight; }
+public slots:
+ void addExtender( ExtendableItem *i );
+ void removeExtender( ExtendableItem *i );
+ void updateExtender( ExtendableItem *i );
+ void delayedUpdateExtenders();
+ void updateExtenders();
+ void setToggleColumn( int c ) {
+ m_toggleColumn = c;
+ }
+ unsigned toggleColumn() { return m_toggleColumn; }
+ virtual void show();
+ virtual void clear();
+ utils::Range< ExtendableItem * > extenders() {
+ return utils::range( m_extenders.begin(), m_extenders.end() ); }
+ void openToplevel();
+protected slots:
+ void processClick( QListViewItem *, const QPoint &, int );
+signals:
+ void extendersChanged();
+protected:
+ virtual void resizeEvent( QResizeEvent * );
+ virtual void showEvent( QShowEvent * );
+ virtual void keyPressEvent( QKeyEvent * );
+ std::vector< ExtendableItem * > m_extenders;
+ QPixmap m_extendedIcon;
+ QPixmap m_baseIcon;
+ QPixmap m_unextendableIcon;
+ int m_toggleColumn;
+ bool m_inDtor:1;
+ bool m_extenderUpdateScheduled:1;
+ bool m_needSort:1;
+ bool m_extenderHighlight:1;
+};
+
+class ExtendableItem : public KListViewItem {
+public:
+
+ ExtendableItem( ExtendableList *l )
+ : KListViewItem( l ), m_extender( 0 ) {
+ }
+
+ ExtendableItem( ExtendableList *l, ExtendableItem *prev )
+ : KListViewItem( l, prev ), m_extender( 0 ) {
+ }
+
+ ExtendableItem( ExtendableItem *p, ExtendableItem *prev )
+ : KListViewItem( p, prev ), m_extender( 0 ) {
+ }
+
+ ExtendableItem( ExtendableItem *p )
+ : KListViewItem( p ), m_extender( 0 ) {
+ }
+
+ virtual void setup() {
+ KListViewItem::setup();
+ updateIcon();
+ }
+ void toggleExtender();
+
+ void hideExtender() {
+ if (extender())
+ toggleExtender();
+ }
+
+ void showExtender() {
+ if (!extender())
+ toggleExtender();
+ }
+
+ ItemExtender *extender() { return m_extender; }
+
+ static bool s_less( const ExtendableItem *a, const ExtendableItem *b );
+
+ ExtendableList *list();
+
+ virtual void updateIcon();
+
+ virtual void paintBranches( QPainter *, const QColorGroup &, int, int, int );
+
+ virtual ItemExtender *createExtender() = 0;
+ virtual bool extendable() const { return false; }
+ virtual bool less( const ExtendableItem * ) const = 0;
+ virtual int compare( QListViewItem *other, int col, bool ascending ) const;
+
+ virtual ~ExtendableItem();
+ virtual void setHeight( int h ) { KListViewItem::setHeight( h ); }
+protected:
+ ItemExtender *m_extender;
+};
+
+class ItemExtender : public QWidget {
+ Q_OBJECT
+public:
+ // ItemExtender( ExtendableItem *item );
+ ItemExtender( QWidget *parent, const char *n )
+ : QWidget( parent, n ), m_item( 0 )
+ {}
+
+ virtual void setItem( ExtendableItem *i ) {
+ m_item = i;
+ }
+
+ virtual void polish() {
+ setupColors();
+ }
+
+ ExtendableItem *item() {
+ return m_item;
+ }
+
+ void resize( int w, int h ) {
+ setUpdatesEnabled( false );
+ QWidget::resize( w, h );
+ setUpdatesEnabled( true );
+ QWidget::resize( w, layout()->minimumSize().height() );
+ }
+
+ void resize( const QSize &s ) {
+ resize( s.width(), s.height() );
+ }
+
+public slots:
+ void setupColors();
+protected:
+ virtual void mouseReleaseEvent( QMouseEvent *e ) {
+ e->accept();
+ } // throw away mouse clicks :-)
+ ExtendableItem *m_item;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/filterlist.cpp b/adept/libadept/filterlist.cpp
new file mode 100644
index 0000000..7d4a1b0
--- /dev/null
+++ b/adept/libadept/filterlist.cpp
@@ -0,0 +1,231 @@
+#include <kdebug.h>
+#include <qpopupmenu.h>
+#include <qheader.h>
+#include <klineedit.h>
+
+#include <tagcoll/InputMerger.h>
+
+#include <apt-front/cache/component/tags.h>
+#include <apt-front/cache/entity/package.h>
+
+#include <adept/lister.h>
+#include <adept/filterlist.h>
+#include <adept/quickfilter.h>
+#include <adept/statefilter.h>
+#include <adept/easytagfilter.h>
+#include <adept/tagfilter.h>
+
+
+using namespace adept;
+using namespace Tagcoll;
+
+// TODO: Beat enrico till this lands in some of our libs...
+template< typename PKG, typename TAG >
+class TagcollConsumerAdaptor :
+ public utils::ConsumerImpl< PKG,TagcollConsumerAdaptor<PKG, TAG> >
+{
+protected:
+ Consumer<PKG, TAG>& m_out;
+
+public:
+ TagcollConsumerAdaptor( Consumer<PKG, TAG>& out) : m_out( out ) {}
+ virtual void consume( const PKG& a ) {
+ if (a != PKG())
+ m_out.consume(a, a.tags());
+ }
+};
+
+PredicateInterface::PredicateInterface( QWidget *w, const char *n )
+ : ItemExtender( w, n )
+{
+}
+
+void PredicateInterface::widgetsChanged() {
+ kdDebug() << "PredicateInterface::widgetsChanged()" << endl;
+ emit predicateDrop( m_pred );
+ m_pred = predicate();
+ emit predicateAdd( m_pred );
+ downcast< FilterItem >( item() ).setPredicate( m_pred );
+}
+
+FilterList::FilterList( QWidget *parent, const char *name )
+ : ExtendableList( parent, name ),
+ m_pred( predicate::True< entity::Entity >() ),
+ m_hidden( predicate::True< entity::Entity >() )
+{
+ m_itemsSeen = 0;
+ // addColumn( " ", 20 );
+ addColumn( i18n( "Active filters" ), 240 );
+ // setSortColumn( -1 );
+ /* setItemsMovable( true );
+ setDragEnabled( true );
+ setAcceptDrops( true ); */
+ setResizeMode( LastColumn );
+ setAllColumnsShowFocus (true);
+
+ resize( 240, 180 );
+ connect( this, SIGNAL(
+ contextMenuRequested( QListViewItem *, const QPoint
+ &, int ) ),
+ this, SLOT( contextMenu( QListViewItem *, const
+ QPoint &, int) ) );
+ connect( this, SIGNAL( extendersChanged() ),
+ this, SLOT( updateHeight() ) );
+}
+
+void FilterList::emitPredicateChanged() {
+ predicateChanged( m_hidden and m_pred );
+}
+
+void FilterList::updateHeight() {
+ int h = header()->height() + 4;
+ for ( QListViewItem *i = firstChild(); i != 0; i = i->nextSibling() ) {
+ h += i->totalHeight();
+ }
+ // int h = contentsHeight() + header()->height() + 4; // magic constant
+ setMinimumHeight( h );
+ setMaximumHeight( h );
+}
+
+void FilterList::drawContents( QPainter *p, int a, int b, int c, int d ) {
+ if ( m_itemsSeen != childCount() ) {
+ m_itemsSeen = childCount();
+ updateHeight();
+ } // hmm, doesn't work... bah :p
+ KListView::drawContents( p, a, b, c, d );
+}
+
+void FilterList::plugLister( Lister *l ) {
+ m_lister = l;
+ connect( this, SIGNAL( predicateChanged( ListerPredicate ) ),
+ l, SLOT( baseSet( ListerPredicate ) ) );
+}
+
+void FilterList::setPredicate( Predicate p ) {
+ clear();
+ m_pred = p;
+ appendPredicate( p );
+ emitPredicateChanged();
+}
+
+void FilterList::setHiddenPredicate( Predicate p ) {
+ m_hidden = p;
+ emitPredicateChanged();
+}
+
+void FilterList::editorPredicateDrop( Predicate p ) {
+ m_pred = predicate::remove( m_pred, p );
+ emitPredicateChanged();
+}
+
+void FilterList::editorPredicateAdd( Predicate p ) {
+ kdDebug() << "FilterList::editorPredicateAdd" << endl;
+ m_pred = m_pred and p;
+ emitPredicateChanged();
+}
+
+void FilterList::appendPredicate( Predicate p ) {
+ if (p.is< And >()) {
+ And a = p;
+ for (utils::Range< Predicate > r = a.parts();
+ r != r.end(); ++r )
+ appendPredicate( *r );
+ } else if (p.is< predicate::True< entity::Entity > >() ) {
+ // we generally ignore truth
+ } else {
+ m_pred = m_pred and p;
+ // kdDebug() << p.serialize() << endl;
+ // kdDebug() << p.prettyPrint() << endl;
+ FilterItem *i;
+ i = new FilterItem( this );
+ i->setPredicate( p );
+ }
+}
+
+void FilterList::contextMenu( QListViewItem *it, const QPoint &pt, int /*c*/ )
+{
+ std::cerr << "FilterList::contextMenu(p);" << std::endl;
+ FilterItem *i = dynamic_cast< FilterItem * >( it );
+ if (! i)
+ return;
+ QPopupMenu *m = new QPopupMenu( this );
+ m->insertItem( i18n( "Reset Filter" ), 1 );
+ m->insertItem( i18n( "Remove Filter" ), 0 );
+ m->insertSeparator();
+ m->insertItem( i18n( "Add Quick Filter" ), 8 );
+ m->insertItem( i18n( "Add State Filter" ), 9 );
+ m->insertItem( i18n( "Add Tag Filter" ), 10 );
+ m->insertItem( i18n( "Add Easy Tag Filter" ), 11 );
+ // m->insertItem( "Add Tag Filter", tagMenu() );
+ m_context = i;
+ connect(m, SIGNAL(activated(int)), this, SLOT(contextActivated(int)));
+ m->exec(pt);
+ delete m;
+}
+
+
+void FilterList::contextActivated( int i )
+{
+ predicate::Predicate< entity::Entity > p;
+ switch (i) {
+ case 0:
+ m_pred = predicate::remove( m_pred, m_context->predicate() );
+ delete m_context;
+ emitPredicateChanged();
+ return;
+ case 1:
+ m_context->reset();
+ return;
+ case 8:
+ p = predicate::adapt< entity::Entity >(
+ QuickFilter< entity::Package >() );
+ break;
+ case 9:
+ p = predicate::adapt< entity::Entity >(
+ StateFilter< entity::Package >() );
+ break;
+ case 10:
+ p = predicate::adapt< entity::Entity >(
+ TagFilter< entity::Package >() );
+ break;
+ case 11:
+ p = predicate::adapt< entity::Entity >(
+ EasyTagFilter< entity::Package >() );
+ break;
+ }
+ if (p.impl()) {
+ kdDebug() << "summary: " <<
+ downcast< InterfacingPredicate >( p ).summary() << endl;
+ appendPredicate( p );
+ emitPredicateChanged();
+ }
+}
+
+ItemExtender *FilterItem::createExtender()
+{
+ PredicateInterface *o = 0;
+ if (m_pred.is< QuickFilter< entity::Package > >()) {
+ o = new QuickFilterWidget( list(), 0 );
+ } else if (m_pred.is< StateFilter< entity::Package > >()) {
+ o = new StateFilterWidget( list(), 0 );
+ } else if (m_pred.is< EasyTagFilter< entity::Package > >()) {
+ o = new EasyTagFilterWidget( list(), 0 );
+ } else if (m_pred.is< TagFilter< entity::Package > >()) {
+ o = new TagFilterWidget( list(), 0 );
+ }
+ if (o) {
+ o->setPredicate( m_pred );
+ QObject::connect( o, SIGNAL( predicateAdd( Predicate ) ),
+ list(), SLOT( editorPredicateAdd( Predicate ) ) );
+ QObject::connect( o, SIGNAL( predicateDrop( Predicate ) ),
+ list(), SLOT( editorPredicateDrop( Predicate ) ) );
+ }
+ return o;
+}
+
+QString FilterItem::text( int c ) const {
+ InterfacingPredicate &ip = downcast< InterfacingPredicate >( m_pred.impl() );
+ if (c == 0)
+ return ip.summary();
+ return u8( "" );
+}
diff --git a/adept/libadept/filterlist.h b/adept/libadept/filterlist.h
new file mode 100644
index 0000000..f904bc7
--- /dev/null
+++ b/adept/libadept/filterlist.h
@@ -0,0 +1,149 @@
+/** -*- C++ -*-
+ @file adept/filterlist.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qtooltip.h>
+#include <kdebug.h>
+
+#include <apt-front/predicate/matchers.h>
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/component/packagetags.h>
+#include <apt-front/cache/component/tags.h>
+
+#include <adept/listerpredicate.h>
+#include <adept/extendablelist.h>
+
+#ifndef EPT_FILTERLIST_H
+#define EPT_FILTERLIST_H
+
+class QPopupMenu;
+
+namespace adept {
+using namespace aptFront;
+using namespace aptFront::cache;
+class Lister;
+
+struct InterfacingPredicate
+{
+public:
+ virtual std::string summary() const = 0;
+ virtual void reset() {}
+signals:
+ void changed();
+};
+
+
+class PredicateInterface: public ItemExtender
+{
+ Q_OBJECT
+public:
+ typedef predicate::Predicate< entity::Entity > Predicate;
+ PredicateInterface( QWidget *w = 0, const char *n = 0 );
+ virtual Predicate predicate() = 0;
+signals:
+ void predicateAdd( Predicate );
+ void predicateDrop( Predicate );
+public slots:
+ virtual void setPredicate( const Predicate &p ) {
+ m_pred = p;
+ predicateChanged();
+ }
+ virtual void widgetsChanged();
+ virtual void predicateChanged() = 0;
+protected:
+ predicate::Predicate< entity::Entity > m_pred;
+};
+
+class FilterItem;
+
+class FilterList : public ExtendableList
+{
+ Q_OBJECT
+public:
+ friend class FilterItem;
+ typedef predicate::Predicate< entity::Entity > Predicate;
+ // typedef std::map< KListViewItem *, Predicate > Map;
+ FilterList( QWidget *parent = 0, const char *name = 0 );
+ typedef predicate::And< entity::Entity > And;
+ void appendPredicate( Predicate p );
+ void plugLister( Lister *l );
+ void emitPredicateChanged();
+signals:
+ void predicateChanged( ListerPredicate p );
+public slots:
+ void setPredicate( Predicate p );
+ void setHiddenPredicate( Predicate p );
+protected slots:
+ void editorPredicateDrop( Predicate );
+ void editorPredicateAdd( Predicate );
+ void contextMenu( QListViewItem *, const QPoint &, int );
+ // QPopupMenu *tagMenu();
+ void contextActivated( int );
+ // void tagMenuActivated( int );
+ void updateHeight();
+protected:
+ void drawContents( QPainter *, int, int, int, int );
+ Predicate m_pred;
+ Predicate m_hidden;
+ FilterItem *m_context;
+ bool m_changed;
+ Lister *m_lister;
+ int m_itemsSeen;
+ std::vector< entity::Tag > m_tagMenuMap;
+};
+
+class FilterItem : public ExtendableItem
+{
+public:
+ ItemExtender *createExtender();
+ FilterItem( FilterList *l )
+ : ExtendableItem( l ), m_delayedDone( false )
+ {
+ }
+ void setup() {
+ ExtendableItem::setup();
+ if (m_delayedDone)
+ return;
+ m_delayedDone = true;
+ showExtender();
+ }
+
+ QString text( int ) const;
+
+ virtual bool less( const ExtendableItem *other ) const {
+ const FilterItem *o = dynamic_cast< const FilterItem * >( other );
+ return downcast< InterfacingPredicate >( m_pred ).summary() <
+ downcast< InterfacingPredicate >( o->m_pred ).summary();
+ }
+
+ void setPredicate( predicate::Predicate< entity::Entity > p ) {
+ m_pred = p;
+ }
+
+ FilterList::Predicate predicate() const {
+ return m_pred;
+ }
+
+ FilterList *filterList() { return dynamic_cast< FilterList * >( list() ); }
+
+ void reset() {
+ filterList()->editorPredicateDrop( m_pred );
+ downcast< InterfacingPredicate >( m_pred ).reset();
+ if ( extender() ) {
+ downcast< PredicateInterface >( extender() ).setPredicate( m_pred );
+ extender()->setFocus();
+ }
+ filterList()->editorPredicateAdd( m_pred );
+ }
+
+protected:
+ predicate::Predicate< entity::Entity > m_pred;
+ bool m_delayedDone:1;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/filtersidebar.cpp b/adept/libadept/filtersidebar.cpp
new file mode 100644
index 0000000..52d909e
--- /dev/null
+++ b/adept/libadept/filtersidebar.cpp
@@ -0,0 +1,71 @@
+#include <functional>
+#include <ext/functional>
+#include <algorithm>
+#include <cmath>
+#include <apt-front/cache/entity/tag.h>
+#include <apt-front/cache/component/tags.h>
+#include <adept/filtersidebar.h>
+#include <adept/tagchooser.h>
+
+using namespace adept;
+using namespace aptFront;
+using namespace std;
+using namespace __gnu_cxx;
+
+template< typename H, typename G1, typename G2 >
+struct _compose2_binary {
+ _compose2_binary( H _h, G1 _g1, G2 _g2 )
+ : h( _h ), g1( _g1 ), g2( _g2 )
+ {}
+
+ typename H::result_type operator()(
+ typename G1::argument_type a,
+ typename G2::argument_type b )
+ {
+ return h( g1( a ), g2( b ) );
+ }
+
+ H h;
+ G1 g1;
+ G2 g2;
+};
+
+template< typename H, typename G1, typename G2 >
+_compose2_binary< H, G1, G2 > compose2_binary( H h, G1 g1, G2 g2 ) {
+ return _compose2_binary< H, G1, G2 >( h, g1, g2 );
+}
+
+void FilterSidebar::setCardinality( const Lister::Cardinality &c )
+{
+ cache::entity::Tag::Set all, smart;
+
+ kdDebug() << "FilterSidebar::setCardinality" << endl;
+ Lister::Cardinality cprime;
+ remove_copy_if( c.begin(), c.end(), inserter( cprime, cprime.begin() ),
+ compose1( bind1st( equal_to< int >(), 0 ),
+ select2nd<
+ Lister::Cardinality::value_type >() ) );
+ transform( cprime.begin(), cprime.end(), inserter( all, all.begin() ),
+ select1st< Lister::Cardinality::value_type >() );
+ m_all->setTags( all );
+ cache::component::Tags &t = cache::Global().get().tags();
+ m_easy->setTags( all ^ ( t.facetByName( "interface" ).tags()
+ + t.facetByName( "works-with" ).tags()
+ + t.facetByName( "use" ).tags()
+ + t.facetByName( "role" ).tags() ) );
+
+ typedef vector< pair< cache::entity::Tag, int > > Vec;
+ Vec vec;
+ copy( cprime.begin(), cprime.end(), back_inserter( vec ) );
+ sort( vec.begin(), vec.end(),
+ compose2_binary( less< int >(),
+ select2nd< Vec::value_type >(),
+ select2nd< Vec::value_type >() ) );
+ Vec::reverse_iterator end = vec.rbegin();
+ advance( end, vec.size() < 10 ? vec.size() : 10 );
+ transform( vec.rbegin(), end, inserter( smart, smart.begin() ),
+ select1st< Vec::value_type >() );
+
+ m_smart->setTags( smart );
+ m_smart->openToplevel();
+}
diff --git a/adept/libadept/filtersidebar.h b/adept/libadept/filtersidebar.h
new file mode 100644
index 0000000..0fac201
--- /dev/null
+++ b/adept/libadept/filtersidebar.h
@@ -0,0 +1,26 @@
+/* -*- C++ -*- file adept/filtersidebar.h
+ written by Peter Rockai <[email protected]> */
+
+#include <adept/filtersidebarui.h>
+#include <adept/lister.h>
+
+#ifndef EPT_FILTERSIDEBAR_H
+#define EPT_FILTERSIDEBAR_H
+
+namespace adept {
+
+// using namespace aptFront;
+
+class FilterSidebar : public FilterSidebarUi {
+ Q_OBJECT
+public:
+ FilterSidebar( QWidget *p = 0, const char *n = 0 )
+ : FilterSidebarUi( p, n )
+ {}
+public slots:
+ void setCardinality( const Lister::Cardinality & );
+};
+
+}
+
+#endif
diff --git a/adept/libadept/filtersidebarui.ui b/adept/libadept/filtersidebarui.ui
new file mode 100644
index 0000000..0f2efb4
--- /dev/null
+++ b/adept/libadept/filtersidebarui.ui
@@ -0,0 +1,119 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::FilterSidebarUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>adept::FilterSidebarUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>227</width>
+ <height>469</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form2</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QTabWidget" row="0" column="0">
+ <property name="name">
+ <cstring>m_tabs</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab0</cstring>
+ </property>
+ <attribute name="title">
+ <string>Smart</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::TagChooser" row="0" column="0">
+ <property name="name">
+ <cstring>m_smart</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab1</cstring>
+ </property>
+ <attribute name="title">
+ <string>Simple</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::TagChooser" row="0" column="0">
+ <property name="name">
+ <cstring>m_easy</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab2</cstring>
+ </property>
+ <attribute name="title">
+ <string>All</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::TagChooser" row="0" column="0">
+ <property name="name">
+ <cstring>m_all</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::TagChooser</class>
+ <header location="global">adept/tagchooser.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </customwidget>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/tagchooser.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/filterwidget.cpp b/adept/libadept/filterwidget.cpp
new file mode 100644
index 0000000..f294327
--- /dev/null
+++ b/adept/libadept/filterwidget.cpp
@@ -0,0 +1,36 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <klocale.h>
+#include <klineedit.h>
+#include "filterwidget.h"
+
+using namespace aptFront;
+using namespace adept;
+
+void FilterWidget::connectLister( Lister *l ) {
+ connect( this, SIGNAL( drop( ListerPredicate ) ),
+ l, SLOT( interactiveDrop( ListerPredicate ) ) );
+ connect( this, SIGNAL( changed( ListerPredicate ) ),
+ l, SLOT( interactiveAnd( ListerPredicate ) ) );
+ connect( this, SIGNAL( apply( ListerPredicate ) ),
+ l, SLOT( baseAnd( ListerPredicate ) ) );
+
+}
+
+void FilterWidget::changedInternal() {
+ setEnabled( false );
+ emit drop( m_old );
+ emit changed( m_old = predicate() );
+ setEnabled( true );
+ setFocus();
+}
+
+void FilterWidget::applyInternal() {
+ // check for emptiness?
+ setEnabled( false );
+ emit drop( m_old );
+ emit apply( m_old = predicate() );
+ reset();
+ setEnabled( true );
+ setFocus();
+}
diff --git a/adept/libadept/filterwidget.h b/adept/libadept/filterwidget.h
new file mode 100644
index 0000000..78b0c38
--- /dev/null
+++ b/adept/libadept/filterwidget.h
@@ -0,0 +1,39 @@
+/** -*- C++ -*-
+ @file adept/filterwidgets.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <adept/lister.h>
+
+#ifndef EPT_FILTERWIDGET_H
+#define EPT_FILTERWIDGET_H
+
+class KLineEdit;
+
+namespace adept {
+
+class FilterWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ FilterWidget( QWidget *parent = 0, const char *n = 0 )
+ : QWidget( parent, n ) {}
+ virtual ListerPredicate predicate() = 0;
+ void connectLister( Lister *l );
+protected slots:
+ void changedInternal();
+ void applyInternal();
+ virtual void reset() = 0;
+signals:
+ void changed( ListerPredicate op );
+ void apply( ListerPredicate op );
+ void drop( ListerPredicate op );
+protected:
+ ListerPredicate m_old;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/groupeddesktopselector.cpp b/adept/libadept/groupeddesktopselector.cpp
new file mode 100644
index 0000000..68afa98
--- /dev/null
+++ b/adept/libadept/groupeddesktopselector.cpp
@@ -0,0 +1,137 @@
+/** -*- C++ -*-
+ @file adept/groupeddestkopselector.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qobjectlist.h>
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <kiconloader.h>
+#include <kglobal.h>
+#include <kseparator.h>
+#include <kapplication.h>
+
+#include <apt-front/cache/component/desktop.h>
+#include <adept/groupeddesktopselector.h>
+#include <adept/desktoplist.h>
+#include <adept/utils.h>
+
+using namespace aptFront;
+using namespace cache;
+
+namespace adept {
+
+GroupedDesktopSelector::GroupedDesktopSelector( QWidget *p, const char *n )
+ : KJanusWidget( p, n, IconList ), m_policy( 0 )
+{
+ observeComponent< cache::component::Packages >();
+ m_pages.push_back( addPage( QString( "Initializing..." ) ) );
+ QObjectList *chld = queryList( "QWidget" );
+ QObjectListIt it( *chld ); QWidget *o;
+ while ((o = dynamic_cast< QWidget * >( it.current() )) != 0) {
+ if ( dynamic_cast< QLabel * >( o ) != 0 )
+ o->hide();
+ if ( dynamic_cast< KSeparator * >( o ) != 0 )
+ o->hide();
+ ++it;
+ } // *hack*
+
+ // AAAA hack
+ QLayoutIterator li = layout()->iterator();
+ QHBoxLayout *hbox = 0;
+ while ( li.current() != 0 ) {
+ hbox = dynamic_cast< QHBoxLayout * >( li.current() );
+ if ( hbox ) break;
+ ++li;
+ }
+ kdDebug() << "hacking hbox = " << hbox << endl;
+ if ( hbox ) {
+ li = hbox->iterator();
+ while ( li.current() != 0 ) {
+ QSpacerItem *spacer = dynamic_cast< QSpacerItem * >( li.current() );
+ if ( spacer ) {
+ hbox->removeItem( spacer );
+ delete spacer;
+ }
+ ++li;
+ }
+ }
+}
+
+void GroupedDesktopSelector::notifyPreRebuild( component::Base * ) {
+ clear();
+}
+
+void GroupedDesktopSelector::notifyPostRebuild( component::Base * ) {
+ // QTimer::singleShot( 0, this, SLOT( fill() ) );
+}
+
+void GroupedDesktopSelector::clear()
+{
+ if ( !m_pages.empty() )
+ showPage( m_pages.front() );
+ while ( !m_pages.empty() ) {
+ removePage( m_pages.back() );
+ delete m_pages.back();
+ m_pages.pop_back();
+ }
+}
+
+void GroupedDesktopSelector::fill()
+{
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ fill( d.entries() );
+}
+
+void GroupedDesktopSelector::fill( component::Desktop::EntityRange r )
+{
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ utils::Range< std::string > gr;
+ QString last = pageTitle( activePageIndex() );
+
+ clear();
+
+ bool shown = false;
+
+ for ( gr = d.availableGroups( r ); gr != gr.end(); gr.advance() ) {
+
+ component::Desktop::EntityRange cr = d.group( *gr );
+ QString name = u8( *gr );
+ std::cerr << "group for " << cr->name() << ": " << r->group() << std::endl;
+ name = ( name != u8( "" ) ? name : u8( "Legacy" ) );
+
+ QPixmap icon( KGlobal::iconLoader()->iconPath(
+ policy() ? policy()->iconForGroup( name ) : u8( "" ), -32 ) );
+
+ QVBox *b = addVBoxPage( name, name, icon );
+ m_pages.push_back( b );
+ std::cerr << "creating list for " << *gr << std::endl;
+
+ DesktopList *l = new DesktopList( b );
+ l->setTitle( name );
+ connect( l, SIGNAL( request( cache::entity::Package,
+ cache::component::State::Action ) ),
+ this, SIGNAL( request( cache::entity::Package,
+ cache::component::State::Action ) ) );
+ connect( l, SIGNAL( showDescription( cache::entity::Desktop ) ),
+ this, SIGNAL( showDescription( cache::entity::Desktop ) ) );
+
+ l->insertRange( intersectionRange( r, cr ) );
+ // l->insertRange( cr );
+
+ std::cerr << "created list for " << *gr << std::endl;
+ if ( name == last ) {
+ showPage( b );
+ shown = true;
+ }
+ kapp->processEvents();
+ }
+
+ if ( m_pages.empty() )
+ m_pages.push_back( addPage( QString( "No Results" ) ) );
+ if ( !shown )
+ showPage( pageIndex( m_pages.front() ) );
+}
+
+}
diff --git a/adept/libadept/groupeddesktopselector.h b/adept/libadept/groupeddesktopselector.h
new file mode 100644
index 0000000..a54f7aa
--- /dev/null
+++ b/adept/libadept/groupeddesktopselector.h
@@ -0,0 +1,39 @@
+/** -*- C++ -*-
+ @file adept/groupeddestkopselector.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <kjanuswidget.h>
+#include <apt-front/cache/entity/desktop.h>
+
+namespace adept {
+using namespace aptFront;
+using namespace aptFront::cache;
+
+// XXX needs fixing
+class GroupedDesktopSelector : public KJanusWidget, cache::Observer
+{
+ Q_OBJECT
+public:
+ struct IconPolicy {
+ virtual QString iconForGroup( QString group ) { return group; }
+ };
+ GroupedDesktopSelector( QWidget *p = 0, const char *n = 0 );
+ void fill( component::Desktop::EntityRange r );
+ void setPolicy( IconPolicy *p ) { m_policy = p; }
+ IconPolicy *policy() { return m_policy; }
+ virtual void notifyPreRebuild( cache::component::Base * );
+ virtual void notifyPostRebuild( cache::component::Base * );
+public slots:
+ void clear();
+ void fill();
+signals:
+ void request( cache::entity::Package, cache::component::State::Action );
+ void showDescription( cache::entity::Desktop );
+protected:
+ IconPolicy *m_policy;
+ std::vector< QWidget * > m_pages;
+ // IconPolicy m_defaultPolicy;
+};
+
+}
diff --git a/adept/libadept/installerview.cpp b/adept/libadept/installerview.cpp
new file mode 100644
index 0000000..eac9dc7
--- /dev/null
+++ b/adept/libadept/installerview.cpp
@@ -0,0 +1,88 @@
+#include <qlineedit.h>
+#include <qcombobox.h>
+#include <qtextbrowser.h>
+#include <qcheckbox.h>
+#include <klocale.h>
+
+#include <apt-front/cache/entity/desktop.h>
+#include <apt-front/predicate/factory.h>
+#include <apt-front/cache/component/tags.h>
+#include <adept/installerview.h>
+#include <adept/packageinfo.h>
+#include <adept/utils.h>
+
+using namespace adept;
+using namespace aptFront;
+using namespace cache;
+
+void InstallerView::rebuild()
+{
+ typedef predicate::Factory< entity::Desktop > Factory;
+ if ( m_inRebuild ) {
+ QTimer::singleShot( 500, this, SLOT( rebuild() ) );
+ return;
+ }
+ m_inRebuild = true;
+
+ component::Desktop &d = cache::Global::get().component< component::Desktop >();
+ component::Tags &t =
+ cache::Global::get().component< component::Tags >();
+
+ Predicate p = predicate::True< entity::Desktop >();
+ if ( m_search->text() != u8( "" ) ) {
+ Predicate tmp = Factory::name( u8( m_search->text() ) )
+ or Factory::description( u8( m_search->text() ) );
+ p = p and tmp;
+ }
+
+ std::string st = "";
+ int si = m_suite->currentItem();
+
+ if ( si == 0 ) st = "suite::kde";
+ if ( si == 1 ) st = "suite::gnome";
+
+ if ( st != "" )
+ p = p and Factory::tag( t.tagByName( st ) );
+
+ if ( !m_unsupported->isChecked() ) {
+ p = p and not Factory::sectionSubstring( "contrib" )
+ and not Factory::sectionSubstring( "universe" )
+ and not Factory::sectionSubstring( "multiverse" );
+ }
+
+ if ( !m_nonfree->isChecked() ) {
+ p = p and not Factory::sectionSubstring( "non-free" )
+ and not Factory::sectionSubstring( "multiverse" )
+ and not Factory::sectionSubstring( "restricted" );
+ }
+
+ selector()->fill( filteredRange( d.entries(), p ) );
+
+ m_inRebuild = false;
+}
+
+InstallerView::InstallerView( QWidget *p , const char *n )
+ : InstallerViewUi( p, n ), m_inRebuild( false )
+{
+ connect( m_search, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( textChanged() ) );
+ connect( &timer, SIGNAL( timeout() ), this, SLOT( rebuild() ) );
+ connect( m_suite, SIGNAL( activated( int ) ), this, SLOT( rebuild() ) );
+ connect( m_unsupported, SIGNAL( toggled( bool ) ), this, SLOT( rebuild() ) );
+ connect( m_nonfree, SIGNAL( toggled( bool ) ), this, SLOT( rebuild() ) );
+ connect( selector(), SIGNAL( showDescription( cache::entity::Desktop ) ),
+ this, SLOT( showDescription( cache::entity::Desktop ) ) );
+}
+
+void InstallerView::textChanged() {
+ timer.start( 1000, true );
+}
+
+void InstallerView::showDescription( entity::Desktop e )
+{
+ kdDebug() << "InstallerView::showDescription..." << endl;
+ m_description->setText( u8( "<b>" ) + e.name() + u8( "</b>" )
+ + i18n( "<br><b>Package:</b> " ) + e.package().name()
+ + formatLongDescription(
+ e.package().longDescription( std::string( "" ) ) ) );
+}
diff --git a/adept/libadept/installerview.h b/adept/libadept/installerview.h
new file mode 100644
index 0000000..ed955dc
--- /dev/null
+++ b/adept/libadept/installerview.h
@@ -0,0 +1,33 @@
+/** -*- C++ -*-
+ @file adept/installerview.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qtimer.h>
+#include <adept/installerviewui.h>
+#include <adept/groupeddesktopselector.h>
+
+#ifndef EPT_INSTALLERVIEW_H
+#define EPT_INSTALLERVIEW_H
+
+namespace adept {
+class InstallerView : public InstallerViewUi
+{
+ Q_OBJECT
+public:
+ typedef predicate::Predicate< entity::Desktop > Predicate;
+ InstallerView( QWidget *p = 0, const char *n = 0 );
+ GroupedDesktopSelector *selector() { return m_selector; }
+protected slots:
+ void textChanged();
+ void showDescription( cache::entity::Desktop );
+public slots:
+ void rebuild();
+protected:
+ bool m_inRebuild;
+ QTimer timer;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/installerviewui.ui b/adept/libadept/installerviewui.ui
new file mode 100644
index 0000000..6f8b5d7
--- /dev/null
+++ b/adept/libadept/installerviewui.ui
@@ -0,0 +1,194 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>InstallerViewUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>InstallerViewUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>666</width>
+ <height>314</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>4</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Search:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_search</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>KDE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>GNOME</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Any Suite</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_suite</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Show:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_unsupported</cstring>
+ </property>
+ <property name="text">
+ <string>unsupported,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_nonfree</cstring>
+ </property>
+ <property name="text">
+ <string>proprietary software.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="adept::GroupedDesktopSelector" row="1" column="0">
+ <property name="name">
+ <cstring>m_selector</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>6</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QTextBrowser" row="1" column="1">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>4</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::GroupedDesktopSelector</class>
+ <header location="local">adept/groupeddesktopselector.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1122">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042949444154388db5954d6c545514c77ff7de37eff1a6a550da994e5ba798868f948fc847a2a2911816c436b0a02ed0083161a1981877ee10d90aa94656063491882c5cd4c4b8103f20cd806909a98604da8482341de80cb69de9bcd799799d79efba980f1da3a80b4f727273939bdff99f9b93f3175a6b6a21849080020c4002a29a8f0a5dcd002803bed63a1035f0d0d0504b6f6fef51d7758fa4d3e98d8ee3fc03af128ee3303939399548242eb8aefb09300f78464de9f0f0f0d148cc7caf3d5424de97a7ec17104220242805520a44557bbd4b21f083801d33e63a6d1bc7bf19c6064e0319a35a58b9ae7ba43d54e4d7c54b64dc097c7f09d30ef04b36736983cc7c11b4456b9b492c5e20dc54a6540e00896a8268a7017010f8bcae1830d2e9f4c69ebe3c197782b2ce60d94ddc9b30f9feeb45ae5d7181c5ead35636ef08d3ffe26a76ee3208b4031a56d80aa00768fda362e9380e25bf80ef3b587613d7afc099533380a4b5dda46fcb5aa42998b9eb7173dce5e6788e434763ec7fc942532008ea436003660d2caa7f8d69c3bd8910674e4d033e83877ad8d36fb0aa4d6058658ac5358c5df6383bf480f31fdda5a3632bbbfb6da4ccd5c00a10b2012cc12fd97cfb5516f0187c25cee0619396480ec3ca909d0f3372d1e5f9fe66de3ad605587c712ec55256a2540d5519d19ae24a29057329839f7ecc138944d833102290f3184ae1e6d6f0e98739c61229e6d21eafbed1c9c8c5558c8f3ee4ceed76946a1c43d97091828585223e2eebfbc295f60d45de89707628cb58224577bc85a79e5d4d786581cddb9b0148259711b20145836221400416e0232d1f6595c9ce4538773ac7b54406f0b15784e8e80aa1ac2594190220d021e49f2437960156b70ba095e95f96f18acd8c263cc6122962b1167a7ba34cdd7ec8c977a699bed546722a8fc2a02b6e2185fff78ab586ce78894ddb9ab9f5738ed14b1e030756929d8ff2e4ae5544632b38f96e89a99b298ebd6950cc2d12ed0eb3618b26f520788462ad09877df60db600f0f1fb49c646f21c7ebd836dcf94e9d9b4c0db27d6d3bd36c6426a96bce731703046d7da129a4670836284a054869d4f1b1c7e2dca67676ef3c1898091ef5ad8bc358c3205c93bf7c9a40ad4c660f4728edd7bbb3142ea2fc1da711cfc200011e08b45f6bd1c261adbce9717928c5f9d63fc6a19f0014567773303073790f8214bd6f5282dfbb8b9fa1f6b40d7c1939393533b92e63ad9240990484aec7e41b27d579cbb531e0f67023492d86316ebb768ba1e0f786e6f37e56550c62237aee7011e54abd7c1412291b8a06de378b4d3c0b215da9708e5a3a442192085404a83d4accfecac067c0c43e13a70e3fa12e96409e0325000966bbb354465339d04a6f9dd15fe6dde07ce030780278088d05ad72cc9a6b2f2daaaa74d75a1f0e8d0d5f60b40868a8364ead6248430000b0857a126ffcdf396abf03ce089ffcb4c7f033046c6b4a995e7a00000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/groupeddesktopselector.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/lister.cpp b/adept/libadept/lister.cpp
new file mode 100644
index 0000000..85142c3
--- /dev/null
+++ b/adept/libadept/lister.cpp
@@ -0,0 +1,707 @@
+// -*- Mode: C++; c-basic-offset: 4; -*-
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qpainter.h>
+#include <qpushbutton.h>
+#include <qthread.h>
+#include <qtextbrowser.h>
+
+#include <kpopupmenu.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+
+#include <functional>
+#include <iostream>
+
+#include <apt-front/cache/cache.h>
+#include <apt-front/actor.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/utils.h>
+#include <adept/lister.h>
+#include <adept/packageinfo.h>
+
+using namespace aptFront;
+using namespace aptFront::predicate;
+using namespace aptFront::cache;
+using namespace aptFront::utils;
+using namespace adept;
+
+Lister::Lister( QWidget *parent, const char *name )
+ : ExtendableList( parent, name ),
+ m_rangeProvider( 0 ),
+ m_baseF( predicate::True< entity::Entity >() ),
+ m_interactiveF( True<entity::Entity>() ), m_itemCount( -1 ),
+ m_rebuildScheduled( false ), m_inRebuild( false ), m_cancelRebuild( false ),
+ m_openToplevel( false ), m_rebuildMutex( true )
+{
+ observeComponent< component::State >();
+ observeComponent< component::Packages >();
+ observeComponent< component::PackageTags >();
+ setRootIsDecorated( false );
+ setSelectionModeExt( Extended );
+ setAllColumnsShowFocus (true);
+
+ m_icons[ u8( "package-install" ) ] = u8( "adept_install" );
+ m_icons[ u8( "package-remove" ) ] = u8( "adept_remove" );
+ m_icons[ u8( "package-upgrade" ) ] = u8( "adept_upgrade" );
+ m_icons[ u8( "package-keep" )] = u8( "adept_keep" );
+ m_icons[ u8( "package-reinstall" )] = u8( "adept_reinstall" );
+ m_icons[ u8( "package-purge" )] = u8( "adept_purge" );
+
+ setSorting( -1 );
+ // addColumn(" ", 40);
+ // addColumn(" ", 18);
+ addColumn( i18n( "Package" ), 180);
+ addColumn( i18n( "Status" ), 110);
+ addColumn( i18n( "Requested" ), 90);
+ addColumn( i18n( "Description" ), 300);
+ setToggleColumn( 0 );
+
+ setResizeMode (LastColumn);
+ connect( this, SIGNAL( selectionChanged() ), SLOT( updateActions() ) );
+ connect( this,
+ SIGNAL( contextMenuRequested( QListViewItem *,
+ const QPoint &, int ) ),
+ this, SLOT(
+ contextMenu( QListViewItem *, const QPoint &, int) ) );
+ m_tip = 0;
+ // m_tip = new ListerTooltip( viewport(), this );
+}
+
+Lister::~Lister()
+{
+ delete m_tip;
+}
+
+void Lister::scheduleRebuild()
+{
+ if (!m_rebuildScheduled) {
+ // kdDebug() << "Lister scheduling rebuild" << endl;
+ QTimer::singleShot( 0, this, SLOT( rebuild() ) );
+ }
+ m_rebuildScheduled = true;
+}
+
+void Lister::updateActions()
+{
+ emit actionsChanged( this );
+}
+
+void Lister::notifyPostChange( component::Base * )
+{
+ kdDebug() << "notifyRefresh()" << endl;
+ updateActions();
+ triggerUpdate();
+}
+
+void Lister::notifyPreRebuild( component::Base *b )
+{
+ kdDebug() << "Lister::notifyPreRebuild( " << b << " )" << endl;
+ Cache &c = cache::Global::get( m_cache );
+ setEnabled( false );
+ if ( dynamic_cast< component::PackageTags * >( b ) != 0 ) {
+ kdDebug() << "clearing cardinality" << endl;
+ m_cardinality.clear();
+ }
+ if ( dynamic_cast< component::Packages * >( b ) != 0 ) {
+ kdDebug() << "clearing lister" << endl;
+ clear();
+ m_items.clear();
+ m_cardinality.clear();
+ }
+}
+
+void Lister::notifyPostRebuild( component::Base *b )
+{
+ kdDebug() << "Lister::notifyPostRebuild( " << b << " )" << endl;
+ scheduleRebuild();
+ if ( dynamic_cast< component::State * >( b ) != 0 ) {
+ setEnabled( true );
+ }
+}
+
+bool lessByName( const entity::Entity &e1, const entity::Entity &e2 )
+{
+ if ( e1.is< entity::Named >() && e2.is< entity::Named >() ) {
+ entity::Named &n1 = downcast< entity::Named >( e1 ),
+ &n2 = downcast< entity::Named >( e2 );
+ return n1.name() < n2.name();
+ }
+ return e1 < e2;
+}
+
+bool Lister::cancelRebuild() {
+ // kdDebug() << "cancel rebuild: " << m_inRebuild << ", " << m_cancelRebuild << endl;
+ if ( m_inRebuild ) {
+ m_rebuildScheduled = false;
+ m_cancelRebuild = true;
+ }
+ if ( !cache::Global::get( m_cache ).isOpen() ) {
+ m_rebuildScheduled = false;
+ return true;
+ }
+ return m_cancelRebuild;
+}
+
+void Lister::cleanRebuild()
+{
+ scheduleRebuild();
+}
+
+Lister::CreateItem::CreateItem( Lister *_l, ListerItem *p )
+ : l( _l ), time( 0 ), items( 0 ), last( 0 ), parent( p )
+{
+}
+
+Lister::CreateItem::~CreateItem()
+{
+ // delete timer;
+}
+
+Lister::Map::value_type Lister::CreateItem::operator()( entity::Entity e )
+{
+ items ++;
+ if ( l->m_cancelRebuild ) throw 0; // XXX proper exception please
+ // kdDebug() << "trying to acquire mutex" << endl;
+ l->m_rebuildMutex.lock();
+ // kdDebug() << "mutex acquired" << endl;
+
+ // count tags
+ if ( e.is< entity::Package >() ) {
+ const entity::Tag::Set &tags = downcast< entity::Package >( e ).tags();
+ for (entity::Tag::Set::iterator i = tags.begin(); i != tags.end(); ++ i )
+ l->m_cardinality[ *i ] ++;
+ }
+
+ if ( last ) {
+ if ( parent )
+ last = new ListerItem( parent, last, e );
+ else
+ last = new ListerItem( l, last, e );
+ } else {
+ if ( parent )
+ last = new ListerItem( parent, e );
+ else
+ last = new ListerItem( l, e );
+ }
+ l->m_rebuildMutex.unlock();
+ if ( e.is< entity::Relation >() )
+ // this should be safe because the parent thread is waiting
+ // for us and ensures that universe (libapt-front) is kept
+ // unchanged while we run
+ l->insertRangeInternal( InsertRangePair(
+ last, downcast< entity::Relation >( e ).targetPackages() ) );
+ // we may want to use recursive async call instead? why?
+ /* Threads::enqueue(
+ asyncCall( std::bind2nd( std::mem_fun( &Lister::insertRangeInternal ),
+ InsertRangePair(
+ last,
+ downcast< entity::Relation >( e ).targetPackages() ) ),
+ l ), &(l->m_rebuildMutex) );
+ */
+ return std::make_pair( e, last );
+}
+
+void Lister::reallyUpdate()
+{
+ bool en = isUpdatesEnabled();
+ setUpdatesEnabled( true );
+ triggerUpdate();
+ setUpdatesEnabled( en );
+}
+
+void Lister::insertRange( Range r ) {
+ insertRangeInternal( InsertRangePair( 0, r ) );
+}
+void Lister::insertRangeInternal( InsertRangePair a )
+{
+ // kdDebug() << "insertRange running..." << endl;
+ try {
+ std::transform( a.second, a.second.end(),
+ inserter( m_items, m_items.begin() ),
+ CreateItem( this, a.first ) );
+ } catch ( ... ) {}
+ m_itemCount = m_items.size();
+}
+
+/* void Lister::rebuildInsertRange( Range r ) {
+ insertRange( 0, r );
+ } */
+
+void Lister::rebuild()
+{
+ Cache &c = cache::Global::get( m_cache );
+ if ( cancelRebuild() ) {
+ scheduleRebuild();
+ return;
+ }
+
+ m_inRebuild = true;
+ m_rebuildMutex.lock();
+
+ emit rebuildStarted();
+
+ c.progress().OverallProgress( 0, 0, 0, i18n( "Filtering" ) );
+ kdDebug() << "rebuild running" << endl;
+ clock_t _c = clock(), C;
+ for ( Cardinality::iterator i = m_cardinality.begin();
+ i != m_cardinality.end(); ++i )
+ i->second = 0;
+
+ kdDebug() << "querying m_rangeProvider " << m_rangeProvider << "..." << endl;
+
+ Range r = filteredRange( m_rangeProvider ?
+ m_rangeProvider->listerRange() : range( VectorRange() ),
+ m_baseF );
+ C = (clock() - _c) / 1000; _c = clock();
+
+ setUpdatesEnabled( false );
+ kdDebug() << "clearing..." << endl;
+ clear();
+ m_items.clear();
+
+ kdDebug() << "asyncCall to rebuildInsertRange..." << endl;
+ QThread *t = asyncCall( std::bind2nd(
+ std::mem_fun( &Lister::insertRangeInternal ),
+ InsertRangePair( 0, r ) ),
+ this );
+
+ kdDebug() << "starting the thread..." << endl;
+
+ QTimer timer;
+ connect( &timer, SIGNAL( timeout() ),
+ this, SLOT( reallyUpdate() ) );
+ timer.start( 0 );
+
+ m_rebuildMutex.unlock();
+ Threads::enqueue( t, &m_rebuildMutex );
+ Threads::wait();
+
+ timer.stop();
+
+ kdDebug() << "thread finished..." << endl;
+ C = (clock() - _c) / 1000; _c = clock();
+ kdDebug() << m_items.size() << " entities synced, time = " << C << endl;
+
+ setUpdatesEnabled( true );
+ c.progress().Done();
+ if ( m_openToplevel ) openToplevel();
+ triggerUpdate();
+
+ if ( !m_cancelRebuild ) {
+ for ( Cardinality::iterator i = m_cardinality.begin();
+ i != m_cardinality.end(); ++i )
+ if ( i->second == m_itemCount )
+ i->second = -1;
+ emit cardinalityChanged( m_cardinality );
+ }
+
+ m_inRebuild = false;
+ m_rebuildScheduled = false;
+ m_cancelRebuild = false;
+ emit rebuildFinished();
+}
+
+void Lister::baseAnd( Predicate o )
+{
+ m_baseF = predicate::predicate( m_baseF and o );
+ // emit filterChanged( m_baseF );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+void Lister::baseSet( Predicate o )
+{
+ m_baseF = o;
+ // emit filterChanged( m_baseF );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+void Lister::interactiveAnd( Predicate o )
+{
+ m_interactiveF = predicate::predicate( m_interactiveF and o );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+void Lister::interactiveDrop( Predicate o )
+{
+ m_interactiveF = predicate::remove( m_interactiveF, o );
+ cancelRebuild();
+ scheduleRebuild();
+}
+
+bool Lister::itemSelected( Map::value_type i )
+{
+ return not i.second->isSelected();
+}
+
+entity::Entity Lister::extractKey( Map::value_type i )
+{
+ return i.first;
+}
+
+Lister::VectorRange Lister::selection()
+{
+ VectorRange ret;
+ Map m;
+ std::remove_copy_if( m_items.begin(), m_items.end(),
+ inserter( m, m.begin() ),
+ itemSelected );
+ std::transform( m.begin(), m.end(),
+ consumer( ret ),
+ extractKey );
+ return ret;
+}
+
+Lister::VectorRange Lister::content()
+{
+ VectorRange ret;
+ std::transform( m_items.begin(), m_items.end(),
+ consumer( ret ),
+ extractKey );
+ return ret;
+}
+
+QString ListerItem::text( int column ) const
+{
+ // if (column == 0) return ""; // until we redo paintcell for the col
+ if (entity().is<entity::Package>()) {
+ entity::Package p = entity();
+ switch (column) {
+ case 0: return u8( p.name( u8( i18n( "n/a" ) ) ) );
+ case 1: return u8( p.statusString( u8( i18n( "n/a" ) ) ) );
+ case 2: return u8( p.actionString( u8( i18n( "n/a" ) ) ) );
+ case 3: return u8( p.shortDescription( u8( i18n( "n/a" ) ) ) );
+ // case 2: return p.candidateVersion().versionString();
+ }
+ }
+ if ( entity().is< entity::Relation >() && column == 0 )
+ return downcast< entity::Relation >( entity() ).format();
+ return u8( "" );
+}
+
+void ListerItem::paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ if ( width <= 0 )
+ return;
+ QColorGroup _cg( cg );
+ QColor c = _cg.text();
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ if (entity().is<entity::Package>()) {
+ entity::Package p = entity();
+ if (column == 1)
+ c = statusColor( p );
+ if (column == 2)
+ c = actionColor( p );
+ }
+ _cg.setColor( QColorGroup::Text, c );
+ KListViewItem::paintCell( &_p, _cg, column, width, AlignTop );
+ p->drawPixmap( 0, 0, pm );
+}
+
+void Lister::contextMenu( QListViewItem *it, const QPoint &pt, int /*c*/ )
+{
+ if (! it) // check for actor when we have one...
+ return;
+ m_context = dynamic_cast< ListerItem * >( it );
+ VectorRange sel = selection();
+ // entity::Package p = (dynamic_cast<ListerItem *>(it)->entity());
+ KPopupMenu *m = new KPopupMenu (this);
+ utils::Range< Actor > r = actor::Global< entity::Package >::list();
+ int id = 8;
+ try {
+ for (; r != r.end(); ++r) {
+ m->insertItem( SmallIconSet( m_icons[ u8( r->name() ) ] ),
+ r->prettyName(), id );
+ m->setItemEnabled(
+ id, r->possible( utils::upcastRange< entity::Package >( sel ) ) );
+ ++id;
+ }
+ } catch ( std::bad_cast ) {} // ignore (this is broken, but
+ // easiest fix)
+ bool open = m_context->extender();
+ m->insertItem( open ? i18n( "Hide details" ) :
+ i18n( "Show details" ), open ? 1 : 0 );
+ connect(m, SIGNAL(activated(int)), this, SLOT(contextActivated(int)));
+ m->exec(pt);
+ delete m;
+}
+
+void Lister::contextActivated( int id )
+{
+ VectorRange sel = selection();
+ try {
+ if (id >= 8) {
+ utils::Range< Actor > r = actor::Global< entity::Package >::list();
+ std::advance( r, id - 8 );
+ (*r)( utils::upcastRange< entity::Package >( sel ) );
+ updateActions();
+ }
+ if (id < 8) {
+ VectorRange i = sel.begin();
+ while (i != i.end()) {
+ if (id == 0)
+ m_items[*i]->showExtender();
+ if (id == 1)
+ m_items[*i]->hideExtender();
+ ++ i;
+ }
+ }
+ } catch ( std::bad_cast ) {} // ignore (this is broken, but
+}
+
+ListerItemExtender::~ListerItemExtender()
+{
+}
+
+ListerItemExtender::ListerItemExtender( QWidget *parent, const char * n)
+ : ListerItemExtenderUi( parent, n )
+{
+ observeComponent< component::State >();
+ adjustFontSize( m_description, -1 );
+ connect( m_details, SIGNAL( clicked() ),
+ this, SLOT( detailsClicked() ) );
+
+ m_packageInfo->adjustFontSize( -1 );
+ m_packageInfo->hideStatus();
+}
+
+void ListerItemExtender::detailsClicked() {
+ detailsRequested( m_entity );
+}
+
+ListerItem *ListerItemExtender::item()
+{
+ return dynamic_cast< ListerItem * >( m_item );
+}
+
+void ListerItemExtender::mouseReleaseEvent( QMouseEvent *e ) {
+ e->ignore();
+ if ( childAt( e->pos() ) != static_cast< QWidget * >( m_name ) )
+ e->accept();
+}
+void ListerItemExtender::setItem( ExtendableItem *i )
+{
+ ItemExtender::setItem( i );
+ m_entity = item()->entity();
+ // setupColors();
+
+ kdDebug() << "ListerItemExtender::setItem connecting" << endl;
+ connect( this, SIGNAL( detailsRequested( Lister::Entity ) ),
+ item()->list(), SIGNAL( detailsRequested( Lister::Entity ) ) );
+
+ entity::Version v;
+ entity::Package p;
+
+ if ( m_entity.is< entity::Version >() ) {
+ v = m_entity;
+ p = v.package();
+ }
+
+ if ( m_entity.is< entity::Package >() ) {
+ p = m_entity;
+ v = p.anyVersion();
+ }
+
+ if ( !v.valid() ) {
+ m_logical->setText( i18n( "Immutable" ) );
+ m_logical->setEnabled( false );
+ m_details->setEnabled( false );
+ return;
+ }
+
+ m_name->setText( /* QString( "<b>" ) + */
+ v.package().name( std::string( "oops" ) ) /* + "</b>" */ );
+ QString l = u8( v.longDescription(
+ u8( i18n( "No long description available" ) ) ) );
+
+ m_description->setText( QString( "<qt>" )
+ + formatLongDescription( l ) + "</qt>" );
+ m_description->adjustSize();
+ m_description->installEventFilter( this );
+
+ m_packageInfo->setVersion( v, m_entity.is< entity::Version >() );
+
+ notifyPostChange( 0 );
+}
+
+void ListerItemExtender::notifyPostRebuild( component::Base *b )
+{ // need to catch undo/redo effects
+ return notifyPostChange( b );
+}
+
+void ListerItemExtender::notifyPostChange( component::Base * )
+{
+ // without the timer to break it, there could be a loop where
+ // we connect the clicked() signal to a slot which would be
+ // invoked right away when we return -> evil
+ QTimer::singleShot( 0, this, SLOT( updateLogical() ) );
+}
+
+void ListerItemExtender::updateLogical() {
+ entity::Package pkg = entity();
+ EntityActor *a = 0;
+
+ m_status->setText( colorify(
+ statusColor( pkg ),
+ u8( pkg.statusString( u8( i18n( "Unknown" ) ) ) ) ) );
+ m_change->setText( colorify(
+ actionColor( pkg ),
+ u8( pkg.actionString( u8( i18n( "Unknown" ) ) ) ) ) );
+
+
+ m_logical->setEnabled( true );
+ if (pkg.canUpgrade()) {
+ a = new EntityActor( pkg.upgrade() );
+ } else if (pkg.canInstall()) {
+ a = new EntityActor( pkg.install() );
+ } else if (pkg.canKeep()) {
+ a = new EntityActor( pkg.keep() );
+ } else if (pkg.canRemove()) {
+ a = new EntityActor( pkg.remove() );
+ }
+
+ if (a) {
+ m_logical->setText( u8( a->actor().prettyName() ) );
+ connect( m_logical, SIGNAL( clicked() ),
+ a, SLOT( destructiveAct() ) );
+ } else {
+ m_logical->setText( i18n( "Immutable" ) );
+ m_logical->setEnabled( false );
+ }
+
+}
+
+bool ListerItemExtender::eventFilter( QObject *o, QEvent *e )
+{
+ if (o == m_description && e->type() == QEvent::Wheel) {
+ // kdDebug() << "discarding wheel event..." << endl;
+ QApplication::sendEvent( this, e );
+ return true;
+ }
+ return false;
+}
+
+void ListerItemExtender::resize( int w, int h )
+{
+ int namew = - item()->lister()->extenderOffset( item() ) - 2
+ - layout()->margin()
+ - layout()->spacing()
+ + item()->lister()->columnWidth( 0 );
+ int statw = item()->lister()->columnWidth( 1 )
+ - layout()->spacing();
+ int chw = item()->lister()->columnWidth( 2 ) - 2
+ - layout()->spacing();
+ m_name->setMinimumWidth( namew );
+ m_status->setMinimumWidth( statw );
+ m_change->setMinimumWidth( chw );
+ m_packageInfo->adjustSize();
+ m_leftHeight = m_name->height() + m_packageInfo->height()
+ + m_logical->height() + 20;
+ QWidget::resize( w, 500 );
+ QWidget::resize(
+ w,
+ QMAX( m_description->contentsHeight() + 16,
+ m_leftHeight ) );
+}
+
+bool entityLess::operator()( entity::Entity e1, entity::Entity e2 )
+{
+ if ( e1.is< entity::Package >() ) {
+ if ( e2.is< entity::Package >() )
+ return e1 < e2;
+ return true;
+ }
+
+ if ( e1.is< entity::Version >() ) {
+ if ( e2.is< entity::Package >() )
+ return false;
+ if ( e2.is< entity::Version >() )
+ return e1 < e2;
+ return true;
+ }
+
+ if ( e1.is< entity::Relation >() ) {
+ if ( e2.is< entity::Package >() )
+ return false;
+ if ( e2.is< entity::Version >() )
+ return false;
+ if ( e2.is< entity::Relation >() )
+ return e1 < e2;
+ return true;
+ }
+ return true;
+}
+
+bool ListerItem::less( const ExtendableItem *b ) const
+{
+ entity::Entity e1 = entity(), e2 = dynamic_cast< const ListerItem * >( b )->entity();
+ return entityLess()( e1, e2 );
+}
+
+bool ListerItem::keepLess( const ListerItem *o ) const
+{
+ const ListerItem *b = o;
+ while ( b != 0 ) {
+ if ( b == this )
+ return false;
+ b = b->m_previous;
+ }
+ while ( o != 0 ) {
+ o = dynamic_cast< const ListerItem * >( o->nextSibling() );
+ if ( o == this )
+ return true;
+ }
+ return false;
+}
+
+QString ListerTooltip::format( const QString &what,
+ const QString &txt, bool nobr )
+{
+ QString ret = "<b>" + what + "</b>&nbsp;" + (nobr ? "<nobr>" : "")
+ + txt + (nobr ? "</nobr>" : "") + "<br>";
+ return ret;
+}
+
+void ListerTooltip::maybeTip( const QPoint &pt )
+{
+ if ( !m_parent )
+ return;
+ kdDebug() << "ListTreeWidgetTooltip::maybeTip ()" << endl;
+ ListerItem *x = dynamic_cast<ListerItem *>( m_parent->itemAt( pt ) );
+ if ( !x )
+ return;
+ if ( x->extender() )
+ return; // no tips for extended items, thank you
+ QString str = u8( "<qt>" );
+ QString descr, cand, cur;
+ descr = cand = cur = i18n( "<i>Not available</i>" );
+ entity::Package p( x->entity() );
+ descr = p.shortDescription( std::string(
+ i18n( "<i>Not available</i>" ).local8Bit() ) );
+ try {
+ cand = u8( p.candidateVersion().versionString() );
+ } catch (...) {}
+ try {
+ cur = u8( p.installedVersion().versionString() );
+ } catch (...) {}
+
+ str += format( i18n( "Package:" ), u8( p.name() ) );
+ str += format( i18n( "Description:" ), descr );
+ str += format( i18n( "Current&nbsp;Version:" ), cur );
+ str += format( i18n( "Candidate&nbsp;Version:" ), cand );
+
+ str.append( u8( "</qt>" ) );
+ tip( m_parent->itemRect( x ), str );
+}
diff --git a/adept/libadept/lister.h b/adept/libadept/lister.h
new file mode 100644
index 0000000..dede538
--- /dev/null
+++ b/adept/libadept/lister.h
@@ -0,0 +1,220 @@
+/** -*- C++ -*-
+ @file adept/lister.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qtooltip.h>
+#include <qmap.h>
+#include <qmutex.h>
+#include <set>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/actor.h>
+#include <apt-front/predicate/matchers.h>
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/utils/range.h>
+
+#include <adept/extendablelist.h>
+#include <adept/listerextenderui.h>
+#include <adept/actor.h>
+#include <adept/listerpredicate.h>
+
+#ifndef EPT_LISTER_H
+#define EPT_LISTER_H
+
+class KLineEdit;
+
+namespace adept {
+
+using namespace aptFront;
+using namespace aptFront::cache;
+class ListerTooltip;
+class ListerItemExtender;
+class ListerItem;
+class Lister;
+
+struct entityLess {
+ bool operator()( entity::Entity e1, entity::Entity e2 );
+};
+
+class Lister: public ExtendableList, public Observer
+{
+ Q_OBJECT
+public:
+ typedef entity::Entity Entity;
+ typedef std::vector< Entity > Vector;
+ typedef utils::Range< Entity > Range;
+ typedef utils::VectorRange< Entity > VectorRange;
+ typedef std::set< Entity > Set;
+ typedef std::map< Entity, ListerItem *, entityLess > Map;
+ typedef actor::Actor< entity::Package > Actor;
+ typedef predicate::Predicate< Entity > Predicate;
+ typedef std::map< cache::entity::Tag, int > Cardinality;
+ struct RangeProvider {
+ virtual Range listerRange() = 0;
+ };
+
+ Lister (QWidget *parent = 0, const char *name = 0);
+ ~Lister();
+ void setSource();
+ virtual void notifyPostChange( component::Base * );
+ virtual void notifyPreRebuild( component::Base * );
+ virtual void notifyPostRebuild( component::Base * );
+ VectorRange selection();
+ VectorRange content();
+ int itemCount() { return m_itemCount; }
+ // void setRange( const Range &r ) { m_range = r; }
+ void setRangeProvider( RangeProvider *r ) { m_rangeProvider = r; }
+ void insertRange( Range );
+ void setOpenToplevel( bool o ) { m_openToplevel = o; }
+
+ bool busy() { return m_rebuildScheduled || m_inRebuild; }
+
+signals:
+ // this is adept::Lister because of braindead moc
+ void actionsChanged( adept::Lister * );
+ void cardinalityChanged( const Lister::Cardinality & );
+ void detailsRequested( Lister::Entity );
+ void rebuildStarted();
+ void rebuildFinished();
+ // void filterChanged( Lister::Predicate );
+
+public slots:
+ virtual void cleanRebuild();
+ virtual void rebuild();
+ virtual void baseAnd( ListerPredicate );
+ virtual void interactiveDrop( ListerPredicate );
+ virtual void interactiveAnd( ListerPredicate );
+ virtual void baseSet( ListerPredicate );
+ virtual void updateActions();
+ virtual void scheduleRebuild();
+ virtual void reallyUpdate();
+protected slots:
+ void contextMenu( QListViewItem *, const QPoint &, int );
+ void contextActivated( int );
+protected:
+ typedef std::pair< ListerItem *, Range > InsertRangePair;
+ void insertRangeInternal( InsertRangePair );
+ ListerTooltip *m_tip;
+
+ static Entity extractKey( Map::value_type );
+ static bool itemSelected( Map::value_type );
+
+ struct CreateItem {
+ CreateItem( Lister *, ListerItem * );
+ ~CreateItem();
+ Map::value_type operator()( Entity );
+ Lister *l;
+ int time;
+ int items;
+ ListerItem *last;
+ ListerItem *parent;
+ };
+
+ bool cancelRebuild();
+ void rebuildInsertRange( Range );
+
+ ListerItem *m_context;
+ QMap< QString, QString > m_icons;
+ Map m_items;
+ Vector m_all;
+ RangeProvider *m_rangeProvider;
+ Predicate m_baseF, m_interactiveF;
+ int m_itemCount;
+ bool m_rebuildScheduled:1;
+ bool m_inRebuild:1;
+ bool m_cancelRebuild:1;
+ bool m_openToplevel:1;
+ Cardinality m_cardinality;
+ QMutex m_rebuildMutex;
+};
+
+class ListerTooltip : public QToolTip
+{
+public:
+ ListerTooltip (QWidget *v, Lister *p) : QToolTip (v, 0), m_parent (p) {};
+protected:
+ QString format( const QString &, const QString &, bool = true );
+ virtual void maybeTip (const QPoint &p);
+ Lister *m_parent;
+};
+
+class ListerItemExtender : public ListerItemExtenderUi,
+ public cache::Observer {
+ Q_OBJECT
+public:
+ ListerItemExtender( QWidget *parent = 0, const char * n = 0 );
+ ~ListerItemExtender();
+ virtual void resize( int w, int h );
+ void setItem( ExtendableItem *i );
+ ListerItem *item();
+ entity::Entity entity() const { return m_entity; }
+ void notifyPostChange( component::Base * );
+ void notifyPostRebuild( component::Base * );
+protected slots:
+ void detailsClicked();
+ void updateLogical();
+signals:
+ void detailsRequested( Lister::Entity );
+protected:
+ bool eventFilter( QObject *o, QEvent *e );
+ void mouseReleaseEvent( QMouseEvent *e );
+ entity::Entity m_entity;
+ unsigned m_leftHeight;
+};
+
+class ListerItem: public ExtendableItem
+{
+public:
+ ListerItem(Lister *v, entity::Entity e)
+ : ExtendableItem (v), m_previous( 0 ), m_entity( e )
+ {}
+ ListerItem(Lister *v, ListerItem *i, entity::Entity e)
+ : ExtendableItem( v, i ), m_previous( i ), m_entity( e )
+ {}
+ ListerItem(ListerItem *p, ListerItem *i, entity::Entity e)
+ : ExtendableItem( p, i ), m_previous( i ), m_entity( e )
+ {}
+ ListerItem(ListerItem *p, entity::Entity e)
+ : ExtendableItem( p ), m_previous( 0 ), m_entity( e )
+ {}
+
+ virtual ItemExtender *createExtender() {
+ if ( extendable() )
+ return new ListerItemExtender();
+ return 0;
+ }
+
+ /* virtual void updateIcon( const QPixmap &p ) {
+ if ( m_entity.is< entity::Package >()
+ || m_entity.is< entity::Version >() )
+ return ExtendableItem::updateIcon( p );
+ setPixmap( list()->toggleColumn(), QPixmap() );
+ } */
+
+ virtual QString text( int column ) const;
+ entity::Entity entity() { return m_entity; }
+ const entity::Entity entity() const { return m_entity; }
+ virtual void paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment);
+ virtual bool less( const ExtendableItem * ) const;
+ Lister *lister() {
+ return dynamic_cast< Lister* >( listView() );
+ }
+
+ // beware, makes sort O(n^2lg(n^2))
+ bool keepLess( const ListerItem *o ) const;
+ virtual bool extendable() const {
+ return ( entity().is< entity::Package >()
+ || m_entity.is< entity::Version >() );
+ }
+
+protected:
+ ListerItem *m_previous;
+ entity::Entity m_entity;
+};
+
+}
+
+#endif /* ifndef PKGLIST_H */
diff --git a/adept/libadept/listerextenderui.ui b/adept/libadept/listerextenderui.ui
new file mode 100644
index 0000000..de2e481
--- /dev/null
+++ b/adept/libadept/listerextenderui.ui
@@ -0,0 +1,310 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::ListerItemExtenderUi</class>
+<widget class="adept::ItemExtender">
+ <property name="name">
+ <cstring>ListerItemExtenderrUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>587</width>
+ <height>230</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>ListerItemExtenderrUi</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>4</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="2" column="3">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>name</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_status</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>status</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_change</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>change</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTextBrowser" row="0" column="2" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ <property name="vScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="text">
+ <string>description...</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>4</number>
+ </property>
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_logical</cstring>
+ </property>
+ <property name="text">
+ <string>logical</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_details</cstring>
+ </property>
+ <property name="text">
+ <string>Details</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="adept::PackageInfo" row="1" column="1">
+ <property name="name">
+ <cstring>m_packageInfo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>80</height>
+ </size>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::PackageInfo</class>
+ <header location="global">adept/packageinfo.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1003">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b249444154388db5944d4c5c5518869f73ce9db9cc40f929cc30300e18129a50685268a28291982e1a2175212eaab1c49d3f8971e7aec6aedb54a32b435dd8685cb8c0c4b8b0feb421b7bd8186a069d23209144b18cb0c02f3732ff3c3ccbdd705a571941213f1dd9d93739ef37e6fbeef08d334d9d5d0d090c701c8344d2176c1a6697a5d5d5dd8b64d2a95c2b2ac7f05b12c8b783c8e6118d8b6fd685fdb753a39394928e2a7c55724d693a7e214104220242805520a84d8b9e4790f0b1302c7751958f1e30534be9fa41a0c60db362dbe227f64af91b6e7719c2dfc0117a71c603da591de2882a7d3d4ec27122b10acad50aeb88044d542b84de3af7ab44aa55274f4e449dbf354bc347aa096fbf37e7efa2ecbad1b36907d78b289de8120232f37726250c3f52cf0a026a0f6065b9645d929e038167aa096d91b307171059034b5f8e9e9eb44fa052b4b25eeccd9dc99cb71f6ad082fbea2e351c075bdbdc13b9109fc01b83fef63e2e232e03076b68393231a0dcd024daf502c1e66e67a89cb971ef0e5a74bb4b61e6378248094b92ab0ac024b70ca017ef8360394187b2dc6d8b89ffa500e4d4f93d9083275d5e6f9913ade3dd70ee87c7d25c95646a25415aadab152b09ed4f8c5cc130a853839eac3951b684a61e70ef3f9c739668c24eba912afbfddc6d4d506e6a6d7b8b7d082aa8eb8dab19482cdcd220e36dd3dc19df23545de0a71f952861923493456cfd3cf36123c54a0b7bf0e8064621b21f7712c040857071ca4eea0f40a99f510573ec971cb48030e811a1faded3e94be85f2fb00703d1ff26f96ab9f011a5b04d0c4f26fdb948a754c1b25668c2491483d5d5d611617d6b8f0fe32cb779b492ce65168b4c774a4701eefd8f3a02d56e6e8f13aeefe9a63fa5a89d1970e91d908f3d46003e1480d173e28b37827c9b977348ab92ce16890237d1ec907ee3e8e3d8f60d0e1f4583d009f7d9860662acff89bad1c1faad0717493f7ce7713ed8cb0995c255f2a317a26427b67198f6a70f51c0a41b902279ed1187f23cc17130b7c74de65eac77a7a8f05517e41e2deefa4930576db60fa7a8ee1535134df3e93e7b82e0817476439fd6a9070a49f6fbe4a3077739db99b15c001146dd13a46cf1cc1f83943c62e51de76b0738fc9381e8f3390f0236b252e124999e11724fd833196164bacadb87848224fe874f779b43fe9f2dca928956d505a96dbb3f9bdc18661e00534c26d1a7a40e13912a11c9454280da41048a9915c75585df500074d53d816dc9edd229528ef0db66dbbea3ffdaffa471f1f28d8344df1bf800f1a6e9aa6f813c39885bc050f269c0000000049454e44ae426082</data>
+ </image>
+</images>
+<includes>
+ <include location="global" impldecl="in declaration">adept/extendablelist.h</include>
+</includes>
+<layoutdefaults spacing="0" margin="4"/>
+<includehints>
+ <includehint>adept/packageinfo.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/listerpredicate.h b/adept/libadept/listerpredicate.h
new file mode 100644
index 0000000..98f1b41
--- /dev/null
+++ b/adept/libadept/listerpredicate.h
@@ -0,0 +1,14 @@
+// -*- C++ -*-
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/predicate/predicate.h>
+
+#ifndef EPT_LISTERPREDICATE_H
+#define EPT_LISTERPREDICATE_H
+
+namespace adept {
+using namespace aptFront;
+using namespace cache;
+typedef predicate::Predicate< entity::Entity > ListerPredicate;
+}
+
+#endif
diff --git a/adept/libadept/packagedetails.cpp b/adept/libadept/packagedetails.cpp
new file mode 100644
index 0000000..4e97fd4
--- /dev/null
+++ b/adept/libadept/packagedetails.cpp
@@ -0,0 +1,253 @@
+#include <qtoolbutton.h>
+#include <qtextbrowser.h>
+#include <qlabel.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <qpushbutton.h>
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+
+#include <kfileitem.h>
+#include <kfiledetailview.h>
+#include <kapplication.h>
+
+#include <adept/lister.h>
+#include <adept/tagchooser.h>
+#include <adept/packageinfo.h>
+#include <adept/packagedetails.h>
+#include <adept/utils.h>
+
+#include <fstream>
+
+using namespace adept;
+
+PackageDetails::PackageDetails( QWidget *w, const char *n )
+ : PackageDetailsUi( w, n ),
+ m_thread( 0 ),
+ m_qtMutex( true ),
+ m_logicalAct( 0 ), m_removeAct( 0 ),
+ m_fileListRunning( false )
+{
+ m_toolbar->setIconSize( 22 );
+ m_toolbar->setIconText( KToolBar::IconTextRight );
+
+ m_toolbar->insertButton( u8( "back" ), BBack, false, i18n( "Back" ) );
+ m_toolbar->insertButton( u8( "forward" ), BForward, false, i18n( "Forward" ) );
+ m_toolbar->insertLineSeparator();
+ m_toolbar->insertButton( u8( "" ), BShow, true, i18n( "Show List" ) );
+
+ m_tags->setTitle( i18n( "Assigned Tags" ) );
+
+ m_lister->setRangeProvider( this ); // wee
+ // m_lister->setOpenToplevel( true );
+
+ m_description->setPaper( QBrush( colorGroup().background() ) );
+
+ connect( m_toolbar->getButton( BShow ), SIGNAL( clicked() ),
+ this, SIGNAL( showList() ) );
+ connect( m_toolbar->getButton( BBack ), SIGNAL( clicked() ),
+ this, SIGNAL( back() ) );
+ connect( m_toolbar->getButton( BForward ), SIGNAL( clicked() ),
+ this, SIGNAL( forward() ) );
+ connect( m_lister, SIGNAL( detailsRequested( Lister::Entity ) ),
+ this, SIGNAL( detailsRequested( Lister::Entity ) ) );
+
+ observeComponent< component::State >();
+
+ adjustFontSize( m_name, 1 );
+
+ Cache &c = cache::Global::get( m_cache );
+ component::Packages::iterator i = c.packages().packagesBegin();
+ while ( !i->hasVersion() ) ++i; // ha hum...
+ setPackage( *i );
+}
+
+Lister::Range PackageDetails::listerRange() {
+ utils::Range< entity::Relation > r = m_package.depends();
+ utils::VectorRange< entity::Entity > vr;
+ while ( r != r.end() ) {
+ if ( !r->targetPackages().empty() )
+ std::cerr << r->targetPackages()->name() << std::endl;
+ vr.consume( *r );
+ r = r.next();
+ }
+ return vr.sorted();
+}
+
+void PackageDetails::loadFileListWorker()
+{
+ entity::Package p = m_package;
+
+ std::string fl, flfile = "/var/lib/dpkg/info/" + p.name() + ".list";
+ std::ifstream ifl( flfile.c_str() );
+
+ int i = 0;
+ kdDebug() << "PackageDetails::loadFileListWorker() entering loop" << endl;
+
+ while ( ifl.is_open() && !ifl.eof() ) {
+ std::string line;
+ getline( ifl, line );
+ if ( line == "/." || line == "" )
+ continue; // nasty evil thing go away
+ m_qtMutex.lock();
+ KURL url( "file:///" );
+ url.addPath( u8( line ) );
+ KFileItem *it = new KFileItem( url, u8( "" ), 0 );
+ it->setName( u8( line ) );
+ m_fileList->insertItem( it );
+ ++i;
+ m_qtMutex.unlock();
+ }
+ kdDebug() << "PackageDetails::loadFileListWorker() leaving loop" << endl;
+ ifl.close();
+}
+
+void PackageDetails::notifyPreRebuild( component::Base * ) {
+ kdDebug() << "PackageDetails::notifyPreRebuild()" << endl;
+ Threads::wait();
+ m_logical->setEnabled( false );
+ m_remove->setEnabled( false );
+ m_logical->disconnect( SIGNAL( clicked() ) );
+ m_remove->disconnect( SIGNAL( clicked() ) );
+ delete m_logicalAct;
+ delete m_removeAct;
+ kdDebug() << "PackageDetails::notifyPreRebuild() done" << endl;
+}
+
+void PackageDetails::loadFileList() {
+ Cache &c = cache::Global::get( m_cache );
+ if ( m_fileListRunning || !c.isOpen() ) {
+ QTimer::singleShot( 100, this, SLOT( loadFileList() ) );
+ return;
+ }
+
+ kdDebug() << "PackageDetails::loadFileList()" << endl;
+ m_fileListRunning = true;
+
+ // the following call is neccessary to invoke buildDefaultType of KMimeType
+ // the first time the method is called it will check for
+ // existence of application/octet-stream and *popup a dialog* if
+ // not found -- we don't want that to happen in a non-gui thread
+ KMimeType::defaultMimeTypePtr();
+ m_thread = asyncCall( std::mem_fun( &PackageDetails::loadFileListWorker ), this );
+
+ m_qtMutex.lock();
+ m_fileList->KFileView::clear();
+ c.progress().OverallProgress( 0, 0, 0, i18n( "Loading filelist..." ) );
+
+ m_qtMutex.unlock();
+ Threads::enqueue( m_thread, &m_qtMutex );
+ Threads::wait();
+ c.progress().Done();
+ m_fileListRunning = false;
+ kdDebug() << "PackageDetails::loadFileList() finished" << endl;
+}
+
+void PackageDetails::setPackage( cache::entity::Package p )
+{
+ kdDebug() << "PackageDetails::setPackage()" << endl;
+ m_package = p.stable();
+ m_name->setText( QString( "<b>" ) +
+ p.name( std::string( "No package" ) ) + "</b>" );
+ m_info->setPackage( p );
+ QString l = p.longDescription(
+ std::string( i18n( "No long description available" ).local8Bit() ) );
+ m_description->setText( QString( "<qt>" )
+ + formatLongDescription( l ) + "</qt>" );
+
+ std::string na = u8( i18n( "not available" ) );
+ m_tags->setTags( p.tags( entity::Package::TagSet() ) );
+ m_tags->openToplevel();
+ m_architecture->setText( labelFormat( i18n( "Architecture: " ),
+ p.architecture( na ) ) );
+ m_filename->setText( labelFormat( i18n( "Filename: " ), p.fileName( na ) ) );
+ m_md5->setText( labelFormat( i18n( "MD5: " ), p.md5sum( na ) ) );
+ m_source->setText( labelFormat( i18n( "Source Package: " ), p.source( na ) ) );
+
+
+ notifyPostChange( 0 );
+ m_lister->cleanRebuild();
+ loadFileList();
+}
+
+void PackageDetails::notifyPostChange( cache::component::Base * )
+{
+ kdDebug() << "PackageDetails::notifyPostChange()" << endl;
+ // without the timer to break it, there could be a loop where
+ // we connect the clicked() signal to a slot which would be
+ // invoked right away when we return -> evil
+ QTimer::singleShot( 0, this, SLOT( updateLogical() ) );
+}
+
+void PackageDetails::notifyPostRebuild( cache::component::Base *b )
+{
+ kdDebug() << "PackageDetails::notifyPostRebuild( " << b << " )" << endl;
+ // can't call directly because stable entities are not guaranteed
+ // to be stabilised at this point yet
+ QTimer::singleShot( 0, this, SLOT( updateLogical() ) );
+ QTimer::singleShot( 0, this, SLOT( loadFileList() ) );
+ m_lister->cleanRebuild();
+}
+
+void PackageDetails::updateLogical()
+{
+ Cache &c = cache::Global::get( m_cache );
+ if ( !c.isOpen() ) {
+ QTimer::singleShot( 100, this, SLOT( updateLogical() ) );
+ return;
+ }
+ kdDebug() << "PackageDetails::updateLogical()" << endl;
+ entity::Package p = m_package;
+ kdDebug() << "PackageDetails::updateLogical: p = " << p.name()
+ << " p.component() = " << &p.component() << endl;
+ if ( !p.valid() ) return; // nothing to update
+ EntityActor *a = 0, *b = 0;
+
+ if ( p.canUpgrade() ) {
+ a = new EntityActor( p.upgrade() );
+ } else if ( p.canInstall() ) {
+ a = new EntityActor( p.install() );
+ } else if ( p.canKeep() ) {
+ a = new EntityActor( p.keep() );
+ }
+
+ if ( p.canRemove() ) {
+ b = new EntityActor( p.remove() );
+ }
+
+ if ( a ) {
+ m_logical->setEnabled( true );
+ m_logical->setText( u8( a->actor().prettyName() ) );
+ connect( m_logical, SIGNAL( clicked() ),
+ a, SLOT( destructiveAct() ) );
+ } else {
+ m_logical->setText( i18n( "Install" ) );
+ m_logical->setEnabled( false );
+ }
+
+ if ( b ) {
+ m_remove->setEnabled( true );
+ m_remove->setText( u8( b->actor().prettyName() ) );
+ connect( m_remove, SIGNAL( clicked() ),
+ b, SLOT( destructiveAct() ) );
+ } else {
+ m_remove->setText( i18n( "Remove" ) );
+ m_remove->setEnabled( false );
+ }
+
+ m_logicalAct = a;
+ m_removeAct = b;
+ // std::copy( r, r.last(), vr );
+
+ // r.consume( utils::upcastRange< entity::Entity >( p.depends() ) );
+}
+
+void PackageDetails::setHasForward( bool e ) {
+ m_toolbar->setItemEnabled( BForward, e );
+ // m_forward->setEnabled( e );
+}
+
+void PackageDetails::setHasBack( bool e ) {
+ m_toolbar->setItemEnabled( BBack, e );
+ // m_back->setEnabled( e );
+}
diff --git a/adept/libadept/packagedetails.h b/adept/libadept/packagedetails.h
new file mode 100644
index 0000000..655e226
--- /dev/null
+++ b/adept/libadept/packagedetails.h
@@ -0,0 +1,55 @@
+/* -*- C++ -*- adept/packagedetails.h
+ written by Peter Rockai <[email protected]> */
+
+#include <apt-front/cache/entity/package.h>
+#include <adept/packagedetailsui.h>
+#include <adept/lister.h>
+
+#include <qmutex.h>
+#include <qguardedptr.h>
+
+#ifndef EPT_PACKGEDETAILS_H
+#define EPT_PACKGEDETAILS_H
+
+class KToolBarButton;
+class QThread;
+
+namespace adept {
+
+using namespace aptFront;
+
+class PackageDetails : public PackageDetailsUi, public Lister::RangeProvider,
+ public cache::Observer
+{
+ Q_OBJECT
+public:
+ enum ButtonID { BForward, BBack, BShow };
+ PackageDetails( QWidget *p = 0, const char *n = 0 );
+ void setPackage( cache::entity::Package );
+ void setHasForward( bool );
+ void setHasBack( bool );
+ virtual Lister::Range listerRange();
+ void notifyPostChange( cache::component::Base * );
+ void notifyPreRebuild( cache::component::Base * );
+ void notifyPostRebuild( cache::component::Base * );
+signals:
+ void showList();
+ void back();
+ void forward();
+ void detailsRequested( Lister::Entity );
+protected slots:
+ void loadFileList();
+ void updateLogical();
+protected:
+ void loadFileListWorker();
+ cache::entity::StablePackage m_package;
+ QMutex m_qtMutex;
+ QThread *m_thread;
+ QGuardedPtr< EntityActor > m_logicalAct, m_removeAct;
+ int m_fileListRunning;
+
+};
+
+}
+
+#endif
diff --git a/adept/libadept/packagedetailsui.ui b/adept/libadept/packagedetailsui.ui
new file mode 100644
index 0000000..dacf7be
--- /dev/null
+++ b/adept/libadept/packagedetailsui.ui
@@ -0,0 +1,464 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>PackageDetailsUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PackageDetailsUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>705</width>
+ <height>529</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="KToolBar">
+ <property name="name">
+ <cstring>m_toolbar</cstring>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>8</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>(title)</string>
+ </property>
+ </widget>
+ <widget class="adept::PackageInfo" row="1" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>m_info</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>8</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>75</height>
+ </size>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="3" column="2">
+ <property name="name">
+ <cstring>m_remove</cstring>
+ </property>
+ <property name="text">
+ <string>(remove)</string>
+ </property>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>m_logical</cstring>
+ </property>
+ <property name="text">
+ <string>(logical)</string>
+ </property>
+ </widget>
+ <spacer row="3" column="3">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QTextBrowser" row="0" column="4" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>28</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ <property name="vScrollBarMode">
+ <enum>Auto</enum>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="text">
+ <string>description...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>16</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Package Relationships</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="adept::Lister" row="0" column="0">
+ <property name="name">
+ <cstring>m_lister</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>120</height>
+ </size>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Installed Files</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KFileDetailView" row="0" column="0">
+ <property name="name">
+ <cstring>m_fileList</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Additional Information</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="adept::TagChooser">
+ <property name="name">
+ <cstring>m_tags</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_source</cstring>
+ </property>
+ <property name="text">
+ <string>source</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_architecture</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>architecture</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_filename</cstring>
+ </property>
+ <property name="text">
+ <string>file</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_md5</cstring>
+ </property>
+ <property name="text">
+ <string>md5</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>61</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::TagChooser</class>
+ <header location="global">adept/tagchooser.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>adept::PackageInfo</class>
+ <header location="global">adept/packageinfo.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>adept::Lister</class>
+ <header location="global">adept/lister.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KToolBar</class>
+ <header location="global">ktoolbar.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>1</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KFileDetailView</class>
+ <header location="global">kfiledetailview.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1003">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b249444154388db5944d4c5c5518869f73ce9db9cc40f929cc30300e18129a50685268a28291982e1a2175212eaab1c49d3f8971e7aec6aedb54a32b435dd8685cb8c0c4b8b0feb421b7bd8186a069d23209144b18cb0c02f3732ff3c3ccbdd705a571941213f1dd9d93739ef37e6fbeef08d334d9d5d0d090c701c8344d2176c1a6697a5d5d5dd8b64d2a95c2b2ac7f05b12c8b783c8e6118d8b6fd685fdb753a39394928e2a7c55724d693a7e214104220242805520a84d8b9e4790f0b1302c7751958f1e30534be9fa41a0c60db362dbe227f64af91b6e7719c2dfc0117a71c603da591de2882a7d3d4ec27122b10acad50aeb88044d542b84de3af7ab44aa55274f4e449dbf354bc347aa096fbf37e7efa2ecbad1b36907d78b289de8120232f37726250c3f52cf0a026a0f6065b9645d929e038167aa096d91b307171059034b5f8e9e9eb44fa052b4b25eeccd9dc99cb71f6ad082fbea2e351c075bdbdc13b9109fc01b83fef63e2e232e03076b68393231a0dcd024daf502c1e66e67a89cb971ef0e5a74bb4b61e6378248094b92ab0ac024b70ca017ef8360394187b2dc6d8b89ffa500e4d4f93d9083275d5e6f9913ade3dd70ee87c7d25c95646a25415aadab152b09ed4f8c5cc130a853839eac3951b684a61e70ef3f9c739668c24eba912afbfddc6d4d506e6a6d7b8b7d082aa8eb8dab19482cdcd220e36dd3dc19df23545de0a71f952861923493456cfd3cf36123c54a0b7bf0e8064621b21f7712c040857071ca4eea0f40a99f510573ec971cb48030e811a1faded3e94be85f2fb00703d1ff26f96ab9f011a5b04d0c4f26fdb948a754c1b25668c2491483d5d5d611617d6b8f0fe32cb779b492ce65168b4c774a4701eefd8f3a02d56e6e8f13aeefe9a63fa5a89d1970e91d908f3d46003e1480d173e28b37827c9b977348ab92ce16890237d1ec907ee3e8e3d8f60d0e1f4583d009f7d9860662acff89bad1c1faad0717493f7ce7713ed8cb0995c255f2a317a26427b67198f6a70f51c0a41b902279ed1187f23cc17130b7c74de65eac77a7a8f05517e41e2deefa4930576db60fa7a8ee1535134df3e93e7b82e0817476439fd6a9070a49f6fbe4a3077739db99b15c001146dd13a46cf1cc1f83943c62e51de76b0738fc9381e8f3390f0236b252e124999e11724fd833196164bacadb87848224fe874f779b43fe9f2dca928956d505a96dbb3f9bdc18661e00534c26d1a7a40e13912a11c9454280da41048a9915c75585df500074d53d816dc9edd229528ef0db66dbbea3ffdaffa471f1f28d8344df1bf800f1a6e9aa6f813c39885bc050f269c0000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>ktoolbar.h</includehint>
+ <includehint>adept/packageinfo.h</includehint>
+ <includehint>adept/lister.h</includehint>
+ <includehint>kfiledetailview.h</includehint>
+ <includehint>adept/tagchooser.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/packageinfo.cpp b/adept/libadept/packageinfo.cpp
new file mode 100644
index 0000000..dac788b
--- /dev/null
+++ b/adept/libadept/packageinfo.cpp
@@ -0,0 +1,181 @@
+/** -*- C++ -*-
+ @file adept/packageinfo.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qcolor.h>
+#include <qlabel.h>
+#include <qregexp.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <adept/packageinfo.h>
+#include <adept/utils.h>
+
+using namespace adept;
+using namespace cache;
+
+PackageInfo::PackageInfo( QWidget *p, const char *n )
+ : PackageInfoUi( p, n ), m_specificVersion( false )
+{
+ observeComponent< component::State >();
+}
+
+void PackageInfo::adjustFontSize( int s ) {
+ adept::adjustFontSize( m_status, s );
+ adept::adjustFontSize( m_change, s );
+ adept::adjustFontSize( m_section, s );
+ adept::adjustFontSize( m_installedSize, s );
+ adept::adjustFontSize( m_maintainer, s );
+ adept::adjustFontSize( m_candidateVer, s );
+ adept::adjustFontSize( m_installedVer, s );
+}
+
+void PackageInfo::hideStatus() {
+ m_status->hide();
+ m_change->hide();
+}
+
+namespace adept {
+
+QColor statusColor( entity::Package p )
+{
+ if ( !p.valid() )
+ return Qt::black;
+
+ QColor c = Qt::blue;
+ if (p.isInstalled())
+ c = Qt::darkGreen;
+ if (p.isUpgradable())
+ c = Qt::darkYellow;
+ if (p.isBroken())
+ c = Qt::red;
+ return c;
+}
+
+QColor actionColor( entity::Package p )
+{
+ if ( !p.valid() )
+ return Qt::black;
+
+ QColor c = Qt::blue;
+ if (p.markedNewInstall())
+ c = Qt::darkGreen;
+ if (p.markedUpgrade())
+ c = Qt::darkYellow;
+ if (p.markedReInstall())
+ c = Qt::darkYellow;
+ if (p.markedRemove())
+ c = Qt::darkRed;
+ if (p.markedPurge())
+ c = Qt::red;
+ if (p.willBreak())
+ c = Qt::red;
+ return c;
+}
+
+/* QString hexColor( QColor c )
+{
+ QString r( "#%1%2%3" );
+ return r.arg( c.red(), -2, 16 ).arg( c.green(), -2, 16 ).arg( c.blue(), -2, 16 );
+ } */
+
+QString colorify( QColor c, QString s )
+{
+ return QString( "<font color=\"" ) + c.name()
+ + "\">" + s + "</font>";
+}
+
+QString formatLongDescription( QString l )
+{
+ QRegExp rx( u8( "^(.*)\n" ) );
+ rx.setMinimal( true );
+ l.replace( rx, u8( "\\1</p><p>" ) );
+ rx = QRegExp( u8( "\\n[ ]*\\.\\n" ) );
+ l.replace( rx, u8( "</p><p>" ) );
+ rx = QRegExp( u8( "\n " ) );
+ l.replace( rx, u8( " " ) );
+ rx = QRegExp( u8( "\n - (.*)(\n|$)" ) );
+ rx.setMinimal( true );
+ l.replace( rx, u8( "\n<li>\\1</li>\n" ) );
+ l.replace( rx, u8( "\n<li>\\1</li>\n" ) );
+ return QString( "<p>" ) + l + u8( "</p>" );
+}
+
+void PackageInfo::setPackage( entity::Package p )
+{
+ kdDebug() << "PackageInfo::setPackage()" << endl;
+ // ho hum, probably XXX fix libapt-front?
+ setVersion( p.valid() ? p.anyVersion() : entity::Version(), false );
+}
+
+void PackageInfo::setVersion( entity::Version v, bool specific )
+{
+ m_specificVersion = specific;
+ m_version = v.stable();
+ if ( !m_version.valid() ) return;
+ kdDebug() << "PackageInfo::setVersion() (valid)" << endl;
+ m_section->setText(
+ labelFormat( i18n( "Section:" ), u8( v.section( u8( i18n( "Unknown" ) ) ) ) ) );
+ m_maintainer->setText(
+ labelFormat( i18n( "Maintainer:" ), u8( v.maintainer( u8( i18n( "Unknown" ) ) ) ),
+ false ) );
+
+ notifyPostChange( 0 );
+}
+
+void PackageInfo::notifyPostRebuild( component::Base *b ) {
+ return notifyPostChange( b );
+}
+
+void PackageInfo::notifyPostChange( component::Base * )
+{
+ if ( !m_version.valid() ) return;
+ entity::Version v = m_version;
+ entity::Package p = v.package();
+ QString cv = i18n( "n/a" ), iv = i18n( "n/a" ), is = i18n( "n/a" ), status, action;
+
+ if (p.valid()) {
+ entity::Version _cv = p.candidateVersion();
+ entity::Version _iv = p.installedVersion();
+
+ if (_cv.valid()) {
+ cv = u8( _cv.versionString() );
+ is = u8( _cv.installedSizeString() );
+ }
+
+ if (_iv.valid()) {
+ iv = _iv.versionString();
+ }
+ }
+
+ std::string unk = u8( i18n( "unknown" ) );
+ /* m_status->setText( i18n( "<nobr>Currently " ) + colorify(
+ statusColor( p ),
+ u8( p.statusString( unk ) ) )
+ + i18n( ", " ) + colorify(
+ actionColor( p ),
+ u8( p.actionString( unk ) ) ) + i18n( "
+ requested</nobr>" ) ); */
+ m_status->setText(
+ labelFormat( i18n( "Status:" ), colorify(
+ statusColor( p ),
+ u8( p.statusString( u8( i18n( "Unknown" ) ) ) ) ) ) );
+ m_change->setText(
+ labelFormat( i18n( "Requested change:" ), colorify(
+ actionColor( p ),
+ u8( p.actionString( u8( i18n( "Unknown" ) ) )
+ ) ) ) );
+
+ m_candidateVer->setText(
+ m_specificVersion ?
+ labelFormat( i18n( "Version:" ),
+ v.versionString() + "(" + i18n( "candidate" ) + " " + cv + ")" )
+ : labelFormat( i18n( "Candidate Version:" ), cv ) );
+ m_installedVer->setText(
+ labelFormat( i18n( "Installed Version:" ), iv ) );
+ m_installedSize->setText(
+ labelFormat( i18n( "Installed Size:" ), is ) );
+}
+
+}
diff --git a/adept/libadept/packageinfo.h b/adept/libadept/packageinfo.h
new file mode 100644
index 0000000..1a83c0d
--- /dev/null
+++ b/adept/libadept/packageinfo.h
@@ -0,0 +1,49 @@
+/* -*- C++ -*- adept/packageinfo.h
+ written by Peter Rockai <[email protected]> */
+
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/cache.h>
+#include <adept/packageinfoui.h>
+
+#ifndef EPT_PACKAGEINFO_H
+#define EPT_PACKAGEINFO_H
+
+namespace adept {
+
+using namespace aptFront;
+
+class PackageInfo : public PackageInfoUi, public cache::Observer
+{
+ Q_OBJECT
+public:
+ PackageInfo( QWidget *p, const char *n = 0 );
+public slots:
+ void setVersion( cache::entity::Version v, bool = true );
+ void setPackage( cache::entity::Package v );
+ void adjustFontSize( int );
+public:
+ void notifyPostChange( cache::component::Base * );
+ void notifyPostRebuild( cache::component::Base * );
+ void hideStatus();
+protected:
+ cache::entity::StableVersion m_version;
+ bool m_specificVersion;
+};
+
+inline QString labelFormat( const QString &what,
+ const QString &txt, bool nobr = true )
+{
+ QString ret = "<b><nobr>" + what + "</nobr></b>&nbsp;" + (nobr ? "<nobr>" : "")
+ + txt + (nobr ? "</nobr>" : "");
+ return ret;
+}
+
+QColor actionColor( cache::entity::Package p );
+QColor statusColor( cache::entity::Package p );
+
+QString formatLongDescription( QString in );
+QString colorify( QColor c, QString s );
+
+}
+
+#endif
diff --git a/adept/libadept/packageinfoui.ui b/adept/libadept/packageinfoui.ui
new file mode 100644
index 0000000..d7d5dc5
--- /dev/null
+++ b/adept/libadept/packageinfoui.ui
@@ -0,0 +1,180 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>PackageInfoUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>details</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>253</width>
+ <height>128</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form2</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>m_indent</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>16</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16</width>
+ <height>5</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_maintainer</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>maintainer</string>
+ </property>
+ <property name="alignment">
+ <set>AlignBottom</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>m_candidateVer</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>candidate version</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="1">
+ <property name="name">
+ <cstring>m_installedVer</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>installed version</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_section</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>section</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_installedSize</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>installed size</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_status</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>status</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_change</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>change</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/libadept/progress.cpp b/adept/libadept/progress.cpp
new file mode 100644
index 0000000..60a3bd3
--- /dev/null
+++ b/adept/libadept/progress.cpp
@@ -0,0 +1,58 @@
+#include <kapplication.h>
+#include <qcursor.h>
+#include <kdebug.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+using namespace adept;
+
+Progress::Progress()
+ : m_pbar( 0 ), m_sbar( 0 ), m_busy( false )
+{
+}
+
+void Progress::Update ()
+{
+ if (!m_sbar)
+ return;
+ if (!m_pbar) {
+ if (Percent) {
+ m_pbar = new KProgress( m_sbar );
+ m_pbar->setMinimumWidth( 80 );
+ m_pbar->setMaximumWidth( 120 );
+ m_pbar->setTextEnabled( false );
+ m_pbar->show();
+ m_sbar->addWidget( m_pbar, 0, true );
+ m_pbar->setTotalSteps( 100 );
+ }
+ MajorChange = true;
+ }
+ if (MajorChange) {
+ if ( !m_busy ) {
+ QApplication::setOverrideCursor( QCursor( Qt::BusyCursor ) );
+ m_busy = true;
+ }
+ m_sbar->message( u8( Op + "..." ) );
+ }
+ if (CheckChange (0.05) == false)
+ return;
+ // kdDebug() << "Progress::Update()" << endl;
+ if (m_pbar)
+ m_pbar->setProgress( Percent );
+ kapp->processEvents();
+}
+
+void Progress::Done ()
+{
+ kdDebug() << "Progress::Done()" << endl;
+
+ QApplication::restoreOverrideCursor();
+ m_busy = false;
+
+ if (m_sbar)
+ m_sbar->clear();
+ delete m_pbar;
+ m_pbar = 0;
+}
+
+Progress::~Progress() {}
diff --git a/adept/libadept/progress.h b/adept/libadept/progress.h
new file mode 100644
index 0000000..aef3d92
--- /dev/null
+++ b/adept/libadept/progress.h
@@ -0,0 +1,30 @@
+/** -*- C++ -*-
+ @file adept/progress.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <kprogress.h>
+#include <kstatusbar.h>
+#include <apt-pkg/progress.h>
+
+#ifndef EPT_PROGRESS_H
+#define EPT_PROGRESS_H
+
+namespace adept {
+
+class Progress : public OpProgress {
+public:
+ Progress();
+ virtual ~Progress();
+ virtual void Update();
+ virtual void Done();
+ void setStatusBar( KStatusBar *b ) { m_sbar = b; }
+protected:
+ KProgress *m_pbar;
+ KStatusBar *m_sbar;
+ bool m_busy;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/quickfilter.cpp b/adept/libadept/quickfilter.cpp
new file mode 100644
index 0000000..2cb0577
--- /dev/null
+++ b/adept/libadept/quickfilter.cpp
@@ -0,0 +1,79 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <qobjectlist.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <qcheckbox.h>
+
+#include "quickfilter.h"
+
+using namespace aptFront;
+using namespace adept;
+
+QuickFilterWidget::QuickFilterWidget( QWidget *parent, const char *name )
+ : QuickFilterUi( parent, name )
+{
+ setFocusProxy( m_match );
+ connect( m_match, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( textChanged( const QString & ) ) );
+ /* connect( m_reset, SIGNAL( clicked() ),
+ this, SLOT( reset() ) ); */
+ connect( m_match, SIGNAL( returnPressed() ),
+ this, SLOT( widgetsChanged() ) );
+ connect( &timer, SIGNAL( timeout() ),
+ this, SLOT( widgetsChanged() ) );
+
+ QObjectList *chld = queryList( "QCheckBox" );
+ QObjectListIt it( *chld );
+ while( it.current() != 0 ) {
+ connect( it.current(), SIGNAL( toggled( bool ) ),
+ this, SLOT( widgetsChanged() ) );
+ ++it;
+ }
+}
+
+void QuickFilterWidget::mouseReleaseEvent( QMouseEvent *e ) {
+ m_match->setFocus();
+ QuickFilterUi::mouseReleaseEvent( e );
+}
+
+void QuickFilterWidget::textChanged( const QString & )
+{
+ kdDebug() << "QuickFilterWidget::textChanged" << endl;
+ timer.start( 1000, true );
+}
+
+QuickFilterWidget::Predicate QuickFilterWidget::predicate()
+{
+ typedef QuickFilter< entity::Package > F;
+ F f; int w = 0;
+ if ( m_name->isChecked() ) w |= F::Name;
+ if ( m_description->isChecked() ) w |= F::Description;
+ if ( m_maintainer->isChecked() ) w |= F::Maintainer;
+
+ f.setMatch( u8( m_match->text() ) );
+ f.setWhat( w );
+
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void blockedSet( QCheckBox *b, bool v ) {
+ b->blockSignals( true );
+ b->setChecked( v );
+ b->blockSignals( false );
+}
+
+void QuickFilterWidget::predicateChanged() {
+ typedef QuickFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ m_match->blockSignals( true );
+ m_match->setText( f.match() );
+ m_match->blockSignals( false );
+ int w = f.what();
+
+ blockedSet( m_name, w & F::Name );
+ blockedSet( m_description, w & F::Description );
+ blockedSet( m_maintainer, w & F::Maintainer );
+}
+
diff --git a/adept/libadept/quickfilter.h b/adept/libadept/quickfilter.h
new file mode 100644
index 0000000..788c9da
--- /dev/null
+++ b/adept/libadept/quickfilter.h
@@ -0,0 +1,119 @@
+/** -*- C++ -*-
+ @file adept/quickfilter.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/predicate/factory.h>
+#include <adept/quickfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+#include <adept/utils.h>
+
+#ifndef EPT_QUICKFILTER_H
+#define EPT_QUICKFILTER_H
+
+class KLineEdit;
+
+namespace adept {
+
+template< typename T >
+struct QuickFilter : predicate::Implementation< T, QuickFilter< T > >,
+ InterfacingPredicate
+{
+ enum Type { Regex, Substring, Exact };
+ enum What { Name = 0x1, Description = 0x2, Maintainer = 0x4 };
+
+ QuickFilter()
+ : m_type( Substring ), m_match( "" ), m_what( Name | Description ) {
+ setupPredicate();
+ }
+
+ void setupPredicate() {
+ predicate::ArgumentList l;
+ l.push_back( m_match );
+ predicate::Predicate< T > a = not predicate::True< T >();
+ if ( m_what & Name ) a = a or predicate::Factory< T >::name( m_match );
+ if ( m_what & Description )
+ a = a or predicate::Factory< T >::description( m_match );
+ if ( m_what & Maintainer )
+ a = a or predicate::Factory< T >::maintainer( m_match );
+ m_op = a;
+ /* m_op = predicate::map(
+ predicate::predicate( predicate::Factory< T >::description( "" )
+ or predicate::Factory< T >::name( "" )
+ or predicate::Factory< T
+ >::maintainer( "" ) ), l ); */
+ }
+
+ std::string summary() const {
+ return u8( i18n( "Search: " ) ) + "\"" + m_match + "\"";
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const QuickFilter &o ) const {
+ return o.m_type == m_type && o.m_match == m_match;
+ }
+
+ std::string typeString() const {
+ if (m_type == Regex) return "Regular Expression";
+ if (m_type == Substring) return "Substring";
+ if (m_type == Exact) return "Exact Match";
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ std::string match() const {
+ return m_match;
+ }
+
+ void setMatch( const std::string &s ) {
+ m_match = s;
+ setupPredicate();
+ }
+
+ void setWhat( int w ) {
+ m_what = w;
+ setupPredicate();
+ }
+
+ int what() { return m_what; }
+
+ virtual void reset() {
+ m_match = "";
+ setupPredicate();
+ }
+
+protected:
+ Type m_type;
+ std::string m_match;
+ int m_what;
+ predicate::Predicate< T > m_op;
+};
+
+class QuickFilterWidget : public QuickFilterUi
+{
+ Q_OBJECT
+public:
+ QuickFilterWidget( QWidget *parent, const char *name = 0 );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+protected slots:
+ void textChanged( const QString & );
+protected:
+ void mouseReleaseEvent( QMouseEvent *e );
+ QTimer timer;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/quickfilterui.ui b/adept/libadept/quickfilterui.ui
new file mode 100644
index 0000000..d45c154
--- /dev/null
+++ b/adept/libadept/quickfilterui.ui
@@ -0,0 +1,130 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::QuickFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>QuickFilterUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>805</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>QuickFilterUi</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_title</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;Search:&amp;nbsp;&lt;/b&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_match</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Match: </string>
+ </property>
+ <property name="textFormat">
+ <enum>AutoText</enum>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="text">
+ <string>package name,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="text">
+ <string>description,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_maintainer</cstring>
+ </property>
+ <property name="text">
+ <string>maintainer.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>41</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/adept/libadept/sourceseditor.cpp b/adept/libadept/sourceseditor.cpp
new file mode 100644
index 0000000..3b04cf6
--- /dev/null
+++ b/adept/libadept/sourceseditor.cpp
@@ -0,0 +1,165 @@
+#include <fstream>
+#include <iostream>
+
+#include <qpushbutton.h>
+#include <qlineedit.h>
+#include <qpainter.h>
+
+#include <kdebug.h>
+#include <kpopupmenu.h>
+#include <klocale.h>
+
+#include "sourceseditor.h"
+#include <adept/utils.h>
+
+using namespace aptFront;
+using namespace adept;
+
+SourcesEditor::SourcesEditor( std::string f, QWidget *p, const char *n )
+ : SourcesEditorUi( p, n ), m_filename( f )
+{
+ m_list->setSorting( -1 );
+ m_list->setAcceptDrops( true );
+ connect( m_close, SIGNAL( clicked() ),
+ this, SIGNAL( close() ) );
+ connect( m_apply, SIGNAL( clicked() ),
+ this, SLOT( save() ) );
+ connect( m_reset, SIGNAL( clicked() ),
+ this, SLOT( reset() ) );
+
+ connect( m_list, SIGNAL( contextMenuRequested(
+ QListViewItem *, const QPoint &, int) ),
+ this, SLOT( contextMenu( QListViewItem *, const QPoint & ) ) );
+
+ connect( m_newAdd, SIGNAL( clicked() ),
+ this, SLOT( newAdd() ) );
+
+ reset();
+}
+
+void SourcesEditor::newAdd()
+{
+ Sources::Entry e( true, Sources::Entry::Binary );
+ std::string s = m_newLine->text();
+ std::istringstream i( s );
+ i >> e;
+ new EntryItem( e, m_list );
+ m_newLine->setText( u8( "" ) );
+}
+
+void SourcesEditor::contextMenu( QListViewItem *, const QPoint &pt ) {
+ EntryItem *s = dynamic_cast< EntryItem * >( m_list->selectedItem() );
+ if (!s) return;
+ KPopupMenu *m = new KPopupMenu (this);
+ m->insertItem( s->entry().enabled() ? i18n( "Disable" ) : i18n( "Enable" ), 0 );
+ m->insertItem( i18n( "Clone" ), 1 );
+ m->insertItem( i18n( "Remove" ), 2 );
+ connect( m, SIGNAL( activated( int ) ),
+ this, SLOT( contextMenuActivated( int ) ) );
+ m->exec( pt );
+ delete m;
+}
+
+void SourcesEditor::contextMenuActivated( int i ) {
+ EntryItem *s = dynamic_cast< EntryItem * >( m_list->selectedItem() );
+ Sources::Entry e = s->entry();
+ if (i == 0) {
+ e.setEnabled( !e.enabled() );
+ s->setEntry( e );
+ }
+ if (i == 2)
+ delete s;
+ if (i == 1)
+ new EntryItem( e, m_list, s );
+}
+
+void SourcesEditor::reset() {
+ std::ifstream in( m_filename.c_str() );
+ m_sources.clear();
+ in >> m_sources;
+ utils::Range< Sources::Entry > r = m_sources.entries();
+ EntryItem *last = 0;
+ m_list->clear();
+ while( r != r.end() ) {
+ last = last ? new EntryItem( *r, m_list, last ) :
+ new EntryItem( *r, m_list );
+ ++ r;
+ }
+}
+
+void SourcesEditor::save() {
+ m_sources.clear();
+ EntryItem *i = dynamic_cast< EntryItem * >( m_list->firstChild() );
+ while (i) {
+ m_sources.add( i->entry() );
+ i = dynamic_cast< EntryItem * >( i->nextSibling() );
+ }
+ std::ofstream out( m_filename.c_str() );
+ out << m_sources;
+ std::cerr << "--" << m_sources << "--" << std::endl;
+ out.close();
+ reset(); // re-parse
+}
+
+/* void SourcesEditor::toggleSelectionEnabled()
+{
+ EntryItem *s = dynamic_cast< EntryItem * >( m_list->selectedItem() );
+ if (s) {
+ Sources::Entry e = s->entry();
+ e.setEnabled( !e.enabled() );
+ s->setEntry( e );
+ updateActions();
+ }
+ } */
+
+QString EntryItem::text( int c ) const {
+ if (entry().type() == Sources::Entry::Comment) {
+ if (c == 0)
+ if (entry().comment() == "")
+ return u8( "" );
+ else
+ return entry().typeString();
+ if (c == 1)
+ return entry().comment();
+ return u8( "" );
+ }
+
+ if (c == 0) return entry().typeString();
+ if (c == 1) return entry().url();
+ if (c == 2) return entry().distribution();
+ if (c == 3) return entry().components();
+ return u8( "" );
+}
+
+void EntryItem::setText( int c, const QString &_s )
+{
+ kdDebug() << "setText on column " << c << endl;
+ Sources::Entry e = entry();
+ std::string s;
+ s = _s.local8Bit();
+ if (c == 0) e.setTypeString( s );
+ if (c == 1)
+ if (entry().type() == Sources::Entry::Comment)
+ e.setComment( s );
+ else
+ e.setUrl( s );
+ if (c == 2) e.setDistribution( s );
+ if (c == 3) e.setComponents( s );
+ setEntry( e );
+ KListViewItem::setText( c, _s ); // stop qlistview from looping infinitely
+}
+
+void EntryItem::paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment )
+{
+ QColorGroup _cg( cg );
+ QColor c = _cg.text();
+ QPixmap pm( width, height() );
+ QPainter _p( &pm );
+ if (!entry().enabled())
+ c = Qt::gray;
+ _cg.setColor( QColorGroup::Text, c );
+ KListViewItem::paintCell( &_p, _cg, column, width, AlignTop );
+ p->drawPixmap( 0, 0, pm );
+}
+
diff --git a/adept/libadept/sourceseditor.h b/adept/libadept/sourceseditor.h
new file mode 100644
index 0000000..32b474f
--- /dev/null
+++ b/adept/libadept/sourceseditor.h
@@ -0,0 +1,63 @@
+/** -*- C++ -*-
+ @file adept/sourceseditor.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-front/sources.h>
+#include <adept/sourceseditorui.h>
+#include <klistview.h>
+
+namespace adept {
+
+using namespace aptFront;
+
+class SourcesEditor : public SourcesEditorUi
+{
+ Q_OBJECT
+public:
+ SourcesEditor( std::string f, QWidget *p = 0, const char *n = 0 );
+public slots:
+ void save();
+ void reset();
+protected slots:
+ void contextMenu( QListViewItem *, const QPoint & );
+ void contextMenuActivated( int );
+ void newAdd();
+signals:
+ void close();
+protected:
+ aptFront::Sources m_sources;
+ std::string m_filename;
+};
+
+class EntryItem : public KListViewItem {
+public:
+ Sources::Entry entry() const {
+ return m_entry;
+ }
+ void setEntry( const Sources::Entry &e ) {
+ m_entry = e;
+ }
+ EntryItem( Sources::Entry e, KListView *v, EntryItem *prev )
+ : KListViewItem( v, prev ), m_entry( e ) {
+ init();
+ }
+ EntryItem( Sources::Entry e, KListView *v )
+ : KListViewItem( v ), m_entry( e ) {
+ init();
+ }
+ void init() {
+ setRenameEnabled( 0, false );
+ setRenameEnabled( 1, true );
+ setRenameEnabled( 2, true );
+ setRenameEnabled( 3, true );
+ }
+ QString text( int c ) const;
+ void setText( int c, const QString &s );
+ virtual void paintCell (QPainter *p, const QColorGroup &cg,
+ int column, int width, int alignment);
+protected:
+ Sources::Entry m_entry;
+};
+
+}
diff --git a/adept/libadept/sourceseditorui.ui b/adept/libadept/sourceseditorui.ui
new file mode 100644
index 0000000..43397d3
--- /dev/null
+++ b/adept/libadept/sourceseditorui.ui
@@ -0,0 +1,173 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::SourcesEditorUi</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>adept::SourcesEditorUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>683</width>
+ <height>442</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>adept::SourcesEditorUi</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>URL</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Distribution</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Components</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_list</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ <property name="itemsMovable">
+ <bool>true</bool>
+ </property>
+ <property name="itemsRenameable">
+ <bool>true</bool>
+ </property>
+ <property name="dragEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>New Repository:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_newLine</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Write or paste a normal sources.list line here to add it to your sources</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_newAdd</cstring>
+ </property>
+ <property name="text">
+ <string>Add</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_reset</cstring>
+ </property>
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_apply</cstring>
+ </property>
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_close</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<tabstops>
+ <tabstop>m_newLine</tabstop>
+ <tabstop>m_newAdd</tabstop>
+ <tabstop>m_reset</tabstop>
+ <tabstop>m_apply</tabstop>
+ <tabstop>m_close</tabstop>
+ <tabstop>m_list</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klistview.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/statefilter.cpp b/adept/libadept/statefilter.cpp
new file mode 100644
index 0000000..45ee470
--- /dev/null
+++ b/adept/libadept/statefilter.cpp
@@ -0,0 +1,60 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <qcheckbox.h>
+#include <qobjectlist.h>
+#include "statefilter.h"
+
+using namespace aptFront;
+using namespace adept;
+
+StateFilterWidget::StateFilterWidget( QWidget *parent, const char *name )
+ : StateFilterUi( parent, name )
+{
+ QObjectList *chld = queryList( "QCheckBox" );
+ QObjectListIt it( *chld );
+ while( it.current() != 0 ) {
+ connect( it.current(), SIGNAL( toggled( bool ) ),
+ this, SLOT( widgetsChanged() ) );
+ ++it;
+ }
+}
+
+StateFilterWidget::Predicate StateFilterWidget::predicate()
+{
+ typedef StateFilter< entity::Package > F;
+ unsigned mask = 0;
+ if (m_installed->isChecked()) mask |= F::Installed;
+ if (m_notInstalled->isChecked()) mask |= F::NotInstalled;
+ if (m_upgradable->isChecked()) mask |= F::Upgradable;
+ if (m_keep->isChecked()) mask |= F::Keep;
+ if (m_install->isChecked()) mask |= F::Install;
+ if (m_remove->isChecked()) mask |= F::Remove;
+ if (m_upgrade->isChecked()) mask |= F::Upgrade;
+
+ StateFilter< entity::Package > f;
+ f.setMask( mask );
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void blockedSet( QCheckBox *b, bool v ) {
+ b->blockSignals( true );
+ b->setChecked( v );
+ b->blockSignals( false );
+}
+
+void StateFilterWidget::predicateChanged()
+{
+ typedef StateFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ unsigned mask = f.mask();
+ blockedSet( m_installed, mask & F::Installed );
+ blockedSet( m_notInstalled, mask & F::NotInstalled );
+ blockedSet( m_upgradable, mask & F::Upgradable );
+ blockedSet( m_keep, mask & F::Keep );
+ blockedSet( m_install, mask & F::Install );
+ blockedSet( m_upgrade, mask & F::Upgrade );
+ blockedSet( m_remove, mask & F::Remove );
+}
+
diff --git a/adept/libadept/statefilter.h b/adept/libadept/statefilter.h
new file mode 100644
index 0000000..570edb1
--- /dev/null
+++ b/adept/libadept/statefilter.h
@@ -0,0 +1,144 @@
+/** -*- C++ -*-
+ @file adept/filterwidgets.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/statefilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <iostream>
+#include <sstream>
+
+#ifndef EPT_STATEFILTER_H
+#define EPT_STATEFILTER_H
+
+class KLineEdit;
+
+namespace adept {
+
+template< typename T >
+struct StateFilter : predicate::Implementation< T, StateFilter< T > >,
+ InterfacingPredicate
+{
+ enum Mask { Installed = 1 << 0,
+ NotInstalled = 1 << 1,
+ Upgradable = 1 << 2,
+ Install = 1 << 3,
+ Remove = 1 << 4,
+ Keep = 1 << 5,
+ Upgrade = 1 << 6 };
+
+ StateFilter()
+ : m_mask( 0xff ) {
+ setupPredicate();
+ }
+
+ void setupPredicate() {
+ predicate::Predicate< T >
+ p0 = not predicate::True< T >(),
+ p1 = not predicate::True< T >();
+ if (m_mask & Installed)
+ p0 = p0 or (predicate::Factory< T >::member( &T::isInstalled )
+ and not predicate::Factory< T >::member( &T::isUpgradable ) );
+ if (m_mask & NotInstalled)
+ p0 = p0 or not predicate::Factory< T >::member( &T::isInstalled );
+ if (m_mask & Upgradable)
+ p0 = p0 or predicate::Factory< T >::member( &T::isUpgradable );
+
+ if (m_mask & Install)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedNewInstall );
+ if (m_mask & Remove)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedRemove );
+ if (m_mask & Keep)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedKeep );
+ if (m_mask & Upgrade)
+ p1 = p1 or predicate::Factory< T >::member( &T::markedUpgrade );
+
+ m_op = p0 and p1;
+ }
+
+ std::string summary() const {
+ std::ostringstream s;
+ std::vector< std::string > r;
+ s << "State filter: ";
+ if (m_mask & Installed && m_mask & NotInstalled && m_mask & Upgradable)
+ r.push_back( "Any State" );
+ else {
+ if (m_mask & Installed)
+ r.push_back( i18n( "Installed" ) );
+ if (m_mask & NotInstalled)
+ r.push_back( i18n( "Not Installed" ) );
+ if (m_mask & Upgradable)
+ r.push_back( i18n( "Upgradable" ) );
+ }
+ std::copy( r.begin(), r.end(),
+ std::ostream_iterator< std::string >( s, " " ) );
+ s << "; ";
+ r.clear();
+ if (m_mask & Install && m_mask & Remove
+ && m_mask & Keep && m_mask & Upgrade)
+ r.push_back( i18n( "Any Action" ) );
+ else {
+ if (m_mask & Install)
+ r.push_back( i18n( "Install" ) );
+ if (m_mask & Remove)
+ r.push_back( i18n( "Remove" ) );
+ if (m_mask & Keep)
+ r.push_back( i18n( "Keep" ) );
+ if (m_mask & Upgrade)
+ r.push_back( i18n( "Upgrade" ) );
+ }
+ std::copy( r.begin(), r.end(),
+ std::ostream_iterator< std::string >( s, " " ) );
+ return s.str();
+ }
+
+ unsigned mask() const {
+ return m_mask;
+ }
+
+ void setMask( unsigned m ) {
+ m_mask = m;
+ setupPredicate();
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const StateFilter &o ) const {
+ return o.m_op == m_op;
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ virtual void reset() {
+ m_mask = 0xff;
+ setupPredicate();
+ }
+
+protected:
+ unsigned m_mask;
+ predicate::Predicate< T > m_op;
+};
+
+class StateFilterWidget : public StateFilterUi
+{
+ Q_OBJECT
+public:
+ StateFilterWidget( QWidget *parent, const char *name = 0 );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+};
+
+}
+
+#endif
diff --git a/adept/libadept/statefilterui.ui b/adept/libadept/statefilterui.ui
new file mode 100644
index 0000000..1ef19e0
--- /dev/null
+++ b/adept/libadept/statefilterui.ui
@@ -0,0 +1,166 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::StateFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>StateFilterUi</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>574</width>
+ <height>55</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>StateFilterUi</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>m_title</cstring>
+ </property>
+ <property name="text">
+ <string>Show: </string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_notInstalled</cstring>
+ </property>
+ <property name="text">
+ <string>not installed,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_installed</cstring>
+ </property>
+ <property name="text">
+ <string>installed,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_upgradable</cstring>
+ </property>
+ <property name="text">
+ <string>upgradable packages,</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>195</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_keep</cstring>
+ </property>
+ <property name="text">
+ <string>no changes,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_install</cstring>
+ </property>
+ <property name="text">
+ <string>install,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_remove</cstring>
+ </property>
+ <property name="text">
+ <string>removal,</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_upgrade</cstring>
+ </property>
+ <property name="text">
+ <string>upgrade requested.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>195</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>with: </string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="3" margin="11"/>
+</UI>
diff --git a/adept/libadept/tagchooser.cpp b/adept/libadept/tagchooser.cpp
new file mode 100644
index 0000000..6443663
--- /dev/null
+++ b/adept/libadept/tagchooser.cpp
@@ -0,0 +1,144 @@
+#include <klocale.h>
+#include <qdragobject.h>
+
+#include <apt-front/cache/component/tags.h>
+#include <apt-front/cache/component/packagetags.h>
+#include <adept/tagchooser.h>
+#include <adept/taglist.h>
+#include <adept/utils.h>
+
+using namespace adept;
+
+FacetItem::FacetItem( TagChooser *t )
+ : KListViewItem( t )
+{
+}
+
+void FacetItem::removeTag( TagItem::Tag t ) {
+ // kdDebug() << "removing tag " << t.fullname() << endl;
+ for ( QListViewItem *n, *i = firstChild(); i != 0; i = n ) {
+ n = i->nextSibling();
+ if ( dynamic_cast< TagItem * >( i )->tag() == t )
+ delete i;
+ }
+}
+
+TagItem::TagItem( FacetItem *p )
+ : KListViewItem( p ), m_toplevel( false )
+{
+}
+
+TagItem::TagItem( TagChooser *l )
+ : KListViewItem( l ), m_toplevel( true )
+{
+}
+
+QString TagItem::text( int c ) const
+{
+ if (c != 0) return u8( "" );
+ return QString( "[" ) + m_tag.name() + "] " + m_tag.shortDescription("");
+}
+
+TagChooser::TagChooser( QWidget *p, const char *n )
+ : KListView( p, n )
+{
+ observeComponent< cache::component::PackageTags >();
+ // addColumn( " ", 20 );
+ setRootIsDecorated( true );
+ addColumn( i18n( "Available Tags" ) );
+ setResizeMode( LastColumn );
+ setDragEnabled( true );
+ setAcceptDrops( true );
+ viewport()->setAcceptDrops( false );
+ // kdDebug() << "TagChooser: tags set" << endl;
+}
+
+void TagChooser::openToplevel() {
+ QListViewItem *i;
+ for ( i = firstChild(); i != 0; i = i->nextSibling() ) {
+ i->setOpen( true );
+ }
+}
+
+QDragObject *TagChooser::dragObject()
+{
+ TagItem *sel = dynamic_cast< TagItem * >( selectedItem() );
+ if (sel)
+ return new QTextDrag( sel->tag().fullname(), this );
+ return 0;
+}
+
+void TagChooser::dragEnterEvent( QDragEnterEvent *e )
+{
+ // hmmmmm :-)
+ kdDebug() << "TagChooser::dragEnterEvent" << endl;
+ e->accept( dynamic_cast< TagList * >( e->source() )
+ && QTextDrag::canDecode( e ) );
+ kdDebug() << dynamic_cast< TagList * >( e->source() )
+ << "; can decode " << QTextDrag::canDecode( e ) << endl;
+}
+
+void TagChooser::dropEvent( QDropEvent* e )
+{
+ TagList *tl = dynamic_cast< TagList * >( e->source() );
+ QString tag;
+ QTextDrag::decode( e, tag );
+ tl->setTags( tl->tags() - cache::Global::get().tags().tagByName(
+ static_cast< const char * >( tag.local8Bit() ) ) );
+}
+
+QString FacetItem::text( int column ) const
+{
+ if ( column == 0 )
+ return QString( "[" ) + m_facet.name() + "] " + m_facet.shortDescription( "" );
+ return u8( "" );
+}
+
+static bool drop( TagChooser::Tag t ) {
+ if ( t.facet().name() == "special" )
+ return true;
+ if ( t.name() == "TODO" )
+ return true;
+ return false;
+}
+
+void TagChooser::setTags( Tag::Set s )
+{
+ Tag::Set remove = m_tags - s;
+ Tag::Set add = s - m_tags;
+ m_tags = s;
+ Tag::Set::iterator i;
+
+ for ( i = add.begin(); i != add.end(); ++i ) {
+
+ if ( drop( *i ) )
+ continue;
+
+ FacetItem *fi = m_facets[ i->facet() ];
+ if ( fi == 0 ) {
+ fi = m_facets[ i->facet() ] = new FacetItem( this );
+ fi->setFacet( i->facet() );
+ }
+
+ TagItem *ti = new TagItem( fi );
+ ti->setTag( *i );
+ }
+
+ for ( i = remove.begin(); i != remove.end(); ++i ) {
+
+ if ( drop( *i ) )
+ continue;
+
+ FacetItem *fi = m_facets[ i->facet() ];
+ fi->removeTag( *i );
+ if ( fi->childCount() == 0 ) {
+ m_facets[ i->facet() ] = 0;
+ delete fi;
+ }
+ }
+
+}
+
+void TagChooser::notifyPreRebuild( cache::component::Base *b ) {
+ setTags( Tag::Set() );
+}
diff --git a/adept/libadept/tagchooser.h b/adept/libadept/tagchooser.h
new file mode 100644
index 0000000..082a60b
--- /dev/null
+++ b/adept/libadept/tagchooser.h
@@ -0,0 +1,82 @@
+/* -*- C++ -*- file adept/tagchooser.h
+ written by Peter Rockai <[email protected]> */
+
+#include <kdebug.h>
+#include <qlayout.h>
+
+#include <apt-front/utils/range.h>
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/entity/tag.h>
+
+#include <adept/extendablelist.h>
+
+#ifndef EPT_TAGCHOOSER_H
+#define EPT_TAGCHOOSER_H
+
+namespace adept {
+
+using namespace aptFront;
+
+class FacetItem;
+class FacetExtender;
+class TagChooser;
+
+class TagItem : public KListViewItem {
+public:
+ typedef cache::entity::Tag Tag;
+ virtual QString text( int ) const;
+ TagItem( TagChooser *t );
+ TagItem( FacetItem *t );
+ void setTag( Tag t ) { m_tag = t; }
+ Tag tag() { return m_tag; }
+protected:
+ bool m_toplevel;
+ Tag m_tag;
+};
+
+class FacetItem : public KListViewItem
+{
+public:
+ typedef cache::entity::Facet Facet;
+ virtual QString text( int ) const;
+ FacetItem( TagChooser *t );
+ void setFacet( Facet f ) { m_facet = f; }
+ void removeTag( TagItem::Tag );
+protected:
+ Facet m_facet;
+};
+
+class TagChooser : public KListView, public cache::Observer // ExtendableList
+{
+ Q_OBJECT
+public:
+ typedef cache::entity::Tag Tag;
+ typedef cache::entity::Facet Facet;
+ TagChooser( QWidget *p = 0, const char *n = 0 );
+ virtual void notifyPreRebuild( cache::component::Base * );
+public slots:
+ virtual void setTags( TagChooser::Tag::Set );
+ void setTitle( QString s ) {
+ setColumnText( 0, s );
+ }
+ void openToplevel();
+
+protected:
+ virtual void dragEnterEvent( QDragEnterEvent *e );
+ virtual void dropEvent( QDropEvent* e );
+ virtual void contentsDragEnterEvent( QDragEnterEvent *e ) {
+ kdDebug() << "TagChooser::contentsDragEnterEvent" << endl;
+ dragEnterEvent( e );
+ }
+ virtual void contentsDropEvent( QDropEvent *e ) {
+ kdDebug() << "TagChooser::contentsDropEvent" << endl;
+ dropEvent( e );
+ }
+ virtual QDragObject *dragObject();
+ Tag::Set m_tags;
+ std::map< Facet, FacetItem * > m_facets;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/tagfilter.cpp b/adept/libadept/tagfilter.cpp
new file mode 100644
index 0000000..4a08adc
--- /dev/null
+++ b/adept/libadept/tagfilter.cpp
@@ -0,0 +1,67 @@
+/* -*- C++ -*- libapt/tagfilter.h
+ written by Peter Rockai <[email protected]> */
+
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+
+#include <tagcoll/InputMerger.h>
+
+#include <adept/tagfilter.h>
+#include <adept/taglist.h>
+
+using namespace adept;
+
+TagFilterWidget::TagFilterWidget( QWidget *w, const char *n )
+ : TagFilterUi( w, n )
+{
+ m_wanted->setName( i18n( "Tags I Want (drop tags here)" ) );
+ m_unwanted->setName( i18n( "Tags I Do Not Want (drop tags here)" ) );
+
+ connect( m_wanted, SIGNAL( tagsChanged( TagList::Tag::Set ) ),
+ this, SLOT( wantedChanged() ) );
+ connect( m_unwanted, SIGNAL( tagsChanged( TagList::Tag::Set ) ),
+ this, SLOT( unwantedChanged() ) );
+}
+
+TagFilterWidget::Predicate TagFilterWidget::predicate()
+{
+ TagFilter< entity::Package > f;
+ f.setWanted( m_wanted->tags() );
+ f.setUnwanted( m_unwanted->tags() );
+ return predicate::adapt< entity::Entity >( f );
+}
+
+static void setTagsBlocking( TagList *l, TagList::Tag::Set s ) {
+ l->blockSignals( true );
+ l->setTags( s );
+ l->blockSignals( false );
+}
+
+void TagFilterWidget::predicateChanged()
+{
+ typedef TagFilter< entity::Package > F;
+ F f = downcast< F >( m_pred );
+ setTagsBlocking( m_wanted, f.wanted() );
+ setTagsBlocking( m_unwanted, f.unwanted() );
+ if ( item() && item()->list() ) {
+ setupColors();
+ item()->list()->delayedUpdateExtenders();
+ }
+}
+
+void TagFilterWidget::wantedChanged()
+{
+ setTagsBlocking( m_unwanted, m_unwanted->tags() - m_wanted->tags() );
+ setupColors();
+ widgetsChanged();
+ item()->list()->delayedUpdateExtenders();
+}
+
+void TagFilterWidget::unwantedChanged()
+{
+ setTagsBlocking( m_wanted, m_wanted->tags() - m_unwanted->tags() );
+ setupColors();
+ widgetsChanged();
+ item()->list()->delayedUpdateExtenders();
+}
diff --git a/adept/libadept/tagfilter.h b/adept/libadept/tagfilter.h
new file mode 100644
index 0000000..1afa44a
--- /dev/null
+++ b/adept/libadept/tagfilter.h
@@ -0,0 +1,113 @@
+/* -*- C++ -*- adept/tagfilter.h
+ written by Peter Rockai <[email protected]> */
+
+#include <klocale.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qpoint.h>
+
+#include <apt-front/cache/entity/entity.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/entity/tag.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/quickfilterui.h>
+#include <adept/filterlist.h>
+#include <adept/lister.h>
+#include <adept/taglist.h>
+#include <adept/tagfilterui.h>
+#include <adept/utils.h>
+
+#ifndef EPT_TAGFILTER_H
+#define EPT_TAGFILTER_H
+
+namespace adept {
+
+using namespace Tagcoll;
+
+template< typename T >
+struct TagFilter : predicate::Implementation< T, TagFilter< T > >,
+ InterfacingPredicate, cache::Observer
+{
+ typedef cache::entity::Tag Tag;
+
+ TagFilter() {
+ setupPredicate();
+ observeComponent< cache::component::Tags >();
+ }
+
+ void setupPredicate() {
+ Cache &cache = cache::Global::get(); // FIXME?
+ m_op = predicate::Factory< T >::tagSet( m_wanted );
+ for (Tag::Set::iterator i = m_unwanted.begin(); i != m_unwanted.end(); ++i ) {
+ m_op = m_op and not predicate::Factory< T >::tag( *i );
+ }
+ }
+
+ std::string summary() const {
+ return u8( i18n( "Tag Filter" ) );
+ }
+
+ void parseArguments( const predicate::ArgumentList & ) {}
+
+ bool operator==( const TagFilter &o ) const {
+ return o.m_wanted == m_wanted && o.m_unwanted == m_unwanted;
+ }
+
+ bool operator()( const T &p ) {
+ return m_op( p );
+ }
+
+ void setWanted( Tag::Set t ) {
+ m_wanted = t;
+ setupPredicate();
+ }
+
+ void setUnwanted( Tag::Set t ) {
+ m_unwanted = t;
+ setupPredicate();
+ }
+
+ Tag::Set wanted() const { return m_wanted; }
+ Tag::Set unwanted() const { return m_unwanted; }
+
+ void notifyPreRebuild( cache::component::Base * ) {
+ kdDebug() << "TagFilter pre-rebuild" << endl;
+ m_unwanted.clear(); m_wanted.clear();
+ }
+
+ void notifyPostRebuild( cache::component::Base * ) {
+ Cache &c = cache::Global::get( m_cache );
+ setupPredicate();
+ }
+
+ virtual void reset() {
+ m_wanted.clear();
+ m_unwanted.clear();
+ setupPredicate();
+ }
+
+protected:
+ predicate::Predicate< T > m_op;
+ Tag::Set m_wanted;
+ Tag::Set m_unwanted;
+};
+
+class TagFilterWidget : public TagFilterUi
+{
+ Q_OBJECT
+public:
+ TagFilterWidget( QWidget *p, const char *n );
+ virtual Predicate predicate();
+public slots:
+ void predicateChanged();
+ void wantedChanged();
+ void unwantedChanged();
+protected:
+ TagList *m_addingTo;
+ std::vector< entity::Tag > m_tagMenuMap;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/tagfilterui.ui b/adept/libadept/tagfilterui.ui
new file mode 100644
index 0000000..1f78b8a
--- /dev/null
+++ b/adept/libadept/tagfilterui.ui
@@ -0,0 +1,95 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>adept::TagFilterUi</class>
+<widget class="adept::PredicateInterface">
+ <property name="name">
+ <cstring>TagFilterUi</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>627</width>
+ <height>130</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="adept::TagList">
+ <property name="name">
+ <cstring>m_wanted</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>90</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="adept::TagList">
+ <property name="name">
+ <cstring>m_unwanted</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>adept::TagList</class>
+ <header location="global">adept/taglist.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1003">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b249444154388db5944d4c5c5518869f73ce9db9cc40f929cc30300e18129a50685268a28291982e1a2175212eaab1c49d3f8971e7aec6aedb54a32b435dd8685cb8c0c4b8b0feb421b7bd8186a069d23209144b18cb0c02f3732ff3c3ccbdd705a571941213f1dd9d93739ef37e6fbeef08d334d9d5d0d090c701c8344d2176c1a6697a5d5d5dd8b64d2a95c2b2ac7f05b12c8b783c8e6118d8b6fd685fdb753a39394928e2a7c55724d693a7e214104220242805520a84d8b9e4790f0b1302c7751958f1e30534be9fa41a0c60db362dbe227f64af91b6e7719c2dfc0117a71c603da591de2882a7d3d4ec27122b10acad50aeb88044d542b84de3af7ab44aa55274f4e449dbf354bc347aa096fbf37e7efa2ecbad1b36907d78b289de8120232f37726250c3f52cf0a026a0f6065b9645d929e038167aa096d91b307171059034b5f8e9e9eb44fa052b4b25eeccd9dc99cb71f6ad082fbea2e351c075bdbdc13b9109fc01b83fef63e2e232e03076b68393231a0dcd024daf502c1e66e67a89cb971ef0e5a74bb4b61e6378248094b92ab0ac024b70ca017ef8360394187b2dc6d8b89ffa500e4d4f93d9083275d5e6f9913ade3dd70ee87c7d25c95646a25415aadab152b09ed4f8c5cc130a853839eac3951b684a61e70ef3f9c739668c24eba912afbfddc6d4d506e6a6d7b8b7d082aa8eb8dab19482cdcd220e36dd3dc19df23545de0a71f952861923493456cfd3cf36123c54a0b7bf0e8064621b21f7712c040857071ca4eea0f40a99f510573ec971cb48030e811a1faded3e94be85f2fb00703d1ff26f96ab9f011a5b04d0c4f26fdb948a754c1b25668c2491483d5d5d611617d6b8f0fe32cb779b492ce65168b4c774a4701eefd8f3a02d56e6e8f13aeefe9a63fa5a89d1970e91d908f3d46003e1480d173e28b37827c9b977348ab92ce16890237d1ec907ee3e8e3d8f60d0e1f4583d009f7d9860662acff89bad1c1faad0717493f7ce7713ed8cb0995c255f2a317a26427b67198f6a70f51c0a41b902279ed1187f23cc17130b7c74de65eac77a7a8f05517e41e2deefa4930576db60fa7a8ee1535134df3e93e7b82e0817476439fd6a9070a49f6fbe4a3077739db99b15c001146dd13a46cf1cc1f83943c62e51de76b0738fc9381e8f3390f0236b252e124999e11724fd833196164bacadb87848224fe874f779b43fe9f2dca928956d505a96dbb3f9bdc18661e00534c26d1a7a40e13912a11c9454280da41048a9915c75585df500074d53d816dc9edd229528ef0db66dbbea3ffdaffa471f1f28d8344df1bf800f1a6e9aa6f813c39885bc050f269c0000000049454e44ae426082</data>
+ </image>
+</images>
+<includes>
+ <include location="global" impldecl="in declaration">adept/filterlist.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>adept/taglist.h</includehint>
+</includehints>
+</UI>
diff --git a/adept/libadept/taglist.cpp b/adept/libadept/taglist.cpp
new file mode 100644
index 0000000..22b3d58
--- /dev/null
+++ b/adept/libadept/taglist.cpp
@@ -0,0 +1,134 @@
+/* -*- C++ -*- adept/taglist.cpp
+ written by Peter Rockai <[email protected]> */
+
+#include <qlabel.h>
+#include <qtimer.h>
+#include <kdebug.h>
+#include <qdragobject.h>
+#include <qevent.h>
+#include <klocale.h>
+
+#include <apt-front/cache/component/tags.h>
+#include <adept/taglist.h>
+#include <adept/utils.h>
+
+using namespace adept;
+
+TagLabel::TagLabel( Tag t, TagList *l, QWidget *p, const char *n )
+ : QHBox( p, n ), m_tag( t ), m_list( l )
+{
+ if ( t == Tag() ) {
+ m_description = new QLabel( QString( " " ) + i18n( "[none]" ), this );
+ } else {
+ m_remove = new QLabel( this );
+ m_remove->setPixmap( SmallIcon( u8( "cancel" ) ) );
+ m_remove->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ m_description = new QLabel( QString( " [" ) + t.fullname( "n/a" ) + "] "
+ + t.shortDescription( "n/a" ), this );
+ }
+}
+
+void TagLabel::mouseReleaseEvent( QMouseEvent *e ) {
+ if ( e->button() == Qt::LeftButton &&
+ dynamic_cast< QLabel * >( childAt( e->pos() ) ) == m_remove )
+ m_list->setTags( m_list->tags() - m_tag );
+}
+
+TagList::TagList( QWidget *p, const char *n )
+ : QVBox( p, n )
+{
+ m_name = new QLabel( this );
+ m_tagBox = new QVBox( this );
+ m_tagBox->setFrameShape( QFrame::Panel );
+ m_tagBox->setFrameShadow( QFrame::Sunken );
+ m_updateScheduled = false;
+ setAcceptDrops( true );
+ scheduleUpdateList();
+ m_tagSpacer = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding );
+}
+
+void TagList::setTags( Tag::Set t )
+{
+ m_tags = t;
+ scheduleUpdateList();
+ emit tagsChanged( m_tags );
+}
+
+void TagList::addTag( Tag t )
+{
+ if ( t == Tag() )
+ return;
+ m_tags += t;
+ scheduleUpdateList();
+ emit tagsChanged( m_tags );
+}
+
+void TagList::setName( QString n )
+{
+ m_name->setText( n );
+}
+
+void TagList::scheduleUpdateList()
+{
+ if (! m_updateScheduled) {
+ kdDebug() << "TagList: scheduling update" << endl;
+ QTimer::singleShot( 0, this, SLOT( updateList() ) );
+ m_updateScheduled = true;
+ }
+}
+
+void TagList::updateList()
+{
+ kdDebug() << "TagList (" + m_name->text() + "): updating list" << endl;
+ clearList();
+ if ( m_tags.empty() ) {
+ appendLabel( new TagLabel( Tag(), this, m_tagBox ) );
+ } else {
+ for ( Tag::Set::iterator i = m_tags.begin(); i != m_tags.end(); ++i ) {
+ appendLabel( new TagLabel( *i, this, m_tagBox ) );
+ }
+ }
+ m_tagBox->layout()->addItem( m_tagSpacer );
+ update();
+ parentWidget()->adjustSize();
+ m_updateScheduled = false;
+}
+
+void TagList::appendLabel( TagLabel *l )
+{
+ m_list.push_back( l );
+ l->show();
+}
+
+void TagList::mouseMoveEvent( QMouseEvent *e ) {
+ TagLabel *child = dynamic_cast< TagLabel * >( childAt( e->pos() )->parentWidget() );
+ if ( !child )
+ return;
+ QDragObject *d = new QTextDrag( child->tag().fullname( "" ), this );
+ d->dragCopy();
+}
+
+void TagList::dragEnterEvent( QDragEnterEvent *e ) {
+ kdDebug() << "TagList::dragEnterEvent" << endl;
+ e->accept( QTextDrag::canDecode( e ) );
+}
+
+void TagList::dropEvent( QDropEvent* e ) {
+ QString tag;
+ kdDebug() << "TagList: drop event" << endl;
+ QTextDrag::decode( e, tag );
+ try {
+ addTag( cache::Global::get().tags().tagByName(
+ static_cast< const char * >( tag.local8Bit() ) ) );
+ } catch (...) {} // not a tag, ignore
+ scheduleUpdateList();
+}
+
+void TagList::clearList()
+{
+ for (List::iterator i = m_list.begin(); i != m_list.end(); ++i ) {
+ delete *i;
+ }
+ m_list.clear();
+ m_tagBox->layout()->removeItem( m_tagSpacer );
+}
diff --git a/adept/libadept/taglist.h b/adept/libadept/taglist.h
new file mode 100644
index 0000000..4cd55a3
--- /dev/null
+++ b/adept/libadept/taglist.h
@@ -0,0 +1,75 @@
+/** -*- C++ -*-
+ @file adept/taglist.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <kiconloader.h>
+#include <vector>
+
+#include <apt-front/cache/entity/tag.h>
+
+#ifndef EPT_TAGLIST_H
+#define EPT_TAGLIST_H
+
+class QLabel;
+
+namespace adept {
+
+using namespace aptFront;
+
+class TagList;
+
+class TagLabel : public QHBox
+{
+ Q_OBJECT
+public:
+ typedef cache::entity::Tag Tag;
+ TagLabel( Tag t, TagList *l, QWidget *p = 0, const char *n = 0 );
+ Tag tag() { return m_tag; }
+protected:
+ void mouseReleaseEvent( QMouseEvent *e );
+ Tag m_tag;
+ QLabel *m_remove;
+ QLabel *m_description;
+ TagList *m_list;
+};
+
+class TagList : public QVBox
+{
+ Q_OBJECT
+public:
+ typedef cache::entity::Tag Tag;
+ TagList( QWidget *p = 0, const char *n = 0 );
+ void setTags( Tag::Set t );
+ void addTag( Tag t );
+ Tag::Set tags() { return m_tags; }
+ void setName( QString n );
+public slots:
+ void scheduleUpdateList();
+ void updateList();
+signals:
+ void tagsChanged( TagList::Tag::Set );
+protected:
+ void mouseMoveEvent( QMouseEvent *e );
+ void dropEvent( QDropEvent * );
+ void dragEnterEvent( QDragEnterEvent * );
+ void appendLabel( TagLabel * );
+ void clearList();
+
+ bool m_updateScheduled;
+ Tag::Set m_tags;
+ QLabel *m_name;
+ QVBox *m_tagBox;
+ QSpacerItem *m_tagSpacer;
+ typedef std::vector< TagLabel * > List;
+ List m_list;
+};
+
+}
+
+#endif
diff --git a/adept/libadept/threadutils.cpp b/adept/libadept/threadutils.cpp
new file mode 100644
index 0000000..722f75d
--- /dev/null
+++ b/adept/libadept/threadutils.cpp
@@ -0,0 +1,44 @@
+/** -*- C++ -*-
+ @file adept/utils.cpp
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <map>
+#include <adept/utils.h>
+
+namespace adept {
+
+QMutex Threads::serialize;
+Threads::Queue Threads::threads;
+
+void Threads::wait() {
+ static std::map< QMutex *, int > locked;
+ while ( !threads.empty() ) {
+ QThread *current = threads.front().first;
+ if ( current->finished() ) {
+ delete current;
+ threads.pop_front();
+ continue;
+ }
+ for ( Queue::iterator thr = threads.begin(); thr != threads.end(); ++thr ) {
+ ++locked[ thr->second ];
+ thr->second->lock();
+ }
+ kapp->processEvents();
+ for ( Queue::iterator thr = threads.begin(); thr != threads.end(); ++thr ) {
+ while ( locked[ thr->second ] > 0 ) {
+ thr->second->unlock();
+ --locked[ thr->second ];
+ }
+ }
+ usleep( 50000 );
+ }
+}
+
+void Threads::enqueue( QThread *t, QMutex *m )
+{
+ threads.push_back( std::make_pair( t, m ) );
+ t->start();
+}
+
+}
diff --git a/adept/libadept/utils.h b/adept/libadept/utils.h
new file mode 100644
index 0000000..6c3a3d3
--- /dev/null
+++ b/adept/libadept/utils.h
@@ -0,0 +1,71 @@
+/** -*- C++ -*-
+ @file adept/utils.h
+ @author Peter Rockai <[email protected]>
+*/
+
+#include <qthread.h>
+#include <qstring.h>
+#include <kapplication.h>
+#include <string>
+#include <queue>
+#include <kdebug.h>
+
+#ifndef EPT_UTILS_H
+#define EPT_UTILS_H
+
+namespace adept {
+
+inline QString u8( std::string s ) {
+ return QString::fromUtf8( s.c_str() );
+}
+
+inline std::string u8( QString s ) {
+ return std::string( s.utf8() );
+}
+
+inline QString u8( const char *s ) {
+ return QString::fromUtf8( s );
+}
+
+struct Threads {
+ static QMutex serialize;
+ typedef std::deque< std::pair< QThread *, QMutex * > > Queue;
+ static Queue threads;
+ static void enqueue( QThread *t, QMutex *m );
+ static void wait();
+};
+
+template< typename F, typename P >
+struct AsyncCall : public QThread
+{
+ AsyncCall( F f, P p ) : func( f ), param( p ) {}
+ virtual void run()
+ {
+ // kdDebug() << "Thread waiting for mutex..." << endl;
+ Threads::serialize.lock();
+ // kdDebug() << "starting thread (mutex acquired)" << endl;
+ func( param );
+ // kdDebug() << "finishing thread (releasing mutex)" << endl;
+ Threads::serialize.unlock();
+ }
+ virtual ~AsyncCall() {}
+protected:
+ F func;
+ P param;
+};
+
+
+template< typename F, typename P > AsyncCall< F, P > *asyncCall( F f, P p ) {
+ return new AsyncCall< F, P >( f, p );
+}
+
+inline static void adjustFontSize( QWidget *w, int off ) {
+ QFont f = w->font();
+ f.setPointSize( f.pointSize() + off ); // a bit smaller font...
+ w->setFont( f );
+ w->updateGeometry();
+}
+
+}
+
+#endif
diff --git a/adept/libadept/view.cpp b/adept/libadept/view.cpp
new file mode 100644
index 0000000..207277c
--- /dev/null
+++ b/adept/libadept/view.cpp
@@ -0,0 +1,153 @@
+#include <apt-front/predicate/combinators.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/quickfilter.h>
+#include <adept/statefilter.h>
+#include <adept/tagfilter.h>
+
+#include <adept/packagedetails.h>
+#include <adept/view.h>
+#include <adept/filtersidebar.h>
+
+using namespace adept;
+
+View::View( QWidget *p, const char *n )
+ : QSplitter( p, n )
+{
+ setOrientation( Qt::Vertical );
+ m_flist = new FilterList( this );
+ m_bottom = new QSplitter( this );
+ m_bottom->setOrientation( Qt::Horizontal );
+ m_lister = new Lister( m_bottom );
+ m_flist->plugLister( m_lister );
+ m_sidebar = new FilterSidebar( m_bottom );
+
+ connect( m_lister, SIGNAL( cardinalityChanged( const Lister::Cardinality & ) ),
+ m_sidebar, SLOT( setCardinality( const Lister::Cardinality & ) ) );
+
+ m_flist->setHiddenPredicate(
+ predicate::adapt< entity::Entity >(
+ predicate::Package::member( &entity::Package::hasVersion ) ) );
+ m_flist->appendPredicate(
+ predicate::adapt< entity::Entity >(
+ StateFilter< entity::Package >() ) );
+ m_flist->appendPredicate(
+ predicate::adapt< entity::Entity >(
+ TagFilter< entity::Package >() ) );
+ m_flist->appendPredicate(
+ predicate::adapt< entity::Entity >(
+ QuickFilter< entity::Package >() ) );
+
+ m_lister->setRangeProvider( this );
+
+ QTimer::singleShot( 0, this, SLOT( delayed() ) );
+}
+
+Lister::Range View::listerRange() {
+ component::Packages &cp = cache::Global::get().packages();
+ return cp.sorted();
+ // return range( cp.packagesBegin(), cp.packagesEnd() );
+}
+
+void View::hideTags() {
+ QValueList< int > szl;
+ szl.append( 0 ); szl.append( 1 );
+ setSizes( szl );
+}
+
+void View::hideFilters() {
+ QValueList< int > szl;
+ szl.append( 1 ); szl.append( 0 );
+ m_bottom->setSizes( szl );
+}
+
+predicate::Predicate< entity::Entity > View::previewPredicate()
+{
+ return predicate::adapt< entity::Entity >(
+ (not predicate::Package::member( &entity::Package::markedKeep ))
+ or predicate::Package::member( &entity::Package::isBroken )
+ or predicate::Package::member( &entity::Package::willBreak ) );
+}
+
+void View::setUpgradeMode()
+{
+ setPreviewMode();
+ filterList()->setHiddenPredicate(
+ previewPredicate() or predicate::adapt< entity::Entity >(
+ predicate::Package::member( &entity::Package::isUpgradable ) ) );
+}
+
+void View::setPreviewMode()
+{
+ filterList()->setHiddenPredicate( previewPredicate() );
+ hideFilters();
+ hideTags();
+}
+
+void View::delayed()
+{
+ // cleanRebuild();
+}
+
+Browser::Browser( QWidget *p, const char *n )
+ : QWidgetStack( p, n ), m_currentValid( false )
+{
+ m_current = entity::Entity();
+ addWidget( m_view = new View( this ) );
+ addWidget( m_details = new PackageDetails( this ) );
+ connect( m_view->lister(), SIGNAL( detailsRequested( Lister::Entity ) ),
+ this, SLOT( show( Lister::Entity ) ) );
+ connect( m_details, SIGNAL( showList() ),
+ this, SLOT( showList() ) );
+ connect( m_details, SIGNAL( back() ),
+ this, SLOT( back() ) );
+ connect( m_details, SIGNAL( forward() ),
+ this, SLOT( forward() ) );
+ connect( m_details, SIGNAL( detailsRequested( Lister::Entity ) ),
+ this, SLOT( show( Lister::Entity ) ) );
+}
+
+void Browser::showList()
+{
+ raiseWidget( m_view );
+}
+
+void Browser::back()
+{
+ m_forward.push_back( m_current );
+ m_current = m_back.back();
+ m_back.pop_back();
+ doShow( m_current );
+}
+
+void Browser::forward()
+{
+ m_back.push_back( m_current );
+ m_current = m_forward.back();
+ m_forward.pop_back();
+ doShow( m_current );
+}
+
+void Browser::doShow( Lister::Entity e )
+{
+ m_details->setHasForward( !m_forward.empty() );
+ m_details->setHasBack( !m_back.empty() );
+ raiseWidget( m_details );
+ m_details->setPackage( downcast< entity::Package >( e ) );
+}
+
+void Browser::show( Lister::Entity e )
+{
+ m_forward.clear();
+ if ( m_currentValid )
+ m_back.push_back( m_current );
+ m_currentValid = true;
+ m_current = e.stable();
+ doShow( e );
+}
+
+/* Kolik existencialistu je potreba k zasroubovani zarovky?
+ Dva. Jeden sroubuje zarovku, a druhy premysli jak zarovka
+ sama o sobe predstavuje jednotlivy zarivy bod v subjektivni
+ realite v podsveti nekonecne absurdity dosahujici neuprimny
+ vesmir nicoty. */
diff --git a/adept/libadept/view.h b/adept/libadept/view.h
new file mode 100644
index 0000000..ea6c6f5
--- /dev/null
+++ b/adept/libadept/view.h
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+
+#include <deque>
+
+#include <qsplitter.h>
+#include <qwidgetstack.h>
+
+#include <adept/lister.h>
+#include <adept/filterlist.h>
+
+#ifndef EPT_VIEW_H
+#define EPT_VIEW_H
+
+class QSplitter;
+
+namespace adept {
+
+class FilterSidebar;
+class PackageDetails;
+
+class View: public QSplitter, public Lister::RangeProvider {
+ Q_OBJECT
+public:
+ View( QWidget *p = 0, const char *n = 0 );
+ FilterList *filterList() { return m_flist; }
+ Lister *lister() { return m_lister; }
+ virtual Lister::Range listerRange();
+public slots:
+ void cleanRebuild() { m_lister->cleanRebuild(); }
+ void hideFilters();
+ void hideTags();
+ void setPreviewMode();
+ void setUpgradeMode();
+protected slots:
+ void delayed();
+protected:
+ predicate::Predicate< entity::Entity > previewPredicate();
+ QSplitter *m_bottom;
+ FilterList *m_flist;
+ Lister *m_lister;
+ FilterSidebar *m_sidebar;
+};
+
+class Browser : public QWidgetStack {
+ Q_OBJECT
+public:
+ Browser( QWidget *p = 0, const char *n = 0 );
+ View *searchView() const { return m_view; }
+public slots:
+ void forward();
+ void back();
+ void show( Lister::Entity e );
+ void showList();
+ void doShow( Lister::Entity e );
+protected:
+ typedef std::deque< Lister::Entity > Deque;
+ Deque m_forward, m_back;
+ entity::Entity m_current;
+ View *m_view;
+ PackageDetails *m_details;
+ bool m_currentValid;
+};
+
+}
+
+#endif
diff --git a/adept/manager/Makefile.am b/adept/manager/Makefile.am
new file mode 100644
index 0000000..a7b8a0f
--- /dev/null
+++ b/adept/manager/Makefile.am
@@ -0,0 +1,20 @@
+bin_PROGRAMS = adept_manager
+noinst_HEADERS = app.h
+adept_manager_SOURCES = main.cpp app.cpp
+adept_manager_LDADD = ../adept/libadept.la -lapt-front $(LIBEPT_LIBS) $(LIBTAGCOLL2_LIBS) $(LIBWIBBLE_LIBS) $(LIB_KIO) $(LIB_KDEUI) ../kubuntu_upgrader/libkubuntuupgradewizard.la
+adept_manager_LDFLAGS = -L/usr/lib/debug
+INCLUDES = $(all_includes) $(LIBAPT_FRONT_CFLAGS) $(LIBEPT_CFLAGS) $(LIBTAGCOLL2_CFLAGS) $(LIBWIBBLE_CFLAGS) -I$(srcdir)/.. -I..
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII
+METASOURCES = AUTO
+KDE_ICON = AUTO
+
+rcdir = $(kde_datadir)/adept_manager
+rc_DATA = adept_managerui.rc
+
+#shelldesktopdir = $(kde_appsdir)/System
+xdg_apps_DATA = adept_manager.desktop
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(EXTRACTRC) `find . -name "*.rc"` >> rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/adept.pot
diff --git a/adept/manager/adept_manager.desktop b/adept/manager/adept_manager.desktop
new file mode 100644
index 0000000..6e7e311
--- /dev/null
+++ b/adept/manager/adept_manager.desktop
@@ -0,0 +1,43 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Adept Manager
+Name[ca]=Gestor Adept
+Name[ga]=Bainisteoir Adept
+Name[ja]=Adept マネージャ
+Name[pt]=Gestor do Adept
+Name[sv]=Adept-hantering
+GenericName=Manage Packages
+GenericName[ca]=Gestiona de paquets
+GenericName[ga]=Bainistigh Pacáistí
+GenericName[ja]=パッケージを管理
+GenericName[pt]=Gestão de Pacotes
+GenericName[sv]=Hantera paket
+Exec=/opt/kde3/bin/adept_manager
+Categories=Qt;KDE;System;
+Icon=adept_manager
+Type=Application
+X-KDE-SubstituteUID=true
+Comment=Manage installed and available software
+Comment[bg]=Управление на инсталиран и наличен софтуер
+Comment[ca]=Gestiona el programari instal·lat i disponible
+Comment[cs]=Správa nainstalovaného a dostupného softwaru
+Comment[da]=Håndtér installeret og tilgængelig software
+Comment[de]=Verwaltet installierte und verfügbare Software
+Comment[el]=Διαχείριση εγκατεστημένου και διαθέσιμου λογισμικού
+Comment[es]=Administrar el software instalado y disponible
+Comment[et]=Paigaldatud ja saadaoleva tarkvara haldamine
+Comment[fr]=Gestion des logiciels disponibles et installés
+Comment[ga]=Bainistigh bogearraí atá suiteáilte agus ar fáil
+Comment[gl]=Xestiona o software instalado e disponíbel
+Comment[it]=Gestisce il software installato e disponibile
+Comment[ja]=インストール済み及び利用可能なソフトウェアを管理
+Comment[ka]=დაყენებული და ხელმისაწვდომი პროგრამების მართვა
+Comment[lt]=Įdiegtų ir prieinamų programų tvarkymas
+Comment[nl]=Beheren van geïnstalleerde en beschikbare software software
+Comment[pt]=Gerir o 'software' instalado e disponível
+Comment[sk]=Manažuje inštalovaný a dostupný software
+Comment[sr]=Управља инсталираним и доступним програмима
+Comment[sr@Latn]=Upravlja instaliranim i dostupnim programima
+Comment[sv]=Hantera installerad och tillgänglig programvara
+Comment[xx]=xxManage installed and available softwarexx
+Terminal=false
diff --git a/adept/manager/adept_managerui.rc b/adept/manager/adept_managerui.rc
new file mode 100644
index 0000000..add78d4
--- /dev/null
+++ b/adept/manager/adept_managerui.rc
@@ -0,0 +1,38 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui version="6" name="adept">
+ <MenuBar>
+ <Menu name="file" noMerge="1">
+ <text>&amp;Adept</text>
+ <Action name="update" />
+ <Action name="sourceseditor" />
+ <Action name="commit" />
+ <Separator />
+ <Action name="upgrade" />
+ <Action name="dist-upgrade" />
+ <Separator />
+ <Action name="file_quit" />
+ </Menu>
+ <Menu name="view" noMerge="1">
+ <text>&amp;View</text>
+ <Action name="packagelist" />
+ <Action name="download_out" />
+ <Action name="commit_out" />
+ </Menu>
+ <Menu name="edit" noMerge="1">
+ <text>&amp;Edit</text>
+ <Action name="edit_undo" />
+ <Action name="edit_redo" />
+ </Menu>
+ </MenuBar>
+
+ <ToolBar name="mainToolBar" noMerge="1">
+ <Action name="update" />
+ <Action name="preview" />
+ <Action name="commit" />
+ <Separator />
+ <Action name="dist-upgrade" />
+ <Separator/>
+ <Action name="edit_undo"/>
+ <Action name="edit_redo"/>
+ </ToolBar>
+</kpartgui>
diff --git a/adept/manager/app.cpp b/adept/manager/app.cpp
new file mode 100644
index 0000000..832016e
--- /dev/null
+++ b/adept/manager/app.cpp
@@ -0,0 +1,450 @@
+#define KUBUNTU
+
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qwidgetstack.h>
+#include <qsplitter.h>
+#include <qtimer.h>
+#include <qfile.h>
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kaction.h>
+#include <kactionclasses.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kparts/part.h>
+#include <kstatusbar.h>
+#include <kprocess.h>
+
+// bleeeh
+#include <apt-pkg/init.h>
+#include <cassert>
+
+#include <apt-front/manager.h>
+#include <apt-front/init.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/acqprogresswidget.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+#ifdef KUBUNTU
+#include <kubuntu_upgrader/upgradewizard.h>
+#endif
+
+#include "app.h"
+
+using namespace aptFront;
+using namespace aptFront::cache;
+using namespace adept;
+
+TestApp::TestApp() {
+ kdDebug() << "ctor running" << endl;
+ setAcceptReadOnly( true );
+
+ setupActions();
+ setupGUI();
+
+ m_rebuilds = 0;
+ m_stack = new QWidgetStack( this );
+
+ m_stack->addWidget( m_loading = new QLabel( i18n( "Loading, please wait..." ), m_stack ) );
+ m_loading->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
+
+ Application::setStatusBar( statusBar() );
+
+ setCentralWidget( m_stack );
+
+ QTimer::singleShot(
+ 0, this,
+ SLOT( delayed() ) );
+
+ kdDebug() << "ctor done" << endl;
+
+#ifdef KUBUNTU
+ m_upgradeButtonAdded = false;
+#endif
+}
+
+void TestApp::guardLister( Lister *l )
+{
+ connect( l, SIGNAL( rebuildStarted() ),
+ this, SLOT( rebuildStarted() ) );
+ connect( l, SIGNAL( rebuildFinished() ),
+ this, SLOT( rebuildFinished() ) );
+}
+
+void TestApp::delayed() {
+ initialize();
+
+ observeComponent< component::State >();
+
+ m_stack->addWidget( m_list = new adept::Browser( m_stack ) );
+ guardLister( m_list->searchView()->lister() );
+
+ m_stack->addWidget( m_sources = new adept::SourcesEditor(
+ _config->FindFile(
+ "Dir::Etc::sourcelist").c_str(),
+ this ) );
+
+ connect ( m_sources, SIGNAL( close() ),
+ this, SLOT( closeSources() ) );
+
+ // set up preview widget
+ m_stack->addWidget( m_preview = new adept::Browser( m_stack ) );
+
+ m_preview->searchView()->setPreviewMode();
+ guardLister( m_preview->searchView()->lister() );
+
+ m_stack->addWidget( m_progress = new adept::AcqProgressWidget( m_stack ) );
+ m_stack->addWidget( m_commitProgress = new adept::CommitProgress( m_stack ) );
+
+ m_stack->raiseWidget( m_list );
+
+ addMode( Sources, m_sourcesAction, m_sources );
+ addMode( Preview, m_previewAction, m_preview );
+ addMode( Download, m_progressAction, m_progress );
+ addMode( Commit, m_commitProgressAction, m_commitProgress );
+
+ m_list->searchView()->lister()->cleanRebuild();
+ m_preview->searchView()->lister()->cleanRebuild();
+ setActionsEnabled( true );
+ statusBar()->clear();
+ notifyPostChange( 0 );
+}
+
+void TestApp::setupActions()
+{
+ (new KAction(
+ i18n( "Fetch Updates" ), u8( "adept_update" ),
+ 0, this, SLOT( update() ), actionCollection(),
+ "update" ))->setEnabled( false );
+
+ (new KAction(
+ i18n( "Reload Cache" ), u8( "adept_reload" ),
+ 0, this, SLOT( reload() ), actionCollection(),
+ "reload" ))->setEnabled( false );
+
+ m_upgrade = new KAction(
+ i18n( "Safe Upgrade" ), u8( "adept_upgrade" ),
+ 0, this, SLOT( upgrade() ), actionCollection(),
+ "upgrade" );
+ m_distUpgrade = new KAction(
+ i18n( "Full Upgrade" ), u8( "adept_distupgrade" ),
+ 0, this, SLOT( distUpgrade() ), actionCollection(),
+ "dist-upgrade" );
+ m_commit = new KAction(
+ i18n( "Apply Changes" ), u8( "adept_commit" ),
+ 0, this, SLOT( commit() ), actionCollection(),
+ "commit" );
+
+ m_sourcesAction = new KToggleAction(
+ i18n( "Manage Repositories" ), u8( "adept_sourceseditor" ),
+ 0, this, SLOT( toggleSources() ), actionCollection(),
+ "sourceseditor" );
+ m_previewAction = new KToggleAction(
+ i18n( "Preview Changes" ), u8( "adept_preview" ),
+ 0, this, SLOT( togglePreview() ), actionCollection(),
+ "preview" );
+
+ m_progressAction = new KToggleAction(
+ i18n( "Show Last Download" ), u8( "adept_download_out" ),
+ 0, this, SLOT( toggleDownload() ), actionCollection(),
+ "download_out" );
+
+ m_commitProgressAction = new KToggleAction(
+ i18n( "Show Last DPkg Run" ), u8( "adept_commit_out" ),
+ 0, this, SLOT( toggleCommit() ), actionCollection(),
+ "commit_out" );
+
+ m_listAction = new KToggleAction(
+ i18n( "Show Package List" ), u8( "adept_packagelist" ),
+ 0, this, SLOT( closeModes() ), actionCollection(),
+ "packagelist" );
+
+ m_sourcesAction->setEnabled( true );
+ m_progressAction->setEnabled( false );
+ m_previewAction->setEnabled( false );
+ m_commitProgressAction->setEnabled( false );
+ m_listAction->setEnabled( false );
+
+ m_modesClosed = m_listAction;
+ m_listAction->setChecked( true );
+
+ m_undo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
+ m_redo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
+
+ m_distUpgrade->setEnabled( false );
+ m_upgrade->setEnabled( false );
+
+ m_commit->setEnabled( false );
+ KStdAction::quit( this, SLOT( close() ), actionCollection() );
+ setHistoryEnabled( false );
+ createStandardStatusBarAction();
+}
+
+void TestApp::setHistoryEnabled( bool e ) {
+ if ( e && history() ) {
+ m_undo->setEnabled( history()->canUndo() );
+ m_redo->setEnabled( history()->canRedo() );
+ } else {
+ m_undo->setEnabled( false );
+ m_redo->setEnabled( false );
+ }
+}
+
+void TestApp::setActionsEnabled( bool e )
+{
+ m_actionsEnabled = e;
+ updateActionState();
+}
+
+void TestApp::updateActionState()
+{
+ bool e = m_actionsEnabled;
+ bool w = cache::Global::get().writeable();
+ component::State &s = cache::Global::get().state();
+ KActionPtrList a = actionCollection()->actions();
+ /* View menus seem to be BROKEN HERE?! */
+ for (KActionPtrList::iterator i = a.begin(); i != a.end(); ++i) {
+ if ( u8( (*i)->name() ) == u8( "update" ) ) {
+ (*i)->setEnabled( e && w );
+ } else if ( u8( (*i)->name() ) == u8( "preview" ) ) {
+ (*i)->setEnabled( e );
+ } else {
+ (*i)->setEnabled(e && w);
+ }
+ }
+ setHistoryEnabled( e );
+ m_commit->setEnabled( e && w && s.changed() );
+ m_upgrade->setEnabled( e && w && s.upgradableCount() );
+ m_distUpgrade->setEnabled( e && w && s.upgradableCount() );
+}
+
+template< typename T, typename In >
+void TestApp::aptAction( In b, In e ) {
+ const KAction *a = dynamic_cast<const KAction *>( sender() ); // HACK
+ typename T::Vector v = T::list();
+ for (typename T::Vector::iterator i = v.begin(); i != v.end(); ++i) {
+ if( a->name() == i->name() ) {
+ (*i)( b, e );
+ return;
+ }
+ }
+}
+
+void TestApp::notifyPostRebuild( component::Base *b )
+{
+ Application::notifyPostRebuild( b );
+ notifyPostChange( b );
+}
+
+void TestApp::notifyPreChange( component::Base *b )
+{
+ Application::notifyPreChange( b );
+ checkpoint();
+}
+
+void TestApp::notifyPostChange( component::Base *b )
+{
+ Application::notifyPostChange( b );
+ updateActionState();
+}
+
+void TestApp::closeEvent( QCloseEvent *e ) {
+ cache::component::State &s = cache::Global::get().state();
+ if (s.changed()) {
+ if (KMessageBox::warningYesNo(
+ this, i18n( "You have done changes that were left uncommited. "
+ "Are you sure you want to exit? " ),
+ i18n( "Uncommited changes, really quit?" ) ) == KMessageBox::Yes)
+ e->accept();
+ } else
+ e->accept();
+}
+
+void TestApp::foregroundClosed()
+{
+ m_stack->raiseWidget( m_list );
+}
+
+void TestApp::update() {
+ closeModes();
+ setActionsEnabled( false );
+ aptFront::Manager m;
+ m.setProgressCallback( m_progress->callback() );
+ m.setUpdateInterval( 100000 );
+ try {
+ m_stack->raiseWidget( m_progress );
+ m.update();
+ } catch ( exception::OperationCancelled ) { // ignore
+ } catch (...) {
+ KMessageBox::sorry( this,
+ i18n( "There was an error downloading updates. " ),
+ i18n( "Could not fetch updates" ) );
+ }
+ kdDebug() << "closing progress widget" << endl;
+ m_stack->raiseWidget( m_list );
+ setActionsEnabled( true );
+ notifyPostChange( 0 );
+#ifdef KUBUNTU
+ wizard = new UpgradeWizard(this, 0, 1);
+ if( !m_upgradeButtonAdded && wizard->checkForDistUpgrade(true) ) {
+ KToolBar* tool = toolBar();
+ tool->insertButton(QString("2uparrow"), 12345, SIGNAL(released()), this, SLOT(releaseUpgrade()), true, i18n("Version Upgrade"));
+ m_upgradeButtonAdded = true;
+ } else {
+ wizard->close();
+ }
+#endif
+}
+
+#ifdef KUBUNTU
+void TestApp::releaseUpgrade() {
+ wizard->show();
+}
+#endif
+
+#ifdef KUBUNTU
+void TestApp::addVersionUpgrade(QString url, bool develVersion) {
+ wizard = new UpgradeWizard(this, 0, 1);
+ bool show = wizard->checkForDistUpgrade(false, url, develVersion);
+ if (show || develVersion) {
+ KToolBar* tool = toolBar();
+ tool->insertButton(QString("2uparrow"), 12345, SIGNAL(released()), this, SLOT(releaseUpgrade()), true, i18n("Version Upgrade"));
+ m_upgradeButtonAdded = true;
+ }
+}
+#endif
+
+void TestApp::reload() {
+ cache().reopen();
+}
+
+void TestApp::commit() {
+ closeModes();
+ setActionsEnabled( false );
+
+ aptFront::Manager m;
+ m.setProgressCallback( m_progress->callback() );
+ m.setUpdateInterval( 100000 );
+ try {
+ m_stack->raiseWidget( m_progress );
+ m.download();
+ m_stack->raiseWidget( m_commitProgress );
+ m.commit();
+ } catch ( exception::OperationCancelled ) {
+ } catch (...) {
+ KMessageBox::sorry(
+ this, i18n( "There was an error commiting changes. "
+ "Possibly there was a problem downloading some "
+ "packages or the commit would break packages. " ),
+ i18n( "Could not commit changes" ) );
+ // FIXME: this should be handled by libapt-front
+ cache::Global::get().reopen();
+ }
+ m_stack->raiseWidget( m_list );
+ setActionsEnabled( true );
+ notifyPostChange( 0 );
+}
+
+void TestApp::upgrade() {
+ closeModes();
+ cache::Global::get().state().upgrade();
+}
+
+void TestApp::distUpgrade() {
+ closeModes();
+ cache::Global::get().state().distUpgrade();
+}
+
+void TestApp::togglePreview() {
+ if ( modeActive( Preview ) )
+ closeModes();
+ else
+ openPreview();
+}
+
+void TestApp::toggleSources() {
+ QFile file(QString("/usr/bin/software-properties-kde"));
+ if (file.exists()) {
+ softwarePropertiesProcess = new KProcess(this);
+
+ *softwarePropertiesProcess << "/usr/bin/software-properties-kde" << "--no-update";
+ QApplication::connect(softwarePropertiesProcess, SIGNAL(processExited(KProcess *)),
+ this, SLOT(softwarePropertiesExited(KProcess *)));
+ softwarePropertiesProcess->start();
+ } else {
+ kdDebug() << " no software-properties-kde exists" << endl;
+ if ( modeActive( Sources ) )
+ closeModes();
+ else
+ openSources();
+ }
+}
+
+void TestApp::softwarePropertiesExited(KProcess *) {
+ if (softwarePropertiesProcess->exitStatus() == 1) {
+ update();
+ }
+}
+
+void TestApp::toggleDownload() {
+ toggleMode( Download );
+}
+
+void TestApp::toggleCommit() {
+ toggleMode( Commit );
+}
+
+void TestApp::toggleMode( Mode m ) {
+ if ( modeActive( m ) )
+ closeModes();
+ else
+ openMode( m );
+}
+
+void TestApp::openPreview() {
+ if ( openMode( Preview ) )
+ m_preview->searchView()->lister()->scheduleRebuild();
+}
+
+void TestApp::closePreview() {
+ if ( closeMode( Preview ) )
+ m_list->searchView()->lister()->scheduleRebuild();
+}
+
+void TestApp::openSources() {
+ if ( openMode( Sources ) )
+ m_sources->reset();
+}
+
+void TestApp::closeSources() {
+ closeMode( Sources );
+}
+
+bool TestApp::closeMode ( Mode m ) {
+ if ( modeActive( m ) ) {
+ m_stack->raiseWidget( m_list );
+ modeAction( m )->setChecked( false );
+ return true;
+ }
+ return false;
+}
+
+bool TestApp::openMode( Mode m ) {
+ if ( !modeActive( m ) ) {
+ closeModes();
+ m_modesClosed->setChecked( false );
+ kdDebug() << "openMode widget: " << modeWidget( m ) << endl;
+ m_stack->raiseWidget( modeWidget( m ) );
+ return true;
+ }
+ return false;
+}
+
+#include "app.moc"
diff --git a/adept/manager/app.h b/adept/manager/app.h
new file mode 100644
index 0000000..0fc1927
--- /dev/null
+++ b/adept/manager/app.h
@@ -0,0 +1,162 @@
+/* -*- C++ -*- */
+#ifndef TESTUI_APP_H
+#define TESTUI_APP_H
+
+#define KUBUNTU
+
+#include <kmainwindow.h>
+#include <kprocess.h>
+#include <kparts/part.h>
+#include <kactionclasses.h>
+#include <apt-front/cache/observer.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <adept/view.h>
+#include <adept/commitprogress.h>
+#include <adept/sourceseditor.h>
+#include <adept/application.h>
+
+#ifdef KUBUNTU
+#include <kubuntu_upgrader/upgradewizard.h>
+#endif
+
+class QVBox;
+class QWidgetStack;
+class QSplitter;
+class KAction;
+namespace adept {
+class AcqProgressWidget;
+}
+
+using namespace aptFront;
+using namespace adept;
+
+class TestApp : public KMainWindow, Application {
+ Q_OBJECT
+public:
+ enum Mode { Default, Sources, Preview, Download, Commit };
+ void setupActions();
+ ExtTerminalInterface *terminal();
+ TestApp();
+#ifdef KUBUNTU
+ void addVersionUpgrade(QString url, bool develVersion=false);
+#endif
+protected slots:
+ void delayed(); // initialisation
+
+ void setActionsEnabled( bool );
+ void setHistoryEnabled( bool );
+
+ void update(); // actions
+ void upgrade();
+ void distUpgrade();
+#ifdef KUBUNTU
+ void releaseUpgrade();
+#endif
+ void commit();
+
+ void reload(); // debugging
+
+ void undo() { Application::undo(); }
+ void redo() { Application::redo(); }
+ void checkpoint() { Application::checkpoint(); }
+
+ void foregroundClosed();
+
+ void togglePreview();
+ void toggleSources();
+ void softwarePropertiesExited(KProcess *);
+ void toggleDownload();
+ void toggleCommit();
+
+ void closePreview();
+ void closeSources();
+
+ void openPreview();
+ void openSources();
+
+ bool modeActive( Mode m ) {
+ // return modeAction( m )->isChecked();
+ return modeWidget( m ) == m_stack->visibleWidget();
+ }
+
+ void closeModes() {
+ closePreview();
+ closeSources();
+ closeMode( Download );
+ closeMode( Commit );
+ m_modesClosed->setChecked( true );
+ }
+
+ void rebuildStarted() {
+ if ( !m_rebuilds ) setActionsEnabled( false );
+ m_rebuilds ++;
+ }
+
+ void rebuildFinished() {
+ m_rebuilds --;
+ if ( !m_rebuilds ) setActionsEnabled( true );
+ }
+
+protected:
+ void updateActionState();
+ void guardLister( adept::Lister * );
+ void addMode( Mode m, KToggleAction *a, QWidget *w ) {
+ m_modeActionMap[ m ] = a;
+ m_modeWidgetMap[ m ] = w;
+ a->setChecked( false );
+ }
+
+ KToggleAction *modeAction( Mode m ) {
+ return m_modeActionMap[ m ];
+ }
+
+ QWidget *modeWidget( Mode m ) {
+ return m_modeWidgetMap[ m ];
+ }
+
+ bool openMode( Mode );
+ bool closeMode( Mode );
+ void toggleMode( Mode );
+
+ friend class WaitForLister;
+ virtual void closeEvent( QCloseEvent * );
+ virtual void notifyPostChange( cache::component::Base * );
+ virtual void notifyPostRebuild( cache::component::Base * );
+ virtual void notifyPreChange( cache::component::Base * );
+
+ QWidgetStack *m_stack;
+ QLabel *m_loading;
+
+ // stacked widgets
+ adept::AcqProgressWidget *m_progress;
+ adept::Browser *m_list, *m_preview;
+ adept::SourcesEditor *m_sources;
+ adept::CommitProgress *m_commitProgress;
+
+ // other stuff
+ std::vector<KAction *> m_actions;
+ QMap< QString, QString > m_icons;
+ KAction *m_undo, *m_redo;
+
+ int m_rebuilds;
+ bool m_actionsEnabled;
+
+ KAction *m_commit, *m_upgrade, *m_distUpgrade;
+ KToggleAction *m_sourcesAction, *m_commitProgressAction, *m_listAction,
+ *m_previewAction, *m_progressAction;
+ std::map< Mode, KToggleAction * > m_modeActionMap;
+ std::map< Mode, QWidget * > m_modeWidgetMap;
+ KToggleAction *m_modesClosed;
+private:
+ template<typename T> void plugAptActions();
+ // template<typename T, typename In> void updateAptActions( In b, In e );
+ template<typename T, typename In> void aptAction( In b, In e );
+ KProcess* softwarePropertiesProcess;
+#ifdef KUBUNTU
+ UpgradeWizard* wizard;
+ bool m_upgradeButtonAdded;
+#endif
+};
+
+#endif
diff --git a/adept/manager/hi128-app-adept_manager.png b/adept/manager/hi128-app-adept_manager.png
new file mode 100644
index 0000000..ba3cb4b
--- /dev/null
+++ b/adept/manager/hi128-app-adept_manager.png
Binary files differ
diff --git a/adept/manager/hi16-app-adept_manager.png b/adept/manager/hi16-app-adept_manager.png
new file mode 100644
index 0000000..80a35a1
--- /dev/null
+++ b/adept/manager/hi16-app-adept_manager.png
Binary files differ
diff --git a/adept/manager/hi22-app-adept_manager.png b/adept/manager/hi22-app-adept_manager.png
new file mode 100644
index 0000000..dc4392d
--- /dev/null
+++ b/adept/manager/hi22-app-adept_manager.png
Binary files differ
diff --git a/adept/manager/hi32-app-adept_manager.png b/adept/manager/hi32-app-adept_manager.png
new file mode 100644
index 0000000..d1b4a61
--- /dev/null
+++ b/adept/manager/hi32-app-adept_manager.png
Binary files differ
diff --git a/adept/manager/hi48-app-adept_manager.png b/adept/manager/hi48-app-adept_manager.png
new file mode 100644
index 0000000..d76f679
--- /dev/null
+++ b/adept/manager/hi48-app-adept_manager.png
Binary files differ
diff --git a/adept/manager/hi64-app-adept_manager.png b/adept/manager/hi64-app-adept_manager.png
new file mode 100644
index 0000000..cabb87b
--- /dev/null
+++ b/adept/manager/hi64-app-adept_manager.png
Binary files differ
diff --git a/adept/manager/hisc-app-adept_manager.svgz b/adept/manager/hisc-app-adept_manager.svgz
new file mode 100644
index 0000000..55ac033
--- /dev/null
+++ b/adept/manager/hisc-app-adept_manager.svgz
Binary files differ
diff --git a/adept/manager/main.cpp b/adept/manager/main.cpp
new file mode 100644
index 0000000..c6e1eba
--- /dev/null
+++ b/adept/manager/main.cpp
@@ -0,0 +1,71 @@
+#include <stdlib.h>
+
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <kuniqueapplication.h>
+
+#include "app.h"
+
+static KCmdLineOptions options[] =
+{
+ { "dist-upgrade", I18N_NOOP("add toolbar button to launch the version upgrade tool to the latest release"), 0},
+ { "dist-upgrade-proposed", I18N_NOOP("add toolbar button to launch the version upgrade tool to proposed next release"), 0},
+ { "dist-upgrade-devel", I18N_NOOP("add toolbar button to launch the version upgrade tool to development version"), 0},
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+
+ KLocale::setMainCatalogue("adept");
+
+ putenv( "QT_IM_MODULE=xim" );
+ QString description = i18n("Adept Manager");
+
+ KAboutData aboutData( "adept_manager",
+ I18N_NOOP("Adept Manager"),
+ "2.1 Cruiser",
+ description.latin1(),
+ KAboutData::License_BSD,
+ I18N_NOOP("(c) 2005, 2006 Peter Rockai"),
+ 0,
+ "http://web.mornfall.net/adept.html");
+
+ aboutData.addAuthor ( "Peter Rockai",
+ I18N_NOOP("developer"),
+ "me at mornfall dot net",
+ "http://web.mornfall.net");
+
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+
+ KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
+ // if (args && args->isSet("xy")) ...
+
+ /* KConfig* config = KGlobal::config();
+ config->setGroup("General Settings");
+ QString version = config->readEntry("Version"); */
+
+ KGlobal::locale()->insertCatalogue(QString::fromUtf8("libept"));
+ KGlobal::locale()->insertCatalogue(QString::fromUtf8("libapt-front"));
+
+ TestApp *ta = new TestApp();
+
+ app.setMainWidget(ta);
+
+#ifdef KUBUNTU
+ if (args && args->isSet("dist-upgrade")) {
+ ta->addVersionUpgrade(QString("http://changelogs.ubuntu.com/meta-release"));
+ } else if (args && args->isSet("dist-upgrade-proposed")) {
+ ta->addVersionUpgrade(QString("http://changelogs.ubuntu.com/meta-release-proposed"));
+ } else if (args && args->isSet("dist-upgrade-devel")) {
+ ta->addVersionUpgrade(QString("http://changelogs.ubuntu.com/meta-release-development"), true);
+ }
+#endif
+
+ ta->show();
+
+ return app.exec();
+}
diff --git a/adept/notifier/15adept-periodic-update b/adept/notifier/15adept-periodic-update
new file mode 100644
index 0000000..d1922e3
--- /dev/null
+++ b/adept/notifier/15adept-periodic-update
@@ -0,0 +1,3 @@
+APT::Periodic::Update-Package-Lists "1";
+APT::Periodic::Download-Upgradeable-Packages "0";
+APT::Periodic::AutocleanInterval "0";
diff --git a/adept/notifier/Makefile.am b/adept/notifier/Makefile.am
new file mode 100644
index 0000000..6b576be
--- /dev/null
+++ b/adept/notifier/Makefile.am
@@ -0,0 +1,26 @@
+
+bin_PROGRAMS = adept_notifier
+#kdeinit_LTLIBRARIES = adept-notifier.la
+noinst_HEADERS = app.h
+
+adept_notifier_SOURCES = app.cpp
+adept_notifier_LDADD = ../adept/libadept.la $(LIBAPT_FRONT_LIBS) $(LIBEPT_LIBS) $(LIBTAGCOLL2_LIBS) $(LIB_KIO) $(LIBKDE_UI)
+adept_notifier_LDFLAGS = -L/usr/lib/debug
+
+INCLUDES = $(all_includes) $(LIBAPT_FRONT_CFLAGS) $(LIBEPT_CFLAGS) $(LIBTAGCOLL2_CFLAGS) $(LIBWIBBLE_CFLAGS) -I$(srcdir)/.. -I..
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII
+METASOURCES = AUTO
+KDE_ICON = AUTO
+
+rcdir = $(kde_datadir)/adept-notifier
+#rc_DATA = adept-updaterui.rc
+
+#shelldesktopdir = $(kde_appsdir)/System
+xdg_apps_DATA = adept_notifier.desktop
+autostart_DATA = adept_notifier_auto.desktop
+autostartdir = /etc/xdg/autostart
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(EXTRACTRC) `find . -name "*.rc"` >> rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/adept_notifier.pot
diff --git a/adept/notifier/adept_notifier.desktop b/adept/notifier/adept_notifier.desktop
new file mode 100644
index 0000000..453ef5f
--- /dev/null
+++ b/adept/notifier/adept_notifier.desktop
@@ -0,0 +1,63 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Adept Notifier
+Name[ca]=Notificador Adept
+Name[da]=Adept underretninger
+Name[de]=Adept Benachrichtigung
+Name[el]=Ειδοποίηση ενημερώσεων του Adept
+Name[es]=Notificador Adept
+Name[fr]=Notificateur Adept
+Name[ga]=Fógróir Adept
+Name[gl]=Notificador de Adept
+Name[it]=Notifica automatica Adept
+Name[ka]=Adept შემტყობინებელი
+Name[lt]=Adept informuoklis
+Name[pt]=Notificador do Adept
+Name[sk]=Adept upozornenie
+Name[sv]=Adept uppdatering
+Name[xx]=xxAdept Notifierxx
+GenericName=Update Reminder
+GenericName[bg]=Напомняне за обновяване
+GenericName[ca]=Recordador d'actualitzacions
+GenericName[cs]=Upozorňování na aktualizace
+GenericName[da]=Opdateringspåmindelser
+GenericName[de]=Aktualisierungsbenachrichtigung
+GenericName[el]=Υπενθύμιση ενημέρωσης
+GenericName[es]=Recordar actualización
+GenericName[gl]=Recorda-lle a existéncia de Actualizazóns
+GenericName[it]=Avviso aggiornamenti
+GenericName[ja]=アップデートを通知
+GenericName[ka]=შემხსენებლის განახლება
+GenericName[lt]=Atnaujinimų priminimai
+GenericName[nl]=Updateherinnering
+GenericName[pt]=Chamada de Atenção de Actualizações
+GenericName[sk]=Pripomienka aktualizácie
+GenericName[sv]=Uppdateringspåminnelse
+GenericName[xx]=xxUpdate Reminderxx
+Exec=adept_notifier -caption "%c"
+TryExec=adept_notifier
+Categories=Qt;KDE;System;
+Icon=adept_notifier
+Type=Application
+X-KDE-SubstituteUID=false
+Comment=Watch for updates
+Comment[bg]=Следене за обновяване
+Comment[ca]=Vigila les actualitzacions
+Comment[cs]=Sledování aktualizací
+Comment[da]=Overvåg opdateringer
+Comment[de]=Überprüft Aktualisierungen
+Comment[el]=Παρακολούθηση για ενημερώσεις
+Comment[es]=Busca actualizaciones
+Comment[ga]=Déan faire ar nuashonruithe
+Comment[gl]=Comproba as actualizazóns
+Comment[it]=Controlla la presenza di aggiornamenti
+Comment[ja]=アップデートを監視
+Comment[ka]=განახლებების თვალთვალი
+Comment[lt]=Atnaujinimų stebėjimas
+Comment[nl]=Updates volgen
+Comment[pt]=Pesquisar actualizações
+Comment[sk]=Sledovať aktualizácie
+Comment[sv]=Bevaka uppdateringar
+Comment[xx]=xxWatch for updatesxx
+Terminal=false
+NoDisplay=true
diff --git a/adept/notifier/adept_notifier_auto.desktop b/adept/notifier/adept_notifier_auto.desktop
new file mode 100644
index 0000000..42c37ba
--- /dev/null
+++ b/adept/notifier/adept_notifier_auto.desktop
@@ -0,0 +1,23 @@
+[Desktop Entry]
+Encoding=UTF-8
+Exec=adept_notifier
+Name=Adept Notifier
+Name[ca]=Notificador Adept
+Name[da]=Adept underretninger
+Name[de]=Adept Benachrichtigung
+Name[el]=Ειδοποίηση ενημερώσεων του Adept
+Name[es]=Notificador Adept
+Name[fr]=Notificateur Adept
+Name[ga]=Fógróir Adept
+Name[gl]=Notificador de Adept
+Name[it]=Notifica automatica Adept
+Name[ka]=Adept შემტყობინებელი
+Name[lt]=Adept informuoklis
+Name[pt]=Notificador do Adept
+Name[sk]=Adept upozornenie
+Name[sv]=Adept uppdatering
+Name[xx]=xxAdept Notifierxx
+X-KDE-autostart-after=panel
+Type=Service
+X-KDE-autostart-condition=adept_notifierrc:General:Autostart:true
+OnlyShowIn=KDE;
diff --git a/adept/notifier/app.cpp b/adept/notifier/app.cpp
new file mode 100644
index 0000000..2ed8c2b
--- /dev/null
+++ b/adept/notifier/app.cpp
@@ -0,0 +1,342 @@
+#include <unistd.h>
+#include <sys/stat.h>
+#include <qtooltip.h>
+#include <qtimer.h>
+#include <qfile.h>
+
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kglobalaccel.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kiconloader.h>
+#include <kaboutapplication.h>
+#include <kaction.h>
+#include <kpopupmenu.h>
+#include <kconfig.h>
+#include <kpassivepopup.h>
+#include <kiconloader.h>
+
+#include <apt-front/init.h>
+#include <apt-front/cache/cache.h>
+#include <apt-front/cache/component/packages.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/utils.h>
+
+#include "app.h"
+
+using namespace aptFront;
+using namespace cache;
+using namespace utils;
+using namespace adept;
+
+TrayWindow::TrayWindow(QWidget *parent, const char *name)
+ : KSystemTray(parent, name), m_updates( 0 )
+{
+ setAvailableUpdates( m_updates );
+ // actionCollection()->remove( actionCollection()->action( "quit" ) );
+ m_quit = KStdAction::quit( this, SIGNAL( quitSelected() ), actionCollection() );
+ m_about = KStdAction::aboutApp( this, SIGNAL( aboutSelected() ), actionCollection() );
+ // setPixmap( loadIcon( u8( "adept_notifier_warning" ) ) );
+}
+
+void TrayWindow::contextMenuAboutToShow( KPopupMenu *r ) {
+ kdDebug() << "TrayWindow::contextMenu()" << endl;
+ r->clear();
+ m_about->plug( r );
+ m_quit->plug( r );
+}
+
+void TrayWindow::setAvailableUpdates( int n )
+{
+ m_updates = n;
+ kdDebug() << "TrayWindow obtained " << n << endl;
+
+ setPixmap( m_updates == 0 ?
+ loadIcon( u8( "adept_notifier_ok" ) ) :
+ loadIcon( u8( "adept_notifier_warning" ) ) );
+
+ if ( m_updates == 0 )
+ hide();
+ else
+ show();
+
+ QToolTip::remove(this);
+ QToolTip::add(this, n == 0 ? i18n( "No updates needed." )
+ : i18n( "There is %n updated package available",
+ "There are %n updated packages available", n ) );
+}
+
+void TrayWindow::mouseReleaseEvent(QMouseEvent *ev)
+{
+ if (ev->button() == QMouseEvent::LeftButton)
+ emit clicked();
+ KSystemTray::mouseReleaseEvent(ev);
+}
+
+void ApportTrayWindow::mousePressEvent(QMouseEvent *ev)
+{
+ emit clicked();
+ hide();
+}
+
+void RebootTrayWindow::mousePressEvent(QMouseEvent *ev)
+{
+ emit clicked();
+}
+
+NotifierApp::NotifierApp(bool allowStyles, bool GUIenabled)
+ : KUniqueApplication(allowStyles, GUIenabled),
+ m_tray( 0 )
+{
+ sharedConfig()->setGroup( "General" );
+ m_okAutostart = sharedConfig()->readBoolEntry( "Autostart", true );
+ m_timer = new QTimer( this );
+ m_tray = new TrayWindow( 0, 0 );
+ m_tray->show();
+ m_rebootRequired = false;
+ m_rebootShown = false;
+
+ aptFront::init();
+
+ fileUpdated( "/var/cache/apt/pkglist.bin", m_updateStamp );
+ // fileUpdated( "/var/lib/apt/periodic/update-stamp", m_updateStamp );
+ fileUpdated( "/var/lib/dpkg/status", m_statusStamp );
+
+ m_tray->setAvailableUpdates( upgradable() );
+
+ connect( m_tray, SIGNAL( clicked() ), this, SLOT( clicked() ) );
+ // connect( m_tray, SIGNAL( quitSelected() ), this, SLOT( quit() ) );
+ connect( m_tray, SIGNAL( quitSelected() ), this, SLOT( askQuit() ) );
+ connect( m_tray, SIGNAL( aboutSelected() ), this, SLOT( about() ) );
+ connect( m_timer, SIGNAL( timeout() ), this, SLOT( checkUpdates() ) );
+ m_timer->start( 1000*5 ); // 5 secs now, used to be 60
+ if ( !m_okAutostart ) {
+ int r = KMessageBox::questionYesNo(
+ m_tray, i18n( "You disabled automatic startup of Adept Notifier last time "
+ "you quit the application. "
+ "Do you want to start Adept Notifier next time you log in?" ),
+ i18n( "Automatic Startup" ),
+ KGuiItem( i18n( "Start" ) ), KGuiItem( i18n( "Don't Start" ) ),
+ u8( "enableAutostart" ) );
+ if ( r == KMessageBox::Yes ) {
+ sharedConfig()->setGroup( "General" );
+ sharedConfig()->writeEntry( "Autostart", true );
+ m_okAutostart = true;
+ }
+ }
+
+ // if apport crash handler it installed, watch for crash reports appearing and run
+ // the apport frontend when they do
+ bool runApport = sharedConfig()->readBoolEntry( "Apport", true );
+ if ( QFile::exists(QString("/usr/share/apport/apport-qt")) && runApport ) {
+ m_dirWatch = new KDirWatch(this);
+ m_dirWatch->addDir(QString("/var/crash"));
+ connect( m_dirWatch, SIGNAL( dirty(const QString&) ), this, SLOT( crashWatcher() ) );
+
+ KProcess *proc = new KProcess;
+ *proc << "/usr/share/apport/apport-checkreports";
+ connect( proc, SIGNAL(processExited(KProcess*)), this, SLOT(apportCheckExited(KProcess*)) );
+ proc->start(KProcess::Block);
+
+ if (m_crashes) {
+ ApportTrayWindow* crashApplet = new ApportTrayWindow;
+ crashApplet->setPixmap( crashApplet->loadIcon(u8("apport")) );
+ QString crashMessage = i18n("An application has crashed on your "
+ "system (now or in the past).\n"
+ "Click to "
+ "display details. "
+ );
+ QToolTip::add(crashApplet, crashMessage);
+ connect( crashApplet, SIGNAL(clicked()), this, SLOT(crashWatcher()) );
+ crashApplet->show();
+ QPixmap icon = BarIcon(u8("apport"));
+ KPassivePopup::message(i18n("Crash Handler"), crashMessage, icon, crashApplet);
+ }
+ }
+ // if reboot-required is installed watch for reboot-required and dpkg-run-stamp
+ if ( QFile::exists(QString("/usr/share/update-notifier/notify-reboot-required")) ) {
+ m_rebootDirWatch = new KDirWatch(this);
+ m_rebootDirWatch->addFile(QString("/var/run/reboot-required"));
+ m_rebootDirWatch->addFile(QString("/var/lib/update-notifier/dpkg-run-stamp"));
+ connect( m_rebootDirWatch, SIGNAL( dirty(const QString&) ), this, SLOT( rebootWatcher(const QString&) ) );
+
+ }
+}
+
+void NotifierApp::crashWatcher() {
+ // find out if there are system crash reports first, if there are run it as root
+ KProcess *proc = new KProcess;
+ *proc << "/usr/share/apport/apport-checkreports";
+ *proc << "--system";
+ connect( proc, SIGNAL(processExited(KProcess*)), this, SLOT(apportCheckExited(KProcess*)) );
+ proc->start(KProcess::Block);
+
+ if (m_crashes) {
+ KProcess *proc2 = new KProcess;
+ *proc2 << "kdesu" << "/usr/share/apport/apport-qt";
+ proc2->start(KProcess::DontCare);
+ } else {
+ KShellProcess *proc2 = new KShellProcess;
+ *proc2 << "sleep 1; /usr/share/apport/apport-qt"; //needs a seconds delay else we're too fast for apport
+ proc2->start(KProcess::DontCare);
+ }
+}
+
+void NotifierApp::apportCheckExited(KProcess* proc) {
+ if (proc->exitStatus() == 0) {
+ m_crashes = true;
+ } else {
+ m_crashes = false;
+ }
+}
+
+void NotifierApp::rebootWatcher(const QString& path) {
+ kdDebug() << "NotifierApp::rebootWatcher: " << path << endl;
+
+ if (path == QString("/var/run/reboot-required")) {
+ m_rebootRequired = true;
+ }
+
+ if (path == QString("/var/lib/update-notifier/dpkg-run-stamp") && m_rebootRequired && !m_rebootShown) {
+
+ RebootTrayWindow* rebootApplet = new RebootTrayWindow;
+ rebootApplet->setPixmap( rebootApplet->loadIcon(u8("reload")) );
+
+ QString rebootMessage = i18n("In order to complete the update your system needs to be restarted.");
+ QToolTip::add(rebootApplet, rebootMessage);
+ connect( rebootApplet, SIGNAL(clicked()), this, SLOT(rebootClicked()) );
+ rebootApplet->show();
+ QPixmap icon = BarIcon(u8("reload"));
+ KPassivePopup::message(i18n("Reboot Required"), rebootMessage, icon, rebootApplet);
+ m_rebootShown = true;
+ }
+
+}
+
+void NotifierApp::rebootClicked() {
+ kdDebug() << "NotifierApp::rebootClicked" << endl;
+ if (KMessageBox::questionYesNo(0, QString("In order to complete the update your system needs to be restarted."), QString("Restart Require")) == KMessageBox::Yes) {
+ kdDebug() << "NotifierApp::rebootClicked yes!" << endl;
+ KProcess *proc = new KProcess;
+ *proc << "/usr/bin/dcop";
+ *proc << "ksmserver" << "ksmserver" << "logout" << "0" << "1" << "2"; // 0 1 2 == ShutdownConfirmNo ShutdownTypeReboot ShutdownModeForceNow
+ proc->start();
+ }
+}
+
+void NotifierApp::askQuit() {
+ if ( m_okAutostart ) {
+ int r = KMessageBox::questionYesNoCancel(
+ m_tray, i18n( "Do you want to start Adept Notifier next time you log in?" ),
+ i18n( "Automatic Startup" ),
+ KGuiItem( i18n( "Start" ) ), KGuiItem( i18n( "Don't Start" ) ) );
+ if ( r == KMessageBox::Cancel )
+ return;
+ if ( r == KMessageBox::No ) {
+ sharedConfig()->setGroup( "General" );
+ sharedConfig()->writeEntry( "Autostart", false );
+ }
+ }
+ exit( 0 );
+
+}
+
+bool NotifierApp::fileUpdated( const char *f, time_t &stamp ) {
+ time_t old = stamp;
+ struct stat s;
+ ::stat( f, &s );
+ stamp = s.st_mtime;
+ if ( stamp > old )
+ return true;
+ return false;
+}
+
+int NotifierApp::upgradable() {
+ try {
+ kdDebug() << "checking cache for upgradable packages..." << endl;
+ cache::Cache &c = cache::Global::get();
+ c.open( Cache::OpenReadOnly
+ | Cache::OpenPackages
+ | Cache::OpenState );
+
+ kdDebug() << "cache opened, listing..." << endl;
+ Range< entity::Package > r = range( c.packages().packagesBegin(),
+ c.packages().packagesEnd() );
+ kdDebug() << "looking for upgradable packages..." << endl;
+ Range< entity::Package > fr = filteredRange(
+ r, predicate::Package::member( &entity::Package::isUpgradable ) );
+ VectorRange< entity::Package > vr = VectorRange< entity::Package >();
+ fr.output( vr );
+ kdDebug() << "found " << vr.size() << " upgradable package(s)" << endl;
+ int ret = vr.size();
+ c.close();
+ return ret;
+ } catch ( exception::Error e ) {
+ kdDebug() << "error checking cache for upgradable packages..." << endl;
+ kdDebug() << "what: " << e.message() << endl;
+ } catch ( std::exception e ) {
+ kdDebug() << "exception checking cache for upgradable packages..." << endl;
+ kdDebug() << "what: " << e.what() << endl;
+ // XXX error handling
+ }
+ return true; // we don't know, so assume true (safe)
+}
+
+void NotifierApp::checkUpdates() {
+ // kdDebug() << "checking updates status" << endl;
+ if ( // fileUpdated( "/var/lib/apt/periodic/update-stamp", m_updateStamp )
+ fileUpdated( "/var/cache/apt/pkgcache.bin", m_updateStamp )
+ || fileUpdated( "/var/lib/dpkg/status", m_statusStamp ) )
+ m_tray->setAvailableUpdates( upgradable() );
+}
+
+void NotifierApp::about() {
+ KAboutApplication *a = new KAboutApplication( m_tray, "", true );
+ a->exec();
+ delete a;
+}
+
+NotifierApp::~NotifierApp()
+{
+ delete m_tray;
+}
+
+void NotifierApp::clicked()
+{
+ if ( m_tray->updates() == 0 )
+ return KMessageBox::information(
+ 0, i18n( "There are no known updates available." ),
+ i18n( "Nothing to do" ) );
+ startServiceByDesktopName( u8( "adept_updater" ) );
+}
+
+/* void NotifierApp::menuActivated(int id)
+{
+ // implement help
+} */
+
+const char * DESCRIPTION =
+ I18N_NOOP("Adept update notifier utility");
+
+/* extern "C" KDE_EXPORT */
+int main(int argc, char *argv[])
+{
+ KAboutData about("adept_notifier", I18N_NOOP("Adept Notifier"),
+ "2.1 Cruiser",
+ DESCRIPTION, KAboutData::License_BSD,
+ "Copyright (C) 2005, 2006 Peter Rockai");
+ KCmdLineArgs::init(argc, argv, &about);
+ NotifierApp::addCmdLineOptions();
+
+ if (!NotifierApp::start())
+ return 0;
+
+ NotifierApp app;
+ app.disableSessionManagement();
+ app.exec();
+ return 0;
+}
diff --git a/adept/notifier/app.h b/adept/notifier/app.h
new file mode 100644
index 0000000..c543aaa
--- /dev/null
+++ b/adept/notifier/app.h
@@ -0,0 +1,93 @@
+#ifndef EPT_NOTIFIER_H
+#define EPT_NOTIFIER_H
+
+#include <sys/types.h>
+#include <ksystemtray.h>
+#include <kuniqueapplication.h>
+#include <kdirwatch.h>
+#include <kprocess.h>
+
+class QWidget;
+class KAction;
+// class KGlobalAccel;
+
+// the status indicator in system tray
+class TrayWindow : public KSystemTray
+{
+ Q_OBJECT
+public:
+ TrayWindow(QWidget *parent=0, const char *name=0);
+ void setAvailableUpdates( int n );
+ int updates() { return m_updates; }
+ void contextMenuAboutToShow ( KPopupMenu * );
+signals:
+ void clicked();
+ void aboutSelected();
+protected:
+ void mouseReleaseEvent( QMouseEvent * );
+ int m_updates;
+ KAction *m_quit, *m_about;
+};
+
+// the apport indicator in system tray
+// gets shown where the app is started and
+// existing apport reports are found.
+// clicking starts apport-qt
+class ApportTrayWindow : public KSystemTray
+{
+ Q_OBJECT
+signals:
+ void clicked();
+protected:
+ void mousePressEvent(QMouseEvent*);
+};
+
+// used for the reboot notifier
+class RebootTrayWindow : public KSystemTray
+{
+ Q_OBJECT
+signals:
+ void clicked();
+protected:
+ void mousePressEvent(QMouseEvent*);
+};
+
+
+
+// application watching the current status
+// it will update the icon and run
+class NotifierApp : public KUniqueApplication
+{
+ Q_OBJECT
+public:
+ NotifierApp(bool allowStyles=true, bool GUIenabled=true);
+ ~NotifierApp();
+ bool fileUpdated( const char *, time_t & );
+ int upgradable();
+
+protected slots:
+// void menuActivated(int id);
+ void clicked();
+ void checkUpdates();
+ void askQuit();
+ void about();
+ // for apport
+ void crashWatcher();
+ void apportCheckExited(KProcess*);
+ void rebootWatcher(const QString& path);
+ void rebootClicked();
+
+protected:
+ TrayWindow *m_tray;
+ QTimer *m_timer;
+ time_t m_updateStamp, m_statusStamp;
+ bool m_okAutostart;
+ // for apport crash handler
+ KDirWatch* m_dirWatch;
+ KDirWatch* m_rebootDirWatch;
+ bool m_crashes;
+ bool m_rebootRequired;
+ bool m_rebootShown; //have we already shown the reboot notifier?
+};
+
+#endif
diff --git a/adept/tests/libcapture/celem-test.cpp b/adept/tests/libcapture/celem-test.cpp
new file mode 100644
index 0000000..ada22e3
--- /dev/null
+++ b/adept/tests/libcapture/celem-test.cpp
@@ -0,0 +1,34 @@
+#include <test-util.h>
+#include <libcapture/celem.h>
+#include <libcapture/pkgmanager.h>
+#include <string>
+
+namespace tut {
+
+ using namespace std;
+ using namespace capture;
+
+ struct celem_shar {
+ };
+
+ typedef test_group<celem_shar> tg;
+ typedef tg::object to;
+ tg celem_tg ("celem");
+ template<> template<>
+ void to::test<1> ()
+ {
+ cacheInit ();
+ PkgCElemPtr a = cElem (PkgManager::cache () -> FindPkg ("postfix"));
+ ensure (a -> id () == string ("postfix"));
+ cerr << "a -> id () = " << a -> id () << endl;
+ ensure (a -> Name () == string ("postfix"));
+ cerr << "a -> Name () = " << a -> id () << endl;
+ VerCElemPtr b = a -> VersionList ();
+ cerr << "b -> id () = " << b -> id () << endl;
+ pkgCache::PkgIterator bp = (PkgManager::cache () -> FindPkg
+ ("postfix"));
+ string bver = bp . VersionList () . VerStr ();
+ ensure (bver == b -> id ());
+ ensure (bver == b -> VerStr ());
+ }
+};
diff --git a/adept/tests/libcapture/grouper-test.cpp b/adept/tests/libcapture/grouper-test.cpp
new file mode 100644
index 0000000..c454f78
--- /dev/null
+++ b/adept/tests/libcapture/grouper-test.cpp
@@ -0,0 +1,44 @@
+#include <tut.h>
+#define protected public
+#include <libcapture/grouper.h>
+#include <libcapture/tree.h>
+#include <libcapture/treenode.h>
+#include <libcapture/treefactory.h>
+#include <string>
+
+namespace tut {
+
+ using namespace std;
+ using namespace capture;
+
+ struct grouper_shar {
+ };
+
+ typedef test_group<grouper_shar> tg;
+ typedef tg::object to;
+ tg grouper_tg ("grouper");
+#define IT(x) dynamic_cast <GrouperFactory *> (c -> m_vec [x] . second)
+ template<> template<>
+ void to::test<1> ()
+ {
+ Param::Map a;
+ GrouperChain *c;
+ GrouperTNode *n0, *n1, *n2, *n3;
+ c = new GrouperChain ("test");
+ n0 = c -> addFactory ("SectGrouper", "sect");
+ ensure (IT (0)); ensure (IT (0) == n0);
+ n1 = c -> addFactory ("EndGrouper", "end");
+ ensure (IT (1)); ensure (IT (1) == n1);
+ n2 = c -> addFactory ("PkgExistFilter", "exist", a, Grouper::Custom, 1);
+ ensure (IT (2));
+ ensure (IT (0) == n0);
+ ensure (IT (1) == n2);
+ ensure (IT (2) == n1);
+ n3 = c -> addFactory ("PkgNameFilter", "name", a, Grouper::BeforeLast);
+ ensure (IT (3));
+ ensure (IT (0) == n0);
+ ensure (IT (1) == n2);
+ ensure (IT (2) == n3);
+ ensure (IT (3) == n1);
+ }
+};
diff --git a/adept/tests/libcapture/pkgcache-test.cpp b/adept/tests/libcapture/pkgcache-test.cpp
new file mode 100644
index 0000000..662aaed
--- /dev/null
+++ b/adept/tests/libcapture/pkgcache-test.cpp
@@ -0,0 +1,71 @@
+#include <test-util.h>
+
+#include <libcapture/pkgcache.h>
+#include <libcapture/pkgmanager.h>
+#include <apt-pkg/configuration.h>
+#include <iostream>
+
+namespace tut {
+
+ using namespace std;
+ using namespace capture;
+
+ struct pkgcache_shar {
+ };
+
+ typedef test_group<pkgcache_shar> tg;
+ typedef tg::object to;
+ tg pkgcache_tg ("pkgcache");
+ template<> template<>
+ void to::test<1> ()
+ {
+ cacheInit (true);
+ pkgCache::PkgIterator P;
+ // P = (PkgManager::cache ()) -> FindPkg ("amavis-ng");
+ // PkgManager::cache () -> setExtState (P, true, 500);
+ // PkgManager::cache () -> updateAWanted (true);
+ P = (PkgManager::cache ()) -> FindPkg ("k3b");
+ PkgManager::cache () -> setExtState (P, true, 500);
+ PkgManager::cache () -> updateAWanted ();
+ P = (PkgManager::cache ()) -> FindPkg ("kapture");
+ PkgManager::cache () -> setExtState (P, true, 500);
+ PkgManager::cache () -> updateAWanted ();
+ /* P = (PkgManager::cache ()) -> FindPkg ("apt-listchanges");
+ PkgManager::cache () -> setExtState (P, true, 900);
+ PkgManager::cache () -> updateAWanted (true);
+ P = (PkgManager::cache ()) -> FindPkg ("exim");
+ PkgManager::cache () -> setExtState (P, true, 600);
+ PkgManager::cache () -> updateAWanted (true);
+ P = (PkgManager::cache ()) -> FindPkg ("harden");
+ PkgManager::cache () -> setExtState (P, true, 700);
+ PkgManager::cache () -> updateAWanted (true); */
+ /* P = (PkgManager::cache ()) -> FindPkg ("rmail");
+ PkgManager::cache () -> setExtState (P, true, 200); */
+
+ // PkgManager::cache () -> updateAWanted (0);
+ // PkgManager::cache () -> saveExtState ("pkgcache-test.out");
+ /* PkgManager::cache () -> updateAWanted (1);
+ PkgManager::cache () -> saveExtState ("pkgcache-test-1.out");
+ PkgManager::cache () -> updateAWanted (2);
+ PkgManager::cache () -> saveExtState ("pkgcache-test-2.out"); */
+ cout << "WANTED PACKAGES:" << endl;
+ PkgCache::ExtState *s;
+ for (pkgCache::PkgIterator mP = PkgManager::cache() -> PkgBegin (); ! mP . end (); mP ++) {
+ s = PkgManager::cache() -> extState (mP);
+ if (s -> a_wanted_pri > s -> a_unwanted_pri) {
+ cout << mP . Name ()
+ << ": a_wanted_pri = " << s -> a_wanted_pri
+ << ", a_unwanted_pri = " << s -> a_unwanted_pri << endl;
+ }
+ }
+ cout << "UNWANTED PACKAGES:" << endl;
+ for (pkgCache::PkgIterator mP = PkgManager::cache() -> PkgBegin (); ! mP . end (); mP ++) {
+ s = PkgManager::cache() -> extState (mP);
+ if (s -> a_unwanted_pri > s -> a_wanted_pri) {
+ cout << mP . Name ()
+ << ": a_wanted_pri = " << s -> a_wanted_pri
+ << ", a_unwanted_pri = " << s -> a_unwanted_pri << endl;
+ }
+ }
+ }
+}
diff --git a/adept/tests/libcapture/stl_util-test.cpp b/adept/tests/libcapture/stl_util-test.cpp
new file mode 100644
index 0000000..a083db8
--- /dev/null
+++ b/adept/tests/libcapture/stl_util-test.cpp
@@ -0,0 +1,56 @@
+#include "stl_util.h"
+#include <iostream>
+#include <tut.h>
+
+namespace tut {
+
+ using namespace std;
+ using namespace capture;
+
+ struct stl_util_shar {
+ };
+
+ typedef test_group<stl_util_shar> tg;
+ typedef tg::object to;
+ tg stl_util_tg ("stl_util");
+
+ template<> template<>
+ void to::test<1> ()
+ {
+ argmap test;
+ test["test1"] = "test2";
+ test["fjioj @,,ping"] = "jfdiosqj @@,,";
+ test[",,"] = "#@@@";
+ string out = argmap2string( test );
+ argmap test2 = string2argmap( out );
+ ensure( test2.size() == 3 );
+ ensure( test2["test1"] == "test2" );
+ ensure( test2["fjioj @,,ping"] == "jfdiosqj @@,," );
+ ensure( test2[",,"] == "#@@@" );
+ }
+ template<> template<>
+ void to::test<2> ()
+ {
+ list <string> test;
+ test . push_back (string ("test, #1"));
+ test . push_back (string ("test, #2"));
+ string joinedf2 = join( test, "," );
+ test . push_back ( joinedf2 );
+ list<string> testret = explode (join (test, ","), ",");
+ ensure( test.size() == testret.size() );
+ list<string>::iterator i, j;
+ i = test.begin();
+ j = testret.begin();
+ for ( ; i != test.end(); ++i, ++j )
+ ensure( *i == *j );
+
+ string joinedf3 = join( test, "," );
+ test.push_back( joinedf3 );
+ string str = join (test, "::");
+ testret = explode (str, "::");
+ i = test.begin();
+ j = testret.begin();
+ for ( ; i != test.end(); ++i, ++j )
+ ensure( *i == *j );
+ }
+}
diff --git a/adept/tests/libcapture/tree-test.cpp b/adept/tests/libcapture/tree-test.cpp
new file mode 100644
index 0000000..0e2f8d5
--- /dev/null
+++ b/adept/tests/libcapture/tree-test.cpp
@@ -0,0 +1,86 @@
+// #define protected public
+// #define private public
+#include <libcapture/tree.h>
+#include <libcapture/treenode.h>
+#include <libcapture/treefactory.h>
+
+#include <tut.h>
+
+namespace tut {
+
+ using namespace std;
+ using namespace capture;
+
+ struct tree_shar {
+ };
+
+ typedef test_group<tree_shar> tg;
+ typedef tg::object to;
+ tg tree_tg ("tree");
+
+ class STF: public TreeFactory
+ {
+ public:
+ TreePkgNode *makePkgNode (TreeNode *parent, pkgCache::PkgIterator P)
+ { return new TreePkgNode (parent, P); }
+ TreeBranchNode *makeBranchNode (TreeNode *parent, string id, string name)
+ { return new TreeBranchNode (parent, id, name); }
+ TreeGroupNode *makeGroupNode (TreeNode *parent, pkgTagSection s)
+ { return new TreeGroupNode (parent, s); }
+ TreeBranchNode *makeRoot () { return new TreeBranchNode (0, "ROOT"); }
+ TreeDepNode *makeDepNode (TreeNode *parent, pkgCache::DepIterator) { return 0; }
+ TreeVerNode *makeVerNode (TreeNode *parent, pkgCache::VerIterator) { return 0; }
+ };
+
+ /* class TestProd: public NodeProducer {
+ public:
+ Tree *t;
+ void getNodes (TreeFactory *f, NodeConsumer *c)
+ {
+ TreeNode *a, *b;
+ a = t -> top ();
+ // c -> consumeNode (a = f -> makeBNode (t -> top (), "blah1"));
+ c -> consumeNode (f -> makePkgNode (a, pkgCache::PkgIterator ()));
+ c -> consumeNode (f -> makePkgNode (a, pkgCache::PkgIterator ()));
+ c -> consumeNode (f -> makePkgNode (a, pkgCache::PkgIterator ()));
+ // c -> consumeNode (b = f -> makeBNode (t -> top (), "blah2"));
+ // c -> consumeNode (f -> makePkg (b, pkgCache::PkgIterator ()));
+ // c -> consumeNode (f -> makePkg (b, pkgCache::PkgIterator ()));
+ }
+ }; */
+ template<> template<>
+ void to::test<1> ()
+ {
+ TreeFactory *f = new STF;
+ TestProd *p = new TestProd;
+ Tree *t = new Tree;
+ GrouperChain *c = new GrouperChain ("grouperchain");
+ c -> addFactory ("EndGrouper", "end");
+ t -> setGrouper (c);
+ t -> setProducer (p);
+ t -> setTreeFact (f);
+ p -> t = t;
+ t -> rebuild ();
+
+ TreeNode *A, *B, *C;
+ ensure (t -> top ());
+ A = t -> top () -> firstChild ();
+ ensure (A);
+ B = A -> nextSibling ();
+ ensure (B);
+ for (C = B; C -> nextSibling (); C = C -> nextSibling ());
+ ensure (C);
+ ensure (A -> nextSibling () == B);
+ ensure (B -> nextSibling () == C);
+ t -> refresh ();
+ ensure (t -> top ());
+ A = t -> top () -> firstChild ();
+ ensure (A);
+ B = A -> nextSibling ();
+ ensure (B);
+ for (C = B; C -> nextSibling (); C = C -> nextSibling ());
+ ensure (C);
+ ensure (A -> nextSibling () == B);
+ ensure (B -> nextSibling () == C);
+ }
+};
diff --git a/adept/tests/tut-main.cpp b/adept/tests/tut-main.cpp
new file mode 100644
index 0000000..5c278a1
--- /dev/null
+++ b/adept/tests/tut-main.cpp
@@ -0,0 +1,61 @@
+#include <tut.h>
+#include <tut_reporter.h>
+#include <iostream>
+
+namespace tut
+{
+ test_runner_singleton runner;
+}
+
+int main(int argc,const char* argv[])
+{
+ tut::reporter visi;
+
+ if( argc < 2 || argc > 3 )
+ {
+ std::cout << "TUT example test application." << std::endl;
+ std::cout << "Usage: example [regression] | [list] | [ group] [test]" << std::endl;
+ std::cout << " List all groups: example list" << std::endl;
+ std::cout << " Run all tests: example regression" << std::endl;
+ std::cout << " Run one group: example std::auto_ptr" << std::endl;
+ std::cout << " Run one test: example std::auto_ptr 3" << std::endl;;
+ }
+
+ std::cout << "\nFAILURE and EXCEPTION in these tests are FAKE ;)\n\n";
+
+ tut::runner.get().set_callback(&visi);
+
+ try
+ {
+ if( argc == 1 || (argc == 2 && std::string(argv[1]) == "regression") )
+ {
+ tut::runner.get().run_tests();
+ }
+ else if( argc == 2 && std::string(argv[1]) == "list" )
+ {
+ std::cout << "registered test groups:" << std::endl;
+ tut::groupnames gl = tut::runner.get().list_groups();
+ tut::groupnames::const_iterator i = gl.begin();
+ tut::groupnames::const_iterator e = gl.end();
+ while( i != e )
+ {
+ std::cout << " " << *i << std::endl;
+ ++i;
+ }
+ }
+ else if( argc == 2 && std::string(argv[1]) != "regression" )
+ {
+ tut::runner.get().run_tests(argv[1]);
+ }
+ else if( argc == 3 )
+ {
+ tut::runner.get().run_test(argv[1],::atoi(argv[2]));
+ }
+ }
+ catch( const std::exception& ex )
+ {
+ std::cerr << "tut raised ex: " << ex.what() << std::endl;
+ }
+
+ return 0;
+}
diff --git a/adept/tests/tut.h b/adept/tests/tut.h
new file mode 100644
index 0000000..dec471a
--- /dev/null
+++ b/adept/tests/tut.h
@@ -0,0 +1,872 @@
+#ifndef TUT_H_GUARD
+#define TUT_H_GUARD
+
+#include <iostream>
+#include <map>
+#include <vector>
+#include <string>
+#include <sstream>
+#include <stdexcept>
+#include <typeinfo>
+
+#if defined(TUT_USE_SEH)
+#include <windows.h>
+#include <winbase.h>
+#endif
+
+/**
+ * Template Unit Tests Framework for C++.
+ * http://tut.dozen.ru
+ *
+ * @author dozen, [email protected]
+ */
+namespace tut
+{
+ /**
+ * Exception to be throwed when attempted to execute
+ * missed test by number.
+ */
+ struct no_such_test : public std::logic_error
+ {
+ no_such_test() : std::logic_error("no such test"){};
+ };
+
+ /**
+ * No such test and passed test number is higher than
+ * any test number in current group. Used in one-by-one
+ * test running when upper bound is not known.
+ */
+ struct beyond_last_test : public no_such_test
+ {
+ beyond_last_test(){};
+ };
+
+ /**
+ * Group not found exception.
+ */
+ struct no_such_group : public std::logic_error
+ {
+ no_such_group(const std::string& grp) :
+ std::logic_error(grp){};
+ };
+
+ /**
+ * Internal exception to be throwed when
+ * no more tests left in group or journal.
+ */
+ struct no_more_tests
+ {
+ no_more_tests(){};
+ };
+
+ /**
+ * Exception to be throwed when ensure() fails or fail() called.
+ */
+ class failure : public std::logic_error
+ {
+ public:
+ failure(const std::string& msg) : std::logic_error(msg){};
+ };
+
+ /**
+ * Exception to be throwed when test desctructor throwed an exception.
+ */
+ class warning : public std::logic_error
+ {
+ public:
+ warning(const std::string& msg) : std::logic_error(msg){};
+ };
+
+ /**
+ * Exception to be throwed when test issued SEH (Win32)
+ */
+ class seh : public std::logic_error
+ {
+ public:
+ seh(const std::string& msg) : std::logic_error(msg){};
+ };
+
+ /**
+ * Return type of runned test/test group.
+ *
+ * For test: contains result of test and, possible, message
+ * for failure or exception.
+ */
+ struct test_result
+ {
+ /**
+ * Test group name.
+ */
+ std::string group;
+
+ /**
+ * Test number in group.
+ */
+ int test;
+
+ /**
+ * ok - test finished successfully
+ * fail - test failed with ensure() or fail() methods
+ * ex - test throwed an exceptions
+ * warn - test finished successfully, but test destructor throwed
+ * term - test forced test application to terminate abnormally
+ */
+ typedef enum { ok, fail, ex, warn, term } result_type;
+ result_type result;
+
+ /**
+ * Exception message for failed test.
+ */
+ std::string message;
+ std::string exception_typeid;
+
+ /**
+ * Default constructor.
+ */
+ test_result()
+ : test(0),result(ok)
+ {
+ }
+
+ /**
+ * Constructor.
+ */
+ test_result( const std::string& grp,int pos,result_type res)
+ : group(grp),test(pos),result(res)
+ {
+ }
+
+ /**
+ * Constructor with exception.
+ */
+ test_result( const std::string& grp,int pos,
+ result_type res,
+ const std::exception& ex)
+ : group(grp),test(pos),result(res),
+ message(ex.what()),exception_typeid(typeid(ex).name())
+ {
+ }
+ };
+
+ /**
+ * Interface.
+ * Test group operations.
+ */
+ struct group_base
+ {
+ virtual ~group_base(){};
+
+ // execute tests iteratively
+ virtual void rewind() = 0;
+ virtual test_result run_next() = 0;
+
+ // execute one test
+ virtual test_result run_test(int n) = 0;
+ };
+
+ /**
+ * Test runner callback interface.
+ * Can be implemented by caller to update
+ * tests results in real-time. User can implement
+ * any of callback methods, and leave unused
+ * in default implementation.
+ */
+ struct callback
+ {
+ /**
+ * Virtual destructor is a must for subclassed types.
+ */
+ virtual ~callback(){};
+
+ /**
+ * Called when new test run started.
+ */
+ virtual void run_started(){};
+
+ /**
+ * Called when a test finished.
+ * @param tr Test results.
+ */
+ virtual void test_completed(const test_result& /*tr*/){};
+
+ /**
+ * Called when all tests in run completed.
+ */
+ virtual void run_completed(){};
+ };
+
+ /**
+ * Typedef for runner::list_groups()
+ */
+ typedef std::vector<std::string> groupnames;
+
+ /**
+ * Test runner.
+ */
+ class test_runner
+ {
+ protected:
+ typedef std::map<std::string,group_base*> groups;
+ typedef groups::iterator iterator;
+ typedef groups::const_iterator const_iterator;
+ groups groups_;
+
+ callback default_callback_;
+ callback* callback_;
+
+ public:
+ /**
+ * Constructor
+ */
+ test_runner() : callback_(&default_callback_)
+ {
+ }
+
+ /**
+ * Stores another group for getting by name.
+ */
+ void register_group(const std::string& name,group_base* gr)
+ {
+ if( gr == 0 )
+ {
+ throw std::invalid_argument("group shall be non-null");
+ }
+
+ groups::iterator found = groups_.find(name);
+ if( found != groups_.end() )
+ {
+ std::string msg("attempt to add already existent group "+name);
+ // this exception terminates application so we use cerr also
+ std::cerr << msg << std::endl;
+ throw std::logic_error(msg);
+ }
+
+ groups_[name] = gr;
+ }
+
+ /**
+ * Stores callback object.
+ */
+ void set_callback(callback* cb)
+ {
+ callback_ = cb==0? &default_callback_:cb;
+ }
+
+ /**
+ * Returns callback object.
+ */
+ callback& get_callback() const
+ {
+ return *callback_;
+ }
+
+ /**
+ * Returns list of known test groups.
+ */
+ const groupnames list_groups() const
+ {
+ groupnames ret;
+ const_iterator i = groups_.begin();
+ const_iterator e = groups_.end();
+ while( i != e )
+ {
+ ret.push_back(i->first);
+ ++i;
+ }
+ return ret;
+ }
+
+ /**
+ * Runs all tests in all groups.
+ * @param callback Callback object if exists; null otherwise
+ */
+ void run_tests() const
+ {
+ callback_->run_started();
+
+ const_iterator i = groups_.begin();
+ const_iterator e = groups_.end();
+ while( i != e )
+ {
+ try
+ {
+ // iterate all tests
+ i->second->rewind();
+ for( ;; )
+ {
+ test_result tr = i->second->run_next();
+ callback_->test_completed(tr);
+ }
+ }
+ catch( const no_more_tests& )
+ {
+ // ok
+ }
+
+ ++i;
+ }
+
+ callback_->run_completed();
+ }
+
+ /**
+ * Runs all tests in specified group.
+ */
+ void run_tests(const std::string& group_name) const
+ {
+ callback_->run_started();
+
+ const_iterator i = groups_.find(group_name);
+ if( i == groups_.end() )
+ {
+ throw no_such_group(group_name);
+ }
+
+ try
+ {
+ // iterate all tests
+ i->second->rewind();
+ for(;;)
+ {
+ test_result tr = i->second->run_next();
+ callback_->test_completed(tr);
+ }
+ }
+ catch( const no_more_tests& )
+ {
+ // ok
+ }
+
+ callback_->run_completed();
+ }
+
+ /**
+ * Runs one test in specified group.
+ */
+ test_result run_test(const std::string& group_name,int n) const
+ {
+ callback_->run_started();
+
+ const_iterator i = groups_.find(group_name);
+ if( i == groups_.end() )
+ {
+ throw no_such_group(group_name);
+ }
+
+ try
+ {
+ test_result tr = i->second->run_test(n);
+ callback_->test_completed(tr);
+ callback_->run_completed();
+ return tr;
+ }
+ catch( const beyond_last_test& )
+ {
+ callback_->run_completed();
+ throw;
+ }
+ catch( const no_such_test& )
+ {
+ callback_->run_completed();
+ throw;
+ }
+ }
+ };
+
+ /**
+ * Singleton for test_runner implementation.
+ * Instance with name runner_singleton shall be implemented
+ * by user.
+ */
+ class test_runner_singleton
+ {
+ public:
+ static test_runner& get()
+ {
+ static test_runner tr;
+ return tr;
+ }
+ };
+ extern test_runner_singleton runner;
+
+ /**
+ * Test object. Contains data test run upon and default test method
+ * implementation. Inherited from Data to allow tests to
+ * access test data as members.
+ */
+ template <class Data>
+ class test_object : public Data
+ {
+ public:
+ /**
+ * Default constructor
+ */
+ test_object(){};
+
+ /**
+ * The flag is set to true by default (dummy) test.
+ * Used to detect usused test numbers and avoid unnecessary
+ * test object creation which may be time-consuming depending
+ * on operations described in Data::Data() and Data::~Data().
+ * TODO: replace with throwing special exception from default test.
+ */
+ bool called_method_was_a_dummy_test_;
+
+ /**
+ * Default do-nothing test.
+ */
+ template <int n>
+ void test()
+ {
+ called_method_was_a_dummy_test_ = true;
+ }
+ };
+
+ namespace
+ {
+ /**
+ * Tests provided condition.
+ * Throws if false.
+ */
+ void ensure(bool cond)
+ {
+ if( !cond ) throw failure("");
+ }
+
+ /**
+ * Tests provided condition.
+ * Throws if false.
+ */
+ void ensure(const char* msg,bool cond)
+ {
+ if( !cond ) throw failure(msg);
+ }
+
+ /**
+ * Tests two objects for being equal.
+ * Throws if false.
+ *
+ * NB: both T and Q must have operator << defined somewhere, or
+ * client code will not compile at all!
+ */
+ template <class T,class Q>
+ void ensure_equals(const char* msg,const Q& actual,const T& expected)
+ {
+ if( expected != actual )
+ {
+ std::stringstream ss;
+ ss << (msg?msg:"") << (msg?": ":"") << "expected " << expected << " actual " << actual;
+ throw failure(ss.str().c_str());
+ }
+ }
+
+ template <class T,class Q>
+ void ensure_equals(const Q& actual,const T& expected)
+ {
+ ensure_equals<>(0,actual,expected);
+ }
+
+ /**
+ * Tests two objects for being at most in given distance one from another.
+ * Borders are excluded.
+ * Throws if false.
+ *
+ * NB: T must have operator << defined somewhere, or
+ * client code will not compile at all! Also, T shall have
+ * operators + and -, and be comparable.
+ */
+ template <class T>
+ void ensure_distance(const char* msg,const T& actual,const T& expected,const T& distance)
+ {
+ if( expected-distance >= actual || expected+distance <= actual )
+ {
+ std::stringstream ss;
+ ss << (msg?msg:"") << (msg?": ":"") << "expected [" << expected-distance << ";"
+ << expected+distance << "] actual " << actual;
+ throw failure(ss.str().c_str());
+ }
+ }
+
+ template <class T>
+ void ensure_distance(const T& actual,const T& expected,const T& distance)
+ {
+ ensure_distance<>(0,actual,expected,distance);
+ }
+
+ /**
+ * Unconditionally fails with message.
+ */
+ void fail(const char* msg="")
+ {
+ throw failure(msg);
+ }
+ }
+
+ /**
+ * Walks through test tree and stores address of each
+ * test method in group. Instantiation stops at 0.
+ */
+ template <class Test,class Group,int n>
+ struct tests_registerer
+ {
+ static void reg(Group& group)
+ {
+ group.reg(n,&Test::template test<n>);
+ tests_registerer<Test,Group,n-1>::reg(group);
+ }
+ };
+
+ template<class Test,class Group>
+ struct tests_registerer<Test,Group,0>
+ {
+ static void reg(Group&){};
+ };
+
+ /**
+ * Test group; used to recreate test object instance for
+ * each new test since we have to have reinitialized
+ * Data base class.
+ */
+ template <class Data,int MaxTestsInGroup = 50>
+ class test_group : public group_base
+ {
+ const char* name_;
+
+ typedef void (test_object<Data>::*testmethod)();
+ typedef std::map<int,testmethod> tests;
+ typedef typename tests::iterator tests_iterator;
+ typedef typename tests::const_iterator tests_const_iterator;
+ typedef typename tests::const_reverse_iterator
+ tests_const_reverse_iterator;
+ typedef typename tests::size_type size_type;
+
+ tests tests_;
+ tests_iterator current_test_;
+
+ /**
+ * Exception-in-destructor-safe smart-pointer class.
+ */
+ template <class T>
+ class safe_holder
+ {
+ T* p_;
+ bool permit_throw_in_dtor;
+
+ safe_holder(const safe_holder&);
+ safe_holder& operator = (const safe_holder&);
+
+ public:
+ safe_holder() : p_(0),permit_throw_in_dtor(false)
+ {
+ }
+
+ ~safe_holder()
+ {
+ release();
+ }
+
+ T* operator -> () const { return p_; };
+ T* get() const { return p_; };
+
+ /**
+ * Tell ptr it can throw from destructor. Right way is to
+ * use std::uncaught_exception(), but some compilers lack
+ * correct implementation of the function.
+ */
+ void permit_throw(){ permit_throw_in_dtor = true; }
+
+ /**
+ * Specially treats exceptions in test object destructor;
+ * if test itself failed, exceptions in destructor
+ * are ignored; if test was successful and destructor failed,
+ * warning exception throwed.
+ */
+ void release()
+ {
+ try
+ {
+ if( delete_obj() == false )
+ {
+ throw warning("destructor of test object raised an SEH exception");
+ }
+ }
+ catch( const std::exception& ex )
+ {
+ if( permit_throw_in_dtor )
+ {
+ std::string msg = "destructor of test object raised exception: ";
+ msg += ex.what();
+ throw warning(msg);
+ }
+ }
+ catch( ... )
+ {
+ if( permit_throw_in_dtor )
+ {
+ throw warning("destructor of test object raised an exception");
+ }
+ }
+ }
+
+ /**
+ * Re-init holder to get brand new object.
+ */
+ void reset()
+ {
+ release();
+ permit_throw_in_dtor = false;
+ p_ = new T();
+ }
+
+ bool delete_obj()
+ {
+#if defined(TUT_USE_SEH)
+ __try
+ {
+#endif
+ T* p = p_;
+ p_ = 0;
+ delete p;
+#if defined(TUT_USE_SEH)
+ }
+ __except(handle_seh_(::GetExceptionCode()))
+ {
+ if( permit_throw_in_dtor )
+ {
+ return false;
+ }
+ }
+#endif
+ return true;
+ }
+ };
+
+ public:
+ typedef test_object<Data> object;
+
+ /**
+ * Creates and registers test group with specified name.
+ */
+ test_group(const char* name)
+ : name_(name)
+ {
+ // register itself
+ runner.get().register_group(name_,this);
+
+ // register all tests
+ tests_registerer<object,test_group,MaxTestsInGroup>::reg(*this);
+ };
+
+ /**
+ * This constructor is used in self-test run only.
+ */
+ test_group(const char* name,test_runner& another_runner)
+ : name_(name)
+ {
+ // register itself
+ another_runner.register_group(name_,this);
+
+ // register all tests
+ tests_registerer<test_object<Data>,
+ test_group,MaxTestsInGroup>::reg(*this);
+ };
+
+ /**
+ * Registers test method under given number.
+ */
+ void reg(int n,testmethod tm)
+ {
+ tests_[n] = tm;
+ }
+
+ /**
+ * Reset test position before first test.
+ */
+ void rewind()
+ {
+ current_test_ = tests_.begin();
+ }
+
+ /**
+ * Runs next test.
+ */
+ test_result run_next()
+ {
+ if( current_test_ == tests_.end() )
+ {
+ throw no_more_tests();
+ }
+
+ // find next user-specialized test
+ safe_holder<object> obj;
+ while( current_test_ != tests_.end() )
+ {
+ try
+ {
+ return run_test_(current_test_++,obj);
+ }
+ catch( const no_such_test& )
+ {
+ continue;
+ }
+ }
+
+ throw no_more_tests();
+ }
+
+ /**
+ * Runs one test by position.
+ */
+ test_result run_test(int n)
+ {
+ // beyond tests is special case to discover upper limit
+ if( tests_.rbegin() == tests_.rend() ) throw beyond_last_test();
+ if( tests_.rbegin()->first < n ) throw beyond_last_test();
+
+ // withing scope; check if given test exists
+ tests_iterator ti = tests_.find(n);
+ if( ti == tests_.end() ) throw no_such_test();
+
+ safe_holder<object> obj;
+ return run_test_(ti,obj);
+ }
+
+ private:
+ /**
+ * VC allows only one exception handling type per function,
+ * so I have to split the method
+ */
+ test_result run_test_(const tests_iterator& ti,safe_holder<object>& obj)
+ {
+ try
+ {
+ if( run_test_seh_(ti->second,obj) == false )
+ throw seh("seh");
+ }
+ catch(const no_such_test&)
+ {
+ throw;
+ }
+ catch(const warning& ex)
+ {
+ // test ok, but destructor failed
+ test_result tr(name_,ti->first,test_result::warn,ex);
+ return tr;
+ }
+ catch(const failure& ex)
+ {
+ // test failed because of ensure() or similar method
+ test_result tr(name_,ti->first,test_result::fail,ex);
+ return tr;
+ }
+ catch(const seh& ex)
+ {
+ // test failed with sigsegv, divide by zero, etc
+ test_result tr(name_,ti->first,test_result::term,ex);
+ return tr;
+ }
+ catch(const std::exception& ex)
+ {
+ // test failed with std::exception
+ test_result tr(name_,ti->first,test_result::ex,ex);
+ return tr;
+ }
+ catch(...)
+ {
+ // test failed with unknown exception
+ test_result tr(name_,ti->first,test_result::ex);
+ return tr;
+ }
+
+ // test passed
+ test_result tr(name_,ti->first,test_result::ok);
+ return tr;
+ }
+
+ /**
+ * Runs one under SEH if platform supports it.
+ */
+ bool run_test_seh_(testmethod tm,safe_holder<object>& obj)
+ {
+#if defined(TUT_USE_SEH)
+ __try
+ {
+#endif
+ if( obj.get() == 0 ) obj.reset();
+ obj->called_method_was_a_dummy_test_ = false;
+
+#if defined(TUT_USE_SEH)
+ __try
+ {
+#endif
+ (obj.get()->*tm)();
+#if defined(TUT_USE_SEH)
+ }
+ __except(handle_seh_(::GetExceptionCode()))
+ {
+ // throw seh("SEH");
+ return false;
+ }
+#endif
+
+ if( obj->called_method_was_a_dummy_test_ )
+ {
+ // do not call obj.release(); reuse object
+ throw no_such_test();
+ }
+
+ obj.permit_throw();
+ obj.release();
+#if defined(TUT_USE_SEH)
+ }
+ __except(handle_seh_(::GetExceptionCode()))
+ {
+ // throw seh("SEH");
+ return false;
+ }
+#endif
+ return true;
+ }
+ };
+
+
+#if defined(TUT_USE_SEH)
+ /**
+ * Decides should we execute handler or ignore SE.
+ */
+ inline int handle_seh_(DWORD excode)
+ {
+ switch(excode)
+ {
+ case EXCEPTION_ACCESS_VIOLATION:
+ case EXCEPTION_DATATYPE_MISALIGNMENT:
+ case EXCEPTION_BREAKPOINT:
+ case EXCEPTION_SINGLE_STEP:
+ case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+ case EXCEPTION_FLT_DENORMAL_OPERAND:
+ case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+ case EXCEPTION_FLT_INEXACT_RESULT:
+ case EXCEPTION_FLT_INVALID_OPERATION:
+ case EXCEPTION_FLT_OVERFLOW:
+ case EXCEPTION_FLT_STACK_CHECK:
+ case EXCEPTION_FLT_UNDERFLOW:
+ case EXCEPTION_INT_DIVIDE_BY_ZERO:
+ case EXCEPTION_INT_OVERFLOW:
+ case EXCEPTION_PRIV_INSTRUCTION:
+ case EXCEPTION_IN_PAGE_ERROR:
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
+ case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+ case EXCEPTION_STACK_OVERFLOW:
+ case EXCEPTION_INVALID_DISPOSITION:
+ case EXCEPTION_GUARD_PAGE:
+ case EXCEPTION_INVALID_HANDLE:
+ return EXCEPTION_EXECUTE_HANDLER;
+ };
+
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+#endif
+}
+
+#endif
+
diff --git a/adept/tests/tut_reporter.h b/adept/tests/tut_reporter.h
new file mode 100644
index 0000000..941d653
--- /dev/null
+++ b/adept/tests/tut_reporter.h
@@ -0,0 +1,182 @@
+#ifndef TUT_REPORTER
+#define TUT_REPORTER
+
+#include <tut.h>
+
+/**
+ * Template Unit Tests Framework for C++.
+ * http://tut.dozen.ru
+ *
+ * @author dozen, [email protected]
+ */
+namespace
+{
+ std::ostream& operator << (std::ostream& os,const tut::test_result& tr)
+ {
+ switch(tr.result)
+ {
+ case tut::test_result::ok:
+ os << '.';
+ break;
+
+ case tut::test_result::fail:
+ os << '[' << tr.test << "=F]";
+ break;
+
+ case tut::test_result::ex:
+ os << '[' << tr.test << "=X]";
+ break;
+
+ case tut::test_result::warn:
+ os << '[' << tr.test << "=W]";
+ break;
+
+ case tut::test_result::term:
+ os << '[' << tr.test << "=T]";
+ break;
+ }
+
+ return os;
+ }
+}
+
+namespace tut
+{
+ /**
+ * Default TUT callback handler.
+ */
+ class reporter : public tut::callback
+ {
+ std::string current_group;
+ typedef std::vector<tut::test_result> not_passed_list;
+ not_passed_list not_passed;
+ std::ostream& os;
+
+ public:
+ int ok_count;
+ int exceptions_count;
+ int failures_count;
+ int terminations_count;
+ int warnings_count;
+
+ reporter() : os(std::cout)
+ {
+ init();
+ }
+
+ reporter(std::ostream& out) : os(out)
+ {
+ init();
+ }
+
+ void run_started()
+ {
+ init();
+ }
+
+ void test_completed(const tut::test_result& tr)
+ {
+ if( tr.group != current_group )
+ {
+ os << std::endl << tr.group << ": " << std::flush;
+ current_group = tr.group;
+ }
+
+ os << tr << std::flush;
+ if( tr.result == tut::test_result::ok ) ok_count++;
+ else if( tr.result == tut::test_result::ex ) exceptions_count++;
+ else if( tr.result == tut::test_result::fail ) failures_count++;
+ else if( tr.result == tut::test_result::warn ) warnings_count++;
+ else terminations_count++;
+
+ if( tr.result != tut::test_result::ok )
+ {
+ not_passed.push_back(tr);
+ }
+ }
+
+ void run_completed()
+ {
+ os << std::endl;
+
+ if( not_passed.size() > 0 )
+ {
+ not_passed_list::const_iterator i = not_passed.begin();
+ while( i != not_passed.end() )
+ {
+ tut::test_result tr = *i;
+
+ os << std::endl;
+
+ os << "---> " << "test: " << tr.group << ", test<" << tr.test << ">" << std::endl;
+
+ os << " problem: ";
+ switch(tr.result)
+ {
+ case test_result::fail:
+ os << "assertion failed" << std::endl;
+ break;
+ case test_result::ex:
+ os << "unexpected exception" << std::endl;
+ if( tr.exception_typeid != "" )
+ {
+ os << " exception typeid: "
+ << tr.exception_typeid << std::endl;
+ }
+ break;
+ case test_result::term:
+ os << "would be terminated" << std::endl;
+ break;
+ case test_result::warn:
+ os << "test passed, but cleanup code (destructor) raised an exception" << std::endl;
+ break;
+ default: break;
+ }
+
+ if( tr.message != "" )
+ {
+ if( tr.result == test_result::fail )
+ {
+ os << " failed assertion: \"" << tr.message << "\"" << std::endl;
+ }
+ else
+ {
+ os << " message: \"" << tr.message << "\"" << std::endl;
+ }
+ }
+
+ ++i;
+ }
+ }
+
+ os << std::endl;
+
+ os << "tests summary:";
+ if( terminations_count > 0 ) os << " terminations:" << terminations_count;
+ if( exceptions_count > 0 ) os << " exceptions:" << exceptions_count;
+ if( failures_count > 0 ) os << " failures:" << failures_count;
+ if( warnings_count > 0 ) os << " warnings:" << warnings_count;
+ os << " ok:" << ok_count;
+ os << std::endl;
+ }
+
+ bool all_ok() const
+ {
+ return not_passed.size() == 0;
+ }
+
+ private:
+ void init()
+ {
+ ok_count = 0;
+ exceptions_count = 0;
+ failures_count = 0;
+ terminations_count = 0;
+ warnings_count = 0;
+
+ not_passed.clear();
+ }
+ };
+};
+
+#endif
diff --git a/adept/updater/Makefile.am b/adept/updater/Makefile.am
new file mode 100644
index 0000000..83afaae
--- /dev/null
+++ b/adept/updater/Makefile.am
@@ -0,0 +1,21 @@
+
+bin_PROGRAMS = adept_updater
+noinst_HEADERS = app.h
+adept_updater_SOURCES = main.cpp app.cpp
+adept_updater_LDADD = ../adept/libadept.la $(LIBAPT_FRONT_LIBS) $(LIBEPT_LIBS) $(LIBTAGCOLL2_LIBS) $(LIBWIBBLE_LIBS) $(LIB_KIO) $(LIBKDE_UI) ../kubuntu_upgrader/libkubuntuupgradewizard.la
+adept_updater_LDFLAGS = -L/usr/lib/debug
+INCLUDES = $(all_includes) $(LIBAPT_FRONT_CFLAGS) $(LIBEPT_CFLAGS) $(LIBTAGCOLL2_CFLAGS) $(LIBWIBBLE_CFLAGS) -I$(srcdir)/.. -I..
+KDE_CXXFLAGS = $(USE_EXCEPTIONS) -DQT_NO_ASCII_CAST -DQT_NO_CAST_ASCII
+METASOURCES = AUTO
+KDE_ICON = AUTO
+
+rcdir = $(kde_datadir)/adept_updater
+rc_DATA = adept_updaterui.rc
+
+#shelldesktopdir = $(kde_appsdir)/System
+xdg_apps_DATA = adept_updater.desktop
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(EXTRACTRC) `find . -name "*.rc"` >> rc.cpp
+ $(XGETTEXT) *.cpp *.h -o $(podir)/adept_updater.pot
diff --git a/adept/updater/adept_updater.desktop b/adept/updater/adept_updater.desktop
new file mode 100644
index 0000000..8dae4d6
--- /dev/null
+++ b/adept/updater/adept_updater.desktop
@@ -0,0 +1,69 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Adept Updater
+Name[bg]=Обновяване на Adept
+Name[ca]=Actualitzador Adept
+Name[da]=Adept-opdatering
+Name[el]=Ανανεωτής Adept
+Name[es]=Actualizador experto
+Name[et]=Adepti uuendaja
+Name[fr]=Mise à jour Adept
+Name[ga]=Nuashonróir Adept
+Name[gl]=Actualizador de Adept
+Name[it]=Aggiornamento Adept
+Name[ka]=Adept განმაახლებელი
+Name[lt]=Adept atnaujinimai
+Name[pt]=Actualizador do Adept
+Name[sk]=Adept aktualizácia
+Name[sv]=Adept-uppdaterare
+Name[xx]=xxAdept Updaterxx
+GenericName=System Update Wizard
+GenericName[bg]=Обновяване на Adept
+GenericName[ca]=Assistent d'actualització del sistema
+GenericName[cs]=Průvodce aktualizací systému
+GenericName[da]=Systemopdateringsguide
+GenericName[de]=Systemaktualisierungsassistent
+GenericName[el]=Μάγος ενημέρωσης συστήματος
+GenericName[es]=Asistente de actualización del sistema
+GenericName[et]=Süsteemi uuendamine nõustaja
+GenericName[fr]=Assistant de mise à jour du système
+GenericName[gl]=Asistente de Actualizazón do Sistema
+GenericName[it]=Procedura guidata aggiornamento sistema
+GenericName[ja]=システムアップデートウィザード
+GenericName[ka]=სისტემის განახლების ოსტატი
+GenericName[lt]=Sistemos atnaujinimo vediklis
+GenericName[nl]=Systeem-update-assistent
+GenericName[pt]=Assistente de Actualização do Sistema
+GenericName[sk]=Sprievodca systémovou aktualizáciou
+GenericName[sv]=Systemuppdateringsguide
+GenericName[xx]=xxSystem Update Wizardxx
+Exec=/opt/kde3/bin/adept_updater
+Categories=Qt;KDE;System;
+Icon=adept_updater
+Type=Application
+X-KDE-SubstituteUID=true
+Comment=Update installed software
+Comment[bg]=Обновяване на инсталиран софтуер
+Comment[ca]=Actualitza el programari instal·lat
+Comment[cs]=Aktualizace nainstalovaného softwaru
+Comment[da]=Opdatér installeret programmel
+Comment[de]=Aktualisiert installierte Software
+Comment[el]=Ενημέρωση εγκατεστημένου λογισμικού
+Comment[es]=Actualizar el software instalado
+Comment[et]=Paigaldatud tarkvara uuendamine
+Comment[fr]=Mise à jour des logiciels installés
+Comment[ga]=Nuashonraigh bogearraí suiteáilte
+Comment[gl]=Actualiza o software instalado
+Comment[it]=Aggiorna il software installato
+Comment[ja]=インストール済みのソフトウェアをアップデート
+Comment[ka]=დაყენებული პროგრამების განახლება
+Comment[lt]=Įdiegtų programų atnaujinimas
+Comment[nl]=Geïnstalleerde software bijwerken
+Comment[pt]=Actualiza o 'software' instalado
+Comment[sk]=Aktualizácia inštalovaného softwaru
+Comment[sr]=Ажурира инсталиране програме
+Comment[sr@Latn]=Ažurira instalirane programe
+Comment[sv]=Uppdatera installerad programvara
+Comment[xx]=xxUpdate installed softwarexx
+Terminal=false
+NoDisplay=true
diff --git a/adept/updater/adept_updaterui.rc b/adept/updater/adept_updaterui.rc
new file mode 100644
index 0000000..083b9e8
--- /dev/null
+++ b/adept/updater/adept_updaterui.rc
@@ -0,0 +1,16 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui version="6" name="adept-updater">
+ <MenuBar>
+ <Menu name="file" noMerge="1">
+ <text>&amp;Adept</text>
+ <Action name="file_quit" />
+ </Menu>
+ <Menu name="edit" noMerge="1">
+ <text>&amp;Edit</text>
+ <Action name="edit_undo" />
+ <Action name="edit_redo" />
+ </Menu>
+ </MenuBar>
+ <ToolBar name="mainToolBar" noMerge="1">
+ </ToolBar>
+</kpartgui>
diff --git a/adept/updater/app.cpp b/adept/updater/app.cpp
new file mode 100644
index 0000000..c16424b
--- /dev/null
+++ b/adept/updater/app.cpp
@@ -0,0 +1,275 @@
+#define KUBUNTU
+
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qsplitter.h>
+#include <qtimer.h>
+#include <qwidgetstack.h>
+
+#include <kpushbutton.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kaction.h>
+#include <kactionclasses.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kparts/part.h>
+#include <ktrader.h>
+#include <klibloader.h>
+#include <kstatusbar.h>
+
+#include <apt-pkg/packagemanager.h>
+#include <apt-front/manager.h>
+#include <apt-front/init.h>
+#include <apt-front/cache/entity/package.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <apt-front/predicate/factory.h>
+
+#include <adept/acqprogresswidget.h>
+#include <adept/progress.h>
+#include <adept/utils.h>
+
+#ifdef KUBUNTU
+#include <kubuntu_upgrader/upgradewizard.h>
+#endif
+
+#include "app.h"
+
+using namespace aptFront;
+using namespace aptFront::cache;
+using namespace adept;
+
+void WaitForLister::waiting()
+{
+ kdDebug() << "WaitForLister::waiting()" << endl;
+ if (app->m_list->searchView()->lister()->busy())
+ QTimer::singleShot( 100, this, SLOT( waiting() ) );
+ else {
+ QTimer::singleShot( 0, app, slot );
+ deleteLater();
+ }
+}
+
+TestApp::TestApp()
+{
+ m_all = new QVBox( this );
+ m_stack = new QWidgetStack( m_all );
+
+ m_stack->addWidget( m_loading = new QLabel( i18n( "Loading, please wait..." ), m_stack ) );
+ m_loading->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
+
+ m_buttons = new QHBox( m_all );
+ QLabel *space = new QLabel( m_buttons ); // spacing
+ m_next = new KPushButton( i18n( "Next" ), m_buttons );
+ m_quit = new KPushButton( i18n( "Quit" ), m_buttons );
+ m_next->setEnabled( false );
+ m_quit->setEnabled( false );
+
+ m_buttons->setSpacing( 2 );
+ m_buttons->setMargin( 2 );
+ QSizePolicy buttons( QSizePolicy::Preferred, QSizePolicy::Fixed, false );
+ m_buttons->setSizePolicy( buttons );
+ m_next->setSizePolicy( buttons );
+ m_quit->setSizePolicy( buttons );
+ space->setSizePolicy( QSizePolicy(
+ QSizePolicy::Expanding,
+ QSizePolicy::Fixed, false ) );
+
+ setStandardToolBarMenuEnabled( false );
+ createStandardStatusBarAction();
+ setupActions();
+ setupGUI( Keys|StatusBar|Save|Create );
+ delete toolBar();
+
+ Application::setStatusBar( statusBar() );
+
+ QTimer::singleShot(
+ 0, this,
+ SLOT( delayed() ) );
+
+ setCentralWidget( m_all );
+ setMinimumSize( 400, 300 );
+}
+
+void TestApp::delayed()
+{
+ initialize();
+ observeComponent< component::State >();
+
+ m_stack->addWidget( m_list = new adept::Browser( m_stack ) );
+ m_stack->addWidget( m_bye = new QLabel( i18n( "Update Complete" ),
+ m_stack ) );
+ m_stack->addWidget( m_start = new QLabel( i18n( "Welcome to Adept Updater" ),
+ m_stack ) );
+ m_bye->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
+ m_start->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
+
+ m_list->searchView()->setUpgradeMode();
+
+ m_stack->addWidget( m_progress = new adept::AcqProgressWidget( m_stack ) );
+ m_stack->addWidget( m_commitProgress = new CommitProgress( m_stack ) );
+
+ m_stack->raiseWidget( m_start );
+
+ statusBar()->clear();
+ notifyPostChange(0);
+ start();
+}
+
+void TestApp::setupActions()
+{
+ KStdAction::quit( kapp, SLOT( quit() ), actionCollection() );
+ m_undo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
+ m_redo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
+ setHistoryEnabled( false );
+ createStandardStatusBarAction();
+}
+
+void TestApp::setHistoryEnabled( bool e ) {
+ if (e && history() ) {
+ m_undo->setEnabled( history()->canUndo() );
+ m_redo->setEnabled( history()->canRedo() );
+ } else {
+ m_undo->setEnabled( false );
+ m_redo->setEnabled( false );
+ }
+}
+
+void TestApp::notifyPreChange( component::Base *b )
+{
+ Application::notifyPreChange( b );
+ checkpoint();
+}
+
+void TestApp::notifyPostChange( component::Base *b )
+{
+ Application::notifyPostChange( b );
+ m_list->searchView()->lister()->scheduleRebuild(); // rebuild on change...
+}
+
+void TestApp::setNext( QString s, const char *slot, QString q, const char *quits ) {
+ disconnect( m_next, SIGNAL( clicked() ), 0, 0 );
+ m_next->setText( s );
+ m_next->setEnabled( slot );
+ if ( slot )
+ connect( m_next, SIGNAL( clicked() ), this, slot );
+
+ disconnect( m_quit, SIGNAL( clicked() ), 0, 0 );
+ m_quit->setEnabled( quits );
+ m_quit->setText( q );
+ if ( quits )
+ connect( m_quit, SIGNAL( clicked() ), this, quits );
+}
+
+void TestApp::disableNext() {
+ setNext( i18n( "Next" ), 0 );
+}
+
+void TestApp::disableButtons() {
+ disableNext();
+ m_quit->setEnabled( false );
+}
+
+void TestApp::start() {
+// disableNext();
+ update();
+// setNext( i18n( "Fetch List of Updates" ), SLOT( update() ),
+// i18n( "Skip Fetching List" ), SLOT( postUpdate() ) );
+}
+
+void TestApp::update() {
+ kdDebug() << "TestApp::update" << endl;
+ disableButtons();
+
+ aptFront::Manager m;
+ m.setProgressCallback( m_progress->callback() );
+ m.setUpdateInterval( 100000 );
+ kdDebug() << "manager set up" << endl;
+ try {
+ m_stack->raiseWidget( m_progress );
+ m.update();
+ } catch ( exception::OperationCancelled ) {
+ } catch ( ... ) {
+ KMessageBox::sorry(
+ this, i18n( "There was an error downloading updates. " ),
+ i18n( "Could not fetch updates" ) );
+ }
+ postUpdate();
+}
+
+void TestApp::postUpdate() {
+ cache::Global::get().state().distUpgrade();
+ if ( cache::Global::get().state().upgradableCount() > 0 ) {
+ m_list->searchView()->lister()->scheduleRebuild();
+ m_stack->raiseWidget( m_list );
+ setHistoryEnabled( true );
+ setNext( i18n( "Apply Updates" ), SLOT( commit() ) );
+ } else {
+ m_bye->setText( i18n( "Nothing to Update" ) );
+ m_stack->raiseWidget( m_bye );
+ disableNext();
+ // setNext( i18n( "Nothing to do, Quit" ), SLOT( close() ) );
+ m_quit->setText( i18n( "Quit" ) );
+ m_quit->setEnabled( true );
+#ifdef KUBUNTU
+ wizard = new UpgradeWizard(this, 0, 1);
+ if( wizard->checkForDistUpgrade() ) {
+ m_bye->setText(i18n("A new distribution version is available! Click next if you wish to upgrade now.")); //FIXME improve text
+ setNext( i18n( "Version Upgrade" ), SLOT( releaseUpgrade() ) );
+ } else {
+ wizard->close();
+ }
+#endif
+ }
+}
+
+void TestApp::commit() {
+ kdDebug() << "TestApp::commit" << endl;
+ disableButtons();
+ setHistoryEnabled( false );
+ if (m_list->searchView()->lister()->busy()) {
+ new WaitForLister( this, SLOT( commit() ) );
+ return;
+ }
+
+ aptFront::Manager m;
+ m.setProgressCallback( m_progress->callback() );
+ m.setUpdateInterval( 100000 );
+ try {
+ m_stack->raiseWidget( m_progress );
+ m.download();
+ m_stack->raiseWidget( m_commitProgress );
+ m.commit();
+ } catch ( exception::OperationCancelled ) {
+ } catch ( ... ) {
+ KMessageBox::sorry(
+ this, i18n( "There was an error commiting changes. "
+ "Possibly there was a problem downloading some "
+ "packages or the commit would break packages. " ),
+ i18n( "Could not commit changes" ) );
+ }
+
+ m_stack->raiseWidget( m_bye );
+ disableNext();
+#ifdef KUBUNTU
+ wizard = new UpgradeWizard(this, 0, 1);
+ if( wizard->checkForDistUpgrade() ) {
+ m_bye->setText(i18n("A new distribution version is available! Click next if you wish to upgrade now.")); //FIXME improve text
+ setNext( i18n( "Version Upgrade" ), SLOT( releaseUpgrade() ) );
+ } else {
+ wizard->close();
+ }
+#endif
+ m_quit->setText( i18n( "Quit" ) );
+ m_quit->setEnabled( true );
+ notifyPostChange( 0 );
+}
+
+#ifdef KUBUNTU
+void TestApp::releaseUpgrade() {
+ wizard->show();
+}
+#endif
+
+#include "app.moc"
diff --git a/adept/updater/app.h b/adept/updater/app.h
new file mode 100644
index 0000000..a51986c
--- /dev/null
+++ b/adept/updater/app.h
@@ -0,0 +1,105 @@
+/* -*- C++ -*- */
+#ifndef TESTUI_APP_H
+#define TESTUI_APP_H
+
+#define KUBUNTU
+
+#include <kmainwindow.h>
+#include <kparts/part.h>
+#include <kactionclasses.h>
+#include <apt-front/cache/observer.h>
+#include <apt-front/cache/component/state.h>
+#include <apt-front/cache/component/history.h>
+#include <adept/view.h>
+#include <adept/commitprogress.h>
+#include <adept/application.h>
+
+#ifdef KUBUNTU
+#include <kubuntu_upgrader/upgradewizard.h>
+#endif
+
+class QVBox;
+class QWidgetStack;
+class QSplitter;
+class KAction;
+class KPushButton;
+namespace adept {
+class AcqProgressWidget;
+}
+
+using namespace aptFront;
+using namespace adept;
+
+class TestApp : public KMainWindow, Application {
+ Q_OBJECT
+public:
+ void setupActions();
+ ExtTerminalInterface *terminal();
+ TestApp();
+protected slots:
+ void start();
+ void update();
+ void postUpdate();
+ void commit();
+
+ void delayed();
+
+ void undo() { Application::undo(); }
+ void redo() { Application::redo(); }
+ void checkpoint() { Application::checkpoint(); }
+
+ void setHistoryEnabled( bool );
+
+ void disableNext();
+ void disableButtons();
+ void setNext( QString str, const char *slot,
+ QString qstr = i18n( "Forget Changes and Quit" ),
+ const char *qslot = SLOT( close() ) );
+#ifdef KUBUNTU
+ void releaseUpgrade();
+#endif
+protected:
+ friend class WaitForLister;
+
+ virtual void notifyPostChange( cache::component::Base * );
+ virtual void notifyPreChange( cache::component::Base * );
+
+ QWidgetStack *m_stack;
+ QVBox *m_all;
+ QHBox *m_buttons;
+ QLabel *m_start, *m_bye, *m_loading;
+ KPushButton *m_next, *m_quit;
+
+ // stacked widgets
+ adept::AcqProgressWidget *m_progress;
+ adept::CommitProgress *m_commitProgress;
+ adept::Browser *m_list;
+
+ // other stuff
+ std::vector<KAction *> m_actions;
+ QMap< QString, QString > m_icons;
+ KAction *m_undo, *m_redo;
+ cache::component::History< cache::component::State > *m_history;
+
+#ifdef KUBUNTU
+ UpgradeWizard* wizard;
+#endif
+};
+
+class WaitForLister : public QObject {
+ Q_OBJECT
+public:
+ WaitForLister( TestApp *a, const char *s )
+ : app( a ), slot( s )
+ {
+ waiting();
+ }
+protected slots:
+ void waiting();
+protected:
+ TestApp *app;
+ const char *slot;
+
+};
+
+#endif
diff --git a/adept/updater/hi128-app-adept_updater.png b/adept/updater/hi128-app-adept_updater.png
new file mode 100644
index 0000000..a68965f
--- /dev/null
+++ b/adept/updater/hi128-app-adept_updater.png
Binary files differ
diff --git a/adept/updater/hi16-app-adept_updater.png b/adept/updater/hi16-app-adept_updater.png
new file mode 100644
index 0000000..4952024
--- /dev/null
+++ b/adept/updater/hi16-app-adept_updater.png
Binary files differ
diff --git a/adept/updater/hi22-app-adept_updater.png b/adept/updater/hi22-app-adept_updater.png
new file mode 100644
index 0000000..3b3880c
--- /dev/null
+++ b/adept/updater/hi22-app-adept_updater.png
Binary files differ
diff --git a/adept/updater/hi32-app-adept_updater.png b/adept/updater/hi32-app-adept_updater.png
new file mode 100644
index 0000000..ee196a8
--- /dev/null
+++ b/adept/updater/hi32-app-adept_updater.png
Binary files differ
diff --git a/adept/updater/hi48-app-adept_updater.png b/adept/updater/hi48-app-adept_updater.png
new file mode 100644
index 0000000..5abac9b
--- /dev/null
+++ b/adept/updater/hi48-app-adept_updater.png
Binary files differ
diff --git a/adept/updater/hi64-app-adept_updater.png b/adept/updater/hi64-app-adept_updater.png
new file mode 100644
index 0000000..20766d9
--- /dev/null
+++ b/adept/updater/hi64-app-adept_updater.png
Binary files differ
diff --git a/adept/updater/hisc-app-adept_updater.svgz b/adept/updater/hisc-app-adept_updater.svgz
new file mode 100644
index 0000000..2c6fab6
--- /dev/null
+++ b/adept/updater/hisc-app-adept_updater.svgz
Binary files differ
diff --git a/adept/updater/main.cpp b/adept/updater/main.cpp
new file mode 100644
index 0000000..a86ee9b
--- /dev/null
+++ b/adept/updater/main.cpp
@@ -0,0 +1,56 @@
+// KDE includes
+
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <kuniqueapplication.h>
+
+#include "app.h"
+
+static KCmdLineOptions options[] =
+{
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+
+ KLocale::setMainCatalogue("adept_updater");
+
+ putenv( "QT_IM_MODULE=xim" );
+ QString description = i18n("Adept Updater");
+
+ KAboutData aboutData( "adept_updater",
+ I18N_NOOP("Adept Updater"),
+ "2.1 Cruiser",
+ description.latin1(),
+ KAboutData::License_BSD,
+ I18N_NOOP("(c) 2005, 2006 Peter Rockai"),
+ 0,
+ "http://web.mornfall.net/adept.html");
+
+ aboutData.addAuthor ( "Peter Rockai",
+ I18N_NOOP("developer"),
+ "me at mornfall dot net",
+ "http://web.mornfall.net");
+
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+
+ KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
+ // if (args && args->isSet("xy")) ...
+
+ /* KConfig* config = KGlobal::config();
+ config->setGroup("General Settings");
+ QString version = config->readEntry("Version"); */
+
+ KGlobal::locale()->insertCatalogue(QString::fromUtf8("libept"));
+
+ TestApp *ta = new TestApp();
+
+ app.setMainWidget(ta);
+ ta->show();
+
+ return app.exec();
+}
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..854b254
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,394 @@
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+#undef HAVE_CARBON_CARBON_H
+
+/* Define if you have the CoreAudio API */
+#undef HAVE_COREAUDIO
+
+/* Define to 1 if you have the <crt_externs.h> header file. */
+#undef HAVE_CRT_EXTERNS_H
+
+/* Defines if your system has the crypt function */
+#undef HAVE_CRYPT
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_DIRENT_H
+
+/* Define if you have dlfcn */
+#undef HAVE_DLFCN
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <dl.h> header file. */
+#undef HAVE_DL_H
+
+/* Define to 1 if you have the `fabsl' function. */
+#undef HAVE_FABSL
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `flock' function. */
+#undef HAVE_FLOCK
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define if you have getdomainname */
+#undef HAVE_GETDOMAINNAME
+
+/* Define if you have the getdomainname prototype */
+#undef HAVE_GETDOMAINNAME_PROTO
+
+/* Define if you have gethostname */
+#undef HAVE_GETHOSTNAME
+
+/* Define if you have the gethostname prototype */
+#undef HAVE_GETHOSTNAME_PROTO
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have libjpeg */
+#undef HAVE_LIBJPEG
+
+/* Define if you have libpng */
+#undef HAVE_LIBPNG
+
+/* Define if you have a working libpthread (will enable threaded code) */
+#undef HAVE_LIBPTHREAD
+
+/* Define if you have libz */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <linux/tcp.h> header file. */
+#undef HAVE_LINUX_TCP_H
+
+/* Define to 1 if the type `long double' works and has more range or precision
+ than `double'. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define to 1 if the type `long double' works and has more range or precision
+ than `double'. */
+#undef HAVE_LONG_DOUBLE_WIDER
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define if your system needs _NSGetEnviron to set up the environment */
+#undef HAVE_NSGETENVIRON
+
+/* Define to 1 if you have the <paths.h> header file. */
+#undef HAVE_PATHS_H
+
+/* Define if you have res_init */
+#undef HAVE_RES_INIT
+
+/* Define if you have the res_init prototype */
+#undef HAVE_RES_INIT_PROTO
+
+/* Define to 1 if you have the `re_comp' function. */
+#undef HAVE_RE_COMP
+
+/* Define if you have setenv */
+#undef HAVE_SETENV
+
+/* Define if you have the setenv prototype */
+#undef HAVE_SETENV_PROTO
+
+/* Define if you have a STL implementation by SGI */
+#undef HAVE_SGI_STL
+
+/* Define if you have shload */
+#undef HAVE_SHLOAD
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define if you have strlcat */
+#undef HAVE_STRLCAT
+
+/* Define if you have the strlcat prototype */
+#undef HAVE_STRLCAT_PROTO
+
+/* Define if you have strlcpy */
+#undef HAVE_STRLCPY
+
+/* Define if you have the strlcpy prototype */
+#undef HAVE_STRLCPY_PROTO
+
+/* Define to 1 if you have the <sysent.h> header file. */
+#undef HAVE_SYSENT_H
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/cdefs.h> header file. */
+#undef HAVE_SYS_CDEFS_H
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/proc.h> header file. */
+#undef HAVE_SYS_PROC_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have unsetenv */
+#undef HAVE_UNSETENV
+
+/* Define if you have the unsetenv prototype */
+#undef HAVE_UNSETENV_PROTO
+
+/* Define to 1 if you have the <utmp.h> header file. */
+#undef HAVE_UTMP_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Suffix for lib directories */
+#undef KDELIBSUFF
+
+/* 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 version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `char *', as computed by sizeof. */
+#undef SIZEOF_CHAR_P
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Defined if compiling without arts */
+#undef WITHOUT_ARTS
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+ `char[]'. */
+#undef YYTEXT_POINTER
+
+/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+
+
+
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+
+
+
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+
+
+
+#if !defined(HAVE_GETDOMAINNAME_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <sys/types.h>
+ int getdomainname (char *, size_t);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_GETHOSTNAME_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+int gethostname (char *, unsigned int);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_RES_INIT_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+int res_init(void);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_SETENV_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+int setenv (const char *, const char *, int);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_STRLCAT_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned long strlcat(char*, const char*, unsigned long);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_STRLCPY_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned long strlcpy(char*, const char*, unsigned long);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_UNSETENV_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+void unsetenv (const char *);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+
+
+
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+
+
+/* type to use in place of socklen_t if not defined */
+#undef kde_socklen_t
+
+/* type to use in place of socklen_t if not defined (deprecated, use
+ kde_socklen_t) */
+#undef ksize_t
diff --git a/configure.files b/configure.files
new file mode 100644
index 0000000..d4d7dbc
--- /dev/null
+++ b/configure.files
@@ -0,0 +1,3 @@
+./admin/configure.in.min
+configure.in.in
+./adept/configure.in.in
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..eb5813e
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,160 @@
+dnl =======================================================
+dnl FILE: ./admin/configure.in.min
+dnl =======================================================
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 2001 Stephan Kulow ([email protected])
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+dnl Boston, MA 02110-1301, USA.
+
+# Original Author was [email protected]
+# I lifted it in some mater. (Stephan Kulow)
+# I used much code from Janos Farkas
+
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(acinclude.m4) dnl a source file from your sub dir
+
+dnl This is so we can use kde-common
+AC_CONFIG_AUX_DIR(admin)
+
+dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
+unset CDPATH
+
+dnl Checking host/target/build systems, for make, install etc.
+AC_CANONICAL_SYSTEM
+dnl Perform program name transformation
+AC_ARG_PROGRAM
+
+dnl Automake doc recommends to do this only here. (Janos)
+AM_INIT_AUTOMAKE(adept-2.1.3ubuntu24, "3.5.2") dnl searches for some needed programs
+
+KDE_SET_PREFIX
+
+dnl generate the config header
+AM_CONFIG_HEADER(config.h) dnl at the distribution this done
+
+dnl Checks for programs.
+AC_CHECK_COMPILERS
+AC_ENABLE_SHARED(yes)
+AC_ENABLE_STATIC(no)
+KDE_PROG_LIBTOOL
+
+dnl for NLS support. Call them in this order!
+dnl WITH_NLS is for the po files
+AM_KDE_WITH_NLS
+
+KDE_USE_QT(3.3)
+AC_PATH_KDE
+dnl =======================================================
+dnl FILE: configure.in.in
+dnl =======================================================
+
+#MIN_CONFIG(3.3)
+# Define a symbol, to know that we're compiling WITH kde. (for apps that
+# can compile without KDE, optionally)
+AM_CONDITIONAL(KDE_INSTALLED, test "$have_kde" = "yes")
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h sys/time.h sys/stat.h stdint.h)
+AC_CHECK_HEADERS(sys/cdefs.h fnmatch.h sysent.h strings.h paths.h)
+AC_CHECK_HEADERS(utmp.h sys/param.h linux/tcp.h sys/proc.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_TIME
+
+AC_C_LONG_DOUBLE
+
+dnl Checks for library functions.
+KDE_CHECK_DLOPEN
+AC_CHECK_FUNCS(socket fabsl strdup vsnprintf re_comp flock)
+AC_CHECK_SETENV
+AC_CHECK_UNSETENV
+AC_CHECK_GETDOMAINNAME
+AC_CHECK_GETHOSTNAME
+AM_PROG_LEX
+LFLAGS="-o${LEX_OUTPUT_ROOT}.c"
+AC_SUBST(LFLAGS)
+dnl =======================================================
+dnl FILE: ./adept/configure.in.in
+dnl =======================================================
+
+AC_ARG_ENABLE(adept, [ --enable-adept compile adept],, [DO_NOT_COMPILE="$DO_NOT_COMPILE adept"])
+LIBTAGCOLL2_DEFS
+LIBAPT_FRONT_DEFS
+LIBEPT_DEFS
+LIBWIBBLE_DEFS
+KDE_CREATE_SUBDIRSLIST
+AM_CONDITIONAL(adept_SUBDIR_included, test "x$adept_SUBDIR_included" = xyes)
+AC_CONFIG_FILES([ Makefile ])
+AC_CONFIG_FILES([ adept/Makefile ])
+AC_CONFIG_FILES([ adept/adept/Makefile ])
+AC_CONFIG_FILES([ adept/batch/Makefile ])
+AC_CONFIG_FILES([ adept/icons/Makefile ])
+AC_CONFIG_FILES([ adept/installer/Makefile ])
+AC_CONFIG_FILES([ adept/kubuntu_upgrader/Makefile ])
+AC_CONFIG_FILES([ adept/libadept/Makefile ])
+AC_CONFIG_FILES([ adept/manager/Makefile ])
+AC_CONFIG_FILES([ adept/notifier/Makefile ])
+AC_CONFIG_FILES([ adept/updater/Makefile ])
+AC_OUTPUT
+# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
+if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
+ # And if so, warn when they don't match
+ if test "$kde_libs_prefix" != "$given_prefix"; then
+ # And if kde doesn't know about the prefix yet
+ echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
+ if test $? -ne 0; then
+ echo ""
+ echo "Warning: you chose to install this package in $given_prefix,"
+ echo "but KDE was found in $kde_libs_prefix."
+ echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
+ echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
+ echo "Then restart KDE."
+ echo ""
+ fi
+ fi
+fi
+
+if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then
+ echo ""
+ echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility"
+ echo "was not included. Therefore, GCC symbol visibility support remains disabled."
+ echo ""
+ echo "For better performance, consider including the Qt visibility supporting patch"
+ echo "located at:"
+ echo ""
+ echo "http://bugs.kde.org/show_bug.cgi?id=109386"
+ echo ""
+ echo "and recompile all of Qt and KDE. Note, this is entirely optional and"
+ echo "everything will continue to work just fine without it."
+ echo ""
+fi
+
+if test "$all_tests" = "bad"; then
+ if test ! "$cache_file" = "/dev/null"; then
+ echo ""
+ echo "Please remove the file $cache_file after changing your setup"
+ echo "so that configure will find the changes next time."
+ echo ""
+ fi
+else
+ echo ""
+ echo "Good - your configure finished. Start make now"
+ echo ""
+fi
diff --git a/configure.in.in b/configure.in.in
new file mode 100644
index 0000000..49e3383
--- /dev/null
+++ b/configure.in.in
@@ -0,0 +1,27 @@
+#MIN_CONFIG(3.3)
+# Define a symbol, to know that we're compiling WITH kde. (for apps that
+# can compile without KDE, optionally)
+AM_CONDITIONAL(KDE_INSTALLED, test "$have_kde" = "yes")
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h sys/time.h sys/stat.h stdint.h)
+AC_CHECK_HEADERS(sys/cdefs.h fnmatch.h sysent.h strings.h paths.h)
+AC_CHECK_HEADERS(utmp.h sys/param.h linux/tcp.h sys/proc.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_TIME
+
+AC_C_LONG_DOUBLE
+
+dnl Checks for library functions.
+KDE_CHECK_DLOPEN
+AC_CHECK_FUNCS(socket fabsl strdup vsnprintf re_comp flock)
+AC_CHECK_SETENV
+AC_CHECK_UNSETENV
+AC_CHECK_GETDOMAINNAME
+AC_CHECK_GETHOSTNAME
+AM_PROG_LEX
+LFLAGS="-o${LEX_OUTPUT_ROOT}.c"
+AC_SUBST(LFLAGS)
diff --git a/subdirs b/subdirs
new file mode 100644
index 0000000..427e062
--- /dev/null
+++ b/subdirs
@@ -0,0 +1 @@
+adept