--- gdm-2.29.4.orig/debian/compat +++ gdm-2.29.4/debian/compat @@ -0,0 +1 @@ +7 --- gdm-2.29.4.orig/debian/copyright +++ gdm-2.29.4/debian/copyright @@ -0,0 +1,54 @@ +This package was debianized by Sebastien Bacher on +Tue, 15 Jul 2008 14:16:47 +0100. + +It was downloaded from http://ftp.acc.umu.se/pub/GNOME/sources/gdm/2.22 + +Upstream Authors: + + William Jon McCann + Ray Strode + +Copyright: + +Copyright (C) 2007 William Jon McCann +Copyright (C) 2003 Red Hat Inc. +Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved. +Copyright (C) 2006 Red Hat, Inc. +Copyright (C) 2006 Ray Strode +Copyright (C) 2004, 2008 Sun Microsystems, Inc. +Copyright (C) 2005, 2008 Red Hat, Inc. +Copyright (c) 2007 David Zeuthen +Copyright (C) 1998, 1999, 2000 Martin K. Petersen +Copyright (C) 2004-2005 James M. Cape . +Copyright (C) 2001 Havoc Pennington, 2002 Red Hat Inc. +Copyright (C) 2003-2006 Vincent Untz +Copyright (C) 2002 Red Hat, Inc. +Copyright (C) 2006, 2007 Christian Persch +Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald +Copyright (C) 2002 Anders Carlsson +Copyright (C) 2008 Red Hat, Inc. +Copyright (C) 2002 Free Software Foundation, Inc. +Copyright (C) 2003 Sun Microsystems, Inc. +Copyright (C) 2000 Helix Code, Inc. +Copyright (C) 2001-2006 Jonathan Blandford + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation version 3 + + This package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-3'. + +The Debian packaging is (C) 2008, Sebastien Bacher and +is licensed under the GPL, see above. --- gdm-2.29.4.orig/debian/changelog +++ gdm-2.29.4/debian/changelog @@ -0,0 +1,843 @@ +gdm (2.29.4-0ubuntu3) lucid; urgency=low + + * debian/patches/29_switch_user.patch: + - Add SwitchToUser() method call + + -- Robert Ancell Thu, 14 Jan 2010 13:11:06 +1100 + +gdm (2.29.4-0ubuntu2) lucid; urgency=low + + * debian/gdm.upstart: Wait for D-Bus to be ready, to avoid failure if gdm + starts too early. Thanks to Robert Hooker! (LP: #502838) + + -- Martin Pitt Sat, 09 Jan 2010 17:34:43 +0100 + +gdm (2.29.4-0ubuntu1) lucid; urgency=low + + * New upstream version: + - Remove deprecated function g_mapped_file_free + - Fix option widgets to work better with orca + - make --with-custom-conf work + - Don't hard code path to policykit agent + - Don't backup xkb configuration before login + * debian/control: + - updated libglib requirement + * debian/patches/08_use_polkit_for_settings.patch: + - new version update + * debian/patches/99_autoreconf.patch: + - new version update + + -- Sebastien Bacher Thu, 07 Jan 2010 17:05:51 +0100 + +gdm (2.29.1-0ubuntu9) lucid; urgency=low + + * debian/patches/24_system_uid.patch: use configured system UID + minimum instead of hard-coded value (LP: #459199). + + -- Kees Cook Wed, 16 Dec 2009 10:35:09 -0800 + +gdm (2.29.1-0ubuntu8) lucid; urgency=low + + * debian/gdm.upstart: + - Revert Mario's changes which prevent gdm from starting for most people, + and introduce expensive dkms integration code in the non-dkms case! + + -- Scott James Remnant Tue, 15 Dec 2009 09:37:02 +0000 + +gdm (2.29.1-0ubuntu7) lucid; urgency=low + + * debian/60xdg_path-on-session: + - Add xdg path depending on GDM selected session. This enables starting + desired applications depending on session + * debian/gdm.install: install previous file in /etc/X11/Xsession.d + + -- Didier Roche Mon, 14 Dec 2009 21:20:06 +0100 + +gdm (2.29.1-0ubuntu6) lucid; urgency=low + + * debian/gdm.upstart (LP: #453365) + - Start on built-successful signal for fglrx or nvidia modules. + - If dkms is available on the system, use it to check the status + of fglrx or nvidia. + - If they're in the DKMS tree but not built, exit the gdm task + and wait for the build-successful signal. If they don't build, + the failsafe-x task will receive a build-failed and can start + BulletProof-X. + + -- Mario Limonciello Mon, 14 Dec 2009 14:09:14 -0600 + +gdm (2.29.1-0ubuntu5) lucid; urgency=low + + * debian/patches/15_default_session.patch: (LP: #403291) + - Choose default session in /etc/gdm/custom.conf using DBus. Removed + default.desktop hack. + - Add /usr/lib/gdm-set-default-session to properly define default session: + use DBus when gdm daemon is on and filing the file when it's off. This + script can be called in postinst file of ubuntu derivatives. + * debian/60xdg_path-on-session: + - Add xdg path depending on GDM selected session. This enables starting + desired applications depending on session + * debian/patches/99_autoreconf.patch: refreshed + + -- Didier Roche Sat, 12 Dec 2009 22:55:06 +0100 + +gdm (2.29.1-0ubuntu4) lucid; urgency=low + + * debian/patches/05_initial_server_on_vt7.patch: + - Fix a bug in the patch: the return value of open() can be zero on + success, because zero is a valid file descriptor! This probably + never broke in the real world, because we always have standard + input set to something, but it's worth fixing bugs when you find + them ;-) + * debian/patches/27_save_root_window.patch: + - Patch taken from the plymouth-integration branch of Upstream GIT + to save the root window pixmap in a property for other things to + pick up. + * debian/patches/28_plymouth_transition.patch: + - Patch taken from the plymouth-integration branch of Upstream GIT, + makes gdm check whether plymouth is running on startup; if it is, + actively arranges for a smooth transition. Also handles getting + plymouth out of the way in case the X server doesn't start. + * debian/gdm.upstart: + - Remove "starting-dm" event; the above patch means we handle + stopping the splash screen gracefully by ourselves so don't need + it. + - Only look at /etc/X11/default-display-manager and /proc/cmdline + when started automatically; always allow "start gdm" to work. + - Use the PRIMARY_DEVICE_FOR_DISPLAY tag on the framebuffer or + drm card devices to start the X server, still falling back on + end of udev probing (we may have neither). Drop the tty + part, we need both more and less than this. LP: #491162. + + -- Scott James Remnant Fri, 11 Dec 2009 06:00:05 +0000 + +gdm (2.29.1-0ubuntu3) lucid; urgency=low + + * debian/gdm.upstart: Do not fail with exit status !=0 on startup + when disabled. LP: #491483 + + -- Philip Muskovac Mon, 07 Dec 2009 19:33:05 +0100 + +gdm (2.29.1-0ubuntu2) lucid; urgency=low + + * debian/patches/26_no_debug.patch: + - Turn off debugging for unstable versions by default. Logging to + syslog will slow down loading + + -- Chris Coulson Fri, 04 Dec 2009 17:38:24 +0000 + +gdm (2.29.1-0ubuntu1) lucid; urgency=low + + * New upstream release: + [ 2.29.1 ] + - A new desktop extension is now supported in GDM session desktop files + (normally found in /usr/share/xsessions). Setting the key to true as follows: + X-GDM_BypassXsession=true + will cause the Xsession script to not be used to launch the session. This + can be useful if you want to create a "failsafe" xterm session. The Xsession + script sources the user's $HOME/.profile, for example, so setting this key + to true will ensure that any errors in the user's $HOME/.profile will not + cause the session to fail to start. + - Fix makedist problem. + [ 2.29.0 ] + - Now GDM supports Include, Exclude, and IncludeAll configuration options to + allow the ability to configure which users are displayed in the FaceBrowser. + - Now GDM supports better debugging. Users can set the debug/Enable + configuration option to turn on GDM debugging. + - The directory where GDM screenshots are placed has been moved to its own + directory: /var/run/gdm/greeter/GDM-Screenshot.png. The screenshot directory + can now be specified at build time via the --with-screenshot-dir configure + argument. + - Many simple-greeter Face Browser usability improvements. + - The simple-greeter Face Browser tree view search entry is now obscured to + help prevent accidental display of passwords. + - Shutdown and reboot functions are moved to a menu in the simple-greeter panel + instead of being presented as buttons. The shutdown menu is better + positioned on multi-monitor displays. + - The simple-greeter panel notification area has been improved and now honors + the GConf setting for /apps/notification_area_applet/prefs/padding. + - The entry field in the simple-greeter now has accessibility labels so it will + work better with accessibility programs. + - The clock in the simple-greeter panel no longer shows the date, making the + screen look a little cleaner. The date is moved to the clock tooltip so it + is still available. + - The simple-greeter now uses gethostname instead of g_get_host_name since + is more reliable when the hostname changes at runtime. + - The user switch applet now honors disable_lock_screen. The option to lock + screen is now not shown if disable_lock_screen is set. + - The /var/run/gdm directory is better locked down. + - GDM no longer crashes on bad UTF-8 in the /etc/passwd file. + - When the worker dies, the auth-failed signal is no longer sent. This + prevents a crash that happens when switching run-levels when the login screen + is displayed. + - Ensure that the length of sockaddr structure is set to the correct length for + IPv4 or IPv6. This makes GDM work better on some operating systems that are + picky about the length being exact. + - String and documentation improvements. + * debian/patches/17_add_failsafe.patch: + * debian/patches/22_shutdown_menu.patch: + - Applied upstream + + -- Robert Ancell Fri, 04 Dec 2009 16:19:35 +1100 + +gdm (2.28.1-0ubuntu5) lucid; urgency=low + + * debian/patches/10_xsplash.patch: + - don't use xsplash by default for now, it uses lot of cpu and costs one + second to the current login, that will be reactivated later in lucid + + -- Sebastien Bacher Thu, 03 Dec 2009 11:29:59 +0100 + +gdm (2.28.1-0ubuntu4) lucid; urgency=low + + * debian/gdm.upstart: Do not wait for hal, since we don't need it any more + (and doesn't even need to be installed any more with a dehalified X.org). + + -- Martin Pitt Fri, 27 Nov 2009 22:16:26 +0100 + +gdm (2.28.1-0ubuntu3) lucid; urgency=low + + * Replace 01_default_keyboard_layout_hal.patch with + 01_default_keyboard_layout.patch which uses libxklavier instead of hal to + read the default keyboard layout from X.org. Drop hal build and binary + dependencies. (LP: #418981) + * 16_gdmserver_user_manager.patch, 99_autoreconf.patch: Updated. + + -- Martin Pitt Fri, 27 Nov 2009 09:25:31 +0100 + +gdm (2.28.1-0ubuntu2) karmic-proposed; urgency=low + + * Don't respawn gdm on failure; this lets us capture X failures instead and + trigger the bulletproof X handler here. LP: #441638. + * re-export any XORGCONFIG value passed to the upstart job, needed to + complete integration with bulletproof X. LP: #474806. + + -- Steve Langasek Wed, 04 Nov 2009 18:15:37 -0800 + +gdm (2.28.1-0ubuntu1) karmic; urgency=low + + * New upstream release (LP: #455944) + - GDM will now avoid calling XAddHosts for remote connections. + - Now GDM uses DeviceKit-power instead of gnome-power-manager for Suspend + support. + - Now the at-spi-registryd-wrapper.desktop GDM autostart file will run + at-spi-registryd directly instead of calling at-spi-registryd-wrapper. + - Fix to the visibility check for the "Other" button which corrects some + situations where the button would not appear when it was supposed to. + - Now the GDM daemon will make the /var/log/gdm directory if it does not + exist. + - Fixes to avoid autologin failure when a NULL username is passed in. + - Restore CTYPE when canonicalizing codesets. + - Several fixes to avoid warnings. + * debian/patches/18_create_log_dir_when_required.patch: + * debian/patches/21_dkpower.patch: + - Applied upstream + * debian/patches/22_shutdown_menu.patch: + - Updated + + -- Robert Ancell Tue, 20 Oct 2009 11:52:57 +1100 + +gdm (2.28.0-0ubuntu19) karmic; urgency=low + + * debian/%gconf-tree.xml, debian/gdm.postinst, debian/rules: + - don't use gconftool to register the default gconf keys but rather + install a xml files with the values, that will avoid different issues + due to the su call or the gconf server not being running + (lp: #441028, #441167) + - set the gnome-power-manager icon key to never since that's not useful + on the login screen and the design team recommended to not have it there + * debian/gdm.postinst: + - workaround chown breaking due to the .gvfs fuse directory (lp: #438561) + * debian/patches/25_update_gconf_directories.patch: + - define a new directory which is used for the default gconf values + + -- Sebastien Bacher Thu, 15 Oct 2009 12:34:11 +0200 + +gdm (2.28.0-0ubuntu18) karmic; urgency=low + + * debian/patches/14_guest_session.patch: + - Switch to existing guest session if already open (LP: #450965) + * debian/patches/24_system_uid.patch: + * debian/patches/16_gdmserver_user_manager.patch: + - Fix more cases of users with UID < 1000 + + -- Robert Ancell Thu, 15 Oct 2009 01:07:18 +0200 + +gdm (2.28.0-0ubuntu17) karmic; urgency=low + + [ Robert Ancell ] + * debian/patches/22_shutdown_menu.patch: + - Mark power menu options as translatable (LP: #450707) + + [ Scott James Remnant ] + * debian/gdm.upstart: + - Wait for tty7 to be ready, and either a framebuffer or the end + of coldplugging. + + -- Scott James Remnant Wed, 14 Oct 2009 05:08:47 +0100 + +gdm (2.28.0-0ubuntu15) karmic; urgency=low + + * debian/patches/23_login_window_hint.patch: + - Don't put a type hint on the login window as this causes it not to get + focus (LP: #447049) + * debian/patches/16_gdmserver_user_manager.patch: + - Don't show users with UID < 1000 (LP: #427462) + + -- Robert Ancell Tue, 13 Oct 2009 15:56:41 +1100 + +gdm (2.28.0-0ubuntu14) karmic; urgency=low + + * debian/gdm.postinst: Set icon theme to HumanLoginIcons. Also, call su just + once with all four gconftool commands instead of several times. + + -- Martin Pitt Wed, 07 Oct 2009 15:39:17 +0200 + +gdm (2.28.0-0ubuntu13) karmic; urgency=low + + * debian/gdm{,-autologin}.pam: correctly handle SELinux transitions, + thanks to Caleb Case (LP: #430205). + + -- Kees Cook Tue, 06 Oct 2009 16:49:25 -0700 + +gdm (2.28.0-0ubuntu12) karmic; urgency=low + + * debian/gdm.upstart: Also stop when entering single-user mode. + LP: #437281. + + -- Scott James Remnant Sat, 03 Oct 2009 08:09:44 +0100 + +gdm (2.28.0-0ubuntu11) karmic; urgency=low + + * 99_autoreconf.patch: Drop removal of *.rej junk, it was fixed in + 04_fix_external_program_directories.patch. + + -- Martin Pitt Fri, 02 Oct 2009 12:22:28 +0200 + +gdm (2.28.0-0ubuntu10) karmic; urgency=low + + * 01_default_keyboard_layout_hal.patch: Read keyboard variant from hal, too. + (LP: #421212) + * debian/gdm.postinst: Set HumanLogin theme for metacity, too. Thanks to + Devid Antonio Filoni! (LP: #439546) + * 04_fix_external_program_directories.patch: Remove *.rej junk. + * 04_fix_external_program_directories.patch: Fix path to polkit-gnome + authentication agent. (Caught as a side issue in LP #401822) + * debian/rules: Drop polkit-gnome agent autostart file. It has never worked + anyway due to wrong path (see previous change), and we do not currently + need it. + + -- Martin Pitt Thu, 01 Oct 2009 23:53:54 +0200 + +gdm (2.28.0-0ubuntu9) karmic; urgency=low + + * debian/gdm.postinst: + - use the correct key to set the gtk theme + + [ Robert Ancell ] + * debian/patches/22_shutdown_menu.patch: + - Fix spacing on shutdown menu (LP: #437691) + * debian/patches/*.patch: + - Update patch headers + * debian/patches/19_no_greeter_for_autologin.patch: + - Fix bug that caused the GDM greeter to be displayed briefly when + automatically logging in (LP: #435801) + + -- Sebastien Bacher Wed, 30 Sep 2009 15:21:09 +0200 + +gdm (2.28.0-0ubuntu8) karmic; urgency=low + + * debian/gdm.upstart: + - Emit a starting-dm event just before starting gdm itself, for the + benefit of usplash. + + -- Colin Watson Tue, 29 Sep 2009 00:18:49 +0100 + +gdm (2.28.0-0ubuntu7) karmic; urgency=low + + * debian/gdm.postinst: + - set a different theme for the gdm login screen (lp: #436817) + + -- Sebastien Bacher Mon, 28 Sep 2009 23:25:40 +0200 + +gdm (2.28.0-0ubuntu6) karmic; urgency=low + + * debian/patches/16_gdmserver_user_manager.patch: + - change by Cody Russell to Fix user-added and user-removed signal emissions + to emit the UID instead of the user pointer. (lp :#436195) + + -- Sebastien Bacher Fri, 25 Sep 2009 00:58:39 +0200 + +gdm (2.28.0-0ubuntu5) karmic; urgency=low + + * debian/patches/17_add_failsafe.patch: + - adds code to support failsafe sessions again (from gnome #594833) + + -- Travis Watkins Thu, 24 Sep 2009 10:30:08 +0200 + +gdm (2.28.0-0ubuntu4) karmic; urgency=low + + * Move shutdown buttons from under user list to lower right corner of screen + (LP: #434338) + + -- Robert Ancell Wed, 23 Sep 2009 15:44:15 +1000 + +gdm (2.28.0-0ubuntu3) karmic; urgency=low + + * debian/patches/21_dkpower.patch: + - Port the greeter to DK-Power so that the suspend/hibernate buttons + appear again, where supported (LP: #420063). + * debian/control: + - Add build-depend on libdevkit-power-gobject-dev (>= 008) + * Refreshed 99_autoreconf.patch + + -- Chris Coulson Tue, 22 Sep 2009 22:04:11 +0100 + +gdm (2.28.0-0ubuntu2) karmic; urgency=low + + * debian/patches/08_use_polkit_for_settings.patch: + - set translatable strings and list the file to translate (lp: #425798) + * debian/patches/09_gdmsetup.patch, + debian/patches/99_autoreconf.patch: + - initialize the translations so the gdmsetup interface is translated + (lp: #434102) + * debian/patches/17_use_timed_login_after_autologin.patch: + - revert upstream change to not use timed login after autologin session + (lp: #396489) + * debian/patches/18_create_log_dir_when_required.patch: + - create the log directory when required (lp: #405227) + * debian/gdm.config, debian/gdm.templates: + - restore debconf files which have been dropped by error in karmic, + thanks Pär Andersson (lp: #395591) + + -- Sebastien Bacher Tue, 22 Sep 2009 15:20:27 +0200 + +gdm (2.28.0-0ubuntu1) karmic; urgency=low + + * New upstream release (LP: #434354) + - Now GDM supports the ability to specify the automatic/timed login user via + a script via the same interface that the old GDM supported. + - Now the user's dmrc and face image files are stored in /var/cache/gdm, so + that the login process does not need to access the user's $HOME directory + before authentication. + - Fix the login GUI options widget so the language/session/layout choices + are not reset after a failed login. + - Fix language dialog so it does not crash if the user click's the "OK" + button when no language is selected. + - Fix to ensure that the login dialog regains focus after the language or + layout dialogs are used. + - The language dialog has improved logic to sort the language names more + correctly. + - Make sure to check error variable is not NULL before referencing it in the + gdm-user-manager code. + - Make sure to not print NULL strings since this causes crashes on some + platforms. + - Improve documentation. + * debian/patches/09_gdmsetup.patch: updated: + - Filter ConsoleKit system users (LP: #432271) + - Make window size fixed (LP: #429206) + * debian/patches/01_default_keyboard_layout_hal.patch, + debian/patches/99_autoreconf.patch: updated. + + -- Robert Ancell Mon, 21 Sep 2009 13:05:51 +1000 + +gdm (2.27.90-0ubuntu7) karmic; urgency=low + + [ Ken VanDine ] + * debian/patches/10_xsplash.patch: + - Use --daemon instead of using the "&" (LP: #430834) + * debian/control: + - Conflict with xsplash (<< 0.8), we don't depend on xsplash but if + /usr/bin/xsplash exists we need it to support the --daemon option + + [ Martin Pitt ] + * debian/gdm.upstart: Drop gdm-cdd.conf handling, gdm does not support it + any more. + * debian/gdm.upstart: Do not start in single-user modes or when "text" is + given as a kernel command line option. This restores previous behaviour. + (LP: #431176) + * Add debian/onboard.desktop: gdm "onboard" configuration for the + accessibility dialog, thanks to Francesco Fumanti! + * debian/rules: Install onboard.desktop, remove gok.desktop from upstream + install. We do not ship gok any more. (LP: #423831, #130368) + + -- Martin Pitt Thu, 17 Sep 2009 19:22:46 +0200 + +gdm (2.27.90-0ubuntu6) karmic; urgency=low + + * The upstart job won't start unless hal is also started, so add an + appropriate versioned dependency on the upstarted hal. + + -- Steve Langasek Wed, 16 Sep 2009 01:58:11 -0700 + +gdm (2.27.90-0ubuntu5) karmic; urgency=low + + FFE LP: #427356. + + * Replace init script with Upstart job. + * debian/control: + - Bump build-dependency on debhelper for Upstart-aware dh_installinit + * debian/patches/20_upstart.patch: + - Emit Upstart events when starting the login session and desktop + session, just after starting xsplash. These can be used as + synchronisation points. + + -- Scott James Remnant Tue, 15 Sep 2009 03:31:21 +0100 + +gdm (2.27.90-0ubuntu4) karmic; urgency=low + + * debian/patches/16_gdmserver_user_manager.patch: + - Add user manager d-bus interface to gdmserver (LP: #423450) + + -- Robert Ancell Sat, 12 Sep 2009 12:49:48 +0200 + +gdm (2.27.90-0ubuntu3) karmic; urgency=low + + * Add 15_default_session.patch: Prefer "default.session", so that other + desktop environments like XFCE can use gdm, too, without being forced to + start GNOME. (LP: #403291) + * debian/gdm.postrm: Fix purge breakage if one of the to-be-cleaned-up + directories does not exist. + + -- Martin Pitt Thu, 10 Sep 2009 13:02:27 +0200 + +gdm (2.27.90-0ubuntu2) karmic; urgency=low + + [ Robert Ancell ] + * debian/patches/13_cache_ck_history.patch: + - Cache result of ck-history to make startup fast (LP: #400863) + + [ Martin Pitt ] + * Add 14_guest_session.patch: Rewrite guest session support for new gdm + architecture. This now adds a D-BUS operation StartGuestSession(), since + gdmflexiserver is being deprecated. (LP: #404870) + + -- Martin Pitt Mon, 07 Sep 2009 18:18:15 +0200 + +gdm (2.27.90-0ubuntu1) karmic; urgency=low + + [ Robert Ancell ] + * New upstream release: (LP: #418426) + - Autostart polkit-gnome authentication agent. + - Add screen capture sound effect to screenshot tool. + - If HOST_NAME_MAX is not available, try _POSIX_HOST_NAME_MAX, then + default to 256. + - Add users "nobody4" and "noaccess" to the list of users to filter from + the Face Browser. + - Add Solaris logindevperm support. + - Fix mispelling of XDMCP. + - Improve documentation. + * debian/control: + - Depend on libcanberra-gtk + * debian/patches/01_default_keyboard_layout_hal.patch: + * debian/patches/02_x_server_location.patch: + * debian/patches/03_hide_system_users.patch: + * debian/patches/04_fix_external_program_directories.patch: + * debian/patches/08_use_polkit_for_settings.patch: + * debian/patches/99_autoreconf.patch: + - Refreshed + * debian/patches/09_gdmsetup.patch: + - Set gdmsetup window title and icon + - Fix crash when have no default users configured + + [ Ted Gould ] + * Add 12_fusa_name_change.patch: Change the Bonobo activation server name + of the FUSA applet. + * debian/rules: Rename the Bonobo activate server description before + installing it. (LP: #410498) + + -- Robert Ancell Tue, 25 Aug 2009 15:32:13 +0200 + +gdm (2.27.4-0ubuntu11) karmic; urgency=low + + * debian/patches/09_gdmsetup.patch: + - clean some unused variables there + - don't crash if there is no autologin key in the configuration yet + (lp: #410475) + - don't specify encoding in desktop entry (lp: #410591) + * debian/patches/11_crash_for_apport.patch: + - don't catch crashes so apport can do its job + + -- Sebastien Bacher Wed, 12 Aug 2009 16:17:23 +0200 + +gdm (2.27.4-0ubuntu10) karmic; urgency=low + + * debian/patches/10_xsplash.patch: + - updated version by Cody Russell + + -- Sebastien Bacher Tue, 11 Aug 2009 19:10:45 +0200 + +gdm (2.27.4-0ubuntu9) karmic; urgency=low + + * debian/control: + - build-depends on libpolkit-gobject-1-dev + + -- Sebastien Bacher Fri, 07 Aug 2009 17:00:43 +0100 + +gdm (2.27.4-0ubuntu8) karmic; urgency=low + + * debian/patches/10_xsplash.patch: + - Fixed a syntax error + + -- Ken VanDine Fri, 07 Aug 2009 16:29:02 +0100 + +gdm (2.27.4-0ubuntu7) karmic; urgency=low + + * debian/patches/08_use_polkit_for_settings.patch: + - Use PolicyKit for GDM settings + * debian/patches/09_gdmsetup.patch: + - Provide a setup tool for basic configuration (LP: #395299) + * debian/patches/10_xsplash.patch: + - Load xsplash on login + * debian/patches/99_autoreconf.patch: + - Updated + + -- Robert Ancell Fri, 07 Aug 2009 09:23:21 +0100 + +gdm (2.27.4-0ubuntu6) karmic; urgency=low + + * debian/patches/07_correct_distribution_version.patch: + - correctly display ubuntu as distribution (lp: #396805) + + -- Sebastien Bacher Thu, 23 Jul 2009 23:19:33 +0200 + +gdm (2.27.4-0ubuntu5) karmic; urgency=low + + * debian/rules: + - move custom.conf to /usr/share/doc/gdm/examples to avoid + a conffile prompt when upgrading from a existing gdm + * debian/gdm.preinst: + - fix typo + + -- Michael Vogt Wed, 22 Jul 2009 10:51:59 +0200 + +gdm (2.27.4-0ubuntu4) karmic; urgency=low + + * debian/control: + - Replace dependency on gnome-session with gnome-session-bin + - Add recommends on metacity | x-window-manager + - Add recommends on gnome-settings-daemon | xfconf + - Add suggestion on gnome-power-manager, gnome-orca, gok, and gnome-mag + - (LP: #400901) + + -- Cody A.W. somerville Tue, 21 Jul 2009 21:28:30 +0200 + +gdm (2.27.4-0ubuntu3) karmic; urgency=low + + * 06_run_xsession.d.patch: Define $OPTIONFILE, so that the + 75dbus_dbus-launch Xsession.d script properly runs the session under + dbus-launch. (LP: #402161) + + -- Martin Pitt Tue, 21 Jul 2009 14:31:02 +0200 + +gdm (2.27.4-0ubuntu2) karmic; urgency=low + + * debian/control: Fix typo in Conflicts + + -- Didier Roche Mon, 20 Jul 2009 16:12:11 +0200 + +gdm (2.27.4-0ubuntu1) karmic; urgency=low + + * New upstream release: + - Favor XFree86 Xinerama over Solaris Xinerama on Solaris + - Make greeter a well behaved session client + - XDMCP fixes + - Fix up btmp record handling + - Handle locales with modifiers better + - Use better logic with keyboard layout handling + - Change example PAM file/documentation to demonstrate password-less login + - Handle usernames from non-utf8 locales + - Allow dbus introspection for gdm services + - Show more details authentication error messages in UI + - Allow uppercase and lowercase booleans in config file + - Be more consistent with booleans in schemas + - Use g_timeout_add_seconds to reduce wakeups + - Make greeter window more clear when user list is disabled + - Put greeter login window in same ctrl-alt-tab menu as panel + - Port greeter to PolicyKit 1.0 + - Shave off 1/2 second delay when bringing up greeter + - OS X portability fixes + - Look for locales in /usr/lib/locale instead of /usr/share/locale + - Better handling when two users have the same name + * Drop 01_xrdb_nocpp.patch, applied upstream. + * debian/control: + - use conflicts on the buggy libxklavier version to avoid race upgrade + leading to a gdm greeter crash + + -- Sebastien Bacher Mon, 20 Jul 2009 15:20:37 +0200 + +gdm (2.26.1git20090717-0ubuntu2) karmic; urgency=low + + * Add 06_run_xsession.d.patch: Run /etc/X11/Xsession.d/. (LP: #401201) + * Add debian/watch. + * Add 01_default_keyboard_layout_hal.patch: Get default keyboard layout from + hal. Patch taken from Fedora. (LP: #395103) Add libhal-dev build + dependency. + * Add 99_autoreconf.patch to pick up above change. + + -- Martin Pitt Mon, 20 Jul 2009 13:20:46 +0200 + +gdm (2.26.1git20090717-0ubuntu1) karmic; urgency=low + + * Update to latest upstream git head: + - Make greeter login window be a dock. Fixes metacity complaining about + session management. (LP: #395324) + * Drop patches which are fixed upstream: + - 00git-greeter-session-management.patch + - 00git-invalid-dmrc-layout.patch + - 00git-use-after-free.patch + - 00git-xklavier4.patch + - 02_dont_force_us_keyboard.patch + - 04_polkit1.patch + * 80_workaround_incorrect_directories.patch: Update to new upstream version. + * Drop 01_xconfigoptions.patch; these configure variables are not used any + more in the upstream code, and upstream supplies the X.org -br option by + default now. Also drop the corresponding configure changes from + 17_update_default_xserver.patch. + * Apply 15_usplash.patch to debian/gdm.init and drop the patch. + * 17_update_default_xserver.patch: Update to new upstream version, add + corresponding configure change, add patch tag header, forward upstream, + and rename to 02_x_server_location.patch. + * Drop 99_autoreconf.patch. The only remaining build system change is the + previous item. + * Drop 20_xdm-stuff.patch, it's just cruft. + * Drop debian/Xsession, and change debian/rules to install the upstream one. + * 01_xrdb_nocpp.patch: Add patch tag header, forward upstream. + * Rename 80_workaround_incorrect_directories.patch to + 04_fix_external_program_directories.patch and add patch tag header. + * Rename 81_initial_server_on_vt7.patch to 05_initial_server_on_vt7.patch. + * debian/rules: Remove /var/gdm (empty and nonstandard) and /var/run (will + be created at runtime), thanks lintian. + * debian/copyright: Point to versioned GPL, thanks lintian. + * debian/gdm.postrm: Use "set -e" to conform to policy. + * Add debian/xterm.desktop: Reintroduce "failsafe xterm" session. + + -- Martin Pitt Fri, 17 Jul 2009 11:41:35 +0200 + +gdm (2.26.1-0ubuntu7) karmic; urgency=low + + * Rename 04_xklavier4.patch to 00git-xklavier4.patch. + * Add 04_polkit1.patch: Port to PolicyKit (which essentially means to rip + out all PolicyKit code, since the backend now talks to the authentication + agent itself). + * debian/control: Drop polkit build dependency. + * Add debian/patches/99_autoreconf.patch: Regenerate autotools files to pick + up 04_polkit1.patch changes. + + -- Martin Pitt Mon, 13 Jul 2009 14:50:17 +0200 + +gdm (2.26.1-0ubuntu6) karmic; urgency=low + + * Add 00git-greeter-session-management.patch: Make the greeter a + well-behaved session client. Patch taken from upstream git head. + * Add 00git-use-after-free.patch: Fix crash in xdmcp chooser. Taken from + upstream git head. + * debian/control: Add libxklavier-dev build dependency, to get the + keyboard selector. + * Add 04_xklavier4.patch: Fix build with libxklavier 4.0. Taken from + upstream git head. + * Add 00git-invalid-dmrc-layout.patch: Correctly handle invalid xkb layout + from ~/.dmrc. Taken from upstream git head. + + -- Martin Pitt Mon, 13 Jul 2009 11:17:44 +0200 + +gdm (2.26.1-0ubuntu5) karmic; urgency=low + + * debian/gdm.preinst: Remove obsolete conffiles. + * debian/gdm.preinst: Migrate autologin settings from gdm.conf (which isn't + read any more) to custom.conf. (LP: #396459) + * Add 81_initial_server_on_vt7.patch: Force initial X server to go to tty7 + instead of tty1. This is an Ugly Hack until we have a cleaner solution for + getty not to tramp over a running X server on vt1. This bandaids the + immediate problem of the first X server being killed after a few minutes + due to getty on tty1 timing out. (LP: #396226) + + -- Martin Pitt Thu, 09 Jul 2009 18:08:07 +0200 + +gdm (2.26.1-0ubuntu4) karmic; urgency=low + + * debian/gdm.preinst: Do not check for an existing custom.conf, since we + already ship it. Always let the gdm.conf-custom win, to actually migrate + settings. + * debian/control: Drop alternative dependencies for gnome-session, since gdm + itself now needs gnome-session. (LP: #396321). + + -- Martin Pitt Tue, 07 Jul 2009 08:53:38 +0200 + +gdm (2.26.1-0ubuntu3) karmic; urgency=low + + * Add 03_hide_system_users.patch: Do not show system users in the "frequent + users" list. (LP: #395281) + * debian/rules: Call dh_installinit with --no-scripts, to avoid restarting + gdm (and killing your X session) during upgrade. The prerm/postinst + scripts already have code to reload gdm if appropriate. Unfortunately this + doesn't help to fix the upgrade from 0ubuntu2, its prerm already kills it. + (LP: #395302) This also fixes the "locks session and spawns a second X + server" issue on upgrades from Jaunty. (LP: #395313) + * Drop 16_correct_customconf_naming.patch: Upstream uses + and installs /etc/gdm/custom.conf, so gdm also needs to read this. Add + debian/gdm.preinst to migrate the old name to the new name on upgrades. + (LP: #395861) + * 02_dont_force_us_keyboard.patch: Don't return NULL in + get_default_layout(), but return an empty string and explicitly check this + when setting $GDM_KEYBOARD_LAYOUT. With NULL, gdm trips over an assertion + check. (LP: #395595) + + -- Martin Pitt Mon, 06 Jul 2009 16:04:25 +0200 + +gdm (2.26.1-0ubuntu2) karmic; urgency=low + + * debian/control: Add Vcs-Bzr, package imported into bzr. + * Add 02_dont_force_us_keyboard.patch: Don't force GDM_KEYBOARD_LAYOUT=us if + gdm does not have an explicit setting (which it currently doesn't, since + there is not even an interface for changing the keyboard layout). Instead, + let the GNOME session default to the very same system default as gdm + itself. (LP: #395103) + + -- Martin Pitt Fri, 03 Jul 2009 19:19:56 +0200 + +gdm (2.26.1-0ubuntu1) karmic; urgency=low + + * Upload the new gdm codebase to karmic, there is several known issues but + the new version need testing: + - there is no graphical configure tool yet + - gdm will not work correctly after upgrade until restart (restarting on + upgrade is not possible since it would close running xsession) + - the fast user switch applet ubuntu changes and the guest session + have not been updated yet + + -- Sebastien Bacher Thu, 02 Jul 2009 16:24:43 +0200 + +gdm (2.26.1-0ubuntu0.3) karmic; urgency=low + + * debian/gdm.init: tweak previous change to not break default server + + -- Sebastien Bacher Wed, 01 Jul 2009 09:55:39 +0200 + +gdm (2.26.1-0ubuntu0.2) karmic; urgency=low + + * debian/patches/17_update_default_xserver.patch: + - update xserver location + * debian/gdm.init: use the correct binary naming so restart is working + + -- Sebastien Bacher Tue, 30 Jun 2009 23:23:17 +0200 + +gdm (2.26.1-0ubuntu0.1) karmic; urgency=low + + * New upstream version + + -- Sebastien Bacher Thu, 04 Jun 2009 16:01:19 +0200 + +gdm-new (2.25.2-0ubuntu0.2) jaunty; urgency=low + + * debian/patches/16_correct_customconf_naming.patch: + - use correct gdm.conf-custom location so user config settings are read + + -- Sebastien Bacher Tue, 03 Mar 2009 17:40:04 +0100 + +gdm-new (2.25.2-0ubuntu0.1) intrepid; urgency=low + + * New upstream version, the code is a rewrite so the packaging is new too + + -- Sebastien Bacher Tue, 15 Jul 2008 14:16:47 +0100 + --- gdm-2.29.4.orig/debian/gdm.preinst +++ gdm-2.29.4/debian/gdm.preinst @@ -0,0 +1,49 @@ +#!/bin/sh -e + +rm_conffile() { + PKGNAME="gdm" + CONFFILE="$1" + + if [ -e "$CONFFILE" ]; then + md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`" + old_md5sum="`dpkg-query -W -f='${Conffiles}' $PKGNAME | sed -n -e \"\\\\' $CONFFILE'{s/ obsolete$//;s/.* //p}\"`" + if [ "$md5sum" != "$old_md5sum" ]; then + echo "Obsolete conffile $CONFFILE has been modified by you." + echo "Saving as $CONFFILE.dpkg-bak ..." + mv -f "$CONFFILE" "$CONFFILE".dpkg-bak + else + echo "Removing obsolete conffile $CONFFILE ..." + rm -f "$CONFFILE" + fi + fi +} + +if [ "$1" = "upgrade" ] || [ "$1" = "install" ] && \ + # earlier releases used /etc/gdm/gdm.conf-custom, but upstream uses + # custom.conf + dpkg --compare-versions "$2" le-nl "2.26.1-0ubuntu5"; then + if [ -f /etc/gdm/gdm.conf-custom ]; then + echo "Renaming /etc/gdm/gdm.conf-custom to /etc/gdm/custom.conf" >&2 + mv /etc/gdm/gdm.conf-custom /etc/gdm/custom.conf + fi + + # migrate autologin settings + if ! egrep -q '^(Automatic|Timed)Login(Enable|Delay|)=' /etc/gdm/custom.conf; then + settings="`egrep '^((Automatic|Timed)LoginEnable=[^f])|^((Automatic|Timed)Login=.)|^TimedLoginDelay=[^3]' /etc/gdm/gdm.conf`" || true + if [ -n "$settings" ]; then + echo '[daemon]' >> /etc/gdm/custom.conf + echo "$settings" >> /etc/gdm/custom.conf + fi + fi + + # obsolete conffiles + rm_conffile /etc/gdm/gdm.conf + rm_conffile /etc/gdm/locale.conf + rm_conffile /etc/gdm/gdmprefetchlist + rm_conffile /etc/gdm/XKeepsCrashing + rm_conffile /etc/gdm/modules/AccessKeyMouseEvents + rm_conffile /etc/gdm/modules/factory-AccessKeyMouseEvents + rm_conffile /etc/gdm/modules/AccessDwellMouseEvents + rm_conffile /etc/gdm/modules/factory-AccessDwellMouseEvents +fi + --- gdm-2.29.4.orig/debian/gdm.config +++ gdm-2.29.4/debian/gdm.config @@ -0,0 +1,41 @@ +#!/bin/sh +# Debian gdm package configuration script +# Copyright 2000-2001 Branden Robinson. +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . + +set -e + +# source debconf library +. /usr/share/debconf/confmodule + +THIS_PACKAGE=gdm +DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager + +# set default display manager + +db_get shared/default-x-display-manager +OLD_DEFAULT="$RET" + +db_metaget shared/default-x-display-manager owners +OWNERS="$RET" +db_metaget shared/default-x-display-manager choices +CHOICES="$RET" + +if [ "$OWNERS" != "$CHOICES" ]; then + db_subst shared/default-x-display-manager choices $OWNERS + db_fset shared/default-x-display-manager seen false +fi + +db_input high shared/default-x-display-manager || true +db_go + +# using this display manager? +db_get shared/default-x-display-manager +CURRENT_DEFAULT="$RET" +# remove the default display manager file if we're going to change it +if [ "$OLD_DEFAULT" != "$CURRENT_DEFAULT" ]; then + rm -f $DEFAULT_DISPLAY_MANAGER_FILE +fi + +exit 0 --- gdm-2.29.4.orig/debian/xterm.desktop +++ gdm-2.29.4/debian/xterm.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=xterm +Comment=Failsafe session with only xterm +Exec=xterm +TryExec=xterm +Icon= +Type=Application +X-Ubuntu-Gettext-Domain=gdm --- gdm-2.29.4.orig/debian/gdm.upstart +++ gdm-2.29.4/debian/gdm.upstart @@ -0,0 +1,46 @@ +# gdm - GNOME Display Manager +# +# The display manager service manages the X servers running on the +# system, providing login and auto-login services + +description "GNOME Display Manager" +author "William Jon McCann " + +start on (filesystem + and started dbus + and (graphics-device-added fb0 PRIMARY_DEVICE_FOR_DISPLAY=1 + or drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1 + or stopped udevtrigger)) +stop on runlevel [016] + +emits starting-dm + +env XORGCONFIG=/etc/X11/xorg.conf + +script + if [ -n "$UPSTART_EVENTS" ] + then + [ ! -f /etc/X11/default-display-manager -o "$(cat /etc/X11/default-display-manager 2>/dev/null)" = "/usr/sbin/gdm" ] || { stop; exit 0; } + + # Check kernel command-line for inhibitors + for ARG in $(cat /proc/cmdline) + do + case "${ARG}" in + text|-s|s|S|single) + exit 0 + ;; + esac + done + fi + + if [ -r /etc/default/locale ]; then + . /etc/default/locale + export LANG LANGUAGE + elif [ -r /etc/environment ]; then + . /etc/environment + export LANG LANGUAGE + fi + export XORGCONFIG + + exec gdm-binary $CONFIG_FILE +end script --- gdm-2.29.4.orig/debian/gdm.init +++ gdm-2.29.4/debian/gdm.init @@ -0,0 +1,119 @@ +#! /bin/sh +# +### BEGIN INIT INFO +# Provides: gdm +# Should-Start: console-screen acpid dbus hal network-manager +# Required-Start: $local_fs $remote_fs +# Required-Stop: $local_fs $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: GNOME Display Manager +# Description: Debian init script for the GNOME Display Manager +### END INIT INFO +# +# Author: Ryan Murray +# +set -e + +# To start gdm even if it is not the default display manager, change +# HEED_DEFAULT_DISPLAY_MANAGER to "false." +HEED_DEFAULT_DISPLAY_MANAGER=true +DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/gdm-binary +PIDFILE=/var/run/gdm.pid +UPGRADEFILE=/var/run/gdm.upgrade + +if [ -e $UPGRADEFILE -a "$1" != "restart" -a "$1" != "force-reload" ]; then + SSD_ARG="--startas $DAEMON" + rm -f $UPGRADEFILE +else + SSD_ARG="--exec $DAEMON" +fi + +# Allow cdd to override the config +if [ -f /etc/gdm/gdm-cdd.conf ]; then + CONFIG_FILE="--config=/etc/gdm/gdm-cdd.conf" +fi + +test -x $DAEMON || exit 0 + +if [ -r /etc/default/locale ]; then + . /etc/default/locale + export LANG LANGUAGE +elif [ -r /etc/environment ]; then + . /etc/environment + export LANG LANGUAGE +fi + +. /lib/lsb/init-functions + +case "$1" in + start) + if grep -wqs text /proc/cmdline; then + log_warning_msg "Not starting GNOME Display Manager (gdm); found 'text' in kernel commandline." + elif [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" -a "$HEED_DEFAULT_DISPLAY_MANAGER" = "true" -a "$(cat $DEFAULT_DISPLAY_MANAGER_FILE 2>/dev/null)" != "/usr/sbin/gdm" ]; then + log_warning_msg "Not starting GNOME Display Manager (gdm); it is not the default display manager." + else + if [ -z "$SPLASH_ORIG_CONSOLE" ]; then + log_begin_msg "Starting GNOME Display Manager..." + fi + # if usplash is running, make sure to stop it now, yes "start" kills it. + if [ "$SPLASH_ORIG_CONSOLE" ]; then + # usplash was already shut down earlier, so don't + # log success as it will look weird on the console. + log_end_msg=: + elif pidof usplash > /dev/null; then + SPLASH_ORIG_CONSOLE="$(fgconsole)" + DO_NOT_SWITCH_VT=yes /etc/init.d/usplash start + # We've just shut down usplash, so don't log + # success as it will look weird on the console. + log_end_msg=: + else + log_end_msg=log_end_msg + fi + start-stop-daemon --start --quiet --background --oknodo --pidfile $PIDFILE --name gdm-binary $SSD_ARG -- $CONFIG_FILE >/dev/null 2>&1 || log_end_msg 1 + $log_end_msg 0 + + if [ "$SPLASH_ORIG_CONSOLE" ] && \ + [ "$SPLASH_ORIG_CONSOLE" != serial ]; then + # Wait a short while for the active console to + # change, to try to avoid visible console noise from + # later init scripts. + i=0 + while [ "$(fgconsole)" = "$SPLASH_ORIG_CONSOLE" ]; do + i="$(($i + 1))" + if [ "$i" -gt 5 ]; then + break + fi + sleep 1 + done + fi + fi + ;; + stop) + log_begin_msg "Stopping GNOME Display Manager..." + start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --name gdm-binary $SSD_ARG --retry 30 >/dev/null 2>&1 + log_end_msg 0 + ;; + reload) + log_begin_msg "Reloading GNOME Display Manager configuration..." + log_warning_msg "Changes will take effect when all current X sessions have ended." + start-stop-daemon --stop --signal USR1 --quiet --pidfile \ + $PIDFILE --name gdm-binary $SSD_ARG >/dev/null 2>&1 + log_end_msg 0 + ;; + restart|force-reload) + $0 stop || true + $0 start + ;; + status) + status_of_proc -p "$PIDFILE" "$DAEMON" gdm-binary && exit 0 || exit $? + ;; + *) + log_success_msg "Usage: /etc/init.d/gdm {start|stop|restart|reload|force-reload|status}" + exit 1 + ;; +esac + +exit 0 --- gdm-2.29.4.orig/debian/gdm.install +++ gdm-2.29.4/debian/gdm.install @@ -0,0 +1 @@ +debian/60xdg_path-on-session etc/X11/Xsession.d/ --- gdm-2.29.4.orig/debian/onboard.desktop +++ gdm-2.29.4/debian/onboard.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Onboard Onscreen Keyboard +Comment=Type without using a hardware keyboard +TryExec=onboard +Exec=onboard --size 500x180 -x 20 -y 10 +Terminal=false +Type=Application +StartupNotify=true +Categories=GNOME;GTK;Accessibility; +AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled +X-Ubuntu-Gettext-Domain=gdm --- gdm-2.29.4.orig/debian/gdm.postinst +++ gdm-2.29.4/debian/gdm.postinst @@ -0,0 +1,54 @@ +#!/bin/sh + +set -e + +. /usr/share/debconf/confmodule + +THIS_PACKAGE=gdm +DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager + +# creating gdm group if he isn't already there +if ! getent group gdm >/dev/null; then + addgroup --system gdm +fi + +# creating gdm user if he isn't already there +if ! getent passwd gdm >/dev/null; then + adduser --system --ingroup gdm --home /var/lib/gdm gdm + usermod -c "Gnome Display Manager" gdm + usermod -d "/var/lib/gdm" gdm + usermod -g "gdm" gdm + usermod -s "/bin/false" gdm +fi + +if [ -d /var/lib/gdm ]; then + chown gdm:gdm /var/lib/gdm + chown -R gdm:gdm /var/lib/gdm/.gconf* + chmod 0750 /var/lib/gdm +fi + +# debconf is not a registry, so we only fiddle with the default file if it +# does not exist +if [ ! -e $DEFAULT_DISPLAY_MANAGER_FILE ]; then + if db_get shared/default-x-display-manager; then + # workaround debconf passthru bug (#379198) + if [ -z "$RET" ]; then + $RET="$THIS_PACKAGE" + fi + if [ "$THIS_PACKAGE" != "$RET" ]; then + echo "Please be sure to run \"dpkg --configure $RET\"." + fi + if db_get "$RET"/daemon_name; then + echo "$RET" > $DEFAULT_DISPLAY_MANAGER_FILE + fi + fi +fi +# debconf hangs if gdm gets started below without this +db_stop || true + +PID=$(status "gdm" 2>/dev/null | awk '/[0-9]$/ { print $NF }') +[ -z "$PID" ] || kill -HUP $PID + +#DEBHELPER# + +exit 0 --- gdm-2.29.4.orig/debian/%gconf-tree.xml +++ gdm-2.29.4/debian/%gconf-tree.xml @@ -0,0 +1,36 @@ + + + + + + + /usr/share/images/xsplash/bg_2560x1600.jpg + + + + + HumanLoginIcons + + + HumanLogin + + + + + + + + + never + + + + + + + HumanLogin + + + + + --- gdm-2.29.4.orig/debian/gdm-autologin.pam +++ gdm-2.29.4/debian/gdm-autologin.pam @@ -0,0 +1,11 @@ +#%PAM-1.0 +auth requisite pam_nologin.so +auth required pam_env.so readenv=1 +auth required pam_env.so readenv=1 envfile=/etc/default/locale +auth required pam_permit.so +@include common-account +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close +session required pam_limits.so +@include common-session +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open +@include common-password --- gdm-2.29.4.orig/debian/gdm.templates +++ gdm-2.29.4/debian/gdm.templates @@ -0,0 +1,123 @@ +Template: gdm/daemon_name +Type: string +Default: /usr/sbin/gdm +Description: for internal use only + +Template: shared/default-x-display-manager +Type: select +Choices: ${choices} +Description: Default display manager: + A display manager is a program that provides graphical login capabilities for + the X Window System. + . + Only one display manager can manage a given X server, but multiple display + manager packages are installed. Please select which display manager should + run by default. + . + Multiple display managers can run simultaneously if they are configured to + manage different servers; to achieve this, configure the display managers + accordingly, edit each of their init scripts in /etc/init.d, and disable the + check for a default display manager. +Description-ca.UTF-8: Escolliu el gestor de pantalla: + Un gestor de pantalla (display manager) és un programa que proporciona la capacitat d’un quadre gràfic d’entrada (login) a l’X Window System. + . + Només un gestor de pantalla pot gestionar un servidor X determinat, però teniu instaŀlats diversos paquets de gestor de pantalla. Per favor, escolliu quin gestor de pantalla s'executarà per defecte. + . + Poden haver diversos gestors de pantalla corrent simultàniament si es configuren per a gestionar diferents servidors; per a aconseguir açò, configureu adequadament els gestors de pantalla, editeu cadascun dels seus scripts d’inici en «/etc/init.d», i deshabiliteu la comprovació de gestor de pantalla per defecte. +Description-cs.UTF-8: Výchozí správce obrazovky: + Správce obrazovky je program, který nabízí grafické přihlášení do systému X Window. + . + Je nainstalováno několik správců obrazovky, ale jen jeden může obsluhovat daný X server. Vyberte, který správce se má spouštět jako výchozí. + . + Více správců obrazovky může běžet zároveň pouze pokud spravují různé servery. Pro dosažení takového nastavení je musíte správně nakonfigurovat, upravit jejich spouštěcí skripty v /etc/init.d a zakázat kontrolu výchozího správce obrazovky. +Description-de.UTF-8: Standardmäßiger Display-Manager: + Ein Display-Manager ist ein Programm, welches grafische Anmeldemöglichkeiten für das X Window System zur Verfügung stellt. + . + Nur ein einziger Display-Manager kann einen gegebenen X-Server verwalten, es sind allerdings mehrere Display-Manager installiert. Bitte wählen Sie den Display-Manager aus, der standardmäßig ausgeführt werden soll. + . + Es können mehrere Display-Manager gleichzeitig laufen, wenn diese so konfiguriert sind, dass sie verschiedene X-Server verwalten. Um dies zu erreichen, konfigurieren Sie die Display-Manager entsprechend, editieren Sie jedes ihrer Init-Skripte in /etc/init.d, und schalten Sie die Überprüfung auf einen Standard-Display-Manager ab. +Description-eu.UTF-8: Lehenetsiriko pantaila kudeatzailea: + Pantaila kudeatzailea X Leiho Sistemarako saio hasiera grafiko aukera ematen duen programa bat da. + . + Jakindako X zerbitzari bat pantaila kudeatzaile batek bakarrik kudea dezake, baina pantaila kudeatzaile anitz daude instalaturik. Hautatu zein pantaila kudeatzaile erabili nahi duzun lehenetsi bezala. + . + Pantaila kudeatzaile anitz batera martxan egon daitezke, zerbitzari ezberdinak kudeatzeko konfiguraturik badaude; hau lortzeko, pantaila kudeatzaileak behar bezala konfiguratu eta /etc/init.d-eko init script-ean lehenetsiriko pantaila kudeatzailea arakatzeko aukera ezgaitu. +Description-fr.UTF-8: Gestionnaire graphique de session par défaut : + Un gestionnaire graphique de session est un programme qui permet de se connecter depuis le système X Window. + . + Un seul gestionnaire graphique de session peut s'occuper d'un serveur X donné, bien que plusieurs gestionnaires puissent être installés simultanément. Veuillez choisir celui qui sera utilisé par défaut. + . + Plusieurs gestionnaires graphiques peuvent être lancés en même temps, s'ils gèrent des serveurs X différents ; pour cela, configurez correctement chacun des gestionnaires graphiques, modifiez leurs scripts de lancement dans /etc/init.d, et désactivez le test de gestionnaire graphique par défaut. +Description-gl.UTF-8: Xestor de pantalla por defecto: + Un xestor de pantalla é un programa que fornece capacidades de inicio de sesión gráfico para o sistema X Window. + . + Só un xestor de pantalla pode xestionar un servidor X determinado, pero hai varios paquetes de xestores de pantalla instalados. Escolla o xestor de pantalla que se debería executar por defecto. + . + Pódense executar varios xestores de pantalla ao mesmo tempo se se configuran para xestionar servidores distintos; para facelo, configure os xestores de pantalla, edite cada un dos scripts de inicio de /etc/init.d e desactive a comprobación do xestor de pantalla por defecto. +Description-it.UTF-8: Display manager predefinito. + Un display manager è un programma che fornisce capacità di login grafico per il sistema X Window. + . + Solo un display manager può gestire un dato server X, ma sono installati più pacchetti di display manager. Scegliere il display manager da usare come predefinito. + . + Possono essere eseguiti più display manager contemporaneamente, a patto che siano impostati per gestire server diversi; per fare questo, configurare i display manager in maniera appropriata, modificare ciascuno dei loro script di avvio in /etc/init.d e disabilitare il controllo per un display manager predefinito. +Description-ja.UTF-8: デフォルトのディスプレイマネージャ: + ディスプレイマネージャとは、X Window System 上でのグラフィカルなログイン機能を提供するものです。 + . + ひとつの X サーバを管理できるのはひとつのディスプレイマネージャだけですが、ディスプレイマネージャパッケージが複数インストールされています。どのディスプレイマネージャをデフォルトで起動させるか選択して下さい。 + . + 異なるサーバを担当するように設定すれば、複数のディスプレイサーバは同時に動作できます。そのようにするには、/etc/init.d にある各ディスプレイマネージャの初期化スクリプトを編集し、デフォルトディスプレイマネージャのチェックを無効にして下さい。 +Description-ml.UTF-8: ഡിഫാള്‍ട്ടായി വേണ്ട പ്രദര്‍ശന മാനേജര്‍: + എക്സ് ജാലക സിസ്റ്റത്തിന് ഗ്രാഫിക്കലായി അകത്ത് കടക്കാനുള്ള കഴിവുകള്‍ നല്കുന്ന ഒരു പ്രോഗ്രാമാണ് ഒരു പ്രദര്‍ശന മാനേജര്‍. + . + ഏതെങ്കിലും ഒരു എക്സ് സേവകനെ ഒരേ ഒരു പ്രദര്‍ശന മാനേജര്‍‌ക്കേ മാനേജ് ചെയ്യാന്‍ പറ്റൂ, പക്ഷേ ഒന്നിലധികം പ്രദര്‍ശന മാനേജര്‍ പാക്കേജുകള്‍ ഇന്‍സ്റ്റാള്‍ ചെയ്തിട്ടുണ്ട്. ദയവായി ഡിഫാള്‍ട്ടായി പ്രവര്‍ത്തിപ്പിക്കേണ്ട പ്രദര്‍ശന മാനേജര്‍ ഏതാണെന്ന് തിരഞ്ഞെടുക്കുക. + . + വ്യത്യസ്ത സേവകന്‍മാരെ മാനേജ് ചെയ്യാനായി ക്രമീകരിച്ചിട്ടുണ്ടെങ്കില്‍ ഒന്നിലധികം പ്രദര്‍ശന മാനേജര്‍മാര്‍ക്ക് ഒരേ സമയം പ്രവര്‍ത്തിക്കാം; ഇത് കൈവരിക്കണമെങ്കില്‍, പ്രദര്‍ശന മാനേജര്‍മാരെ അനുസൃതമായി ക്രമീകരിക്കുകയും, അവയോരോന്നിന്റേയും /etc/init.d യിലുള്ള ഇനിറ്റ് സ്ക്രിപ്റ്റുകളെ മാറ്റുകയും, ഡിഫാള്‍ട്ട് പ്രദര്‍ശന മാനേജര്‍ക്കായുള്ള പരിശോദന ഡിസേബിള്‍ ചെയ്യുകയും ചെയ്യുക. +Description-nl.UTF-8: Standaard beeldschermbeheerder: + Een beeldschermbeheerder is een programma waarmee u zich grafisch op het systeem kunt aanmelden, waarna u in de grafische omgeving (het X Window System) terecht komt. + . + Elke X-server kan door slechts één beeldschermbeheerder beheerd worden, hoewel er meerdere beeldschermbeheerders geïnstalleerd kunnen zijn. Welke beeldschermbeheerder dient standaard gebruikt te worden? + . + Het is mogelijk om meerdere beeldschermbeheerders tegelijk te draaien zolang deze verschillende servers beheren. Om dat te bereiken dient u de beeldschermbeheerders overeenkomstig in te stellen door in hun init-scripts (in /etc/init.d) de controle of ze de standaard beeldschermbeheerder zijn uit te schakelen. +Description-pt.UTF-8: Seleccione o gestor de ecrã por omissão desejado. + Um gestor de ecrã é um programa que fornece capacidades de autenticação gráfica ao X Window System. + . + Apenas um único gestor de ecrã pode gerir um dado servidor X, mas estão instalados múltiplos pacotes de gestores de ecrã. Por favor seleccione qual o gestor de ecrã que deve ser executado por omissão. + . + Podem ser executados em simultâneo múltiplos gestores de écran se estes estiverem configurados para gerir diferentes servidores; para fazer isto, configure os gestores de ecrã de acordo, edite cada um dos seus scripts "init" em /etc/init.d, e desligue a verificação de um gestor de écran de omissão. +Description-pt_BR.UTF-8: Gerenciador de sessão padrão: + Um gerenciador de sessão é um programa que provê capacidades de login gráfico para o 'X Window System'. + . + Somente um gerenciador de sessão pode gerenciar um dado servidor X, mas diversos pacotes de gerenciadores de sessão estão instalados. Por favor selecione qual gerenciador de sessão deverá ser executado por padrão. + . + Múltiplos gerenciadores de sessão podem ser executados simultaneamente se eles estão configurados para gerenciar servidores diferentes; para conseguir isso, configure os gerenciadores de sessão apropriadamente, edite cada um dos seus scripts de inicialização em /etc/init.d, e desabilite a checagem por um gerenciador de sessão padrão. +Description-ru.UTF-8: Менеджер дисплеев по умолчанию: + Менеджер дисплеев -- это программа, которая обеспечивает возможность графического входа в систему для X Window System. + . + Данный X-сервер может обслуживать только один менеджер дисплеев, но установлено несколько пакетов менеджеров дисплеев. Пожалуйста, выберите менеджер дисплеев, который должен запускаться по умолчанию. + . + Несколько менеджеров дисплеев могут запускаться одновременно, если они настроены на обслуживание разных серверов; чтобы добиться этого, настройте менеджеры дисплеев соответственно, отредактируйте их сценарии инициализации в /etc/init.d и отключите проверку менеджера дисплеев по умолчанию. +Description-sk.UTF-8: Zvoľte predvoleného správcu obrazovky: + Správca obrazovky je program, ktorý ponúka grafické prihlásenie do systému X Window. + . + Máte nainštalovaných viac správcov obrazovky, ale iba jeden môže obsluhovať daný X server. Zvoľte si správcu, ktorý bude predvolený. + . + Súbežne môže byť spustených viac správcov obrazovky, ale iba v prípade viacero rozdielnych serverov. Pre dosiahnutie takéhoto nastavenia ich musíte správne nastaviť, upraviť ich spúšťacie skripty v /etc/init.d a zakázať kontrolu predvoleného správcu obrazovky. +Description-sv.UTF-8: Standarddisplayhanterare: + En displayhanterare är det program som tillhandahåller grafiska inloggningsmöjligheter i X Window System. + . + Endast en displayhanterare kan hantera en angiven X-server, men flera displayhanterarpaket kan vara installerade. Välj vilken displayhanterare som skall köras som standard. + . + Flera displayhanterare kan köras samtidigt om de är konfigurerade att hantera olika servrar. För att uppnå detta ska du konfigurera displayhanterarnas init-skript under /etc/init.d, och inaktivera kontrollen efter en standarddisplayhanterare. +Description-ta.UTF-8: முன்னிருப்பு காட்சி மேலாளர்: + காட்சி மேலாளர் என்பது வரைகலை உள்நுழைவு இயலுமையை எக்ஸ் விண்டோஸ் அமைப்புக்கு தரும் நிரலாகும். + . + ஒரு கொடுக்கப் பட்ட X சேவையகத்தில் ஒரு காட்சி மேலாளர்தான் மேலாள இயலும். ஆனால் பல காட்சி மேலாளர்கள் நிறுவப் பட்டுள்ளன. எது முன்னிருப்பாக இருக்க வேண்டும் என தேர்ந்தெடுங்கள் + . + வெவ்வேறு சேவையகங்களை மேலாள வடிவமைத்தால் பல காட்சி மேலாளர்கள் ஒரே நேரத்தில் இயங்கக் கூடும். இதை செய்ய காட்சி மேலாளர்களை தகுந்தாற் போல வடிவமையுங்கள். அவற்றின் இனிட் சிறு நிரல்களை /etc/init.d இல் திருத்துங்கள். முன்னிருப்பு காட்சி மேலாளர் தேர்வை செயலிழக்கச் செய்யவும். +Description-zh_CN.UTF-8: 默认显示管理器: + 显示管理器是为 X 窗口系统提供图形界面登录模式的程序。 + . + 一个给定的 X 服务器只能由一个显示管理器来管理,但是系统中已经安装了多个显示管理器软件包。请选择一个作为默认的显示管理器。 + . + 如果多个显示管理器被配置为分别管理不同的 X 服务器,那么它们可以同时运行。要做到这一点,您要按照需求分别对各显示管理器进行设置,编辑它们在 /etc/init.d 目录下的 init 脚本,并且关闭对默认显示管理器的检查。 + --- gdm-2.29.4.orig/debian/60xdg_path-on-session +++ gdm-2.29.4/debian/60xdg_path-on-session @@ -0,0 +1,12 @@ +# This file is sourced by Xsession(5), not executed. +# Add additionnal xdg path depending on selected desktop session + +DEFAULT_XDG_CONFIG_DIRS='/etc/xdg' +if [ -n "$GDMSESSION" ]; then + # readd default if was empty + if [ -z "$XDG_CONFIG_DIRS" ]; then + XDG_CONFIG_DIRS=$DEFAULT_XDG_CONFIG_DIRS + fi + export XDG_CONFIG_DIRS=${DEFAULT_XDG_CONFIG_DIRS}/xdg-${GDMSESSION}:$XDG_CONFIG_DIRS +fi + --- gdm-2.29.4.orig/debian/watch +++ gdm-2.29.4/debian/watch @@ -0,0 +1,2 @@ +version=2 +http://ftp.gnome.org/pub/gnome/sources/gdm/([\d\.]+)[0-9]/gdm-([\d\.]+)\.tar\.gz --- gdm-2.29.4.orig/debian/rules +++ gdm-2.29.4/debian/rules @@ -0,0 +1,38 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/simple-patchsys.mk +include /usr/share/cdbs/1/class/gnome.mk +include /usr/share/gnome-pkg-tools/1/rules/gnome-version.mk +-include /usr/share/gnome-pkg-tools/1/rules/gnome-get-source.mk + +#LDFLAGS += -Wl,-z,defs -Wl,-O1 -Wl,--as-needed + +DEB_CONFIGURE_EXTRA_FLAGS += --disable-scrollkeeper --with-at-spi-registryd-directory=/usr/lib/at-spi --enable-ipv6=yes + +DEB_DH_INSTALLINIT_ARGS = --no-start + +ifeq (linux,$(DEB_HOST_ARCH_OS)) + DEB_CONFIGURE_EXTRA_FLAGS += --with-selinux +else + DEB_CONFIGURE_EXTRA_FLAGS += --without-selinux +endif + +binary-post-install/gdm:: + install -m644 debian/gdm-autologin.pam debian/gdm/etc/pam.d/gdm-autologin + install -m644 debian/gdm.pam debian/gdm/etc/pam.d/gdm + install -D -m644 debian/xterm.desktop debian/gdm/usr/share/xsessions/xterm.desktop + rm -r debian/gdm/var/gdm debian/gdm/var/run + # move custom.conf to the examples + mkdir -p debian/gdm/usr/share/doc/gdm/examples + mv debian/gdm/etc/gdm/custom.conf debian/gdm/usr/share/doc/gdm/examples + mv debian/gdm/usr/lib/bonobo/servers/GNOME_FastUserSwitchApplet.server debian/gdm/usr/lib/bonobo/servers/GNOME_FastUserSwitchAppletGdm.server + # install default settings + mkdir debian/gdm/var/lib/gdm/.gconf.defaults + install -m 664 debian/%gconf-tree.xml debian/gdm/var/lib/gdm/.gconf.defaults + # we install onboard (debian/onboard.desktop), and do not have gok + install -m 644 debian/onboard.desktop debian/gdm/usr/share/gdm/autostart/LoginWindow/ + rm debian/gdm/usr/share/gdm/autostart/LoginWindow/gok.desktop + # we do not currently need a PK agent in the gdm session + rm debian/gdm/usr/share/gdm/autostart/LoginWindow/polkit-gnome-authentication-agent-1.desktop + --- gdm-2.29.4.orig/debian/control +++ gdm-2.29.4/debian/control @@ -0,0 +1,67 @@ +Source: gdm +Section: gnome +Priority: optional +Maintainer: Sebastien Bacher +Build-Depends: cdbs, + debhelper (>= 7.3.15ubuntu2), + autotools-dev, + gnome-pkg-tools, + libglib2.0-dev (>= 2.22), + libdbus-glib-1-dev (>= 0.74), + libx11-dev, + libgtk2.0-dev (>= 2.10), + libgconf2-dev, + libglade2-dev, + gnome-doc-utils, + libpanel-applet2-dev, + gconf2, + libattr1-dev, + libpam0g-dev, + libxdmcp-dev, + libwrap0-dev, + libxi-dev, + libxinerama-dev, + libxklavier-dev, + libpolkit-gobject-1-dev, + libcanberra-gtk-dev (>= 0.4), + libselinux1-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64], + iso-codes, + libdevkit-power-gobject-dev (>= 008) +Standards-Version: 3.8.1 +Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/gdm/ubuntu + +Package: gdm +Conflicts: gdm-snapshot, fast-user-switch-applet, libxklavier15 (<< 4.0-0ubuntu2), xsplash (<< 0.8) +Replaces: gdm-snapshot, fast-user-switch-applet +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + adduser, + libpam-modules (>= 0.72-1), + libpam-runtime (>= 0.76-13.1), + gnome-session-bin, + kbd | console-tools, + udev (>= 149-2) +Recommends: xserver-xorg, + metacity | x-window-manager, + gnome-settings-daemon | xfconf +Suggests: locales, + uswsusp, + libpam-gnome-keyring, + gnome-power-manager, + gnome-orca, + gok, + gnome-mag +Provides: x-display-manager +Breaks: usplash +Description: GNOME Display Manager + gdm provides the equivalent of a "login:" prompt for X displays- it + pops up a login window and starts an X session. + . + It provides all the functionality of xdm, including XDMCP support for + managing remote displays. + . + The greeting window is written using the GNOME libraries and hence + looks like a GNOME application- even to the extent of supporting + themes! By default, the greeter is run as an unprivileged user for + security. --- gdm-2.29.4.orig/debian/gdm.postrm +++ gdm-2.29.4/debian/gdm.postrm @@ -0,0 +1,27 @@ +#!/bin/sh +set -e + +if [ "$1" = "purge" ] ; then + rm -f /etc/default/gdm + if [ -d /etc/gdm ]; then + rmdir /etc/gdm/Init /etc/gdm/PreSession /etc/gdm/PostSession /etc/gdm/PostLogin /etc/gdm/Sessions /etc/gdm 2>/dev/null || true + fi + if [ -d /var/lib/gdm ]; then + rm -r /var/lib/gdm + fi + if [ -d /var/log/gdm ]; then + rm -r /var/log/gdm + fi + if getent passwd gdm >/dev/null; then + if [ -x /usr/sbin/deluser ]; then + deluser --system gdm + fi + fi + if getent group gdm >/dev/null; then + if [ -x /usr/sbin/delgroup ]; then + delgroup --system gdm + fi + fi +fi +#DEBHELPER# +exit 0 --- gdm-2.29.4.orig/debian/gdm.8.pod +++ gdm-2.29.4/debian/gdm.8.pod @@ -0,0 +1,47 @@ +=head1 NAME + +gdm - GNOME Display Manager + +=head1 SYNOPSIS + +gdm + +=head1 DESCRIPTION + +B is the equivalent of xdm(1x) or wdm(1x), but uses the GNOME +libraries to provide a GNOME look-and-feel. It provides the GNOME +equivalent of a "login:" prompt. + +B reads F for its configuration. For each +local display, gdm starts an X server and runs gdmlogin(8x) on that +display. The main gdm process also listens for XDMCP requests from +remote displays. These requests can either be direct, causing B +to start a gdmlogin(8x) on the remote display, or indirect, causing +a gdmchooser(8x) to be opened. + +When managing a display, B attempts to execute +FI, or F if that does +not exist. When a user logs in, B first attempts +FI (or F), +and then one of the sessions in F. When the session +has completed, B attempts to run +FI, or +FI. Of all these files, only the +F one is required to exist. + +B maintains information about the displays it is managing in +F. This includes xauth information, so this directory +is not readable to normal users. + +B uses PAM to perform authentication using the config file +F. + +=head1 AUTHOR + +Martin Kasper Petersen + +This manual page written by Steve Haslam for +Debian GNU/Linux. Updated by Raphaël Hertzog . +Updated by Ryan Murray . + +=cut --- gdm-2.29.4.orig/debian/gdm.prerm +++ gdm-2.29.4/debian/gdm.prerm @@ -0,0 +1,64 @@ +#!/bin/bash +# Debian gdm package pre-removal script +# Copyright 2001 Branden Robinson. +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . +# Acknowlegements to Stephen Early, Mark Eichin, and Manoj Srivastava. + +set -e + +THIS_PACKAGE=gdm +DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager + +if [ "$1" = "remove" -o "$1" = "deconfigure" ]; then + if [ -e /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + # disown this question + db_unregister shared/default-x-display-manager || true + # does the question still exist? + if db_get shared/default-x-display-manager; then + db_metaget shared/default-x-display-manager owners + db_subst shared/default-x-display-manager choices "$RET" + db_get shared/default-x-display-manager + # are we removing the currently selected display manager? + if [ "$THIS_PACKAGE" = "$RET" ]; then + if [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" ]; then + db_get "$RET"/daemon_name + if [ "$(cat $DEFAULT_DISPLAY_MANAGER_FILE)" = "$RET" ]; then + rm "$DEFAULT_DISPLAY_MANAGER_FILE" + fi + fi + # ask the user to choose a new default + db_fset shared/default-x-display-manager seen false + db_input critical shared/default-x-display-manager || true + db_go + # if the display manager file doesn't exist, write it with the path + # to the new default display manager + if [ ! -e $DEFAULT_DISPLAY_MANAGER_FILE ]; then + db_get shared/default-x-display-manager + echo "Please be sure to run \"dpkg-reconfigure $RET\"." + db_get "$RET"/daemon_name + echo "$RET" > "$DEFAULT_DISPLAY_MANAGER_FILE" + fi + fi + fi + fi +fi + +if [ "$1" = "remove" ]; then + if [ -x /etc/init.d/gdm ]; then + nostop= + for hostname in "" "localhost" "$(hostname)" "$(hostname -f)"; do + if echo $DISPLAY | grep -q "^$hostname:0.*"; then + nostop=yes + fi + done + if [ -z $nostop ]; then + stop gdm || : + fi + fi +fi + +#DEBHELPER# + +exit 0 --- gdm-2.29.4.orig/debian/gdm.pam +++ gdm-2.29.4/debian/gdm.pam @@ -0,0 +1,13 @@ +#%PAM-1.0 +auth requisite pam_nologin.so +auth required pam_env.so readenv=1 +auth required pam_env.so readenv=1 envfile=/etc/default/locale +@include common-auth +auth optional pam_gnome_keyring.so +@include common-account +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close +session required pam_limits.so +@include common-session +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open +session optional pam_gnome_keyring.so auto_start +@include common-password --- gdm-2.29.4.orig/debian/patches/20_upstart.patch +++ gdm-2.29.4/debian/patches/20_upstart.patch @@ -0,0 +1,23 @@ +# +# Description: Emit Upstart events when starting the login session and desktop session +# +diff -Nur -x '*.orig' -x '*~' gdm/data/Init.in gdm.new/data/Init.in +--- gdm/data/Init.in 2009-09-14 20:42:01.000000000 +0100 ++++ gdm.new/data/Init.in 2009-09-14 20:44:40.000000000 +0100 +@@ -11,6 +11,8 @@ + /usr/bin/xsplash --gdm-session & + fi + ++initctl -q emit login-session-start DISPLAY_MANAGER=gdm ++ + gdmwhich () { + COMMAND="$1" + OUTPUT= +diff -Nur -x '*.orig' -x '*~' gdm/data/PreSession.in gdm.new/data/PreSession.in +--- gdm/data/PreSession.in 2009-09-14 20:42:01.000000000 +0100 ++++ gdm.new/data/PreSession.in 2009-09-14 20:44:53.000000000 +0100 +@@ -13,3 +13,4 @@ + /usr/bin/xsplash & + fi + ++initctl -q emit desktop-session-start DISPLAY_MANAGER=gdm --- gdm-2.29.4.orig/debian/patches/03_hide_system_users.patch +++ gdm-2.29.4/debian/patches/03_hide_system_users.patch @@ -0,0 +1,35 @@ +# +# Description: Do not show system users in the "frequent users" list +# Ubuntu: https://launchpad.net/bugs/395281 +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=587708 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.27.90/gui/simple-greeter/gdm-user-manager.c gdm-2.27.90.new/gui/simple-greeter/gdm-user-manager.c +--- gdm-2.27.90/gui/simple-greeter/gdm-user-manager.c 2009-08-25 05:31:18.000000000 +1000 ++++ gdm-2.27.90.new/gui/simple-greeter/gdm-user-manager.c 2009-08-25 14:35:01.000000000 +1000 +@@ -1160,6 +1160,7 @@ + gboolean res; + char *username; + gulong frequency; ++ struct passwd *pwent; + GdmUser *user; + + frequency = 0; +@@ -1175,6 +1176,18 @@ + return; + } + ++ /* do not show system users; we cannot use gdm_user_manager_get_user() ++ * here since this creates/signals users as a side effect */ ++ pwent = getpwnam (username); ++ if (pwent == NULL) { ++ g_warning ("Unable to lookup user name %s: %s", username, g_strerror (errno)); ++ return; ++ } ++ if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ g_debug ("GdmUserManager: excluding user '%s'", username); ++ return; ++ } ++ + user = gdm_user_manager_get_user (manager, username); + if (user == NULL) { + g_debug ("GdmUserManager: unable to lookup user '%s'", username); --- gdm-2.29.4.orig/debian/patches/02_x_server_location.patch +++ gdm-2.29.4/debian/patches/02_x_server_location.patch @@ -0,0 +1,36 @@ +# +# Description: Change the default X server location to /usr/bin/X. This avoids having to build-depend on xserver-xorg. +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=588848 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.27.90/configure gdm-2.27.90.new/configure +--- gdm-2.27.90/configure 2009-08-25 07:07:12.000000000 +1000 ++++ gdm-2.27.90.new/configure 2009-08-25 14:34:49.000000000 +1000 +@@ -34484,9 +34484,9 @@ + else + # what to do, what to do, this is wrong, but this just sets the + # defaults, perhaps this user is cross compiling or some such +- X_PATH="/usr/bin/X11:/usr/X11R6/bin:/opt/X11R6/bin" +- X_SERVER_PATH="/usr/X11R6/bin" +- X_SERVER="/usr/X11R6/bin/X" ++ X_PATH="/usr/bin" ++ X_SERVER_PATH="/usr/bin" ++ X_SERVER="/usr/bin/X" + X_CONFIG_OPTIONS="-audit 0" + fi + +diff -Nur -x '*.orig' -x '*~' gdm-2.27.90/configure.ac gdm-2.27.90.new/configure.ac +--- gdm-2.27.90/configure.ac 2009-08-25 14:34:48.000000000 +1000 ++++ gdm-2.27.90.new/configure.ac 2009-08-25 14:34:49.000000000 +1000 +@@ -1129,9 +1129,9 @@ + else + # what to do, what to do, this is wrong, but this just sets the + # defaults, perhaps this user is cross compiling or some such +- X_PATH="/usr/bin/X11:/usr/X11R6/bin:/opt/X11R6/bin" +- X_SERVER_PATH="/usr/X11R6/bin" +- X_SERVER="/usr/X11R6/bin/X" ++ X_PATH="/usr/bin" ++ X_SERVER_PATH="/usr/bin" ++ X_SERVER="/usr/bin/X" + X_CONFIG_OPTIONS="-audit 0" + fi + --- gdm-2.29.4.orig/debian/patches/04_fix_external_program_directories.patch +++ gdm-2.29.4/debian/patches/04_fix_external_program_directories.patch @@ -0,0 +1,51 @@ +# +# Description: Fix location of external programs. +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/daemon/gdm-server.c gdm-2.28.0.new/daemon/gdm-server.c +--- gdm-2.28.0/daemon/gdm-server.c 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/daemon/gdm-server.c 2009-10-01 15:54:28.230760824 +0200 +@@ -127,7 +127,7 @@ + g_return_val_if_fail (GDM_IS_SERVER (server), NULL); + + error = NULL; +- command = g_strdup_printf (LIBEXECDIR "/ck-get-x11-display-device --display %s", ++ command = g_strdup_printf ("/usr/lib/ConsoleKit/ck-get-x11-display-device --display %s", + server->priv->display_name); + + g_debug ("GdmServer: Running helper %s", command); +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/greeter-autostart/gnome-settings-daemon.desktop.in.in gdm-2.28.0.new/data/greeter-autostart/gnome-settings-daemon.desktop.in.in +--- gdm-2.28.0/data/greeter-autostart/gnome-settings-daemon.desktop.in.in 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/data/greeter-autostart/gnome-settings-daemon.desktop.in.in 2009-10-01 15:54:28.230760824 +0200 +@@ -1,8 +1,8 @@ + [Desktop Entry] + Type=Application + _Name=GNOME Settings Daemon +-TryExec=@LIBEXECDIR@/gnome-settings-daemon +-Exec=@LIBEXECDIR@/gnome-settings-daemon --gconf-prefix=/apps/gdm/simple-greeter/settings-manager-plugins ++TryExec=/usr/lib/gnome-settings-daemon/gnome-settings-daemon ++Exec=/usr/lib/gnome-settings-daemon/gnome-settings-daemon --gconf-prefix=/apps/gdm/simple-greeter/settings-manager-plugins + OnlyShowIn=GNOME; + X-GNOME-Autostart-Phase=Initialization + X-GNOME-Autostart-Notify=true +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in gdm-2.28.0.new/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in +--- gdm-2.28.0/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in 2009-10-01 15:54:59.094386999 +0200 +@@ -1,5 +1,5 @@ + [Desktop Entry] + Type=Application + _Name=PolicyKit Authentication Agent +-Exec=/usr/libexec/polkit-gnome-authentication-agent-1 ++Exec=/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 + OnlyShowIn=GNOME; +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/simple-chooser/gdm-chooser-session.c gdm-2.28.0.new/gui/simple-chooser/gdm-chooser-session.c +--- gdm-2.28.0/gui/simple-chooser/gdm-chooser-session.c 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/gui/simple-chooser/gdm-chooser-session.c 2009-10-01 15:54:28.230760824 +0200 +@@ -131,7 +131,7 @@ + ret = FALSE; + + error = NULL; +- g_spawn_command_line_async (LIBEXECDIR "/gnome-settings-daemon --gconf-prefix=/apps/gdm/simple-chooser/settings-manager-plugins", &error); ++ g_spawn_command_line_async ("/usr/lib/gnome-settings-daemon/gnome-settings-daemon --gconf-prefix=/apps/gdm/simple-chooser/settings-manager-plugins", &error); + if (error != NULL) { + g_warning ("Error starting settings daemon: %s", error->message); + g_error_free (error); --- gdm-2.29.4.orig/debian/patches/16_gdmserver_user_manager.patch +++ gdm-2.29.4/debian/patches/16_gdmserver_user_manager.patch @@ -0,0 +1,2574 @@ +# +# Description: Add org.gnome.DisplayManager.UserManager interface to gdmserver to be shared between greeter, configuration applet and FUSA applet +# Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/423450 +# Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=593996 +# +From 35aa54f6fe3ff8fa8d6129f805ea243a6204aa65 Mon Sep 17 00:00:00 2001 +From: Robert Ancell +Date: Fri, 11 Sep 2009 16:01:30 +1000 +Subject: [PATCH] Add org.gnome.DisplayManager.UserManager interface to gdmserver + +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/configure.ac gdm-2.28.1.new/configure.ac +--- gdm-2.28.1/configure.ac 2009-11-26 17:07:28.317717514 +0100 ++++ gdm-2.28.1.new/configure.ac 2009-11-26 17:07:45.585319608 +0100 +@@ -65,6 +65,7 @@ + polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION + ) + AC_SUBST(COMMON_CFLAGS) + AC_SUBST(COMMON_LIBS) +@@ -961,6 +962,17 @@ + fi + AC_SUBST(logdir, $GDM_LOG_DIR) + ++AC_ARG_WITH(cache-dir, ++ AS_HELP_STRING([--with-cache-dir=], ++ [cache dir])) ++ ++if ! test -z "$with_cache_dir"; then ++ GDM_CACHE_DIR=$with_cache_dir ++else ++ GDM_CACHE_DIR=/var/cache/gdm ++fi ++AC_SUBST(cachedir, $GDM_CACHE_DIR) ++ + withval="" + AC_ARG_WITH(at-bindir, + AS_HELP_STRING([--with-at-bindir=] +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-user.c gdm-2.28.1.new/daemon/gdm-user.c +--- gdm-2.28.1/daemon/gdm-user.c 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.1.new/daemon/gdm-user.c 2009-11-26 17:07:31.427725843 +0100 +@@ -0,0 +1,596 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2004-2005 James M. Cape . ++ * Copyright (C) 2007-2008 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "gdm-user-manager.h" ++#include "gdm-user-private.h" ++ ++#define GDM_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDM_TYPE_USER, GdmUserClass)) ++#define GDM_IS_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDM_TYPE_USER)) ++#define GDM_USER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GDM_TYPE_USER, GdmUserClass)) ++ ++enum { ++ PROP_0, ++ PROP_REAL_NAME, ++ PROP_USER_NAME, ++ PROP_UID, ++ PROP_HOME_DIR, ++ PROP_SHELL, ++ PROP_ICON_URL, ++ PROP_LOGIN_FREQUENCY, ++}; ++ ++enum { ++ ICON_CHANGED, ++ SESSIONS_CHANGED, ++ LAST_SIGNAL ++}; ++ ++struct _GdmUser { ++ GObject parent; ++ ++ uid_t uid; ++ char *user_name; ++ char *real_name; ++ char *home_dir; ++ char *shell; ++ char *icon_url; ++ GList *sessions; ++ gulong login_frequency; ++ ++ GFileMonitor *icon_monitor; ++}; ++ ++typedef struct _GdmUserClass ++{ ++ GObjectClass parent_class; ++ ++ void (* icon_changed) (GdmUser *user); ++ void (* sessions_changed) (GdmUser *user); ++} GdmUserClass; ++ ++static void gdm_user_finalize (GObject *object); ++ ++static guint signals[LAST_SIGNAL] = { 0 }; ++ ++G_DEFINE_TYPE (GdmUser, gdm_user, G_TYPE_OBJECT) ++ ++static int ++session_compare (const char *a, ++ const char *b) ++{ ++ if (a == NULL) { ++ return 1; ++ } else if (b == NULL) { ++ return -1; ++ } ++ ++ return strcmp (a, b); ++} ++ ++void ++_gdm_user_add_session (GdmUser *user, ++ const char *ssid) ++{ ++ GList *li; ++ ++ g_return_if_fail (GDM_IS_USER (user)); ++ g_return_if_fail (ssid != NULL); ++ ++ li = g_list_find_custom (user->sessions, ssid, (GCompareFunc)session_compare); ++ if (li == NULL) { ++ g_debug ("GdmUser: adding session %s", ssid); ++ user->sessions = g_list_prepend (user->sessions, g_strdup (ssid)); ++ g_signal_emit (user, signals[SESSIONS_CHANGED], 0); ++ } else { ++ g_debug ("GdmUser: session already present: %s", ssid); ++ } ++} ++ ++void ++_gdm_user_remove_session (GdmUser *user, ++ const char *ssid) ++{ ++ GList *li; ++ ++ g_return_if_fail (GDM_IS_USER (user)); ++ g_return_if_fail (ssid != NULL); ++ ++ li = g_list_find_custom (user->sessions, ssid, (GCompareFunc)session_compare); ++ if (li != NULL) { ++ g_debug ("GdmUser: removing session %s", ssid); ++ g_free (li->data); ++ user->sessions = g_list_delete_link (user->sessions, li); ++ g_signal_emit (user, signals[SESSIONS_CHANGED], 0); ++ } else { ++ g_debug ("GdmUser: session not found: %s", ssid); ++ } ++} ++ ++guint ++gdm_user_get_num_sessions (GdmUser *user) ++{ ++ return g_list_length (user->sessions); ++} ++ ++GList * ++gdm_user_get_sessions (GdmUser *user) ++{ ++ return user->sessions; ++} ++ ++static void ++gdm_user_set_property (GObject *object, ++ guint param_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GdmUser *user; ++ ++ user = GDM_USER (object); ++ ++ switch (param_id) { ++ case PROP_LOGIN_FREQUENCY: ++ user->login_frequency = g_value_get_ulong (value); ++ g_object_notify (G_OBJECT (user), "login-frequency"); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); ++ break; ++ } ++} ++ ++static void ++gdm_user_get_property (GObject *object, ++ guint param_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GdmUser *user; ++ ++ user = GDM_USER (object); ++ ++ switch (param_id) { ++ case PROP_USER_NAME: ++ g_value_set_string (value, user->user_name); ++ break; ++ case PROP_REAL_NAME: ++ g_value_set_string (value, user->real_name); ++ break; ++ case PROP_HOME_DIR: ++ g_value_set_string (value, user->home_dir); ++ break; ++ case PROP_UID: ++ g_value_set_ulong (value, user->uid); ++ break; ++ case PROP_SHELL: ++ g_value_set_string (value, user->shell); ++ break; ++ case PROP_ICON_URL: ++ g_value_set_string (value, user->icon_url); ++ break; ++ case PROP_LOGIN_FREQUENCY: ++ g_value_set_ulong (value, user->login_frequency); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); ++ break; ++ } ++} ++ ++static void ++gdm_user_class_init (GdmUserClass *class) ++{ ++ GObjectClass *gobject_class; ++ ++ gobject_class = G_OBJECT_CLASS (class); ++ ++ gobject_class->set_property = gdm_user_set_property; ++ gobject_class->get_property = gdm_user_get_property; ++ gobject_class->finalize = gdm_user_finalize; ++ ++ g_object_class_install_property (gobject_class, ++ PROP_REAL_NAME, ++ g_param_spec_string ("real-name", ++ "Real Name", ++ "The real name to display for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ ++ g_object_class_install_property (gobject_class, ++ PROP_UID, ++ g_param_spec_ulong ("uid", ++ "User ID", ++ "The UID for this user.", ++ 0, G_MAXULONG, 0, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_USER_NAME, ++ g_param_spec_string ("user-name", ++ "User Name", ++ "The login name for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_HOME_DIR, ++ g_param_spec_string ("home-directory", ++ "Home Directory", ++ "The home directory for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_SHELL, ++ g_param_spec_string ("shell", ++ "Shell", ++ "The shell for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_SHELL, ++ g_param_spec_string ("icon-url", ++ "Icon URL", ++ "The icon for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_LOGIN_FREQUENCY, ++ g_param_spec_ulong ("login-frequency", ++ "login frequency", ++ "login frequency", ++ 0, ++ G_MAXULONG, ++ 0, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); ++ ++ signals [ICON_CHANGED] = ++ g_signal_new ("icon-changed", ++ G_TYPE_FROM_CLASS (class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserClass, icon_changed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, 0); ++ signals [SESSIONS_CHANGED] = ++ g_signal_new ("sessions-changed", ++ G_TYPE_FROM_CLASS (class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserClass, sessions_changed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, 0); ++} ++ ++ ++static void ++on_icon_monitor_changed (GFileMonitor *monitor, ++ GFile *file, ++ GFile *other_file, ++ GFileMonitorEvent event_type, ++ GdmUser *user) ++{ ++ g_debug ("Icon changed: %d", event_type); ++ ++ if (event_type != G_FILE_MONITOR_EVENT_CHANGED && ++ event_type != G_FILE_MONITOR_EVENT_CREATED) { ++ return; ++ } ++ ++ g_signal_emit (user, signals[ICON_CHANGED], 0); ++} ++ ++static void ++update_icon_monitor (GdmUser *user) ++{ ++ GFile *file; ++ GError *error = NULL; ++ ++ if (user->icon_url != NULL) { ++ g_free (user->icon_url); ++ user->icon_url = NULL; ++ } ++ if (user->home_dir != NULL) { ++ gchar *filename; ++ filename = g_build_filename (user->home_dir, ".face", NULL); ++ user->icon_url = g_strjoin(NULL, "file://", filename, NULL); ++ g_free (filename); ++ } ++ g_object_notify (G_OBJECT (user), "icon-url"); ++ ++ if (user->icon_monitor != NULL) { ++ g_file_monitor_cancel (user->icon_monitor); ++ user->icon_monitor = NULL; ++ } ++ ++ if (user->icon_url == NULL) { ++ return; ++ } ++ ++ g_debug ("adding monitor for '%s'", user->icon_url); ++ file = g_file_new_for_uri (user->icon_url); ++ user->icon_monitor = g_file_monitor_file (file, ++ G_FILE_MONITOR_NONE, ++ NULL, ++ &error); ++ if (user->icon_monitor != NULL) { ++ g_signal_connect (user->icon_monitor, ++ "changed", ++ G_CALLBACK (on_icon_monitor_changed), ++ user); ++ } else { ++ g_warning ("Unable to monitor %s: %s", user->icon_url, error->message); ++ g_error_free (error); ++ } ++ g_object_unref (file); ++} ++ ++static void ++gdm_user_init (GdmUser *user) ++{ ++ user->user_name = NULL; ++ user->real_name = NULL; ++ user->sessions = NULL; ++} ++ ++static void ++gdm_user_finalize (GObject *object) ++{ ++ GdmUser *user; ++ ++ user = GDM_USER (object); ++ ++ g_file_monitor_cancel (user->icon_monitor); ++ ++ g_free (user->user_name); ++ g_free (user->real_name); ++ ++ if (G_OBJECT_CLASS (gdm_user_parent_class)->finalize) ++ (*G_OBJECT_CLASS (gdm_user_parent_class)->finalize) (object); ++} ++ ++/** ++ * _gdm_user_update: ++ * @user: the user object to update. ++ * @pwent: the user data to use. ++ * ++ * Updates the properties of @user using the data in @pwent. ++ * ++ * Since: 1.0 ++ **/ ++void ++_gdm_user_update (GdmUser *user, ++ const struct passwd *pwent) ++{ ++ gchar *real_name; ++ ++ g_return_if_fail (GDM_IS_USER (user)); ++ g_return_if_fail (pwent != NULL); ++ ++ g_object_freeze_notify (G_OBJECT (user)); ++ ++ /* Display Name */ ++ if (pwent->pw_gecos && pwent->pw_gecos[0] != '\0') { ++ gchar *first_comma; ++ gchar *real_name_utf8; ++ ++ real_name_utf8 = g_locale_to_utf8 (pwent->pw_gecos, -1, NULL, NULL, NULL); ++ ++ first_comma = strchr (real_name_utf8, ','); ++ if (first_comma) { ++ real_name = g_strndup (real_name_utf8, first_comma - real_name_utf8); ++ g_free (real_name_utf8); ++ } else { ++ real_name = real_name_utf8; ++ } ++ ++ if (real_name[0] == '\0') { ++ g_free (real_name); ++ real_name = NULL; ++ } ++ } else { ++ real_name = NULL; ++ } ++ ++ if ((real_name && !user->real_name) || ++ (!real_name && user->real_name) || ++ (real_name && ++ user->real_name && ++ strcmp (real_name, user->real_name) != 0)) { ++ g_free (user->real_name); ++ user->real_name = real_name; ++ g_object_notify (G_OBJECT (user), "real-name"); ++ } else { ++ g_free (real_name); ++ } ++ ++ /* UID */ ++ if (pwent->pw_uid != user->uid) { ++ user->uid = pwent->pw_uid; ++ g_object_notify (G_OBJECT (user), "uid"); ++ } ++ ++ /* Username */ ++ if ((pwent->pw_name && !user->user_name) || ++ (!pwent->pw_name && user->user_name) || ++ (pwent->pw_name && ++ user->user_name && ++ strcmp (user->user_name, pwent->pw_name) != 0)) { ++ g_free (user->user_name); ++ user->user_name = g_strdup (pwent->pw_name); ++ g_object_notify (G_OBJECT (user), "user-name"); ++ } ++ ++ /* Home Directory */ ++ if ((pwent->pw_dir && !user->home_dir) || ++ (!pwent->pw_dir && user->home_dir) || ++ strcmp (user->home_dir, pwent->pw_dir) != 0) { ++ g_free (user->home_dir); ++ user->home_dir = g_strdup (pwent->pw_dir); ++ g_object_notify (G_OBJECT (user), "home-directory"); ++ g_signal_emit (user, signals[ICON_CHANGED], 0); ++ } ++ ++ /* Shell */ ++ if ((pwent->pw_shell && !user->shell) || ++ (!pwent->pw_shell && user->shell) || ++ (pwent->pw_shell && ++ user->shell && ++ strcmp (user->shell, pwent->pw_shell) != 0)) { ++ g_free (user->shell); ++ user->shell = g_strdup (pwent->pw_shell); ++ g_object_notify (G_OBJECT (user), "shell"); ++ } ++ ++ update_icon_monitor (user); ++ ++ g_object_thaw_notify (G_OBJECT (user)); ++} ++ ++/** ++ * gdm_user_get_uid: ++ * @user: the user object to examine. ++ * ++ * Retrieves the ID of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++uid_t ++gdm_user_get_uid (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), -1); ++ ++ return user->uid; ++} ++ ++/** ++ * gdm_user_get_real_name: ++ * @user: the user object to examine. ++ * ++ * Retrieves the display name of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++G_CONST_RETURN gchar * ++gdm_user_get_real_name (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return (user->real_name ? user->real_name : user->user_name); ++} ++ ++/** ++ * gdm_user_get_user_name: ++ * @user: the user object to examine. ++ * ++ * Retrieves the login name of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++G_CONST_RETURN gchar * ++gdm_user_get_user_name (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return user->user_name; ++} ++ ++/** ++ * gdm_user_get_home_directory: ++ * @user: the user object to examine. ++ * ++ * Retrieves the home directory of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++G_CONST_RETURN gchar * ++gdm_user_get_home_directory (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return user->home_dir; ++} ++ ++/** ++ * gdm_user_get_shell: ++ * @user: the user object to examine. ++ * ++ * Retrieves the login shell of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++G_CONST_RETURN gchar * ++gdm_user_get_shell (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return user->shell; ++} ++ ++gulong ++gdm_user_get_login_frequency (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), 0); ++ ++ return user->login_frequency; ++} ++ ++G_CONST_RETURN gchar * ++gdm_user_get_icon_url (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ /* FIXME: Icon can be one of: ++ * ~/.face ++ * ~/.face.icon ++ * ~/.gnome/gdm:[face]picture ++ * ${GlobalFaceDir}/${username} ++ * ${GlobalFaceDir}/${username}.png ++ * but we only monitor the first. ++ */ ++ return user->icon_url; ++} +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-user.h gdm-2.28.1.new/daemon/gdm-user.h +--- gdm-2.28.1/daemon/gdm-user.h 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.1.new/daemon/gdm-user.h 2009-11-26 17:07:31.427725843 +0100 +@@ -0,0 +1,53 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2004-2005 James M. Cape . ++ * Copyright (C) 2007-2008 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++/* ++ * Facade object for user data, owned by GdmUserManager ++ */ ++ ++#ifndef __GDM_USER__ ++#define __GDM_USER__ 1 ++ ++#include ++#include ++ ++G_BEGIN_DECLS ++ ++#define GDM_TYPE_USER (gdm_user_get_type ()) ++#define GDM_USER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDM_TYPE_USER, GdmUser)) ++#define GDM_IS_USER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDM_TYPE_USER)) ++ ++typedef struct _GdmUser GdmUser; ++ ++GType gdm_user_get_type (void) G_GNUC_CONST; ++ ++uid_t gdm_user_get_uid (GdmUser *user); ++G_CONST_RETURN gchar *gdm_user_get_user_name (GdmUser *user); ++G_CONST_RETURN gchar *gdm_user_get_real_name (GdmUser *user); ++G_CONST_RETURN gchar *gdm_user_get_home_directory (GdmUser *user); ++G_CONST_RETURN gchar *gdm_user_get_shell (GdmUser *user); ++guint gdm_user_get_num_sessions (GdmUser *user); ++GList *gdm_user_get_sessions (GdmUser *user); ++gulong gdm_user_get_login_frequency (GdmUser *user); ++G_CONST_RETURN gchar *gdm_user_get_icon_url (GdmUser *user); ++ ++G_END_DECLS ++ ++#endif +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-user-manager.c gdm-2.28.1.new/daemon/gdm-user-manager.c +--- gdm-2.28.1/daemon/gdm-user-manager.c 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.1.new/daemon/gdm-user-manager.c 2009-11-26 17:07:31.437723273 +0100 +@@ -0,0 +1,1538 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2007-2008 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef HAVE_PATHS_H ++#include ++#endif /* HAVE_PATHS_H */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "gdm-user-manager.h" ++#include "gdm-user-manager-glue.h" ++#include "gdm-user-private.h" ++ ++#define GDM_USER_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_USER_MANAGER, GdmUserManagerPrivate)) ++ ++#define GDM_DBUS_PATH "/org/gnome/DisplayManager" ++#define GDM_USER_MANAGER_DBUS_PATH GDM_DBUS_PATH "/UserManager" ++#define GDM_USER_MANAGER_DBUS_NAME "org.gnome.DisplayManager.UserManager" ++ ++#define CK_NAME "org.freedesktop.ConsoleKit" ++#define CK_PATH "/org/freedesktop/ConsoleKit" ++#define CK_INTERFACE "org.freedesktop.ConsoleKit" ++ ++#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager" ++#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager" ++#define CK_SEAT_INTERFACE "org.freedesktop.ConsoleKit.Seat" ++#define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session" ++ ++#ifdef __sun ++#define DEFAULT_MINIMAL_UID 100 ++#else ++#define DEFAULT_MINIMAL_UID 500 ++#endif ++ ++#ifndef _PATH_SHELLS ++#define _PATH_SHELLS "/etc/shells" ++#endif ++#define PATH_PASSWD "/etc/passwd" ++ ++#define LOGIN_CACHE_FILE CACHEDIR "/login_frequency.cache" ++ ++#define DEFAULT_EXCLUDE { "bin", \ ++ "root", \ ++ "daemon", \ ++ "adm", \ ++ "lp", \ ++ "sync", \ ++ "shutdown", \ ++ "halt", \ ++ "mail", \ ++ "news", \ ++ "uucp", \ ++ "operator", \ ++ "nobody", \ ++ "nobody4", \ ++ "noaccess", \ ++ GDM_USERNAME, \ ++ "postgres", \ ++ "pvm", \ ++ "rpm", \ ++ "nfsnobody", \ ++ "pcap", \ ++ NULL } ++ ++struct GdmUserManagerPrivate ++{ ++ GHashTable *users; ++ GHashTable *sessions; ++ GHashTable *exclusions; ++ GHashTable *shells; ++ DBusGConnection *connection; ++ DBusGProxy *seat_proxy; ++ char *seat_id; ++ ++ GFileMonitor *passwd_monitor; ++ GFileMonitor *shells_monitor; ++ ++ guint reload_id; ++ guint ck_history_id; ++ ++ guint8 loaded_passwd : 1; ++ guint8 loaded_cache : 1; ++}; ++ ++enum { ++ USERS_LOADED, ++ USER_ADDED, ++ USER_REMOVED, ++ USER_UPDATED, ++ LAST_SIGNAL ++}; ++ ++static guint signals [LAST_SIGNAL] = { 0, }; ++ ++static void gdm_user_manager_class_init (GdmUserManagerClass *klass); ++static void gdm_user_manager_init (GdmUserManager *user_manager); ++static void gdm_user_manager_finalize (GObject *object); ++ ++G_DEFINE_TYPE (GdmUserManager, gdm_user_manager, G_TYPE_OBJECT) ++ ++GQuark ++gdm_user_manager_error_quark (void) ++{ ++ static GQuark ret = 0; ++ if (ret == 0) { ++ ret = g_quark_from_static_string ("gdm_user_manager_error"); ++ } ++ ++ return ret; ++} ++ ++static void ++on_user_sessions_changed (GdmUser *user, ++ GdmUserManager *manager) ++{ ++ guint nsessions; ++ ++ nsessions = gdm_user_get_num_sessions (user); ++ ++ g_debug ("GdmUserManager: sessions changed user=%s num=%d", ++ gdm_user_get_user_name (user), ++ nsessions); ++ ++ /* only signal on zero and one */ ++ if (nsessions > 1) { ++ return; ++ } ++ ++ g_signal_emit (manager, signals [USER_UPDATED], 0, gdm_user_get_uid (user)); ++} ++ ++static void ++on_user_icon_changed (GdmUser *user, ++ GdmUserManager *manager) ++{ ++ g_debug ("GdmUserManager: user icon changed"); ++} ++ ++static char * ++get_seat_id_for_session (DBusGConnection *connection, ++ const char *session_id) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ char *seat_id; ++ gboolean res; ++ ++ proxy = NULL; ++ seat_id = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit session object"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetSeatId", ++ &error, ++ G_TYPE_INVALID, ++ DBUS_TYPE_G_OBJECT_PATH, &seat_id, ++ G_TYPE_INVALID); ++ if (! res) { ++ if (error != NULL) { ++ g_debug ("Failed to identify the current seat: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_debug ("Failed to identify the current seat"); ++ } ++ } ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ ++ return seat_id; ++} ++ ++static char * ++get_x11_display_for_session (DBusGConnection *connection, ++ const char *session_id) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ char *x11_display; ++ gboolean res; ++ ++ proxy = NULL; ++ x11_display = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit session object"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetX11Display", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_STRING, &x11_display, ++ G_TYPE_INVALID); ++ if (! res) { ++ if (error != NULL) { ++ g_debug ("Failed to identify the x11 display: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_debug ("Failed to identify the x11 display"); ++ } ++ } ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ ++ return x11_display; ++} ++ ++static gboolean ++maybe_add_session_for_user (GdmUserManager *manager, ++ GdmUser *user, ++ const char *ssid) ++{ ++ char *sid; ++ char *x11_display; ++ gboolean ret; ++ ++ ret = FALSE; ++ sid = NULL; ++ x11_display = NULL; ++ ++ /* skip if on another seat */ ++ sid = get_seat_id_for_session (manager->priv->connection, ssid); ++ if (sid == NULL ++ || manager->priv->seat_id == NULL ++ || strcmp (sid, manager->priv->seat_id) != 0) { ++ g_debug ("GdmUserManager: not adding session on other seat: %s", ssid); ++ goto out; ++ } ++ ++ /* skip if doesn't have an x11 display */ ++ x11_display = get_x11_display_for_session (manager->priv->connection, ssid); ++ if (x11_display == NULL || x11_display[0] == '\0') { ++ g_debug ("GdmUserManager: not adding session without a x11 display: %s", ssid); ++ goto out; ++ } ++ ++ if (g_hash_table_lookup (manager->priv->exclusions, gdm_user_get_user_name (user))) { ++ g_debug ("GdmUserManager: excluding user '%s'", gdm_user_get_user_name (user)); ++ goto out; ++ } ++ ++ g_hash_table_insert (manager->priv->sessions, ++ g_strdup (ssid), ++ g_strdup (gdm_user_get_user_name (user))); ++ ++ _gdm_user_add_session (user, ssid); ++ g_debug ("GdmUserManager: added session for user: %s", gdm_user_get_user_name (user)); ++ ++ ret = TRUE; ++ ++ out: ++ g_free (sid); ++ g_free (x11_display); ++ ++ return ret; ++} ++ ++static void ++add_sessions_for_user (GdmUserManager *manager, ++ GdmUser *user) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ gboolean res; ++ guint32 uid; ++ GPtrArray *sessions; ++ int i; ++ ++ proxy = dbus_g_proxy_new_for_name (manager->priv->connection, ++ CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit manager object"); ++ goto out; ++ } ++ ++ uid = gdm_user_get_uid (user); ++ ++ g_debug ("Getting list of sessions for user %u", uid); ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetSessionsForUnixUser", ++ &error, ++ G_TYPE_UINT, uid, ++ G_TYPE_INVALID, ++ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), ++ &sessions, ++ G_TYPE_INVALID); ++ if (! res) { ++ if (error != NULL) { ++ g_debug ("Failed to find sessions for user: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_debug ("Failed to find sessions for user"); ++ } ++ goto out; ++ } ++ ++ g_debug ("Found %d sessions for user %s", sessions->len, gdm_user_get_user_name (user)); ++ ++ for (i = 0; i < sessions->len; i++) { ++ char *ssid; ++ ++ ssid = g_ptr_array_index (sessions, i); ++ maybe_add_session_for_user (manager, user, ssid); ++ } ++ ++ g_ptr_array_foreach (sessions, (GFunc)g_free, NULL); ++ g_ptr_array_free (sessions, TRUE); ++ ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++} ++ ++static GdmUser * ++create_user (GdmUserManager *manager) ++{ ++ GdmUser *user; ++ ++ user = g_object_new (GDM_TYPE_USER, NULL); ++ g_signal_connect (user, ++ "sessions-changed", ++ G_CALLBACK (on_user_sessions_changed), ++ manager); ++ g_signal_connect (user, ++ "icon-changed", ++ G_CALLBACK (on_user_icon_changed), ++ manager); ++ return user; ++} ++ ++static void ++add_user (GdmUserManager *manager, ++ GdmUser *user) ++{ ++ add_sessions_for_user (manager, user); ++ g_hash_table_insert (manager->priv->users, ++ g_strdup (gdm_user_get_user_name (user)), ++ g_object_ref (user)); ++ ++ g_signal_emit (manager, signals[USER_ADDED], 0, gdm_user_get_uid (user)); ++} ++ ++static GdmUser * ++add_new_user_for_pwent (GdmUserManager *manager, ++ struct passwd *pwent) ++{ ++ GdmUser *user; ++ ++ g_debug ("Creating new user"); ++ ++ user = create_user (manager); ++ _gdm_user_update (user, pwent); ++ ++ add_user (manager, user); ++ ++ return user; ++} ++ ++static char * ++get_current_seat_id (DBusGConnection *connection) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ char *session_id; ++ char *seat_id; ++ gboolean res; ++ ++ proxy = NULL; ++ session_id = NULL; ++ seat_id = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (connection, ++ CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit manager object"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetCurrentSession", ++ &error, ++ G_TYPE_INVALID, ++ DBUS_TYPE_G_OBJECT_PATH, ++ &session_id, ++ G_TYPE_INVALID); ++ if (! res) { ++ if (error != NULL) { ++ g_debug ("Failed to identify the current session: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_debug ("Failed to identify the current session"); ++ } ++ goto out; ++ } ++ ++ seat_id = get_seat_id_for_session (connection, session_id); ++ ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ g_free (session_id); ++ ++ return seat_id; ++} ++ ++static gboolean ++get_uid_from_session_id (GdmUserManager *manager, ++ const char *session_id, ++ uid_t *uidp) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ guint uid; ++ gboolean res; ++ ++ proxy = dbus_g_proxy_new_for_name (manager->priv->connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit session object"); ++ return FALSE; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetUnixUser", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_UINT, &uid, ++ G_TYPE_INVALID); ++ g_object_unref (proxy); ++ ++ if (! res) { ++ if (error != NULL) { ++ g_warning ("Failed to query the session: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_warning ("Failed to query the session"); ++ } ++ return FALSE; ++ } ++ ++ if (uidp != NULL) { ++ *uidp = (uid_t) uid; ++ } ++ ++ return TRUE; ++} ++ ++static void ++seat_session_added (DBusGProxy *seat_proxy, ++ const char *session_id, ++ GdmUserManager *manager) ++{ ++ uid_t uid; ++ gboolean res; ++ struct passwd *pwent; ++ GdmUser *user; ++ gboolean is_new; ++ ++ g_debug ("Session added: %s", session_id); ++ ++ res = get_uid_from_session_id (manager, session_id, &uid); ++ if (! res) { ++ g_warning ("Unable to lookup user for session"); ++ return; ++ } ++ ++ errno = 0; ++ pwent = getpwuid (uid); ++ if (pwent == NULL) { ++ g_warning ("Unable to lookup user id %d: %s", (int)uid, g_strerror (errno)); ++ return; ++ } ++ ++ /* check exclusions up front */ ++ if (g_hash_table_lookup (manager->priv->exclusions, pwent->pw_name)) { ++ g_debug ("GdmUserManager: excluding user '%s'", pwent->pw_name); ++ return; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, pwent->pw_name); ++ if (user == NULL) { ++ g_debug ("Creating new user"); ++ ++ user = create_user (manager); ++ _gdm_user_update (user, pwent); ++ is_new = TRUE; ++ } else { ++ is_new = FALSE; ++ } ++ ++ res = maybe_add_session_for_user (manager, user, session_id); ++ ++ /* only add the user if we added a session */ ++ if (is_new) { ++ if (res) { ++ add_user (manager, user); ++ } else { ++ g_object_unref (user); ++ } ++ } ++} ++ ++static void ++seat_session_removed (DBusGProxy *seat_proxy, ++ const char *session_id, ++ GdmUserManager *manager) ++{ ++ GdmUser *user; ++ char *username; ++ ++ g_debug ("Session removed: %s", session_id); ++ ++ /* since the session object may already be gone ++ * we can't query CK directly */ ++ ++ username = g_hash_table_lookup (manager->priv->sessions, session_id); ++ if (username == NULL) { ++ return; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, username); ++ if (user == NULL) { ++ /* nothing to do */ ++ return; ++ } ++ ++ g_debug ("GdmUserManager: Session removed for %s", username); ++ _gdm_user_remove_session (user, session_id); ++} ++ ++static void ++on_proxy_destroy (DBusGProxy *proxy, ++ GdmUserManager *manager) ++{ ++ g_debug ("GdmUserManager: seat proxy destroyed"); ++ ++ manager->priv->seat_proxy = NULL; ++} ++ ++static void ++get_seat_proxy (GdmUserManager *manager) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ ++ g_assert (manager->priv->seat_proxy == NULL); ++ ++ error = NULL; ++ manager->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); ++ if (manager->priv->connection == NULL) { ++ if (error != NULL) { ++ g_warning ("Failed to connect to the D-Bus daemon: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_warning ("Failed to connect to the D-Bus daemon"); ++ } ++ return; ++ } ++ ++ manager->priv->seat_id = get_current_seat_id (manager->priv->connection); ++ if (manager->priv->seat_id == NULL) { ++ return; ++ } ++ ++ g_debug ("GdmUserManager: Found current seat: %s", manager->priv->seat_id); ++ ++ error = NULL; ++ proxy = dbus_g_proxy_new_for_name_owner (manager->priv->connection, ++ CK_NAME, ++ manager->priv->seat_id, ++ CK_SEAT_INTERFACE, ++ &error); ++ ++ if (proxy == NULL) { ++ if (error != NULL) { ++ g_warning ("Failed to connect to the ConsoleKit seat object: %s", ++ error->message); ++ g_error_free (error); ++ } else { ++ g_warning ("Failed to connect to the ConsoleKit seat object"); ++ } ++ return; ++ } ++ ++ g_signal_connect (proxy, "destroy", G_CALLBACK (on_proxy_destroy), manager); ++ ++ dbus_g_proxy_add_signal (proxy, ++ "SessionAdded", ++ DBUS_TYPE_G_OBJECT_PATH, ++ G_TYPE_INVALID); ++ dbus_g_proxy_add_signal (proxy, ++ "SessionRemoved", ++ DBUS_TYPE_G_OBJECT_PATH, ++ G_TYPE_INVALID); ++ dbus_g_proxy_connect_signal (proxy, ++ "SessionAdded", ++ G_CALLBACK (seat_session_added), ++ manager, ++ NULL); ++ dbus_g_proxy_connect_signal (proxy, ++ "SessionRemoved", ++ G_CALLBACK (seat_session_removed), ++ manager, ++ NULL); ++ manager->priv->seat_proxy = proxy; ++ ++} ++ ++/** ++ * gdm_manager_get_user: ++ * @manager: the manager to query. ++ * @username: the login name of the user to get. ++ * ++ * Retrieves a pointer to the #GdmUser object for the login named @username ++ * from @manager. This pointer is not a reference, and should not be released. ++ * ++ * Returns: a pointer to a #GdmUser object. ++ **/ ++static GdmUser * ++gdm_user_manager_get_user (GdmUserManager *manager, ++ const char *username) ++{ ++ GdmUser *user; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), NULL); ++ g_return_val_if_fail (username != NULL && username[0] != '\0', NULL); ++ ++ user = g_hash_table_lookup (manager->priv->users, username); ++ ++ if (user == NULL) { ++ struct passwd *pwent; ++ ++ pwent = getpwnam (username); ++ ++ if (pwent != NULL) { ++ user = add_new_user_for_pwent (manager, pwent); ++ } ++ } ++ ++ return user; ++} ++ ++static GdmUser * ++gdm_user_manager_get_user_by_uid (GdmUserManager *manager, ++ uid_t uid) ++{ ++ GdmUser *user; ++ struct passwd *pwent; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), NULL); ++ ++ pwent = getpwuid (uid); ++ if (pwent == NULL) { ++ g_warning ("GdmUserManager: unable to lookup uid %d", (int)uid); ++ return NULL; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, pwent->pw_name); ++ ++ if (user == NULL) { ++ user = add_new_user_for_pwent (manager, pwent); ++ } ++ ++ return user; ++} ++ ++static void ++listify_hash_values_hfunc (gpointer key, ++ gpointer value, ++ gpointer user_data) ++{ ++ GSList **list = user_data; ++ ++ *list = g_slist_prepend (*list, value); ++} ++ ++static gboolean ++parse_value_as_ulong (const char *value, ++ gulong *ulongval) ++{ ++ char *end_of_valid_long; ++ glong long_value; ++ gulong ulong_value; ++ ++ errno = 0; ++ long_value = strtol (value, &end_of_valid_long, 10); ++ ++ if (*value == '\0' || *end_of_valid_long != '\0') { ++ return FALSE; ++ } ++ ++ ulong_value = long_value; ++ if (ulong_value != long_value || errno == ERANGE) { ++ return FALSE; ++ } ++ ++ *ulongval = ulong_value; ++ ++ return TRUE; ++} ++ ++static gboolean ++parse_ck_history_line (const char *line, ++ char **user_namep, ++ gulong *frequencyp) ++{ ++ GRegex *re; ++ GMatchInfo *match_info; ++ gboolean res; ++ gboolean ret; ++ GError *error; ++ ++ ret = FALSE; ++ re = NULL; ++ match_info = NULL; ++ ++ error = NULL; ++ re = g_regex_new ("(?P[0-9a-zA-Z]+)[ ]+(?P[0-9]+)", 0, 0, &error); ++ if (re == NULL) { ++ if (error != NULL) { ++ g_critical ("%s", error->message); ++ } else { ++ g_critical ("Error in regex call"); ++ } ++ goto out; ++ } ++ ++ g_regex_match (re, line, 0, &match_info); ++ ++ res = g_match_info_matches (match_info); ++ if (! res) { ++ g_warning ("Unable to parse history: %s", line); ++ goto out; ++ } ++ ++ if (user_namep != NULL) { ++ *user_namep = g_match_info_fetch_named (match_info, "username"); ++ } ++ ++ if (frequencyp != NULL) { ++ char *freq; ++ freq = g_match_info_fetch_named (match_info, "frequency"); ++ res = parse_value_as_ulong (freq, frequencyp); ++ g_free (freq); ++ if (! res) { ++ goto out; ++ } ++ } ++ ++ ret = TRUE; ++ ++ out: ++ if (match_info != NULL) { ++ g_match_info_free (match_info); ++ } ++ if (re != NULL) { ++ g_regex_unref (re); ++ } ++ return ret; ++} ++ ++static void ++process_ck_history_line (GdmUserManager *manager, ++ const char *line) ++{ ++ gboolean res; ++ char *username; ++ gulong frequency; ++ struct passwd *pwent; ++ GdmUser *user; ++ ++ frequency = 0; ++ username = NULL; ++ res = parse_ck_history_line (line, &username, &frequency); ++ if (! res) { ++ return; ++ } ++ ++ if (g_hash_table_lookup (manager->priv->exclusions, username)) { ++ g_debug ("GdmUserManager: excluding user '%s'", username); ++ g_free (username); ++ return; ++ } ++ ++ /* do not show system users; we cannot use gdm_user_manager_get_user() ++ * here since this creates/signals users as a side effect */ ++ pwent = getpwnam (username); ++ if (pwent == NULL) { ++ g_warning ("Unable to lookup user name %s: %s", username, g_strerror (errno)); ++ return; ++ } ++ if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ g_debug ("GdmUserManager: excluding user '%s'", username); ++ return; ++ } ++ ++ user = gdm_user_manager_get_user (manager, username); ++ if (user == NULL) { ++ g_debug ("GdmUserManager: unable to lookup user '%s'", username); ++ g_free (username); ++ return; ++ } ++ ++ g_object_set (user, "login-frequency", frequency, NULL); ++ g_signal_emit (manager, signals [USER_UPDATED], 0, gdm_user_get_uid (user)); ++ g_free (username); ++} ++ ++static gboolean ++ck_history_watch (GIOChannel *source, ++ GIOCondition condition, ++ GdmUserManager *manager) ++{ ++ GIOStatus status; ++ gboolean done = FALSE; ++ ++ g_return_val_if_fail (manager != NULL, FALSE); ++ ++ if (condition & G_IO_IN) { ++ char *str; ++ GError *error; ++ ++ error = NULL; ++ status = g_io_channel_read_line (source, &str, NULL, NULL, &error); ++ if (error != NULL) { ++ g_warning ("GdmUserManager: unable to read line: %s", error->message); ++ g_error_free (error); ++ } ++ ++ if (status == G_IO_STATUS_NORMAL) { ++ g_debug ("GdmUserManager: history output: %s", str); ++ process_ck_history_line (manager, str); ++ } else if (status == G_IO_STATUS_EOF) { ++ done = TRUE; ++ } ++ ++ g_free (str); ++ } else if (condition & G_IO_HUP) { ++ done = TRUE; ++ } ++ ++ if (done) { ++ FILE *fp; ++ ++ /* Cache login counts */ ++ fp = fopen (LOGIN_CACHE_FILE, "w"); ++ if (fp != NULL) { ++ GHashTableIter iter; ++ gpointer value; ++ ++ g_hash_table_iter_init (&iter, manager->priv->users); ++ while (g_hash_table_iter_next (&iter, NULL, &value)) { ++ GdmUser *user = (GdmUser *) value; ++ fprintf (fp, "%s %lu\n", ++ gdm_user_get_user_name (user), ++ gdm_user_get_login_frequency (user)); ++ } ++ fclose (fp); ++ } ++ else ++ g_warning ("Unable to write to login cache file: %s", LOGIN_CACHE_FILE); ++ ++ manager->priv->ck_history_id = 0; ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static void ++reload_ck_history (GdmUserManager *manager) ++{ ++ char *command; ++ const char *seat_id; ++ GError *error; ++ gboolean res; ++ char **argv; ++ int standard_out; ++ GIOChannel *channel; ++ ++ seat_id = NULL; ++ if (manager->priv->seat_id != NULL ++ && g_str_has_prefix (manager->priv->seat_id, "/org/freedesktop/ConsoleKit/")) { ++ ++ seat_id = manager->priv->seat_id + strlen ("/org/freedesktop/ConsoleKit/"); ++ } ++ ++ if (seat_id == NULL) { ++ g_warning ("Unable to find users: no seat-id found"); ++ return; ++ } ++ ++ command = g_strdup_printf ("ck-history --frequent --seat='%s' --session-type=''", ++ seat_id); ++ g_debug ("GdmUserManager: running '%s'", command); ++ error = NULL; ++ if (! g_shell_parse_argv (command, NULL, &argv, &error)) { ++ if (error != NULL) { ++ g_warning ("Could not parse command: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_warning ("Could not parse command"); ++ } ++ goto out; ++ } ++ ++ error = NULL; ++ res = g_spawn_async_with_pipes (NULL, ++ argv, ++ NULL, ++ G_SPAWN_SEARCH_PATH, ++ NULL, ++ NULL, ++ NULL, /* pid */ ++ NULL, ++ &standard_out, ++ NULL, ++ &error); ++ g_strfreev (argv); ++ if (! res) { ++ if (error != NULL) { ++ g_warning ("Unable to run ck-history: %s", error->message); ++ g_error_free (error); ++ } else { ++ g_warning ("Unable to run ck-history"); ++ } ++ goto out; ++ } ++ ++ channel = g_io_channel_unix_new (standard_out); ++ g_io_channel_set_close_on_unref (channel, TRUE); ++ g_io_channel_set_flags (channel, ++ g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK, ++ NULL); ++ manager->priv->ck_history_id = g_io_add_watch (channel, ++ G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL, ++ (GIOFunc)ck_history_watch, ++ manager); ++ g_io_channel_unref (channel); ++ ++ out: ++ g_free (command); ++} ++ ++static void ++reload_passwd (GdmUserManager *manager) ++{ ++ struct passwd *pwent; ++ GSList *old_users; ++ GSList *new_users; ++ GSList *list; ++ FILE *fp; ++ ++ old_users = NULL; ++ new_users = NULL; ++ ++ errno = 0; ++ fp = fopen (PATH_PASSWD, "r"); ++ if (fp == NULL) { ++ g_warning ("Unable to open %s: %s", PATH_PASSWD, g_strerror (errno)); ++ goto out; ++ } ++ ++ g_hash_table_foreach (manager->priv->users, listify_hash_values_hfunc, &old_users); ++ g_slist_foreach (old_users, (GFunc) g_object_ref, NULL); ++ ++ /* Make sure we keep users who are logged in no matter what. */ ++ for (list = old_users; list; list = list->next) { ++ if (gdm_user_get_num_sessions (list->data) > 0) { ++ g_object_freeze_notify (G_OBJECT (list->data)); ++ new_users = g_slist_prepend (new_users, g_object_ref (list->data)); ++ } ++ } ++ ++ for (pwent = fgetpwent (fp); pwent != NULL; pwent = fgetpwent (fp)) { ++ GdmUser *user; ++ ++ user = NULL; ++ ++ /* Skip users below MinimalUID... */ ++ if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ continue; ++ } ++ ++ /* ...And users w/ invalid shells... */ ++ if (pwent->pw_shell == NULL || ++ !g_hash_table_lookup (manager->priv->shells, pwent->pw_shell)) { ++ g_debug ("GdmUserManager: skipping user with bad shell: %s", pwent->pw_name); ++ continue; ++ } ++ ++ /* ...And explicitly excluded users */ ++ if (g_hash_table_lookup (manager->priv->exclusions, pwent->pw_name)) { ++ g_debug ("GdmUserManager: explicitly skipping user: %s", pwent->pw_name); ++ continue; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, pwent->pw_name); ++ ++ /* Update users already in the *new* list */ ++ if (g_slist_find (new_users, user)) { ++ _gdm_user_update (user, pwent); ++ continue; ++ } ++ ++ if (user == NULL) { ++ user = create_user (manager); ++ } else { ++ g_object_ref (user); ++ } ++ ++ /* Freeze & update users not already in the new list */ ++ g_object_freeze_notify (G_OBJECT (user)); ++ _gdm_user_update (user, pwent); ++ ++ new_users = g_slist_prepend (new_users, user); ++ } ++ ++ /* Go through and handle removed users */ ++ for (list = old_users; list; list = list->next) { ++ if (! g_slist_find (new_users, list->data)) { ++ g_signal_emit (manager, signals[USER_REMOVED], 0, gdm_user_get_uid (GDM_USER (list->data))); ++ g_hash_table_remove (manager->priv->users, ++ gdm_user_get_user_name (list->data)); ++ } ++ } ++ ++ /* Go through and handle added users */ ++ for (list = new_users; list; list = list->next) { ++ if (!g_slist_find (old_users, list->data)) { ++ add_user (manager, list->data); ++ } ++ } ++ ++ if (!manager->priv->loaded_passwd) { ++ g_signal_emit (manager, signals[USERS_LOADED], 0); ++ manager->priv->loaded_passwd = TRUE; ++ } ++ ++ out: ++ /* Cleanup */ ++ ++ fclose (fp); ++ ++ g_slist_foreach (new_users, (GFunc) g_object_thaw_notify, NULL); ++ g_slist_foreach (new_users, (GFunc) g_object_unref, NULL); ++ g_slist_free (new_users); ++ ++ g_slist_foreach (old_users, (GFunc) g_object_unref, NULL); ++ g_slist_free (old_users); ++} ++ ++static void ++load_login_frequency_cache (GdmUserManager *manager) ++{ ++ GIOChannel *channel; ++ gchar *line; ++ ++ channel = g_io_channel_new_file (LOGIN_CACHE_FILE, "r", NULL); ++ if (channel == NULL) ++ return; ++ ++ while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL) == G_IO_STATUS_NORMAL) { ++ process_ck_history_line (manager, line); ++ g_free (line); ++ } ++ ++ g_io_channel_close (channel); ++} ++ ++static void ++reload_users (GdmUserManager *manager) ++{ ++ reload_passwd (manager); ++ if (!manager->priv->loaded_cache) { ++ load_login_frequency_cache (manager); ++ manager->priv->loaded_cache = TRUE; ++ } ++ reload_ck_history (manager); ++} ++ ++static gboolean ++reload_users_timeout (GdmUserManager *manager) ++{ ++ reload_users (manager); ++ manager->priv->reload_id = 0; ++ ++ return FALSE; ++} ++ ++static void ++queue_reload_users (GdmUserManager *manager) ++{ ++ if (manager->priv->reload_id > 0) { ++ return; ++ } ++ ++ manager->priv->reload_id = g_idle_add ((GSourceFunc)reload_users_timeout, manager); ++} ++ ++static void ++reload_shells (GdmUserManager *manager) ++{ ++ char *shell; ++ ++ setusershell (); ++ ++ g_hash_table_remove_all (manager->priv->shells); ++ for (shell = getusershell (); shell != NULL; shell = getusershell ()) { ++ /* skip well known not-real shells */ ++ if (shell == NULL ++ || strcmp (shell, "/sbin/nologin") == 0 ++ || strcmp (shell, "/bin/false") == 0) { ++ g_debug ("GdmUserManager: skipping shell %s", shell); ++ continue; ++ } ++ g_hash_table_insert (manager->priv->shells, ++ g_strdup (shell), ++ GUINT_TO_POINTER (TRUE)); ++ } ++ ++ endusershell (); ++} ++ ++static void ++on_shells_monitor_changed (GFileMonitor *monitor, ++ GFile *file, ++ GFile *other_file, ++ GFileMonitorEvent event_type, ++ GdmUserManager *manager) ++{ ++ if (event_type != G_FILE_MONITOR_EVENT_CHANGED && ++ event_type != G_FILE_MONITOR_EVENT_CREATED) { ++ return; ++ } ++ ++ reload_shells (manager); ++ reload_passwd (manager); ++} ++ ++static void ++on_passwd_monitor_changed (GFileMonitor *monitor, ++ GFile *file, ++ GFile *other_file, ++ GFileMonitorEvent event_type, ++ GdmUserManager *manager) ++{ ++ if (event_type != G_FILE_MONITOR_EVENT_CHANGED && ++ event_type != G_FILE_MONITOR_EVENT_CREATED) { ++ return; ++ } ++ ++ reload_passwd (manager); ++} ++ ++static void ++gdm_user_manager_class_init (GdmUserManagerClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->finalize = gdm_user_manager_finalize; ++ ++ signals [USERS_LOADED] = ++ g_signal_new ("users-loaded", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, users_loaded), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 0); ++ signals [USER_ADDED] = ++ g_signal_new ("user-added", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_added), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, G_TYPE_INT64); ++ signals [USER_REMOVED] = ++ g_signal_new ("user-removed", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_removed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, G_TYPE_INT64); ++ signals [USER_UPDATED] = ++ g_signal_new ("user-updated", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_updated), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, G_TYPE_INT64); ++ ++ g_type_class_add_private (klass, sizeof (GdmUserManagerPrivate)); ++ ++ dbus_g_object_type_install_info (GDM_TYPE_USER_MANAGER, &dbus_glib_gdm_user_manager_object_info); ++} ++ ++static void ++gdm_user_manager_init (GdmUserManager *manager) ++{ ++ int i; ++ GFile *file; ++ GError *error; ++ const char *exclude_default[] = DEFAULT_EXCLUDE; ++ ++ manager->priv = GDM_USER_MANAGER_GET_PRIVATE (manager); ++ ++ /* sessions */ ++ manager->priv->sessions = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ g_free); ++ ++ /* exclusions */ ++ manager->priv->exclusions = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ NULL); ++ for (i = 0; exclude_default[i] != NULL; i++) { ++ g_hash_table_insert (manager->priv->exclusions, ++ g_strdup (exclude_default [i]), ++ GUINT_TO_POINTER (TRUE)); ++ } ++ ++ /* /etc/shells */ ++ manager->priv->shells = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ NULL); ++ reload_shells (manager); ++ file = g_file_new_for_path (_PATH_SHELLS); ++ error = NULL; ++ manager->priv->shells_monitor = g_file_monitor_file (file, ++ G_FILE_MONITOR_NONE, ++ NULL, ++ &error); ++ if (manager->priv->shells_monitor != NULL) { ++ g_signal_connect (manager->priv->shells_monitor, ++ "changed", ++ G_CALLBACK (on_shells_monitor_changed), ++ manager); ++ } else { ++ g_warning ("Unable to monitor %s: %s", _PATH_SHELLS, error->message); ++ g_error_free (error); ++ } ++ g_object_unref (file); ++ ++ /* /etc/passwd */ ++ manager->priv->users = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ (GDestroyNotify) g_object_run_dispose); ++ file = g_file_new_for_path (PATH_PASSWD); ++ manager->priv->passwd_monitor = g_file_monitor_file (file, ++ G_FILE_MONITOR_NONE, ++ NULL, ++ &error); ++ if (manager->priv->passwd_monitor != NULL) { ++ g_signal_connect (manager->priv->passwd_monitor, ++ "changed", ++ G_CALLBACK (on_passwd_monitor_changed), ++ manager); ++ } else { ++ g_warning ("Unable to monitor %s: %s", PATH_PASSWD, error->message); ++ g_error_free (error); ++ } ++ g_object_unref (file); ++ ++ ++ get_seat_proxy (manager); ++ ++ queue_reload_users (manager); ++ ++ dbus_g_connection_register_g_object (manager->priv->connection, GDM_USER_MANAGER_DBUS_PATH, G_OBJECT (manager)); ++} ++ ++static void ++gdm_user_manager_finalize (GObject *object) ++{ ++ GdmUserManager *manager; ++ ++ g_return_if_fail (object != NULL); ++ g_return_if_fail (GDM_IS_USER_MANAGER (object)); ++ ++ manager = GDM_USER_MANAGER (object); ++ ++ g_return_if_fail (manager->priv != NULL); ++ ++ if (manager->priv->seat_proxy != NULL) { ++ g_object_unref (manager->priv->seat_proxy); ++ } ++ ++ if (manager->priv->ck_history_id != 0) { ++ g_source_remove (manager->priv->ck_history_id); ++ manager->priv->ck_history_id = 0; ++ } ++ ++ if (manager->priv->reload_id > 0) { ++ g_source_remove (manager->priv->reload_id); ++ manager->priv->reload_id = 0; ++ } ++ ++ g_hash_table_destroy (manager->priv->sessions); ++ ++ g_file_monitor_cancel (manager->priv->passwd_monitor); ++ g_hash_table_destroy (manager->priv->users); ++ ++ g_file_monitor_cancel (manager->priv->shells_monitor); ++ g_hash_table_destroy (manager->priv->shells); ++ ++ g_free (manager->priv->seat_id); ++ ++ G_OBJECT_CLASS (gdm_user_manager_parent_class)->finalize (object); ++} ++ ++GdmUserManager * ++gdm_user_manager_new (void) ++{ ++ return GDM_USER_MANAGER (g_object_new (GDM_TYPE_USER_MANAGER, NULL)); ++} ++ ++/* ++ Example: ++ dbus-send --system --print-reply --dest=org.gnome.DisplayManager \ ++ /org/gnome/DisplayManager/UserManager org.gnome.DisplayManager.UserManager.CountUsers ++*/ ++gboolean ++gdm_user_manager_count_users (GdmUserManager *user_manager, ++ gint *user_count, ++ GError **error) ++{ ++ *user_count = g_hash_table_size (user_manager->priv->users); ++ ++ return TRUE; ++} ++ ++/* ++ Example: ++ dbus-send --system --print-reply --dest=org.gnome.DisplayManager \ ++ /org/gnome/DisplayManager/UserManager org.gnome.DisplayManager.UserManager.GetUserList ++*/ ++gboolean ++gdm_user_manager_get_user_list (GdmUserManager *user_manager, ++ GArray **user_list, ++ GError **error) ++{ ++ GHashTableIter iter; ++ GdmUser *user; ++ ++ *user_list = g_array_new (FALSE, FALSE, sizeof (gint64)); ++ g_hash_table_iter_init (&iter, user_manager->priv->users); ++ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&user)) { ++ gint64 uid = gdm_user_get_uid (user); ++ g_array_append_val (*user_list, uid); ++ } ++ ++ return TRUE; ++} ++ ++ ++/* ++ Example: ++ dbus-send --system --print-reply --dest=org.gnome.DisplayManager \ ++ /org/gnome/DisplayManager/UserManager org.gnome.DisplayManager.UserManager.GetUserInfo int64:1000 ++*/ ++gboolean ++gdm_user_manager_get_user_info (GdmUserManager *user_manager, ++ gint64 uid, ++ gchar **user_name, ++ gchar **real_name, ++ gchar **shell, ++ gint *login_count, ++ gchar **icon_url, ++ GError **error) ++{ ++ GdmUser *user; ++ ++ user = gdm_user_manager_get_user_by_uid (user_manager, uid); ++ if (user == NULL) ++ return FALSE; ++ ++ *user_name = g_strdup (gdm_user_get_user_name (user)); ++ *real_name = g_strdup (gdm_user_get_real_name (user)); ++ *login_count = gdm_user_get_login_frequency (user); ++ *shell = g_strdup (gdm_user_get_shell (user)); ++ *icon_url = g_strdup (gdm_user_get_icon_url (user)); ++ ++ return TRUE; ++} ++ ++/* ++ Example: ++ dbus-send --system --print-reply --dest=org.gnome.DisplayManager \ ++ /org/gnome/DisplayManager/UserManager org.gnome.DisplayManager.UserManager.GetUsersInfo array:int64:1000,1001 ++*/ ++gboolean ++gdm_user_manager_get_users_info (GdmUserManager *user_manager, ++ GArray *uids, ++ GPtrArray **users_info, ++ GError **error) ++{ ++ int i; ++ ++ *users_info = g_ptr_array_new (); ++ ++ for (i = 0; i < uids->len; i++) { ++ gint64 uid; ++ GdmUser *user; ++ GValueArray *user_info; ++ GValue arg = {0}; ++ ++ uid = g_array_index (uids, gint64, i); ++ user = gdm_user_manager_get_user_by_uid (user_manager, uid); ++ if (user == NULL) ++ continue; ++ ++ user_info = g_value_array_new (5); ++ ++ g_value_init (&arg, G_TYPE_INT64); ++ g_value_set_int64 (&arg, uid); ++ g_value_array_append (user_info, &arg); ++ g_value_unset (&arg); ++ ++ g_value_init (&arg, G_TYPE_STRING); ++ g_value_set_string (&arg, gdm_user_get_user_name (user)); ++ g_value_array_append (user_info, &arg); ++ g_value_unset (&arg); ++ ++ g_value_init (&arg, G_TYPE_STRING); ++ g_value_set_string (&arg, gdm_user_get_real_name (user)); ++ g_value_array_append (user_info, &arg); ++ g_value_unset (&arg); ++ ++ g_value_init (&arg, G_TYPE_STRING); ++ g_value_set_string (&arg, gdm_user_get_shell (user)); ++ g_value_array_append (user_info, &arg); ++ g_value_unset (&arg); ++ ++ g_value_init (&arg, G_TYPE_INT); ++ g_value_set_int (&arg, gdm_user_get_login_frequency (user)); ++ g_value_array_append (user_info, &arg); ++ g_value_unset (&arg); ++ ++ g_value_init (&arg, G_TYPE_STRING); ++ g_value_set_string (&arg, gdm_user_get_icon_url (user)); ++ g_value_array_append (user_info, &arg); ++ g_value_unset (&arg); ++ ++ g_ptr_array_add (*users_info, user_info); ++ } ++ ++ return TRUE; ++} ++ ++/* ++ Example: ++ dbus-send --system --print-reply --dest=org.gnome.DisplayManager \ ++ /org/gnome/DisplayManager/UserManager org.gnome.DisplayManager.UserManager.GetUsersLoaded ++*/ ++gboolean ++gdm_user_manager_get_users_loaded (GdmUserManager *user_manager, ++ gboolean *is_loaded, ++ GError **error) ++{ ++ *is_loaded = user_manager->priv->loaded_passwd; ++ return TRUE; ++} +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-user-manager.h gdm-2.28.1.new/daemon/gdm-user-manager.h +--- gdm-2.28.1/daemon/gdm-user-manager.h 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.1.new/daemon/gdm-user-manager.h 2009-11-26 17:07:31.437723273 +0100 +@@ -0,0 +1,93 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2007 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ */ ++ ++#ifndef __GDM_USER_MANAGER_H ++#define __GDM_USER_MANAGER_H ++ ++#include ++ ++#include "gdm-user.h" ++ ++G_BEGIN_DECLS ++ ++#define GDM_TYPE_USER_MANAGER (gdm_user_manager_get_type ()) ++#define GDM_USER_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_USER_MANAGER, GdmUserManager)) ++#define GDM_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_USER_MANAGER, GdmUserManagerClass)) ++#define GDM_IS_USER_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_USER_MANAGER)) ++#define GDM_IS_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_USER_MANAGER)) ++#define GDM_USER_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_USER_MANAGER, GdmUserManagerClass)) ++ ++typedef struct GdmUserManagerPrivate GdmUserManagerPrivate; ++ ++typedef struct ++{ ++ GObject parent; ++ GdmUserManagerPrivate *priv; ++} GdmUserManager; ++ ++typedef struct ++{ ++ GObjectClass parent_class; ++ ++ void (* users_loaded) (GdmUserManager *user_manager); ++ void (* user_added) (GdmUserManager *user_manager, ++ gint64 uid); ++ void (* user_removed) (GdmUserManager *user_manager, ++ gint64 uid); ++ void (* user_updated) (GdmUserManager *user_manager, ++ gint64 uid); ++} GdmUserManagerClass; ++ ++#define GDM_USER_MANAGER_ERROR gdm_user_manager_error_quark () ++ ++GQuark gdm_user_manager_error_quark (void); ++GType gdm_user_manager_get_type (void); ++ ++GdmUserManager * gdm_user_manager_new (void); ++ ++gboolean gdm_user_manager_count_users (GdmUserManager *user_manager, ++ gint *user_count, ++ GError **error); ++ ++gboolean gdm_user_manager_get_user_list (GdmUserManager *user_manager, ++ GArray **user_list, ++ GError **error); ++ ++gboolean gdm_user_manager_get_user_info (GdmUserManager *user_manager, ++ gint64 uid, ++ gchar **user_name, ++ gchar **real_name, ++ gchar **shell, ++ gint *login_count, ++ gchar **icon_url, ++ GError **error); ++ ++gboolean gdm_user_manager_get_users_info (GdmUserManager *user_manager, ++ GArray *uids, ++ GPtrArray **user_info, ++ GError **error); ++ ++gboolean gdm_user_manager_get_users_loaded (GdmUserManager *user_manager, ++ gboolean *is_loaded, ++ GError **error); ++ ++G_END_DECLS ++ ++#endif /* __GDM_USER_MANAGER_H */ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-user-manager.xml gdm-2.28.1.new/daemon/gdm-user-manager.xml +--- gdm-2.28.1/daemon/gdm-user-manager.xml 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.1.new/daemon/gdm-user-manager.xml 2009-11-26 17:07:31.437723273 +0100 +@@ -0,0 +1,56 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-user-private.h gdm-2.28.1.new/daemon/gdm-user-private.h +--- gdm-2.28.1/daemon/gdm-user-private.h 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.1.new/daemon/gdm-user-private.h 2009-11-26 17:07:31.437723273 +0100 +@@ -0,0 +1,42 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2004-2005 James M. Cape . ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++/* ++ * Private interfaces to the GdmUser object ++ */ ++ ++#ifndef __GDM_USER_PRIVATE__ ++#define __GDM_USER_PRIVATE__ 1 ++ ++#include ++ ++#include "gdm-user.h" ++ ++G_BEGIN_DECLS ++ ++void _gdm_user_update (GdmUser *user, ++ const struct passwd *pwent); ++void _gdm_user_add_session (GdmUser *user, ++ const char *session_id); ++void _gdm_user_remove_session (GdmUser *user, ++ const char *session_id); ++ ++G_END_DECLS ++ ++#endif /* !__GDM_USER_PRIVATE__ */ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/main.c gdm-2.28.1.new/daemon/main.c +--- gdm-2.28.1/daemon/main.c 2009-10-20 00:12:45.000000000 +0200 ++++ gdm-2.28.1.new/daemon/main.c 2009-11-26 17:07:31.437723273 +0100 +@@ -43,6 +43,7 @@ + #include + #include + ++#include "gdm-user-manager.h" + #include "gdm-manager.h" + #include "gdm-log.h" + #include "gdm-common.h" +@@ -59,6 +60,7 @@ + + extern char **environ; + ++static GdmUserManager *user_manager = NULL; + static GdmManager *manager = NULL; + static GdmSettings *settings = NULL; + static uid_t gdm_uid = -1; +@@ -580,6 +582,12 @@ + goto out; + } + ++ user_manager = gdm_user_manager_new (); ++ if (user_manager == NULL) { ++ g_warning ("Could not construct user manager object"); ++ exit (1); ++ } ++ + if (! gdm_settings_direct_init (settings, GDMCONFDIR "/gdm.schemas", "/")) { + g_warning ("Unable to initialize settings"); + goto out; +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/Makefile.am gdm-2.28.1.new/daemon/Makefile.am +--- gdm-2.28.1/daemon/Makefile.am 2009-11-26 17:07:26.267716612 +0100 ++++ gdm-2.28.1.new/daemon/Makefile.am 2009-11-26 17:07:31.437723273 +0100 +@@ -9,6 +9,7 @@ + -DDATADIR=\"$(datadir)\" \ + -DDMCONFDIR=\"$(dmconfdir)\" \ + -DGDMCONFDIR=\"$(gdmconfdir)\" \ ++ -DCACHEDIR=\"$(cachedir)\" \ + -DLIBDIR=\"$(libdir)\" \ + -DLIBEXECDIR=\"$(libexecdir)\" \ + -DLOGDIR=\"$(logdir)\" \ +@@ -34,6 +35,7 @@ + gdm-session-direct-glue.h \ + gdm-manager-glue.h \ + gdm-display-glue.h \ ++ gdm-user-manager-glue.h \ + gdm-xdmcp-greeter-display-glue.h \ + gdm-xdmcp-chooser-display-glue.h \ + gdm-static-display-glue.h \ +@@ -45,6 +47,8 @@ + + gdm-manager-glue.h: gdm-manager.xml Makefile.am + dbus-binding-tool --prefix=gdm_manager --mode=glib-server --output=gdm-manager-glue.h $(srcdir)/gdm-manager.xml ++gdm-user-manager-glue.h: gdm-user-manager.xml Makefile.am ++ dbus-binding-tool --prefix=gdm_user_manager --mode=glib-server --output=gdm-user-manager-glue.h $(srcdir)/gdm-user-manager.xml + gdm-slave-glue.h: gdm-slave.xml Makefile.am + dbus-binding-tool --prefix=gdm_slave --mode=glib-server --output=gdm-slave-glue.h $(srcdir)/gdm-slave.xml + gdm-simple-slave-glue.h: gdm-simple-slave.xml Makefile.am +@@ -306,6 +310,11 @@ + gdm-product-display.h \ + gdm-manager.c \ + gdm-manager.h \ ++ gdm-user.c \ ++ gdm-user.h \ ++ gdm-user-private.h \ ++ gdm-user-manager.c \ ++ gdm-user-manager.h \ + gdm-slave-proxy.c \ + gdm-slave-proxy.h \ + $(NULL) +@@ -368,6 +377,7 @@ + gdm-session-direct.xml \ + gdm-manager.xml \ + gdm-display.xml \ ++ gdm-user-manager.xml \ + gdm-xdmcp-greeter-display.xml \ + gdm-xdmcp-chooser-display.xml \ + gdm-static-display.xml \ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/data/gdm.conf.in gdm-2.28.1.new/data/gdm.conf.in +--- gdm-2.28.1/data/gdm.conf.in 2009-11-26 17:07:29.477742113 +0100 ++++ gdm-2.28.1.new/data/gdm.conf.in 2009-11-26 17:07:31.437723273 +0100 +@@ -8,6 +8,8 @@ + + + ++ + +@@ -28,6 +30,8 @@ + + + ++ + +@@ -71,6 +75,22 @@ + ++ ++ ++ ++ ++ ++ + + + ++ + --- gdm-2.29.4.orig/debian/patches/13_cache_ck_history.patch +++ gdm-2.29.4/debian/patches/13_cache_ck_history.patch @@ -0,0 +1,118 @@ +# +# Description: Cache the result of ck-history so greeter shows user list immediately after login +# Ubuntu: https://bugs.edge.launchpad.net/ubuntu/karmic/+source/gdm/+bug/400863 +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=594344 +# +diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am +index b36aa28..901a71b 100644 +--- a/gui/simple-greeter/Makefile.am ++++ b/gui/simple-greeter/Makefile.am +@@ -10,6 +10,7 @@ AM_CPPFLAGS = \ + -DDMCONFDIR=\""$(dmconfdir)"\" \ + -DGDMCONFDIR=\"$(gdmconfdir)\" \ + -DDATADIR=\""$(datadir)"\" \ ++ -DCACHEDIR=\""$(GDM_WORKING_DIR)/.cache"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DLIBLOCALEDIR=\""$(prefix)/lib/locale"\" \ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ +diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c +index 6c91b3b..3fb8423 100644 +--- a/gui/simple-greeter/gdm-user-manager.c ++++ b/gui/simple-greeter/gdm-user-manager.c +@@ -99,6 +99,8 @@ + "pcap", \ + NULL } + ++#define LOGIN_CACHE_FILE CACHEDIR "/login_frequency.cache" ++ + struct GdmUserManagerPrivate + { + GHashTable *users; +@@ -116,6 +118,8 @@ struct GdmUserManagerPrivate + guint ck_history_id; + + guint8 users_dirty : 1; ++ guint8 loaded_cache : 1; ++ guint8 loading_users : 1; + }; + + enum { +@@ -1274,7 +1278,30 @@ ck_history_watch (GIOChannel *source, + } + + if (done) { +- g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0); ++ FILE *fp; ++ ++ /* Cache login counts */ ++ fp = fopen (LOGIN_CACHE_FILE, "w"); ++ if (fp != NULL) { ++ GHashTableIter iter; ++ gpointer value; ++ ++ g_hash_table_iter_init (&iter, manager->priv->users); ++ while (g_hash_table_iter_next (&iter, NULL, &value)) { ++ GdmUser *user = (GdmUser *) value; ++ fprintf (fp, "%s %lu\n", ++ gdm_user_get_user_name (user), ++ gdm_user_get_login_frequency (user)); ++ } ++ fclose (fp); ++ } ++ else ++ g_warning ("Unable to write to login cache file: %s", LOGIN_CACHE_FILE); ++ ++ if (manager->priv->loading_users) { ++ g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0); ++ manager->priv->loading_users = FALSE; ++ } + + manager->priv->ck_history_id = 0; + return FALSE; +@@ -1472,8 +1499,35 @@ reload_passwd (GdmUserManager *manager) + } + + static void ++load_login_frequency_cache (GdmUserManager *manager) ++{ ++ GIOChannel *channel; ++ gchar *line; ++ ++ channel = g_io_channel_new_file (LOGIN_CACHE_FILE, "r", NULL); ++ if (channel == NULL) ++ return; ++ ++ while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL) == G_IO_STATUS_NORMAL) { ++ process_ck_history_line (manager, line); ++ g_free (line); ++ } ++ ++ g_io_channel_close (channel); ++ ++ if (manager->priv->loading_users) { ++ g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0); ++ manager->priv->loading_users = FALSE; ++ } ++} ++ ++static void + reload_users (GdmUserManager *manager) + { ++ if (!manager->priv->loaded_cache) { ++ load_login_frequency_cache (manager); ++ manager->priv->loaded_cache = TRUE; ++ } + reload_ck_history (manager); + reload_passwd (manager); + } +@@ -1495,6 +1549,7 @@ queue_reload_users (GdmUserManager *manager) + } + + g_signal_emit (G_OBJECT (manager), signals[LOADING_USERS], 0); ++ manager->priv->loading_users = TRUE; + manager->priv->reload_id = g_idle_add ((GSourceFunc)reload_users_timeout, manager); + } + +-- +1.6.3.3 + --- gdm-2.29.4.orig/debian/patches/09_gdmsetup.patch +++ gdm-2.29.4/debian/patches/09_gdmsetup.patch @@ -0,0 +1,3923 @@ +# +# Description: Add GDM Setup +# Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/395299 +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=587750 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/configure.ac gdm-2.28.0.new/configure.ac +--- gdm-2.28.0/configure.ac 2009-09-22 16:42:24.000000000 +0200 ++++ gdm-2.28.0.new/configure.ac 2009-09-22 16:42:25.000000000 +0200 +@@ -107,6 +107,14 @@ + AC_SUBST(GCONF_CFLAGS) + AC_SUBST(GCONF_LIBS) + ++PKG_CHECK_MODULES(GDMSETUP, ++ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++) ++AC_SUBST(GDMSETUP_CFLAGS) ++AC_SUBST(GDMSETUP_LIBS) ++ + PKG_CHECK_MODULES(SIMPLE_GREETER, + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= $GTK_REQUIRED_VERSION +@@ -1352,12 +1360,14 @@ + daemon/Makefile + docs/Makefile + gui/Makefile ++gui/gdmsetup/Makefile + gui/simple-greeter/Makefile + gui/simple-greeter/libnotificationarea/Makefile + gui/simple-chooser/Makefile + gui/user-switch-applet/Makefile + utils/Makefile + data/gdm.conf ++data/gdm.policy + data/Makefile + data/faces/Makefile + data/greeter-autostart/Makefile +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdmsetup.c gdm-2.28.0.new/gui/gdmsetup/gdmsetup.c +--- gdm-2.28.0/gui/gdmsetup/gdmsetup.c 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdmsetup.c 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,484 @@ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "gdm-user-manager.h" ++ ++#define MAX_USERS_IN_COMBO_BOX 20 ++ ++/* User interface */ ++static GtkBuilder *ui; ++static GtkWidget *dialog, *unlock_button, *option_vbox; ++static GtkWidget *user_combo, *user_entry, *delay_spin; ++static GtkWidget *auto_login_radio, *login_delay_box, *login_delay_check; ++ ++/* Timer to delay application of configuration */ ++static guint apply_timeout = 0; ++ ++/* Flag to show when information is loaded */ ++static gboolean loaded = FALSE; ++ ++/* Flag to show when information is loaded */ ++static gboolean locked = TRUE; ++ ++/* True if the user selection method is a combo box, False if an entry */ ++static gboolean user_list_is_combo = TRUE; ++ ++/* User information */ ++static GdmUserManager *user_manager; ++ ++/* Proxy to GDM settings */ ++static DBusGProxy *proxy = NULL; ++ ++ ++static gchar * ++get_value (const gchar *key, gchar *def) ++{ ++ gchar *value; ++ GError *error = NULL; ++ ++ if (!dbus_g_proxy_call (proxy, "GetValue", &error, ++ G_TYPE_STRING, key, G_TYPE_INVALID, ++ G_TYPE_STRING, &value, G_TYPE_INVALID)) { ++ g_warning ("Error calling GetValue('%s'): %s", key, error->message); ++ return def; ++ } ++ ++ return value; ++} ++ ++ ++static gboolean ++set_value (const gchar *key, const gchar *value) ++{ ++ GError *error = NULL; ++ ++ dbus_g_proxy_call (proxy, "SetValue", &error, ++ G_TYPE_STRING, key, ++ G_TYPE_STRING, value, G_TYPE_INVALID, G_TYPE_INVALID); ++ if (error) { ++ g_warning ("Error calling SetValue('%s', '%s'): %s", key, value, error->message); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++ ++static gboolean ++get_boolean_value (const gchar *key, gboolean def) ++{ ++ gchar *value; ++ gboolean result; ++ ++ value = get_value (key, NULL); ++ if (!value) ++ return def; ++ result = strcmp (value, "true") == 0; ++ g_free (value); ++ return result; ++} ++ ++ ++static gint ++get_integer_value (const gchar *key, gint def) ++{ ++ gchar *value; ++ gint result; ++ char *end; ++ ++ value = get_value (key, NULL); ++ if (!value || value[0] == '\0') ++ result = def; ++ else { ++ result = strtol (value, &end, 10); ++ if (*end != '\0') ++ result = def; ++ } ++ ++ if (value) ++ g_free (value); ++ return result; ++} ++ ++ ++static gboolean ++set_boolean_value (const gchar *key, gboolean value) ++{ ++ return set_value (key, value ? "true" : "false"); ++} ++ ++ ++static gboolean ++set_integer_value (const gchar *key, gint value) ++{ ++ char value_string[1024]; ++ snprintf(value_string, 1024, "%d", value); ++ return set_value (key, value_string); ++} ++ ++ ++static void ++update_config () ++{ ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ gchar *user = NULL; ++ gint delay = 0; ++ gboolean auto_login = FALSE, timed_login = FALSE, error = FALSE; ++ ++ if (apply_timeout != 0) { ++ g_source_remove (apply_timeout); ++ apply_timeout = 0; ++ } ++ ++ if (user_list_is_combo) { ++ model = gtk_combo_box_get_model (GTK_COMBO_BOX (user_combo)); ++ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (user_combo), &iter)) ++ gtk_tree_model_get (model, &iter, 1, &user, -1); ++ } ++ else ++ user = g_strdup (gtk_entry_get_text (GTK_ENTRY (user_entry))); ++ ++ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (auto_login_radio))) { ++ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (login_delay_check))) ++ timed_login = TRUE; ++ else ++ auto_login = TRUE; ++ } ++ ++ delay = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (delay_spin)); ++ ++ g_debug ("set user='%s', auto=%s, timed=%s, delay=%d", ++ user, ++ auto_login ? "True" : "False", ++ timed_login ? "True" : "False", delay); ++ ++ if (!set_boolean_value ("daemon/TimedLoginEnable", timed_login) || ++ !set_boolean_value ("daemon/AutomaticLoginEnable", auto_login) || ++ !set_value ("daemon/TimedLogin", user) || ++ !set_value ("daemon/AutomaticLogin", user) || ++ !set_integer_value ("daemon/TimedLoginDelay", delay)) ++ error = FALSE; ++ ++ if (user) ++ g_free (user); ++} ++ ++ ++G_MODULE_EXPORT ++void ++gdm_capplet_response_cb (GtkWidget *widget, gint response_id) ++{ ++ if (response_id != 1) ++ gtk_main_quit (); ++} ++ ++ ++static void ++unlock_response_cb (DBusGProxy *proxy, ++ DBusGProxyCall *call_id, ++ void *user_data) ++{ ++ gboolean is_unlocked; ++ GError *error = NULL; ++ ++ dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_BOOLEAN, &is_unlocked, G_TYPE_INVALID); ++ if (error) { ++ g_warning ("Failed to unlock: %s", error->message); ++ g_error_free (error); ++ return; ++ } ++ ++ if (!is_unlocked) ++ return; ++ ++ locked = FALSE; ++ gtk_widget_set_sensitive (unlock_button, FALSE); ++ gtk_widget_set_sensitive (option_vbox, loaded && !locked); ++} ++ ++ ++G_MODULE_EXPORT ++void ++unlock_button_clicked_cb (GtkWidget *widget) ++{ ++ dbus_g_proxy_begin_call (proxy, "Unlock", unlock_response_cb, NULL, NULL, G_TYPE_INVALID); ++} ++ ++ ++G_MODULE_EXPORT ++void ++login_delay_check_toggled_cb (GtkWidget *widget) ++{ ++ gtk_widget_set_sensitive (delay_spin, ++ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (login_delay_check))); ++ ++ if (loaded) ++ update_config (); ++} ++ ++ ++static gboolean ++delayed_apply_cb () ++{ ++ update_config (); ++ return FALSE; ++} ++ ++ ++G_MODULE_EXPORT ++void ++apply_config_cb (GtkWidget *widget) ++{ ++ if (loaded) { ++ if (apply_timeout != 0) ++ g_source_remove (apply_timeout); ++ apply_timeout = g_timeout_add (200, (GSourceFunc)delayed_apply_cb, NULL); ++ } ++} ++ ++ ++static void ++init_login_delay () ++{ ++ gint delay; ++ ++ if (get_boolean_value ("daemon/TimedLoginEnable", FALSE)) ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (login_delay_check), TRUE); ++ ++ delay = get_integer_value ("daemon/TimedLoginDelay", 30); ++ ++ g_debug ("init delay=%d", delay); ++ ++ gtk_spin_button_set_value (GTK_SPIN_BUTTON (delay_spin), delay); ++} ++ ++ ++G_MODULE_EXPORT ++void ++automatic_login_toggle_cb (GtkWidget *automatic_login_toggle) ++{ ++ gboolean automatic_login; ++ ++ automatic_login = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (automatic_login_toggle)); ++ gtk_widget_set_sensitive (login_delay_box, automatic_login); ++ gtk_widget_set_sensitive (user_combo, automatic_login); ++ gtk_widget_set_sensitive (user_entry, automatic_login); ++ ++ if (loaded) ++ update_config (); ++} ++ ++ ++G_MODULE_EXPORT ++void ++default_user_combo_box_changed_cb (void) ++{ ++ if (loaded) { ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (auto_login_radio), TRUE); ++ update_config (); ++ } ++} ++ ++ ++static void ++init_default_user (void) ++{ ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ gboolean auto_login, timed_login, active; ++ gchar *user = NULL; ++ ++ auto_login = get_boolean_value ("daemon/AutomaticLoginEnable", FALSE); ++ timed_login = get_boolean_value ("daemon/TimedLoginEnable", FALSE); ++ ++ if (auto_login) ++ user = get_value ("daemon/AutomaticLogin", NULL); ++ if (user == NULL) ++ user = get_value ("daemon/TimedLogin", NULL); ++ ++ g_debug ("init user='%s' auto=%s", user, auto_login || timed_login ? "True" : "False"); ++ ++ if (auto_login || timed_login) ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (auto_login_radio), TRUE); ++ ++ if (!user_list_is_combo) { ++ if (user != NULL) ++ gtk_entry_set_text (GTK_ENTRY (user_entry), user); ++ } ++ else { ++ model = gtk_combo_box_get_model (GTK_COMBO_BOX (user_combo)); ++ active = gtk_tree_model_get_iter_first (model, &iter); ++ ++ /* If no user then use first available */ ++ if (user == NULL) { ++ if (active) ++ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (user_combo), &iter); ++ } ++ else { ++ while (user != NULL && active) { ++ gchar *u; ++ gboolean matched; ++ ++ gtk_tree_model_get (model, &iter, 1, &u, -1); ++ matched = strcmp (user, u) == 0; ++ g_free (u); ++ if (matched) { ++ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (user_combo), &iter); ++ break; ++ } ++ ++ active = gtk_tree_model_iter_next (model, &iter); ++ } ++ } ++ } ++ ++ g_free (user); ++} ++ ++ ++static void add_user (GdmUser *user) ++{ ++ GtkListStore *model; ++ GtkTreeIter iter; ++ GString *label; ++ ++ model = GTK_LIST_STORE (gtk_builder_get_object (ui, "login_user_model")); ++ gtk_list_store_append (model, &iter); ++ label = g_string_new(""); ++ g_string_printf (label, "%s (%s)", gdm_user_get_real_name (user), gdm_user_get_user_name (user)); ++ gtk_list_store_set (model, &iter, ++ 0, label->str, ++ 1, gdm_user_get_user_name (user), ++ -1); ++ g_string_free (label, TRUE); ++} ++ ++ ++static void ++users_loaded_cb(GdmUserManager *manager) ++{ ++ GSList *users, *item; ++ ++ users = gdm_user_manager_list_users (user_manager); ++ ++ if (g_slist_length (users) > MAX_USERS_IN_COMBO_BOX) { ++ user_list_is_combo = FALSE; ++ gtk_widget_hide (user_combo); ++ gtk_widget_show (user_entry); ++ } ++ else { ++ for (item = users; item; item = item->next) ++ add_user ((GdmUser *) item->data); ++ } ++ ++ init_default_user (); ++ ++ loaded = TRUE; ++ gtk_widget_set_sensitive (option_vbox, loaded && !locked); ++} ++ ++ ++static void ++user_added_cb (GdmUserManager *manager, GdmUser *user) ++{ ++ if (loaded) ++ add_user (user); ++} ++ ++ ++static void ++split_text (const gchar *text, const gchar *prefix_label_name, const gchar *suffix_label_name) ++{ ++ gchar **tokens; ++ GtkWidget *prefix_label, *suffix_label; ++ ++ prefix_label = GTK_WIDGET (gtk_builder_get_object (ui, prefix_label_name)); ++ suffix_label = GTK_WIDGET (gtk_builder_get_object (ui, suffix_label_name)); ++ ++ tokens = g_strsplit (text, "%s", 2); ++ if (tokens[0] != NULL && tokens[1] != NULL) { ++ if (tokens[0][0] != '\0') ++ gtk_label_set_text (GTK_LABEL (prefix_label), g_strstrip (tokens[0])); ++ else ++ gtk_widget_hide (prefix_label); ++ if (tokens[1][0] != '\0') ++ gtk_label_set_text (GTK_LABEL (suffix_label), g_strstrip (tokens[1])); ++ else ++ gtk_widget_hide (suffix_label); ++ } ++ g_strfreev (tokens); ++} ++ ++ ++int main (int argc, char **argv) ++{ ++ GtkCellRenderer *renderer; ++ DBusGConnection *connection; ++ GError *error = NULL; ++ ++ bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); ++ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); ++ textdomain (GETTEXT_PACKAGE); ++ ++ gtk_init (&argc, &argv); ++ ++ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); ++ if (error) { ++ g_warning ("Failed to get system bus: %s", error->message); ++ return 1; ++ } ++ proxy = dbus_g_proxy_new_for_name (connection, ++ "org.gnome.DisplayManager", ++ "/org/gnome/DisplayManager/Settings", ++ "org.gnome.DisplayManager.Settings"); ++ ++ ui = gtk_builder_new (); ++ gtk_builder_add_from_file (ui, UIDIR "/gdmsetup.ui", &error); ++ if (error) { ++ g_warning ("Failed to load UI: %s", error->message); ++ return 1; ++ } ++ dialog = GTK_WIDGET (gtk_builder_get_object (ui, "gdm_capplet")); ++ unlock_button = GTK_WIDGET (gtk_builder_get_object (ui, "unlock_button")); ++ option_vbox = GTK_WIDGET (gtk_builder_get_object (ui, "gdm_capplet_vbox")); ++ user_combo = GTK_WIDGET (gtk_builder_get_object (ui, "default_user_combo_box")); ++ user_entry = GTK_WIDGET (gtk_builder_get_object (ui, "default_user_entry")); ++ delay_spin = GTK_WIDGET (gtk_builder_get_object (ui, "login_delay_spin")); ++ auto_login_radio = GTK_WIDGET (gtk_builder_get_object (ui, "automatic_login_radio")); ++ login_delay_box = GTK_WIDGET (gtk_builder_get_object (ui, "login_delay_box")); ++ login_delay_check = GTK_WIDGET (gtk_builder_get_object (ui, "login_delay_check")); ++ gtk_builder_connect_signals (ui, NULL); ++ ++ /* Translators: Label for choosing which user to log in as. '%s' is replaced with an input field. */ ++ split_text (_("Log in as %s automatically"), "user_prefix_label", "user_suffix_label"); ++ /* Translators: Label for choosing the login delay. '%s' is replaced with an input field. */ ++ split_text (_("Allow %s seconds for anyone else to log in first"), "delay_prefix_label", "delay_suffix_label"); ++ ++ init_login_delay (); ++ ++ renderer = gtk_cell_renderer_text_new (); ++ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (user_combo), renderer, TRUE); ++ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (user_combo), renderer, "text", 0); ++ ++ user_manager = gdm_user_manager_ref_default (); ++ g_signal_connect (user_manager, "users-loaded", G_CALLBACK (users_loaded_cb), NULL); ++ g_signal_connect (user_manager, "user-added", G_CALLBACK (user_added_cb), NULL); ++ ++ gtk_widget_hide (user_entry); ++ ++ gtk_widget_set_sensitive (option_vbox, FALSE); ++ gtk_widget_show (dialog); ++ ++ gtk_main (); ++ ++ return 0; ++} +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdmsetup.desktop.in gdm-2.28.0.new/gui/gdmsetup/gdmsetup.desktop.in +--- gdm-2.28.0/gui/gdmsetup/gdmsetup.desktop.in 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdmsetup.desktop.in 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,12 @@ ++[Desktop Entry] ++_Name=Login Screen ++_Comment=Configure login screen behavior ++Exec=gdmsetup ++Icon=gdm-setup ++StartupNotify=true ++Terminal=false ++Type=Application ++Categories=GNOME;GTK;Settings;System; ++X-GNOME-Bugzilla-Bugzilla=GNOME ++X-GNOME-Bugzilla-Product=gdm ++X-GNOME-Bugzilla-Component=general +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdmsetup.ui gdm-2.28.0.new/gui/gdmsetup/gdmsetup.ui +--- gdm-2.28.0/gui/gdmsetup/gdmsetup.ui 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdmsetup.ui 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,271 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 5 ++ Login Screen Settings ++ False ++ center ++ gdm-setup ++ normal ++ False ++ ++ ++ ++ True ++ vertical ++ 12 ++ ++ ++ True ++ vertical ++ 18 ++ ++ ++ True ++ 0 ++ When the computer starts up: ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ vertical ++ 12 ++ ++ ++ _Show the screen for choosing who will log in ++ True ++ True ++ False ++ True ++ True ++ True ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ vertical ++ 6 ++ ++ ++ True ++ 6 ++ ++ ++ True ++ True ++ False ++ True ++ manual_login_radio ++ ++ ++ ++ True ++ _Log in as ++ True ++ ++ ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ False ++ login_user_model ++ ++ ++ ++ False ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ ++ ++ ++ ++ 2 ++ ++ ++ ++ ++ True ++ automatically ++ ++ ++ False ++ 3 ++ ++ ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ 16 ++ ++ ++ True ++ False ++ 6 ++ ++ ++ True ++ True ++ False ++ True ++ ++ ++ ++ True ++ _Allow ++ True ++ ++ ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ False ++ True ++ ++ adjustment1 ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ True ++ seconds for anyone else to log in first ++ ++ ++ False ++ 2 ++ ++ ++ ++ ++ ++ ++ False ++ 1 ++ ++ ++ ++ ++ False ++ 1 ++ ++ ++ ++ ++ False ++ 1 ++ ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ True ++ end ++ ++ ++ _Unlock ++ True ++ True ++ True ++ image1 ++ True ++ ++ ++ ++ False ++ False ++ 0 ++ ++ ++ ++ ++ gtk-close ++ True ++ True ++ True ++ True ++ ++ ++ False ++ False ++ 1 ++ ++ ++ ++ ++ False ++ end ++ 0 ++ ++ ++ ++ ++ ++ unlock_button ++ close_button ++ ++ ++ ++ True ++ gtk-dialog-authentication ++ ++ ++ ++ ++ 1 ++ 600 ++ 1 ++ ++ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdm-user.c gdm-2.28.0.new/gui/gdmsetup/gdm-user.c +--- gdm-2.28.0/gui/gdmsetup/gdm-user.c 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdm-user.c 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,1172 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2004-2005 James M. Cape . ++ * Copyright (C) 2007-2008 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "gdm-user-manager.h" ++#include "gdm-user-private.h" ++ ++#define GDM_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDM_TYPE_USER, GdmUserClass)) ++#define GDM_IS_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDM_TYPE_USER)) ++#define GDM_USER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GDM_TYPE_USER, GdmUserClass)) ++ ++#define GLOBAL_FACEDIR DATADIR "/faces" ++#define MAX_ICON_SIZE 128 ++#define MAX_FILE_SIZE 65536 ++#define MINIMAL_UID 100 ++#define RELAX_GROUP TRUE ++#define RELAX_OTHER TRUE ++ ++enum { ++ PROP_0, ++ PROP_MANAGER, ++ PROP_REAL_NAME, ++ PROP_USER_NAME, ++ PROP_UID, ++ PROP_HOME_DIR, ++ PROP_SHELL, ++ PROP_LOGIN_FREQUENCY, ++}; ++ ++enum { ++ ICON_CHANGED, ++ SESSIONS_CHANGED, ++ LAST_SIGNAL ++}; ++ ++struct _GdmUser { ++ GObject parent; ++ ++ GdmUserManager *manager; ++ ++ uid_t uid; ++ char *user_name; ++ char *real_name; ++ char *home_dir; ++ char *shell; ++ GList *sessions; ++ gulong login_frequency; ++ ++ GFileMonitor *icon_monitor; ++}; ++ ++typedef struct _GdmUserClass ++{ ++ GObjectClass parent_class; ++ ++ void (* icon_changed) (GdmUser *user); ++ void (* sessions_changed) (GdmUser *user); ++} GdmUserClass; ++ ++static void gdm_user_finalize (GObject *object); ++ ++static guint signals[LAST_SIGNAL] = { 0 }; ++ ++G_DEFINE_TYPE (GdmUser, gdm_user, G_TYPE_OBJECT) ++ ++static int ++session_compare (const char *a, ++ const char *b) ++{ ++ if (a == NULL) { ++ return 1; ++ } else if (b == NULL) { ++ return -1; ++ } ++ ++ return strcmp (a, b); ++} ++ ++void ++_gdm_user_add_session (GdmUser *user, ++ const char *ssid) ++{ ++ GList *li; ++ ++ g_return_if_fail (GDM_IS_USER (user)); ++ g_return_if_fail (ssid != NULL); ++ ++ li = g_list_find_custom (user->sessions, ssid, (GCompareFunc)session_compare); ++ if (li == NULL) { ++ g_debug ("GdmUser: adding session %s", ssid); ++ user->sessions = g_list_prepend (user->sessions, g_strdup (ssid)); ++ g_signal_emit (user, signals[SESSIONS_CHANGED], 0); ++ } else { ++ g_debug ("GdmUser: session already present: %s", ssid); ++ } ++} ++ ++void ++_gdm_user_remove_session (GdmUser *user, ++ const char *ssid) ++{ ++ GList *li; ++ ++ g_return_if_fail (GDM_IS_USER (user)); ++ g_return_if_fail (ssid != NULL); ++ ++ li = g_list_find_custom (user->sessions, ssid, (GCompareFunc)session_compare); ++ if (li != NULL) { ++ g_debug ("GdmUser: removing session %s", ssid); ++ g_free (li->data); ++ user->sessions = g_list_delete_link (user->sessions, li); ++ g_signal_emit (user, signals[SESSIONS_CHANGED], 0); ++ } else { ++ g_debug ("GdmUser: session not found: %s", ssid); ++ } ++} ++ ++guint ++gdm_user_get_num_sessions (GdmUser *user) ++{ ++ return g_list_length (user->sessions); ++} ++ ++GList * ++gdm_user_get_sessions (GdmUser *user) ++{ ++ return user->sessions; ++} ++ ++static void ++_gdm_user_set_login_frequency (GdmUser *user, ++ gulong login_frequency) ++{ ++ user->login_frequency = login_frequency; ++ g_object_notify (G_OBJECT (user), "login-frequency"); ++} ++ ++static void ++gdm_user_set_property (GObject *object, ++ guint param_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GdmUser *user; ++ ++ user = GDM_USER (object); ++ ++ switch (param_id) { ++ case PROP_MANAGER: ++ user->manager = g_value_get_object (value); ++ g_assert (user->manager); ++ break; ++ case PROP_LOGIN_FREQUENCY: ++ _gdm_user_set_login_frequency (user, g_value_get_ulong (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); ++ break; ++ } ++} ++ ++static void ++gdm_user_get_property (GObject *object, ++ guint param_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GdmUser *user; ++ ++ user = GDM_USER (object); ++ ++ switch (param_id) { ++ case PROP_MANAGER: ++ g_value_set_object (value, user->manager); ++ break; ++ case PROP_USER_NAME: ++ g_value_set_string (value, user->user_name); ++ break; ++ case PROP_REAL_NAME: ++ g_value_set_string (value, user->real_name); ++ break; ++ case PROP_HOME_DIR: ++ g_value_set_string (value, user->home_dir); ++ break; ++ case PROP_UID: ++ g_value_set_ulong (value, user->uid); ++ break; ++ case PROP_SHELL: ++ g_value_set_string (value, user->shell); ++ break; ++ case PROP_LOGIN_FREQUENCY: ++ g_value_set_ulong (value, user->login_frequency); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); ++ break; ++ } ++} ++ ++static void ++gdm_user_class_init (GdmUserClass *class) ++{ ++ GObjectClass *gobject_class; ++ ++ gobject_class = G_OBJECT_CLASS (class); ++ ++ gobject_class->set_property = gdm_user_set_property; ++ gobject_class->get_property = gdm_user_get_property; ++ gobject_class->finalize = gdm_user_finalize; ++ ++ g_object_class_install_property (gobject_class, ++ PROP_MANAGER, ++ g_param_spec_object ("manager", ++ _("Manager"), ++ _("The user manager object this user is controlled by."), ++ GDM_TYPE_USER_MANAGER, ++ (G_PARAM_READWRITE | ++ G_PARAM_CONSTRUCT_ONLY))); ++ ++ g_object_class_install_property (gobject_class, ++ PROP_REAL_NAME, ++ g_param_spec_string ("real-name", ++ "Real Name", ++ "The real name to display for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ ++ g_object_class_install_property (gobject_class, ++ PROP_UID, ++ g_param_spec_ulong ("uid", ++ "User ID", ++ "The UID for this user.", ++ 0, G_MAXULONG, 0, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_USER_NAME, ++ g_param_spec_string ("user-name", ++ "User Name", ++ "The login name for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_HOME_DIR, ++ g_param_spec_string ("home-directory", ++ "Home Directory", ++ "The home directory for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_SHELL, ++ g_param_spec_string ("shell", ++ "Shell", ++ "The shell for this user.", ++ NULL, ++ G_PARAM_READABLE)); ++ g_object_class_install_property (gobject_class, ++ PROP_LOGIN_FREQUENCY, ++ g_param_spec_ulong ("login-frequency", ++ "login frequency", ++ "login frequency", ++ 0, ++ G_MAXULONG, ++ 0, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); ++ ++ signals [ICON_CHANGED] = ++ g_signal_new ("icon-changed", ++ G_TYPE_FROM_CLASS (class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserClass, icon_changed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, 0); ++ signals [SESSIONS_CHANGED] = ++ g_signal_new ("sessions-changed", ++ G_TYPE_FROM_CLASS (class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserClass, sessions_changed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, 0); ++} ++ ++ ++static void ++on_icon_monitor_changed (GFileMonitor *monitor, ++ GFile *file, ++ GFile *other_file, ++ GFileMonitorEvent event_type, ++ GdmUser *user) ++{ ++ g_debug ("Icon changed: %d", event_type); ++ ++ if (event_type != G_FILE_MONITOR_EVENT_CHANGED && ++ event_type != G_FILE_MONITOR_EVENT_CREATED) { ++ return; ++ } ++ ++ _gdm_user_icon_changed (user); ++} ++ ++static void ++update_icon_monitor (GdmUser *user) ++{ ++ GFile *file; ++ GError *error; ++ char *path; ++ ++ if (user->home_dir == NULL) { ++ return; ++ } ++ ++ if (user->icon_monitor != NULL) { ++ g_file_monitor_cancel (user->icon_monitor); ++ user->icon_monitor = NULL; ++ } ++ ++ path = g_build_filename (user->home_dir, ".face", NULL); ++ g_debug ("adding monitor for '%s'", path); ++ file = g_file_new_for_path (path); ++ error = NULL; ++ user->icon_monitor = g_file_monitor_file (file, ++ G_FILE_MONITOR_NONE, ++ NULL, ++ &error); ++ if (user->icon_monitor != NULL) { ++ g_signal_connect (user->icon_monitor, ++ "changed", ++ G_CALLBACK (on_icon_monitor_changed), ++ user); ++ } else { ++ g_warning ("Unable to monitor %s: %s", path, error->message); ++ g_error_free (error); ++ } ++ g_object_unref (file); ++ g_free (path); ++} ++ ++static void ++gdm_user_init (GdmUser *user) ++{ ++ user->manager = NULL; ++ user->user_name = NULL; ++ user->real_name = NULL; ++ user->sessions = NULL; ++} ++ ++static void ++gdm_user_finalize (GObject *object) ++{ ++ GdmUser *user; ++ ++ user = GDM_USER (object); ++ ++ g_file_monitor_cancel (user->icon_monitor); ++ ++ g_free (user->user_name); ++ g_free (user->real_name); ++ ++ if (G_OBJECT_CLASS (gdm_user_parent_class)->finalize) ++ (*G_OBJECT_CLASS (gdm_user_parent_class)->finalize) (object); ++} ++ ++/** ++ * _gdm_user_update: ++ * @user: the user object to update. ++ * @pwent: the user data to use. ++ * ++ * Updates the properties of @user using the data in @pwent. ++ * ++ * Since: 1.0 ++ **/ ++void ++_gdm_user_update (GdmUser *user, ++ const struct passwd *pwent) ++{ ++ gchar *real_name; ++ ++ g_return_if_fail (GDM_IS_USER (user)); ++ g_return_if_fail (pwent != NULL); ++ ++ g_object_freeze_notify (G_OBJECT (user)); ++ ++ /* Display Name */ ++ if (pwent->pw_gecos && pwent->pw_gecos[0] != '\0') { ++ gchar *first_comma; ++ ++ first_comma = strchr (pwent->pw_gecos, ','); ++ if (first_comma) { ++ real_name = g_strndup (pwent->pw_gecos, ++ (first_comma - pwent->pw_gecos)); ++ } else { ++ real_name = g_strdup (pwent->pw_gecos); ++ } ++ ++ if (real_name[0] == '\0') { ++ g_free (real_name); ++ real_name = NULL; ++ } ++ } else { ++ real_name = NULL; ++ } ++ ++ if ((real_name && !user->real_name) || ++ (!real_name && user->real_name) || ++ (real_name && ++ user->real_name && ++ strcmp (real_name, user->real_name) != 0)) { ++ g_free (user->real_name); ++ user->real_name = real_name; ++ g_object_notify (G_OBJECT (user), "real-name"); ++ } else { ++ g_free (real_name); ++ } ++ ++ /* UID */ ++ if (pwent->pw_uid != user->uid) { ++ user->uid = pwent->pw_uid; ++ g_object_notify (G_OBJECT (user), "uid"); ++ } ++ ++ /* Username */ ++ if ((pwent->pw_name && !user->user_name) || ++ (!pwent->pw_name && user->user_name) || ++ (pwent->pw_name && ++ user->user_name && ++ strcmp (user->user_name, pwent->pw_name) != 0)) { ++ g_free (user->user_name); ++ user->user_name = g_strdup (pwent->pw_name); ++ g_object_notify (G_OBJECT (user), "user-name"); ++ } ++ ++ /* Home Directory */ ++ if ((pwent->pw_dir && !user->home_dir) || ++ (!pwent->pw_dir && user->home_dir) || ++ strcmp (user->home_dir, pwent->pw_dir) != 0) { ++ g_free (user->home_dir); ++ user->home_dir = g_strdup (pwent->pw_dir); ++ g_object_notify (G_OBJECT (user), "home-directory"); ++ g_signal_emit (user, signals[ICON_CHANGED], 0); ++ } ++ ++ /* Shell */ ++ if ((pwent->pw_shell && !user->shell) || ++ (!pwent->pw_shell && user->shell) || ++ (pwent->pw_shell && ++ user->shell && ++ strcmp (user->shell, pwent->pw_shell) != 0)) { ++ g_free (user->shell); ++ user->shell = g_strdup (pwent->pw_shell); ++ g_object_notify (G_OBJECT (user), "shell"); ++ } ++ ++ update_icon_monitor (user); ++ ++ g_object_thaw_notify (G_OBJECT (user)); ++} ++ ++/** ++ * _gdm_user_icon_changed: ++ * @user: the user to emit the signal for. ++ * ++ * Emits the "icon-changed" signal for @user. ++ * ++ * Since: 1.0 ++ **/ ++void ++_gdm_user_icon_changed (GdmUser *user) ++{ ++ g_return_if_fail (GDM_IS_USER (user)); ++ ++ g_signal_emit (user, signals[ICON_CHANGED], 0); ++} ++ ++/** ++ * gdm_user_get_uid: ++ * @user: the user object to examine. ++ * ++ * Retrieves the ID of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++uid_t ++gdm_user_get_uid (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), -1); ++ ++ return user->uid; ++} ++ ++/** ++ * gdm_user_get_real_name: ++ * @user: the user object to examine. ++ * ++ * Retrieves the display name of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++G_CONST_RETURN gchar * ++gdm_user_get_real_name (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return (user->real_name ? user->real_name : user->user_name); ++} ++ ++/** ++ * gdm_user_get_user_name: ++ * @user: the user object to examine. ++ * ++ * Retrieves the login name of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++G_CONST_RETURN gchar * ++gdm_user_get_user_name (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return user->user_name; ++} ++ ++/** ++ * gdm_user_get_home_directory: ++ * @user: the user object to examine. ++ * ++ * Retrieves the home directory of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++G_CONST_RETURN gchar * ++gdm_user_get_home_directory (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return user->home_dir; ++} ++ ++/** ++ * gdm_user_get_shell: ++ * @user: the user object to examine. ++ * ++ * Retrieves the login shell of @user. ++ * ++ * Returns: a pointer to an array of characters which must not be modified or ++ * freed, or %NULL. ++ * ++ * Since: 1.0 ++ **/ ++ ++G_CONST_RETURN gchar * ++gdm_user_get_shell (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ ++ return user->shell; ++} ++ ++gulong ++gdm_user_get_login_frequency (GdmUser *user) ++{ ++ g_return_val_if_fail (GDM_IS_USER (user), 0); ++ ++ return user->login_frequency; ++} ++ ++int ++gdm_user_collate (GdmUser *user1, ++ GdmUser *user2) ++{ ++ const char *str1; ++ const char *str2; ++ gulong num1; ++ gulong num2; ++ ++ g_return_val_if_fail (user1 == NULL || GDM_IS_USER (user1), 0); ++ g_return_val_if_fail (user2 == NULL || GDM_IS_USER (user2), 0); ++ ++ if (user1->real_name != NULL) { ++ str1 = user1->real_name; ++ } else { ++ str1 = user1->user_name; ++ } ++ ++ if (user2->real_name != NULL) { ++ str2 = user2->real_name; ++ } else { ++ str2 = user2->user_name; ++ } ++ ++ num1 = user1->login_frequency; ++ num2 = user2->login_frequency; ++ g_debug ("Login freq 1=%u 2=%u", (guint)num1, (guint)num2); ++ if (num1 > num2) { ++ return -1; ++ } ++ ++ if (num1 < num2) { ++ return 1; ++ } ++ ++ /* if login frequency is equal try names */ ++ if (str1 == NULL && str2 != NULL) { ++ return -1; ++ } ++ ++ if (str1 != NULL && str2 == NULL) { ++ return 1; ++ } ++ ++ if (str1 == NULL && str2 == NULL) { ++ return 0; ++ } ++ ++ return g_utf8_collate (str1, str2); ++} ++ ++static gboolean ++check_user_file (const char *filename, ++ uid_t user, ++ gssize max_file_size, ++ gboolean relax_group, ++ gboolean relax_other) ++{ ++ struct stat fileinfo; ++ ++ if (max_file_size < 0) { ++ max_file_size = G_MAXSIZE; ++ } ++ ++ /* Exists/Readable? */ ++ if (stat (filename, &fileinfo) < 0) { ++ return FALSE; ++ } ++ ++ /* Is a regular file */ ++ if (G_UNLIKELY (!S_ISREG (fileinfo.st_mode))) { ++ return FALSE; ++ } ++ ++ /* Owned by user? */ ++ if (G_UNLIKELY (fileinfo.st_uid != user)) { ++ return FALSE; ++ } ++ ++ /* Group not writable or relax_group? */ ++ if (G_UNLIKELY ((fileinfo.st_mode & S_IWGRP) == S_IWGRP && !relax_group)) { ++ return FALSE; ++ } ++ ++ /* Other not writable or relax_other? */ ++ if (G_UNLIKELY ((fileinfo.st_mode & S_IWOTH) == S_IWOTH && !relax_other)) { ++ return FALSE; ++ } ++ ++ /* Size is kosher? */ ++ if (G_UNLIKELY (fileinfo.st_size > max_file_size)) { ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static char * ++get_filesystem_type (const char *path) ++{ ++ GFile *file; ++ GFileInfo *file_info; ++ GError *error; ++ char *filesystem_type; ++ ++ file = g_file_new_for_path (path); ++ error = NULL; ++ file_info = g_file_query_filesystem_info (file, ++ G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, ++ NULL, ++ &error); ++ if (file_info == NULL) { ++ g_warning ("Unable to query filesystem type for %s: %s", path, error->message); ++ g_error_free (error); ++ g_object_unref (file); ++ return NULL; ++ } ++ ++ filesystem_type = g_strdup (g_file_info_get_attribute_string (file_info, ++ G_FILE_ATTRIBUTE_FILESYSTEM_TYPE)); ++ if (filesystem_type == NULL) { ++ g_warning ("GIO returned NULL filesystem type for %s", path); ++ } ++ ++ g_object_unref (file); ++ g_object_unref (file_info); ++ ++ return filesystem_type; ++} ++ ++static GdkPixbuf * ++render_icon_from_home (GdmUser *user, ++ int icon_size) ++{ ++ GdkPixbuf *retval; ++ char *path; ++ gboolean is_local; ++ gboolean is_autofs; ++ gboolean res; ++ char *filesystem_type; ++ ++ is_local = FALSE; ++ ++ /* special case: look at parent of home to detect autofs ++ this is so we don't try to trigger an automount */ ++ path = g_path_get_dirname (user->home_dir); ++ filesystem_type = get_filesystem_type (path); ++ is_autofs = (filesystem_type != NULL && strcmp (filesystem_type, "autofs") == 0); ++ g_free (filesystem_type); ++ g_free (path); ++ ++ if (is_autofs) { ++ return NULL; ++ } ++ ++ /* now check that home dir itself is local */ ++ filesystem_type = get_filesystem_type (user->home_dir); ++ is_local = ((filesystem_type != NULL) && ++ (strcmp (filesystem_type, "nfs") != 0) && ++ (strcmp (filesystem_type, "afs") != 0) && ++ (strcmp (filesystem_type, "autofs") != 0) && ++ (strcmp (filesystem_type, "unknown") != 0) && ++ (strcmp (filesystem_type, "ncpfs") != 0)); ++ g_free (filesystem_type); ++ ++ /* only look at local home directories so we don't try to ++ read from remote (e.g. NFS) volumes */ ++ if (! is_local) { ++ return NULL; ++ } ++ ++ /* First, try "~/.face" */ ++ path = g_build_filename (user->home_dir, ".face", NULL); ++ res = check_user_file (path, ++ user->uid, ++ MAX_FILE_SIZE, ++ RELAX_GROUP, ++ RELAX_OTHER); ++ if (res) { ++ retval = gdk_pixbuf_new_from_file_at_size (path, ++ icon_size, ++ icon_size, ++ NULL); ++ } else { ++ retval = NULL; ++ } ++ g_free (path); ++ ++ /* Next, try "~/.face.icon" */ ++ if (retval == NULL) { ++ path = g_build_filename (user->home_dir, ++ ".face.icon", ++ NULL); ++ res = check_user_file (path, ++ user->uid, ++ MAX_FILE_SIZE, ++ RELAX_GROUP, ++ RELAX_OTHER); ++ if (res) { ++ retval = gdk_pixbuf_new_from_file_at_size (path, ++ icon_size, ++ icon_size, ++ NULL); ++ } else { ++ retval = NULL; ++ } ++ ++ g_free (path); ++ } ++ ++ /* Still nothing, try the user's personal GDM config */ ++ if (retval == NULL) { ++ path = g_build_filename (user->home_dir, ++ ".gnome", ++ "gdm", ++ NULL); ++ res = check_user_file (path, ++ user->uid, ++ MAX_FILE_SIZE, ++ RELAX_GROUP, ++ RELAX_OTHER); ++ if (res) { ++ GKeyFile *keyfile; ++ char *icon_path; ++ ++ keyfile = g_key_file_new (); ++ g_key_file_load_from_file (keyfile, ++ path, ++ G_KEY_FILE_NONE, ++ NULL); ++ ++ icon_path = g_key_file_get_string (keyfile, ++ "face", ++ "picture", ++ NULL); ++ res = check_user_file (icon_path, ++ user->uid, ++ MAX_FILE_SIZE, ++ RELAX_GROUP, ++ RELAX_OTHER); ++ if (icon_path && res) { ++ retval = gdk_pixbuf_new_from_file_at_size (path, ++ icon_size, ++ icon_size, ++ NULL); ++ } else { ++ retval = NULL; ++ } ++ ++ g_free (icon_path); ++ g_key_file_free (keyfile); ++ } else { ++ retval = NULL; ++ } ++ ++ g_free (path); ++ } ++ ++ return retval; ++} ++ ++static void ++curved_rectangle (cairo_t *cr, ++ double x0, ++ double y0, ++ double width, ++ double height, ++ double radius) ++{ ++ double x1; ++ double y1; ++ ++ x1 = x0 + width; ++ y1 = y0 + height; ++ ++ if (width < FLT_EPSILON || height < FLT_EPSILON) { ++ return; ++ } ++ ++ if (width / 2 < radius) { ++ if (height / 2 < radius) { ++ cairo_move_to (cr, x0, (y0 + y1) / 2); ++ cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1) / 2, y0); ++ cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1) / 2); ++ cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0) / 2, y1); ++ cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1) / 2); ++ } else { ++ cairo_move_to (cr, x0, y0 + radius); ++ cairo_curve_to (cr, x0, y0, x0, y0, (x0 + x1) / 2, y0); ++ cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius); ++ cairo_line_to (cr, x1, y1 - radius); ++ cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0) / 2, y1); ++ cairo_curve_to (cr, x0, y1, x0, y1, x0, y1 - radius); ++ } ++ } else { ++ if (height / 2 < radius) { ++ cairo_move_to (cr, x0, (y0 + y1) / 2); ++ cairo_curve_to (cr, x0, y0, x0 , y0, x0 + radius, y0); ++ cairo_line_to (cr, x1 - radius, y0); ++ cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1) / 2); ++ cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1); ++ cairo_line_to (cr, x0 + radius, y1); ++ cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1) / 2); ++ } else { ++ cairo_move_to (cr, x0, y0 + radius); ++ cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0); ++ cairo_line_to (cr, x1 - radius, y0); ++ cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius); ++ cairo_line_to (cr, x1, y1 - radius); ++ cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1); ++ cairo_line_to (cr, x0 + radius, y1); ++ cairo_curve_to (cr, x0, y1, x0, y1, x0, y1 - radius); ++ } ++ } ++ ++ cairo_close_path (cr); ++} ++ ++static cairo_surface_t * ++surface_from_pixbuf (GdkPixbuf *pixbuf) ++{ ++ cairo_surface_t *surface; ++ cairo_t *cr; ++ ++ surface = cairo_image_surface_create (gdk_pixbuf_get_has_alpha (pixbuf) ? ++ CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24, ++ gdk_pixbuf_get_width (pixbuf), ++ gdk_pixbuf_get_height (pixbuf)); ++ cr = cairo_create (surface); ++ gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); ++ cairo_paint (cr); ++ cairo_destroy (cr); ++ ++ return surface; ++} ++ ++/** ++ * go_cairo_convert_data_to_pixbuf: ++ * @src: a pointer to pixel data in cairo format ++ * @dst: a pointer to pixel data in pixbuf format ++ * @width: image width ++ * @height: image height ++ * @rowstride: data rowstride ++ * ++ * Converts the pixel data stored in @src in CAIRO_FORMAT_ARGB32 cairo format ++ * to GDK_COLORSPACE_RGB pixbuf format and move them ++ * to @dst. If @src == @dst, pixel are converted in place. ++ **/ ++ ++static void ++go_cairo_convert_data_to_pixbuf (unsigned char *dst, ++ unsigned char const *src, ++ int width, ++ int height, ++ int rowstride) ++{ ++ int i,j; ++ unsigned int t; ++ unsigned char a, b, c; ++ ++ g_return_if_fail (dst != NULL); ++ ++#define MULT(d,c,a,t) G_STMT_START { t = (a)? c * 255 / a: 0; d = t;} G_STMT_END ++ ++ if (src == dst || src == NULL) { ++ for (i = 0; i < height; i++) { ++ for (j = 0; j < width; j++) { ++#if G_BYTE_ORDER == G_LITTLE_ENDIAN ++ MULT(a, dst[2], dst[3], t); ++ MULT(b, dst[1], dst[3], t); ++ MULT(c, dst[0], dst[3], t); ++ dst[0] = a; ++ dst[1] = b; ++ dst[2] = c; ++#else ++ MULT(a, dst[1], dst[0], t); ++ MULT(b, dst[2], dst[0], t); ++ MULT(c, dst[3], dst[0], t); ++ dst[3] = dst[0]; ++ dst[0] = a; ++ dst[1] = b; ++ dst[2] = c; ++#endif ++ dst += 4; ++ } ++ dst += rowstride - width * 4; ++ } ++ } else { ++ for (i = 0; i < height; i++) { ++ for (j = 0; j < width; j++) { ++#if G_BYTE_ORDER == G_LITTLE_ENDIAN ++ MULT(dst[0], src[2], src[3], t); ++ MULT(dst[1], src[1], src[3], t); ++ MULT(dst[2], src[0], src[3], t); ++ dst[3] = src[3]; ++#else ++ MULT(dst[0], src[1], src[0], t); ++ MULT(dst[1], src[2], src[0], t); ++ MULT(dst[2], src[3], src[0], t); ++ dst[3] = src[0]; ++#endif ++ src += 4; ++ dst += 4; ++ } ++ src += rowstride - width * 4; ++ dst += rowstride - width * 4; ++ } ++ } ++#undef MULT ++} ++ ++static void ++cairo_to_pixbuf (guint8 *src_data, ++ GdkPixbuf *dst_pixbuf) ++{ ++ unsigned char *src; ++ unsigned char *dst; ++ guint w; ++ guint h; ++ guint rowstride; ++ ++ w = gdk_pixbuf_get_width (dst_pixbuf); ++ h = gdk_pixbuf_get_height (dst_pixbuf); ++ rowstride = gdk_pixbuf_get_rowstride (dst_pixbuf); ++ ++ dst = gdk_pixbuf_get_pixels (dst_pixbuf); ++ src = src_data; ++ ++ go_cairo_convert_data_to_pixbuf (dst, src, w, h, rowstride); ++} ++ ++static GdkPixbuf * ++frame_pixbuf (GdkPixbuf *source) ++{ ++ GdkPixbuf *dest; ++ cairo_t *cr; ++ cairo_surface_t *surface; ++ guint w; ++ guint h; ++ guint rowstride; ++ int frame_width; ++ double radius; ++ guint8 *data; ++ ++ frame_width = 2; ++ ++ w = gdk_pixbuf_get_width (source) + frame_width * 2; ++ h = gdk_pixbuf_get_height (source) + frame_width * 2; ++ radius = w / 3.0; ++ ++ dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, ++ TRUE, ++ 8, ++ w, ++ h); ++ rowstride = gdk_pixbuf_get_rowstride (dest); ++ ++ ++ data = g_new0 (guint8, h * rowstride); ++ ++ surface = cairo_image_surface_create_for_data (data, ++ CAIRO_FORMAT_ARGB32, ++ w, ++ h, ++ rowstride); ++ cr = cairo_create (surface); ++ cairo_surface_destroy (surface); ++ ++ /* set up image */ ++ cairo_rectangle (cr, 0, 0, w, h); ++ cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); ++ cairo_fill (cr); ++ ++ curved_rectangle (cr, frame_width, frame_width, ++ w - frame_width * 2, h - frame_width * 2, ++ radius); ++ cairo_set_source_rgba (cr, 0.5, 0.5, 0.5, 0.3); ++ cairo_fill_preserve (cr); ++ ++ surface = surface_from_pixbuf (source); ++ cairo_set_source_surface (cr, surface, frame_width, frame_width); ++ cairo_fill (cr); ++ cairo_surface_destroy (surface); ++ ++ cairo_to_pixbuf (data, dest); ++ ++ cairo_destroy (cr); ++ g_free (data); ++ ++ return dest; ++} ++ ++GdkPixbuf * ++gdm_user_render_icon (GdmUser *user, ++ gint icon_size) ++{ ++ GdkPixbuf *pixbuf; ++ GdkPixbuf *framed; ++ char *path; ++ char *tmp; ++ gboolean res; ++ ++ g_return_val_if_fail (GDM_IS_USER (user), NULL); ++ g_return_val_if_fail (icon_size > 12, NULL); ++ ++ path = NULL; ++ ++ pixbuf = render_icon_from_home (user, icon_size); ++ if (pixbuf != NULL) { ++ goto out; ++ } ++ ++ /* Try ${GlobalFaceDir}/${username} */ ++ path = g_build_filename (GLOBAL_FACEDIR, user->user_name, NULL); ++ res = check_user_file (path, ++ user->uid, ++ MAX_FILE_SIZE, ++ RELAX_GROUP, ++ RELAX_OTHER); ++ if (res) { ++ pixbuf = gdk_pixbuf_new_from_file_at_size (path, ++ icon_size, ++ icon_size, ++ NULL); ++ } else { ++ pixbuf = NULL; ++ } ++ ++ g_free (path); ++ if (pixbuf != NULL) { ++ goto out; ++ } ++ ++ /* Finally, ${GlobalFaceDir}/${username}.png */ ++ tmp = g_strconcat (user->user_name, ".png", NULL); ++ path = g_build_filename (GLOBAL_FACEDIR, tmp, NULL); ++ g_free (tmp); ++ res = check_user_file (path, ++ user->uid, ++ MAX_FILE_SIZE, ++ RELAX_GROUP, ++ RELAX_OTHER); ++ if (res) { ++ pixbuf = gdk_pixbuf_new_from_file_at_size (path, ++ icon_size, ++ icon_size, ++ NULL); ++ } else { ++ pixbuf = NULL; ++ } ++ g_free (path); ++ out: ++ ++ if (pixbuf != NULL) { ++ framed = frame_pixbuf (pixbuf); ++ if (framed != NULL) { ++ g_object_unref (pixbuf); ++ pixbuf = framed; ++ } ++ } ++ ++ return pixbuf; ++} +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdm-user.h gdm-2.28.0.new/gui/gdmsetup/gdm-user.h +--- gdm-2.28.0/gui/gdmsetup/gdm-user.h 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdm-user.h 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,59 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2004-2005 James M. Cape . ++ * Copyright (C) 2007-2008 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++/* ++ * Facade object for user data, owned by GdmUserManager ++ */ ++ ++#ifndef __GDM_USER__ ++#define __GDM_USER__ 1 ++ ++#include ++#include ++#include ++ ++G_BEGIN_DECLS ++ ++#define GDM_TYPE_USER (gdm_user_get_type ()) ++#define GDM_USER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDM_TYPE_USER, GdmUser)) ++#define GDM_IS_USER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDM_TYPE_USER)) ++ ++typedef struct _GdmUser GdmUser; ++ ++GType gdm_user_get_type (void) G_GNUC_CONST; ++ ++uid_t gdm_user_get_uid (GdmUser *user); ++G_CONST_RETURN char *gdm_user_get_user_name (GdmUser *user); ++G_CONST_RETURN char *gdm_user_get_real_name (GdmUser *user); ++G_CONST_RETURN char *gdm_user_get_home_directory (GdmUser *user); ++G_CONST_RETURN char *gdm_user_get_shell (GdmUser *user); ++guint gdm_user_get_num_sessions (GdmUser *user); ++GList *gdm_user_get_sessions (GdmUser *user); ++gulong gdm_user_get_login_frequency (GdmUser *user); ++ ++GdkPixbuf *gdm_user_render_icon (GdmUser *user, ++ gint icon_size); ++ ++gint gdm_user_collate (GdmUser *user1, ++ GdmUser *user2); ++ ++G_END_DECLS ++ ++#endif +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdm-user-manager.c gdm-2.28.0.new/gui/gdmsetup/gdm-user-manager.c +--- gdm-2.28.0/gui/gdmsetup/gdm-user-manager.c 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdm-user-manager.c 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,1658 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2007-2008 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef HAVE_PATHS_H ++#include ++#endif /* HAVE_PATHS_H */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "gdm-user-manager.h" ++#include "gdm-user-private.h" ++ ++#define GDM_USER_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_USER_MANAGER, GdmUserManagerPrivate)) ++ ++#define CK_NAME "org.freedesktop.ConsoleKit" ++#define CK_PATH "/org/freedesktop/ConsoleKit" ++#define CK_INTERFACE "org.freedesktop.ConsoleKit" ++ ++#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager" ++#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager" ++#define CK_SEAT_INTERFACE "org.freedesktop.ConsoleKit.Seat" ++#define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session" ++ ++/* Prefs Defaults */ ++#define DEFAULT_ALLOW_ROOT TRUE ++#define DEFAULT_MAX_ICON_SIZE 128 ++#define DEFAULT_USER_MAX_FILE 65536 ++ ++#ifdef __sun ++#define DEFAULT_MINIMAL_UID 100 ++#else ++#define DEFAULT_MINIMAL_UID 500 ++#endif ++ ++#ifndef _PATH_SHELLS ++#define _PATH_SHELLS "/etc/shells" ++#endif ++#define PATH_PASSWD "/etc/passwd" ++ ++#define DEFAULT_GLOBAL_FACE_DIR DATADIR "/faces" ++#define DEFAULT_USER_ICON "stock_person" ++#define DEFAULT_EXCLUDE { "bin", \ ++ "root", \ ++ "daemon", \ ++ "adm", \ ++ "lp", \ ++ "sync", \ ++ "shutdown", \ ++ "halt", \ ++ "mail", \ ++ "news", \ ++ "uucp", \ ++ "operator", \ ++ "nobody", \ ++ GDM_USERNAME, \ ++ "postgres", \ ++ "pvm", \ ++ "rpm", \ ++ "nfsnobody", \ ++ "pcap", \ ++ NULL } ++ ++struct GdmUserManagerPrivate ++{ ++ GHashTable *users; ++ GHashTable *sessions; ++ GHashTable *exclusions; ++ GHashTable *shells; ++ DBusGConnection *connection; ++ DBusGProxy *seat_proxy; ++ char *seat_id; ++ ++ GFileMonitor *passwd_monitor; ++ GFileMonitor *shells_monitor; ++ ++ guint reload_id; ++ guint ck_history_id; ++ ++ guint8 users_dirty : 1; ++}; ++ ++enum { ++ LOADING_USERS, ++ USERS_LOADED, ++ USER_ADDED, ++ USER_REMOVED, ++ USER_IS_LOGGED_IN_CHANGED, ++ USER_LOGIN_FREQUENCY_CHANGED, ++ LAST_SIGNAL ++}; ++ ++static guint signals [LAST_SIGNAL] = { 0, }; ++ ++static void gdm_user_manager_class_init (GdmUserManagerClass *klass); ++static void gdm_user_manager_init (GdmUserManager *user_manager); ++static void gdm_user_manager_finalize (GObject *object); ++ ++static gpointer user_manager_object = NULL; ++ ++G_DEFINE_TYPE (GdmUserManager, gdm_user_manager, G_TYPE_OBJECT) ++ ++GQuark ++gdm_user_manager_error_quark (void) ++{ ++ static GQuark ret = 0; ++ if (ret == 0) { ++ ret = g_quark_from_static_string ("gdm_user_manager_error"); ++ } ++ ++ return ret; ++} ++ ++static gboolean ++start_new_login_session (GdmUserManager *manager) ++{ ++ GError *error; ++ gboolean res; ++ ++ res = g_spawn_command_line_async ("gdmflexiserver -s", &error); ++ if (! res) { ++ g_warning ("Unable to start new login: %s", error->message); ++ g_error_free (error); ++ } ++ ++ return res; ++} ++ ++/* needs to stay in sync with gdm-slave */ ++static char * ++_get_primary_user_session_id (GdmUserManager *manager, ++ GdmUser *user) ++{ ++ gboolean res; ++ gboolean can_activate_sessions; ++ GError *error; ++ GList *sessions; ++ GList *l; ++ char *primary_ssid; ++ ++ if (manager->priv->seat_id == NULL || manager->priv->seat_id[0] == '\0') { ++ g_debug ("GdmUserManager: display seat id is not set; can't switch sessions"); ++ return NULL; ++ } ++ ++ primary_ssid = NULL; ++ sessions = NULL; ++ ++ g_debug ("GdmUserManager: checking if seat can activate sessions"); ++ ++ error = NULL; ++ res = dbus_g_proxy_call (manager->priv->seat_proxy, ++ "CanActivateSessions", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_BOOLEAN, &can_activate_sessions, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_warning ("unable to determine if seat can activate sessions: %s", ++ error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ if (! can_activate_sessions) { ++ g_debug ("GdmUserManager: seat is unable to activate sessions"); ++ goto out; ++ } ++ ++ sessions = gdm_user_get_sessions (user); ++ if (sessions == NULL) { ++ g_warning ("unable to determine sessions for user: %s", ++ gdm_user_get_user_name (user)); ++ goto out; ++ } ++ ++ for (l = sessions; l != NULL; l = l->next) { ++ const char *ssid; ++ ++ ssid = l->data; ++ ++ /* FIXME: better way to choose? */ ++ if (ssid != NULL) { ++ primary_ssid = g_strdup (ssid); ++ break; ++ } ++ } ++ ++ out: ++ ++ return primary_ssid; ++} ++ ++static gboolean ++activate_session_id (GdmUserManager *manager, ++ const char *seat_id, ++ const char *session_id) ++{ ++ DBusError local_error; ++ DBusMessage *message; ++ DBusMessage *reply; ++ gboolean ret; ++ ++ ret = FALSE; ++ reply = NULL; ++ ++ dbus_error_init (&local_error); ++ message = dbus_message_new_method_call ("org.freedesktop.ConsoleKit", ++ seat_id, ++ "org.freedesktop.ConsoleKit.Seat", ++ "ActivateSession"); ++ if (message == NULL) { ++ goto out; ++ } ++ ++ if (! dbus_message_append_args (message, ++ DBUS_TYPE_OBJECT_PATH, &session_id, ++ DBUS_TYPE_INVALID)) { ++ goto out; ++ } ++ ++ ++ dbus_error_init (&local_error); ++ reply = dbus_connection_send_with_reply_and_block (dbus_g_connection_get_connection (manager->priv->connection), ++ message, ++ -1, ++ &local_error); ++ if (reply == NULL) { ++ if (dbus_error_is_set (&local_error)) { ++ g_warning ("Unable to activate session: %s", local_error.message); ++ dbus_error_free (&local_error); ++ goto out; ++ } ++ } ++ ++ ret = TRUE; ++ out: ++ if (message != NULL) { ++ dbus_message_unref (message); ++ } ++ if (reply != NULL) { ++ dbus_message_unref (reply); ++ } ++ ++ return ret; ++} ++ ++static gboolean ++session_is_login_window (GdmUserManager *manager, ++ const char *session_id) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ gboolean res; ++ gboolean ret; ++ char *session_type; ++ ++ ret = FALSE; ++ ++ proxy = dbus_g_proxy_new_for_name (manager->priv->connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit seat object"); ++ goto out; ++ } ++ ++ session_type = NULL; ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetSessionType", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_STRING, &session_type, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_debug ("Failed to identify the session type: %s", error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ if (session_type == NULL || session_type[0] == '\0' || strcmp (session_type, "LoginWindow") != 0) { ++ goto out; ++ } ++ ++ ret = TRUE; ++ ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ ++ return ret; ++} ++ ++static char * ++_get_login_window_session_id (GdmUserManager *manager) ++{ ++ gboolean res; ++ gboolean can_activate_sessions; ++ GError *error; ++ GPtrArray *sessions; ++ char *primary_ssid; ++ int i; ++ ++ if (manager->priv->seat_id == NULL || manager->priv->seat_id[0] == '\0') { ++ g_debug ("GdmUserManager: display seat id is not set; can't switch sessions"); ++ return NULL; ++ } ++ ++ primary_ssid = NULL; ++ sessions = NULL; ++ ++ g_debug ("GdmSlave: checking if seat can activate sessions"); ++ ++ error = NULL; ++ res = dbus_g_proxy_call (manager->priv->seat_proxy, ++ "CanActivateSessions", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_BOOLEAN, &can_activate_sessions, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_warning ("unable to determine if seat can activate sessions: %s", ++ error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ if (! can_activate_sessions) { ++ g_debug ("GdmSlave: seat is unable to activate sessions"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (manager->priv->seat_proxy, ++ "GetSessions", ++ &error, ++ G_TYPE_INVALID, ++ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &sessions, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_warning ("unable to determine sessions for user: %s", ++ error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ for (i = 0; i < sessions->len; i++) { ++ char *ssid; ++ ++ ssid = g_ptr_array_index (sessions, i); ++ ++ if (session_is_login_window (manager, ssid)) { ++ primary_ssid = g_strdup (ssid); ++ break; ++ } ++ } ++ g_ptr_array_foreach (sessions, (GFunc)g_free, NULL); ++ g_ptr_array_free (sessions, TRUE); ++ ++ out: ++ ++ return primary_ssid; ++} ++ ++gboolean ++gdm_user_manager_goto_login_session (GdmUserManager *manager) ++{ ++ gboolean ret; ++ gboolean res; ++ char *ssid; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), FALSE); ++ ++ ret = FALSE; ++ ++ /* First look for any existing LoginWindow sessions on the seat. ++ If none are found, create a new one. */ ++ ++ ssid = _get_login_window_session_id (manager); ++ if (ssid != NULL) { ++ res = activate_session_id (manager, manager->priv->seat_id, ssid); ++ if (res) { ++ ret = TRUE; ++ } ++ } ++ ++ if (! ret) { ++ res = start_new_login_session (manager); ++ if (res) { ++ ret = TRUE; ++ } ++ } ++ ++ return ret; ++} ++ ++gboolean ++gdm_user_manager_activate_user_session (GdmUserManager *manager, ++ GdmUser *user) ++{ ++ gboolean ret; ++ char *ssid; ++ gboolean res; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), FALSE); ++ g_return_val_if_fail (GDM_IS_USER (user), FALSE); ++ ++ ret = FALSE; ++ ++ ssid = _get_primary_user_session_id (manager, user); ++ if (ssid == NULL) { ++ goto out; ++ } ++ ++ res = activate_session_id (manager, manager->priv->seat_id, ssid); ++ if (! res) { ++ g_debug ("GdmUserManager: unable to activate session: %s", ssid); ++ goto out; ++ } ++ ++ ret = TRUE; ++ out: ++ return ret; ++} ++ ++static void ++on_user_sessions_changed (GdmUser *user, ++ GdmUserManager *manager) ++{ ++ guint nsessions; ++ ++ nsessions = gdm_user_get_num_sessions (user); ++ ++ g_debug ("GdmUserManager: sessions changed user=%s num=%d", ++ gdm_user_get_user_name (user), ++ nsessions); ++ ++ /* only signal on zero and one */ ++ if (nsessions > 1) { ++ return; ++ } ++ ++ g_signal_emit (manager, signals [USER_IS_LOGGED_IN_CHANGED], 0, user); ++} ++ ++static void ++on_user_icon_changed (GdmUser *user, ++ GdmUserManager *manager) ++{ ++ g_debug ("GdmUserManager: user icon changed"); ++} ++ ++static char * ++get_seat_id_for_session (DBusGConnection *connection, ++ const char *session_id) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ char *seat_id; ++ gboolean res; ++ ++ proxy = NULL; ++ seat_id = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit session object"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetSeatId", ++ &error, ++ G_TYPE_INVALID, ++ DBUS_TYPE_G_OBJECT_PATH, &seat_id, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_debug ("Failed to identify the current seat: %s", error->message); ++ g_error_free (error); ++ } ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ ++ return seat_id; ++} ++ ++static char * ++get_x11_display_for_session (DBusGConnection *connection, ++ const char *session_id) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ char *x11_display; ++ gboolean res; ++ ++ proxy = NULL; ++ x11_display = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit session object"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetX11Display", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_STRING, &x11_display, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_debug ("Failed to identify the x11 display: %s", error->message); ++ g_error_free (error); ++ } ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ ++ return x11_display; ++} ++ ++static gboolean ++maybe_add_session_for_user (GdmUserManager *manager, ++ GdmUser *user, ++ const char *ssid) ++{ ++ char *sid; ++ char *x11_display; ++ gboolean ret; ++ ++ ret = FALSE; ++ sid = NULL; ++ x11_display = NULL; ++ ++ /* skip if on another seat */ ++ sid = get_seat_id_for_session (manager->priv->connection, ssid); ++ if (sid == NULL ++ || manager->priv->seat_id == NULL ++ || strcmp (sid, manager->priv->seat_id) != 0) { ++ g_debug ("GdmUserManager: not adding session on other seat: %s", ssid); ++ goto out; ++ } ++ ++ /* skip if doesn't have an x11 display */ ++ x11_display = get_x11_display_for_session (manager->priv->connection, ssid); ++ if (x11_display == NULL || x11_display[0] == '\0') { ++ g_debug ("GdmUserManager: not adding session without a x11 display: %s", ssid); ++ goto out; ++ } ++ ++ if (g_hash_table_lookup (manager->priv->exclusions, gdm_user_get_user_name (user))) { ++ g_debug ("GdmUserManager: excluding user '%s'", gdm_user_get_user_name (user)); ++ goto out; ++ } ++ ++ g_hash_table_insert (manager->priv->sessions, ++ g_strdup (ssid), ++ g_strdup (gdm_user_get_user_name (user))); ++ ++ _gdm_user_add_session (user, ssid); ++ g_debug ("GdmUserManager: added session for user: %s", gdm_user_get_user_name (user)); ++ ++ ret = TRUE; ++ ++ out: ++ g_free (sid); ++ g_free (x11_display); ++ ++ return ret; ++} ++ ++static void ++add_sessions_for_user (GdmUserManager *manager, ++ GdmUser *user) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ gboolean res; ++ guint32 uid; ++ GPtrArray *sessions; ++ int i; ++ ++ proxy = dbus_g_proxy_new_for_name (manager->priv->connection, ++ CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit manager object"); ++ goto out; ++ } ++ ++ uid = gdm_user_get_uid (user); ++ ++ g_debug ("Getting list of sessions for user %u", uid); ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetSessionsForUnixUser", ++ &error, ++ G_TYPE_UINT, uid, ++ G_TYPE_INVALID, ++ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), ++ &sessions, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_debug ("Failed to find sessions for user: %s", error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ g_debug ("Found %d sessions for user %s", sessions->len, gdm_user_get_user_name (user)); ++ ++ for (i = 0; i < sessions->len; i++) { ++ char *ssid; ++ ++ ssid = g_ptr_array_index (sessions, i); ++ maybe_add_session_for_user (manager, user, ssid); ++ } ++ ++ g_ptr_array_foreach (sessions, (GFunc)g_free, NULL); ++ g_ptr_array_free (sessions, TRUE); ++ ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++} ++ ++static GdmUser * ++create_user (GdmUserManager *manager) ++{ ++ GdmUser *user; ++ ++ user = g_object_new (GDM_TYPE_USER, "manager", manager, NULL); ++ g_signal_connect (user, ++ "sessions-changed", ++ G_CALLBACK (on_user_sessions_changed), ++ manager); ++ g_signal_connect (user, ++ "icon-changed", ++ G_CALLBACK (on_user_icon_changed), ++ manager); ++ return user; ++} ++ ++static void ++add_user (GdmUserManager *manager, ++ GdmUser *user) ++{ ++ add_sessions_for_user (manager, user); ++ g_hash_table_insert (manager->priv->users, ++ g_strdup (gdm_user_get_user_name (user)), ++ g_object_ref (user)); ++ ++ g_signal_emit (manager, signals[USER_ADDED], 0, user); ++} ++ ++static GdmUser * ++add_new_user_for_pwent (GdmUserManager *manager, ++ struct passwd *pwent) ++{ ++ GdmUser *user; ++ ++ g_debug ("Creating new user"); ++ ++ user = create_user (manager); ++ _gdm_user_update (user, pwent); ++ ++ add_user (manager, user); ++ ++ return user; ++} ++ ++static char * ++get_current_seat_id (DBusGConnection *connection) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ char *session_id; ++ char *seat_id; ++ gboolean res; ++ ++ proxy = NULL; ++ session_id = NULL; ++ seat_id = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (connection, ++ CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit manager object"); ++ goto out; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetCurrentSession", ++ &error, ++ G_TYPE_INVALID, ++ DBUS_TYPE_G_OBJECT_PATH, ++ &session_id, ++ G_TYPE_INVALID); ++ if (! res) { ++ g_debug ("Failed to identify the current session: %s", error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ seat_id = get_seat_id_for_session (connection, session_id); ++ ++ out: ++ if (proxy != NULL) { ++ g_object_unref (proxy); ++ } ++ g_free (session_id); ++ ++ return seat_id; ++} ++ ++static gboolean ++get_uid_from_session_id (GdmUserManager *manager, ++ const char *session_id, ++ uid_t *uidp) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ guint uid; ++ gboolean res; ++ ++ proxy = dbus_g_proxy_new_for_name (manager->priv->connection, ++ CK_NAME, ++ session_id, ++ CK_SESSION_INTERFACE); ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit session object"); ++ return FALSE; ++ } ++ ++ error = NULL; ++ res = dbus_g_proxy_call (proxy, ++ "GetUnixUser", ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_UINT, &uid, ++ G_TYPE_INVALID); ++ g_object_unref (proxy); ++ ++ if (! res) { ++ g_warning ("Failed to query the session: %s", error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ if (uidp != NULL) { ++ *uidp = (uid_t) uid; ++ } ++ ++ return TRUE; ++} ++ ++static void ++seat_session_added (DBusGProxy *seat_proxy, ++ const char *session_id, ++ GdmUserManager *manager) ++{ ++ uid_t uid; ++ gboolean res; ++ struct passwd *pwent; ++ GdmUser *user; ++ gboolean is_new; ++ ++ g_debug ("Session added: %s", session_id); ++ ++ res = get_uid_from_session_id (manager, session_id, &uid); ++ if (! res) { ++ g_warning ("Unable to lookup user for session"); ++ return; ++ } ++ ++ errno = 0; ++ pwent = getpwuid (uid); ++ if (pwent == NULL) { ++ g_warning ("Unable to lookup user id %d: %s", (int)uid, g_strerror (errno)); ++ return; ++ } ++ ++ /* check exclusions up front */ ++ if (g_hash_table_lookup (manager->priv->exclusions, pwent->pw_name)) { ++ g_debug ("GdmUserManager: excluding user '%s'", pwent->pw_name); ++ return; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, pwent->pw_name); ++ if (user == NULL) { ++ g_debug ("Creating new user"); ++ ++ user = create_user (manager); ++ _gdm_user_update (user, pwent); ++ is_new = TRUE; ++ } else { ++ is_new = FALSE; ++ } ++ ++ res = maybe_add_session_for_user (manager, user, session_id); ++ ++ /* only add the user if we added a session */ ++ if (is_new) { ++ if (res) { ++ add_user (manager, user); ++ } else { ++ g_object_unref (user); ++ } ++ } ++} ++ ++static void ++seat_session_removed (DBusGProxy *seat_proxy, ++ const char *session_id, ++ GdmUserManager *manager) ++{ ++ GdmUser *user; ++ char *username; ++ ++ g_debug ("Session removed: %s", session_id); ++ ++ /* since the session object may already be gone ++ * we can't query CK directly */ ++ ++ username = g_hash_table_lookup (manager->priv->sessions, session_id); ++ if (username == NULL) { ++ return; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, username); ++ if (user == NULL) { ++ /* nothing to do */ ++ return; ++ } ++ ++ g_debug ("GdmUserManager: Session removed for %s", username); ++ _gdm_user_remove_session (user, session_id); ++} ++ ++static void ++on_proxy_destroy (DBusGProxy *proxy, ++ GdmUserManager *manager) ++{ ++ g_debug ("GdmUserManager: seat proxy destroyed"); ++ ++ manager->priv->seat_proxy = NULL; ++} ++ ++static void ++get_seat_proxy (GdmUserManager *manager) ++{ ++ DBusGProxy *proxy; ++ GError *error; ++ ++ g_assert (manager->priv->seat_proxy == NULL); ++ ++ error = NULL; ++ manager->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); ++ if (manager->priv->connection == NULL) { ++ g_warning ("Failed to connect to the D-Bus daemon: %s", error->message); ++ g_error_free (error); ++ return; ++ } ++ ++ manager->priv->seat_id = get_current_seat_id (manager->priv->connection); ++ if (manager->priv->seat_id == NULL) { ++ return; ++ } ++ ++ g_debug ("GdmUserManager: Found current seat: %s", manager->priv->seat_id); ++ ++ error = NULL; ++ proxy = dbus_g_proxy_new_for_name_owner (manager->priv->connection, ++ CK_NAME, ++ manager->priv->seat_id, ++ CK_SEAT_INTERFACE, ++ &error); ++ ++ if (proxy == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit seat object: %s", error->message); ++ g_error_free (error); ++ return; ++ } ++ ++ g_signal_connect (proxy, "destroy", G_CALLBACK (on_proxy_destroy), manager); ++ ++ dbus_g_proxy_add_signal (proxy, ++ "SessionAdded", ++ DBUS_TYPE_G_OBJECT_PATH, ++ G_TYPE_INVALID); ++ dbus_g_proxy_add_signal (proxy, ++ "SessionRemoved", ++ DBUS_TYPE_G_OBJECT_PATH, ++ G_TYPE_INVALID); ++ dbus_g_proxy_connect_signal (proxy, ++ "SessionAdded", ++ G_CALLBACK (seat_session_added), ++ manager, ++ NULL); ++ dbus_g_proxy_connect_signal (proxy, ++ "SessionRemoved", ++ G_CALLBACK (seat_session_removed), ++ manager, ++ NULL); ++ manager->priv->seat_proxy = proxy; ++ ++} ++ ++/** ++ * gdm_manager_get_user: ++ * @manager: the manager to query. ++ * @username: the login name of the user to get. ++ * ++ * Retrieves a pointer to the #GdmUser object for the login named @username ++ * from @manager. This pointer is not a reference, and should not be released. ++ * ++ * Returns: a pointer to a #GdmUser object. ++ **/ ++GdmUser * ++gdm_user_manager_get_user (GdmUserManager *manager, ++ const char *username) ++{ ++ GdmUser *user; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), NULL); ++ g_return_val_if_fail (username != NULL && username[0] != '\0', NULL); ++ ++ user = g_hash_table_lookup (manager->priv->users, username); ++ ++ if (user == NULL) { ++ struct passwd *pwent; ++ ++ pwent = getpwnam (username); ++ ++ if (pwent != NULL) { ++ user = add_new_user_for_pwent (manager, pwent); ++ } ++ } ++ ++ return user; ++} ++ ++GdmUser * ++gdm_user_manager_get_user_by_uid (GdmUserManager *manager, ++ uid_t uid) ++{ ++ GdmUser *user; ++ struct passwd *pwent; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), NULL); ++ ++ pwent = getpwuid (uid); ++ if (pwent == NULL) { ++ g_warning ("GdmUserManager: unable to lookup uid %d", (int)uid); ++ return NULL; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, pwent->pw_name); ++ ++ if (user == NULL) { ++ user = add_new_user_for_pwent (manager, pwent); ++ } ++ ++ return user; ++} ++ ++static void ++listify_hash_values_hfunc (gpointer key, ++ gpointer value, ++ gpointer user_data) ++{ ++ GSList **list = user_data; ++ ++ *list = g_slist_prepend (*list, value); ++} ++ ++GSList * ++gdm_user_manager_list_users (GdmUserManager *manager) ++{ ++ GSList *retval; ++ ++ g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), NULL); ++ ++ retval = NULL; ++ g_hash_table_foreach (manager->priv->users, listify_hash_values_hfunc, &retval); ++ ++ return g_slist_sort (retval, (GCompareFunc) gdm_user_collate); ++} ++ ++static gboolean ++parse_value_as_ulong (const char *value, ++ gulong *ulongval) ++{ ++ char *end_of_valid_long; ++ glong long_value; ++ gulong ulong_value; ++ ++ errno = 0; ++ long_value = strtol (value, &end_of_valid_long, 10); ++ ++ if (*value == '\0' || *end_of_valid_long != '\0') { ++ return FALSE; ++ } ++ ++ ulong_value = long_value; ++ if (ulong_value != long_value || errno == ERANGE) { ++ return FALSE; ++ } ++ ++ *ulongval = ulong_value; ++ ++ return TRUE; ++} ++ ++static gboolean ++parse_ck_history_line (const char *line, ++ char **user_namep, ++ gulong *frequencyp) ++{ ++ GRegex *re; ++ GMatchInfo *match_info; ++ gboolean res; ++ gboolean ret; ++ GError *error; ++ ++ ret = FALSE; ++ re = NULL; ++ match_info = NULL; ++ ++ error = NULL; ++ re = g_regex_new ("(?P[0-9a-zA-Z]+)[ ]+(?P[0-9]+)", 0, 0, &error); ++ if (re == NULL) { ++ g_critical ("%s", error->message); ++ goto out; ++ } ++ ++ g_regex_match (re, line, 0, &match_info); ++ ++ res = g_match_info_matches (match_info); ++ if (! res) { ++ g_warning ("Unable to parse history: %s", line); ++ goto out; ++ } ++ ++ if (user_namep != NULL) { ++ *user_namep = g_match_info_fetch_named (match_info, "username"); ++ } ++ ++ if (frequencyp != NULL) { ++ char *freq; ++ freq = g_match_info_fetch_named (match_info, "frequency"); ++ res = parse_value_as_ulong (freq, frequencyp); ++ g_free (freq); ++ if (! res) { ++ goto out; ++ } ++ } ++ ++ ret = TRUE; ++ ++ out: ++ if (match_info != NULL) { ++ g_match_info_free (match_info); ++ } ++ if (re != NULL) { ++ g_regex_unref (re); ++ } ++ return ret; ++} ++ ++static void ++process_ck_history_line (GdmUserManager *manager, ++ const char *line) ++{ ++ gboolean res; ++ char *username; ++ gulong frequency; ++ struct passwd *pwent; ++ GdmUser *user; ++ ++ frequency = 0; ++ username = NULL; ++ res = parse_ck_history_line (line, &username, &frequency); ++ if (! res) { ++ return; ++ } ++ ++ if (g_hash_table_lookup (manager->priv->exclusions, username)) { ++ g_debug ("GdmUserManager: excluding user '%s'", username); ++ g_free (username); ++ return; ++ } ++ ++ /* https://bugzilla.gnome.org/show_bug.cgi?id=587708 */ ++ /* do not show system users; we cannot use gdm_user_manager_get_user() ++ * here since this creates/signals users as a side effect */ ++ pwent = getpwnam (username); ++ if (pwent == NULL) { ++ g_warning ("Unable to lookup user name %s: %s", username, g_strerror (errno)); ++ return; ++ } ++ if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ g_debug ("GdmUserManager: excluding user '%s'", username); ++ return; ++ } ++ ++ user = gdm_user_manager_get_user (manager, username); ++ if (user == NULL) { ++ g_debug ("GdmUserManager: unable to lookup user '%s'", username); ++ g_free (username); ++ return; ++ } ++ ++ g_object_set (user, "login-frequency", frequency, NULL); ++ g_signal_emit (manager, signals [USER_LOGIN_FREQUENCY_CHANGED], 0, user); ++ g_free (username); ++} ++ ++static gboolean ++ck_history_watch (GIOChannel *source, ++ GIOCondition condition, ++ GdmUserManager *manager) ++{ ++ GIOStatus status; ++ gboolean done = FALSE; ++ ++ g_return_val_if_fail (manager != NULL, FALSE); ++ ++ if (condition & G_IO_IN) { ++ char *str; ++ GError *error; ++ ++ error = NULL; ++ status = g_io_channel_read_line (source, &str, NULL, NULL, &error); ++ if (error != NULL) { ++ g_warning ("GdmUserManager: unable to read line: %s", error->message); ++ g_error_free (error); ++ } ++ ++ if (status == G_IO_STATUS_NORMAL) { ++ g_debug ("GdmUserManager: history output: %s", str); ++ process_ck_history_line (manager, str); ++ } else if (status == G_IO_STATUS_EOF) { ++ done = TRUE; ++ } ++ ++ g_free (str); ++ } else if (condition & G_IO_HUP) { ++ done = TRUE; ++ } ++ ++ if (done) { ++ g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0); ++ ++ manager->priv->ck_history_id = 0; ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static void ++reload_ck_history (GdmUserManager *manager) ++{ ++ char *command; ++ const char *seat_id; ++ GError *error; ++ gboolean res; ++ char **argv; ++ int standard_out; ++ GIOChannel *channel; ++ ++ seat_id = NULL; ++ if (manager->priv->seat_id != NULL ++ && g_str_has_prefix (manager->priv->seat_id, "/org/freedesktop/ConsoleKit/")) { ++ ++ seat_id = manager->priv->seat_id + strlen ("/org/freedesktop/ConsoleKit/"); ++ } ++ ++ if (seat_id == NULL) { ++ g_warning ("Unable to find users: no seat-id found"); ++ return; ++ } ++ ++ command = g_strdup_printf ("ck-history --frequent --seat='%s' --session-type=''", ++ seat_id); ++ g_debug ("GdmUserManager: running '%s'", command); ++ error = NULL; ++ if (! g_shell_parse_argv (command, NULL, &argv, &error)) { ++ g_warning ("Could not parse command: %s", error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ error = NULL; ++ res = g_spawn_async_with_pipes (NULL, ++ argv, ++ NULL, ++ G_SPAWN_SEARCH_PATH, ++ NULL, ++ NULL, ++ NULL, /* pid */ ++ NULL, ++ &standard_out, ++ NULL, ++ &error); ++ g_strfreev (argv); ++ if (! res) { ++ g_warning ("Unable to run ck-history: %s", error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ channel = g_io_channel_unix_new (standard_out); ++ g_io_channel_set_close_on_unref (channel, TRUE); ++ g_io_channel_set_flags (channel, ++ g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK, ++ NULL); ++ manager->priv->ck_history_id = g_io_add_watch (channel, ++ G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL, ++ (GIOFunc)ck_history_watch, ++ manager); ++ g_io_channel_unref (channel); ++ ++ out: ++ g_free (command); ++} ++ ++static void ++reload_passwd (GdmUserManager *manager) ++{ ++ struct passwd *pwent; ++ GSList *old_users; ++ GSList *new_users; ++ GSList *list; ++ FILE *fp; ++ ++ old_users = NULL; ++ new_users = NULL; ++ ++ errno = 0; ++ fp = fopen (PATH_PASSWD, "r"); ++ if (fp == NULL) { ++ g_warning ("Unable to open %s: %s", PATH_PASSWD, g_strerror (errno)); ++ goto out; ++ } ++ ++ g_hash_table_foreach (manager->priv->users, listify_hash_values_hfunc, &old_users); ++ g_slist_foreach (old_users, (GFunc) g_object_ref, NULL); ++ ++ /* Make sure we keep users who are logged in no matter what. */ ++ for (list = old_users; list; list = list->next) { ++ if (gdm_user_get_num_sessions (list->data) > 0) { ++ g_object_freeze_notify (G_OBJECT (list->data)); ++ new_users = g_slist_prepend (new_users, g_object_ref (list->data)); ++ } ++ } ++ ++ for (pwent = fgetpwent (fp); pwent != NULL; pwent = fgetpwent (fp)) { ++ GdmUser *user; ++ ++ user = NULL; ++ ++ /* Skip users below MinimalUID... */ ++ if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ continue; ++ } ++ ++ /* ...And users w/ invalid shells... */ ++ if (pwent->pw_shell == NULL || ++ !g_hash_table_lookup (manager->priv->shells, pwent->pw_shell)) { ++ g_debug ("GdmUserManager: skipping user with bad shell: %s", pwent->pw_name); ++ continue; ++ } ++ ++ /* ...And explicitly excluded users */ ++ if (g_hash_table_lookup (manager->priv->exclusions, pwent->pw_name)) { ++ g_debug ("GdmUserManager: explicitly skipping user: %s", pwent->pw_name); ++ continue; ++ } ++ ++ user = g_hash_table_lookup (manager->priv->users, pwent->pw_name); ++ ++ /* Update users already in the *new* list */ ++ if (g_slist_find (new_users, user)) { ++ _gdm_user_update (user, pwent); ++ continue; ++ } ++ ++ if (user == NULL) { ++ user = create_user (manager); ++ } else { ++ g_object_ref (user); ++ } ++ ++ /* Freeze & update users not already in the new list */ ++ g_object_freeze_notify (G_OBJECT (user)); ++ _gdm_user_update (user, pwent); ++ ++ new_users = g_slist_prepend (new_users, user); ++ } ++ ++ /* Go through and handle added users */ ++ for (list = new_users; list; list = list->next) { ++ if (! g_slist_find (old_users, list->data)) { ++ add_user (manager, list->data); ++ } ++ } ++ ++ /* Go through and handle removed users */ ++ for (list = old_users; list; list = list->next) { ++ if (! g_slist_find (new_users, list->data)) { ++ g_signal_emit (manager, signals[USER_REMOVED], 0, list->data); ++ g_hash_table_remove (manager->priv->users, ++ gdm_user_get_user_name (list->data)); ++ } ++ } ++ ++ out: ++ /* Cleanup */ ++ ++ fclose (fp); ++ ++ g_slist_foreach (new_users, (GFunc) g_object_thaw_notify, NULL); ++ g_slist_foreach (new_users, (GFunc) g_object_unref, NULL); ++ g_slist_free (new_users); ++ ++ g_slist_foreach (old_users, (GFunc) g_object_unref, NULL); ++ g_slist_free (old_users); ++} ++ ++static void ++reload_users (GdmUserManager *manager) ++{ ++ reload_ck_history (manager); ++ reload_passwd (manager); ++} ++ ++static gboolean ++reload_users_timeout (GdmUserManager *manager) ++{ ++ reload_users (manager); ++ manager->priv->reload_id = 0; ++ ++ return FALSE; ++} ++ ++static void ++queue_reload_users (GdmUserManager *manager) ++{ ++ if (manager->priv->reload_id > 0) { ++ return; ++ } ++ ++ g_signal_emit (G_OBJECT (manager), signals[LOADING_USERS], 0); ++ manager->priv->reload_id = g_idle_add ((GSourceFunc)reload_users_timeout, manager); ++} ++ ++static void ++reload_shells (GdmUserManager *manager) ++{ ++ char *shell; ++ ++ setusershell (); ++ ++ g_hash_table_remove_all (manager->priv->shells); ++ for (shell = getusershell (); shell != NULL; shell = getusershell ()) { ++ /* skip well known not-real shells */ ++ if (shell == NULL ++ || strcmp (shell, "/sbin/nologin") == 0 ++ || strcmp (shell, "/bin/false") == 0) { ++ g_debug ("GdmUserManager: skipping shell %s", shell); ++ continue; ++ } ++ g_hash_table_insert (manager->priv->shells, ++ g_strdup (shell), ++ GUINT_TO_POINTER (TRUE)); ++ } ++ ++ endusershell (); ++} ++ ++static void ++on_shells_monitor_changed (GFileMonitor *monitor, ++ GFile *file, ++ GFile *other_file, ++ GFileMonitorEvent event_type, ++ GdmUserManager *manager) ++{ ++ if (event_type != G_FILE_MONITOR_EVENT_CHANGED && ++ event_type != G_FILE_MONITOR_EVENT_CREATED) { ++ return; ++ } ++ ++ reload_shells (manager); ++ reload_passwd (manager); ++} ++ ++static void ++on_passwd_monitor_changed (GFileMonitor *monitor, ++ GFile *file, ++ GFile *other_file, ++ GFileMonitorEvent event_type, ++ GdmUserManager *manager) ++{ ++ if (event_type != G_FILE_MONITOR_EVENT_CHANGED && ++ event_type != G_FILE_MONITOR_EVENT_CREATED) { ++ return; ++ } ++ ++ reload_passwd (manager); ++} ++ ++static void ++gdm_user_manager_class_init (GdmUserManagerClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->finalize = gdm_user_manager_finalize; ++ ++ signals [LOADING_USERS] = ++ g_signal_new ("loading-users", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, loading_users), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, 0); ++ signals [USERS_LOADED] = ++ g_signal_new ("users-loaded", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, users_loaded), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, 0); ++ signals [USER_ADDED] = ++ g_signal_new ("user-added", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_added), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, GDM_TYPE_USER); ++ signals [USER_REMOVED] = ++ g_signal_new ("user-removed", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_removed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, GDM_TYPE_USER); ++ signals [USER_IS_LOGGED_IN_CHANGED] = ++ g_signal_new ("user-is-logged-in-changed", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_is_logged_in_changed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, GDM_TYPE_USER); ++ signals [USER_LOGIN_FREQUENCY_CHANGED] = ++ g_signal_new ("user-login-frequency-changed", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmUserManagerClass, user_login_frequency_changed), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, GDM_TYPE_USER); ++ ++ g_type_class_add_private (klass, sizeof (GdmUserManagerPrivate)); ++} ++ ++static void ++gdm_user_manager_init (GdmUserManager *manager) ++{ ++ int i; ++ GFile *file; ++ GError *error; ++ const char *exclude_default[] = DEFAULT_EXCLUDE; ++ ++ manager->priv = GDM_USER_MANAGER_GET_PRIVATE (manager); ++ ++ /* sessions */ ++ manager->priv->sessions = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ g_free); ++ ++ /* exclusions */ ++ manager->priv->exclusions = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ NULL); ++ for (i = 0; exclude_default[i] != NULL; i++) { ++ g_hash_table_insert (manager->priv->exclusions, ++ g_strdup (exclude_default [i]), ++ GUINT_TO_POINTER (TRUE)); ++ } ++ ++ /* /etc/shells */ ++ manager->priv->shells = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ NULL); ++ reload_shells (manager); ++ file = g_file_new_for_path (_PATH_SHELLS); ++ error = NULL; ++ manager->priv->shells_monitor = g_file_monitor_file (file, ++ G_FILE_MONITOR_NONE, ++ NULL, ++ &error); ++ if (manager->priv->shells_monitor != NULL) { ++ g_signal_connect (manager->priv->shells_monitor, ++ "changed", ++ G_CALLBACK (on_shells_monitor_changed), ++ manager); ++ } else { ++ g_warning ("Unable to monitor %s: %s", _PATH_SHELLS, error->message); ++ g_error_free (error); ++ } ++ g_object_unref (file); ++ ++ /* /etc/passwd */ ++ manager->priv->users = g_hash_table_new_full (g_str_hash, ++ g_str_equal, ++ g_free, ++ (GDestroyNotify) g_object_run_dispose); ++ file = g_file_new_for_path (PATH_PASSWD); ++ manager->priv->passwd_monitor = g_file_monitor_file (file, ++ G_FILE_MONITOR_NONE, ++ NULL, ++ &error); ++ if (manager->priv->passwd_monitor != NULL) { ++ g_signal_connect (manager->priv->passwd_monitor, ++ "changed", ++ G_CALLBACK (on_passwd_monitor_changed), ++ manager); ++ } else { ++ g_warning ("Unable to monitor %s: %s", PATH_PASSWD, error->message); ++ g_error_free (error); ++ } ++ g_object_unref (file); ++ ++ ++ get_seat_proxy (manager); ++ ++ queue_reload_users (manager); ++ ++ manager->priv->users_dirty = FALSE; ++} ++ ++static void ++gdm_user_manager_finalize (GObject *object) ++{ ++ GdmUserManager *manager; ++ ++ g_return_if_fail (object != NULL); ++ g_return_if_fail (GDM_IS_USER_MANAGER (object)); ++ ++ manager = GDM_USER_MANAGER (object); ++ ++ g_return_if_fail (manager->priv != NULL); ++ ++ if (manager->priv->seat_proxy != NULL) { ++ g_object_unref (manager->priv->seat_proxy); ++ } ++ ++ if (manager->priv->ck_history_id != 0) { ++ g_source_remove (manager->priv->ck_history_id); ++ manager->priv->ck_history_id = 0; ++ } ++ ++ if (manager->priv->reload_id > 0) { ++ g_source_remove (manager->priv->reload_id); ++ manager->priv->reload_id = 0; ++ } ++ ++ g_hash_table_destroy (manager->priv->sessions); ++ ++ g_file_monitor_cancel (manager->priv->passwd_monitor); ++ g_hash_table_destroy (manager->priv->users); ++ ++ g_file_monitor_cancel (manager->priv->shells_monitor); ++ g_hash_table_destroy (manager->priv->shells); ++ ++ g_free (manager->priv->seat_id); ++ ++ G_OBJECT_CLASS (gdm_user_manager_parent_class)->finalize (object); ++} ++ ++GdmUserManager * ++gdm_user_manager_ref_default (void) ++{ ++ if (user_manager_object != NULL) { ++ g_object_ref (user_manager_object); ++ } else { ++ user_manager_object = g_object_new (GDM_TYPE_USER_MANAGER, NULL); ++ g_object_add_weak_pointer (user_manager_object, ++ (gpointer *) &user_manager_object); ++ } ++ ++ return GDM_USER_MANAGER (user_manager_object); ++} +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdm-user-manager.h gdm-2.28.0.new/gui/gdmsetup/gdm-user-manager.h +--- gdm-2.28.0/gui/gdmsetup/gdm-user-manager.h 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdm-user-manager.h 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,87 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2007 William Jon McCann ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ */ ++ ++#ifndef __GDM_USER_MANAGER_H ++#define __GDM_USER_MANAGER_H ++ ++#include ++ ++#include "gdm-user.h" ++ ++G_BEGIN_DECLS ++ ++#define GDM_TYPE_USER_MANAGER (gdm_user_manager_get_type ()) ++#define GDM_USER_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_USER_MANAGER, GdmUserManager)) ++#define GDM_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_USER_MANAGER, GdmUserManagerClass)) ++#define GDM_IS_USER_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_USER_MANAGER)) ++#define GDM_IS_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_USER_MANAGER)) ++#define GDM_USER_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_USER_MANAGER, GdmUserManagerClass)) ++ ++typedef struct GdmUserManagerPrivate GdmUserManagerPrivate; ++ ++typedef struct ++{ ++ GObject parent; ++ GdmUserManagerPrivate *priv; ++} GdmUserManager; ++ ++typedef struct ++{ ++ GObjectClass parent_class; ++ ++ void (* loading_users) (GdmUserManager *user_manager); ++ void (* users_loaded) (GdmUserManager *user_manager); ++ void (* user_added) (GdmUserManager *user_manager, ++ GdmUser *user); ++ void (* user_removed) (GdmUserManager *user_manager, ++ GdmUser *user); ++ void (* user_is_logged_in_changed) (GdmUserManager *user_manager, ++ GdmUser *user); ++ void (* user_login_frequency_changed) (GdmUserManager *user_manager, ++ GdmUser *user); ++} GdmUserManagerClass; ++ ++typedef enum ++{ ++ GDM_USER_MANAGER_ERROR_GENERAL, ++ GDM_USER_MANAGER_ERROR_KEY_NOT_FOUND ++} GdmUserManagerError; ++ ++#define GDM_USER_MANAGER_ERROR gdm_user_manager_error_quark () ++ ++GQuark gdm_user_manager_error_quark (void); ++GType gdm_user_manager_get_type (void); ++ ++GdmUserManager * gdm_user_manager_ref_default (void); ++ ++GSList * gdm_user_manager_list_users (GdmUserManager *manager); ++GdmUser * gdm_user_manager_get_user (GdmUserManager *manager, ++ const char *user_name); ++GdmUser * gdm_user_manager_get_user_by_uid (GdmUserManager *manager, ++ uid_t uid); ++ ++gboolean gdm_user_manager_activate_user_session (GdmUserManager *manager, ++ GdmUser *user); ++ ++gboolean gdm_user_manager_goto_login_session (GdmUserManager *manager); ++ ++G_END_DECLS ++ ++#endif /* __GDM_USER_MANAGER_H */ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/gdm-user-private.h gdm-2.28.0.new/gui/gdmsetup/gdm-user-private.h +--- gdm-2.28.0/gui/gdmsetup/gdm-user-private.h 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/gdm-user-private.h 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,44 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2004-2005 James M. Cape . ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++/* ++ * Private interfaces to the GdmUser object ++ */ ++ ++#ifndef __GDM_USER_PRIVATE__ ++#define __GDM_USER_PRIVATE__ 1 ++ ++#include ++ ++#include "gdm-user.h" ++ ++G_BEGIN_DECLS ++ ++void _gdm_user_update (GdmUser *user, ++ const struct passwd *pwent); ++void _gdm_user_add_session (GdmUser *user, ++ const char *session_id); ++void _gdm_user_remove_session (GdmUser *user, ++ const char *session_id); ++ ++void _gdm_user_icon_changed (GdmUser *user); ++ ++G_END_DECLS ++ ++#endif /* !__GDM_USER_PRIVATE__ */ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/gdmsetup/Makefile.am gdm-2.28.0.new/gui/gdmsetup/Makefile.am +--- gdm-2.28.0/gui/gdmsetup/Makefile.am 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/gui/gdmsetup/Makefile.am 2009-09-22 16:42:25.000000000 +0200 +@@ -0,0 +1,38 @@ ++NULL = ++ ++AM_CPPFLAGS = \ ++ -I$(top_srcdir)/common \ ++ -DDATADIR=\""$(datadir)"\" \ ++ -DUIDIR=\""$(uidir)"\" \ ++ -DGNOMELOCALEDIR=\""$(gdmlocaledir)"\" \ ++ $(GDMSETUP_CFLAGS) \ ++ $(NULL) ++ ++bin_PROGRAMS = \ ++ gdmsetup \ ++ $(NULL) ++ ++gdmsetup_SOURCES = \ ++ gdmsetup.c \ ++ gdm-user.c \ ++ gdm-user-manager.c \ ++ $(NULL) ++ ++gdmsetup_LDADD = \ ++ $(GDMSETUP_LIBS) \ ++ $(NULL) ++ ++uidir = $(pkgdatadir) ++ui_DATA = \ ++ gdmsetup.ui \ ++ $(NULL) ++ ++Utilitiesdir = $(datadir)/applications ++Utilities_in_files = gdmsetup.desktop.in ++Utilities_DATA = $(Utilities_in_files:.desktop.in=.desktop) ++@INTLTOOL_DESKTOP_RULE@ ++ ++EXTRA_DIST = \ ++ $(ui_DATA) \ ++ $(Utilities_in_files) \ ++ $(NULL) +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/Makefile.am gdm-2.28.0.new/gui/Makefile.am +--- gdm-2.28.0/gui/Makefile.am 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/gui/Makefile.am 2009-09-22 16:42:25.000000000 +0200 +@@ -1,6 +1,7 @@ + NULL = + + SUBDIRS = \ ++ gdmsetup \ + simple-chooser \ + simple-greeter \ + user-switch-applet \ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/po/POTFILES.in gdm-2.28.0.new/po/POTFILES.in +--- gdm-2.28.0/po/POTFILES.in 2009-09-22 16:42:24.000000000 +0200 ++++ gdm-2.28.0.new/po/POTFILES.in 2009-09-22 16:42:25.000000000 +0200 +@@ -60,6 +60,9 @@ + data/greeter-autostart/metacity.desktop.in + data/greeter-autostart/orca-screen-reader.desktop.in + data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in ++gui/gdmsetup/gdmsetup.desktop.in ++gui/gdmsetup/gdmsetup.c ++[type: gettext/glade]gui/gdmsetup/gdmsetup.ui + gui/simple-chooser/gdm-host-chooser-dialog.c + gui/simple-chooser/gdm-host-chooser-widget.c + gui/simple-greeter/gdm-cell-renderer-timer.c --- gdm-2.29.4.orig/debian/patches/29_switch_user.patch +++ gdm-2.29.4/debian/patches/29_switch_user.patch @@ -0,0 +1,612 @@ +From 7e4878cea1504420911b7672f81f9221c6e1d65a Mon Sep 17 00:00:00 2001 +From: Robert Ancell +Date: Wed, 13 Jan 2010 16:30:49 +1100 +Subject: [PATCH] Add SwitchToUser() method which automatically selects that user in the greeter or switches to an already open session +Bug: + +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-display.c gdm-2.29.4.new/daemon/gdm-display.c +--- gdm-2.29.4/daemon/gdm-display.c 2009-12-22 03:36:30.000000000 +1100 ++++ gdm-2.29.4.new/daemon/gdm-display.c 2010-01-14 13:00:54.886674032 +1100 +@@ -60,6 +60,7 @@ + time_t creation_time; + GTimer *slave_timer; + char *slave_command; ++ char *username; + + char *x11_cookie; + gsize x11_cookie_size; +@@ -85,6 +86,7 @@ + PROP_X11_AUTHORITY_FILE, + PROP_IS_LOCAL, + PROP_SLAVE_COMMAND, ++ PROP_USERNAME, + }; + + static void gdm_display_class_init (GdmDisplayClass *klass); +@@ -574,9 +576,17 @@ + gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path); + g_free (log_path); + +- command = g_strdup_printf ("%s --display-id %s", +- display->priv->slave_command, +- display->priv->id); ++ if (display->priv->username) { ++ command = g_strdup_printf ("%s --display-id %s --username %s", ++ display->priv->slave_command, ++ display->priv->id, ++ display->priv->username); ++ } else { ++ command = g_strdup_printf ("%s --display-id %s", ++ display->priv->slave_command, ++ display->priv->id); ++ } ++ + gdm_slave_proxy_set_command (display->priv->slave_proxy, command); + g_free (command); + +@@ -832,6 +842,14 @@ + } + + static void ++_gdm_display_set_username (GdmDisplay *display, ++ const char *username) ++{ ++ g_free (display->priv->username); ++ display->priv->username = g_strdup (username); ++} ++ ++static void + gdm_display_set_property (GObject *object, + guint prop_id, + const GValue *value, +@@ -869,6 +887,9 @@ + case PROP_SLAVE_COMMAND: + _gdm_display_set_slave_command (self, g_value_get_string (value)); + break; ++ case PROP_USERNAME: ++ _gdm_display_set_username (self, g_value_get_string (value)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -917,6 +938,9 @@ + case PROP_SLAVE_COMMAND: + g_value_set_string (value, self->priv->slave_command); + break; ++ case PROP_USERNAME: ++ g_value_set_string (value, self->priv->username); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1093,6 +1117,13 @@ + DEFAULT_SLAVE_COMMAND, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, ++ PROP_USERNAME, ++ g_param_spec_string ("username", ++ "username", ++ "username", ++ NULL, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); ++ g_object_class_install_property (object_class, + PROP_STATUS, + g_param_spec_int ("status", + "status", +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-greeter-server.c gdm-2.29.4.new/daemon/gdm-greeter-server.c +--- gdm-2.29.4/daemon/gdm-greeter-server.c 2009-12-22 03:36:30.000000000 +1100 ++++ gdm-2.29.4.new/daemon/gdm-greeter-server.c 2010-01-14 13:00:54.886674032 +1100 +@@ -281,6 +281,14 @@ + } + + void ++gdm_greeter_server_select_user(GdmGreeterServer *greeter_server, ++ const char *username) ++{ ++ g_debug ("SelectUser(%s)", username); ++ send_dbus_string_signal (greeter_server, "SelectUser", username); ++} ++ ++void + gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server, + const char *username, + int delay) +@@ -754,6 +762,9 @@ + " \n" + " \n" + " \n" ++ " \n" ++ " \n" ++ " \n" + " \n" + " \n" + " \n" +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-greeter-server.h gdm-2.29.4.new/daemon/gdm-greeter-server.h +--- gdm-2.29.4/daemon/gdm-greeter-server.h 2009-12-09 02:20:18.000000000 +1100 ++++ gdm-2.29.4.new/daemon/gdm-greeter-server.h 2010-01-14 13:00:54.886674032 +1100 +@@ -95,6 +95,8 @@ + void gdm_greeter_server_default_session_name_changed (GdmGreeterServer *greeter_server, + const char *text); + ++void gdm_greeter_server_select_user (GdmGreeterServer *greeter_server, ++ const char *username); + void gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server, + const char *username, + int delay); +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-local-display-factory.c gdm-2.29.4.new/daemon/gdm-local-display-factory.c +--- gdm-2.29.4/daemon/gdm-local-display-factory.c 2010-01-14 13:00:54.226667038 +1100 ++++ gdm-2.29.4.new/daemon/gdm-local-display-factory.c 2010-01-14 13:02:10.804200067 +1100 +@@ -501,6 +501,121 @@ + } + } + ++static gboolean ++switch_to_user_display (GdmLocalDisplayFactory *factory, char *username) ++{ ++ struct passwd *password; ++ DBusGProxy *proxy; ++ GPtrArray *sessions = NULL; ++ GError *error = NULL; ++ gboolean result = FALSE; ++ ++ password = getpwnam (username); ++ if (!password) { ++ return FALSE; ++ } ++ ++ proxy = dbus_g_proxy_new_for_name (factory->priv->connection, ++ "org.freedesktop.ConsoleKit", ++ "/org/freedesktop/ConsoleKit/Manager", ++ "org.freedesktop.ConsoleKit.Manager"); ++ ++ dbus_g_proxy_call (proxy, "GetSessionsForUnixUser", &error, ++ G_TYPE_UINT, password->pw_uid, G_TYPE_INVALID, ++ dbus_g_type_get_collection("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &sessions, G_TYPE_INVALID); ++ g_object_unref(proxy); ++ if (error != NULL) { ++ g_warning ("Error getting sessions for user %s: %s", username, error->message); ++ g_error_free (error); ++ } ++ ++ if (sessions && sessions->len > 0) { ++ gchar *session_id = sessions->pdata[0]; ++ ++ g_debug ("GdmLocalDisplayFactory: Switching to session %s (user %s)", session_id, username); ++ ++ proxy = dbus_g_proxy_new_for_name (factory->priv->connection, ++ "org.freedesktop.ConsoleKit", ++ session_id, ++ "org.freedesktop.ConsoleKit.Session"); ++ result = dbus_g_proxy_call (proxy, "Activate", &error, G_TYPE_INVALID, G_TYPE_INVALID); ++ g_object_unref (proxy); ++ if (error != NULL) ++ { ++ g_warning ("Error activating session for user %s: %s", username, error->message); ++ g_error_free (error); ++ } ++ } ++ ++ if (sessions != NULL) { ++ gint i; ++ for (i = 0; i < sessions->len; i++) { ++ g_free (sessions->pdata[i]); ++ } ++ g_ptr_array_free (sessions, TRUE); ++ } ++ ++ return result; ++} ++ ++gboolean ++gdm_local_display_factory_switch_to_user (GdmLocalDisplayFactory *factory, ++ char *username, ++ char **id, ++ GError **error) ++{ ++ gboolean ret; ++ GdmDisplay *display; ++ guint32 num; ++ ++ g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); ++ ++ /* Switch to existing user display */ ++ if (switch_to_user_display (factory, username)) { ++ /* FIXME: How to return the ID of the user display? It should ++ * be easy but I can't find how to get it */ ++ /*if (id != NULL) { ++ *id = g_strdup ("FIXME"); ++ }*/ ++ ++ /* FIXME: We should return TRUE here but this causes GDM to go ++ * crazy. Luckily we can return FALSE as we don't need ++ * any values returned from this call */ ++ return FALSE; ++ } ++ ++ ret = FALSE; ++ ++ num = take_next_display_number (factory); ++ ++ g_debug ("GdmLocalDisplayFactory: Switching to user %s on display %d", username, num); ++ ++ display = gdm_transient_display_new (num); ++ ++ /* FIXME: don't hardcode seat1? */ ++ g_object_set (display, "seat-id", CK_SEAT1_PATH, NULL); ++ g_object_set (display, "username", username, NULL); ++ ++ store_display (factory, num, display); ++ ++ if (! gdm_display_manage (display)) { ++ display = NULL; ++ goto out; ++ } ++ ++ if (! gdm_display_get_id (display, id, NULL)) { ++ display = NULL; ++ goto out; ++ } ++ ++ ret = TRUE; ++ out: ++ /* ref either held by store or not at all */ ++ g_object_unref (display); ++ ++ return ret; ++} ++ + gboolean + gdm_local_display_factory_create_product_display (GdmLocalDisplayFactory *factory, + const char *parent_display_id, +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-local-display-factory.h gdm-2.29.4.new/daemon/gdm-local-display-factory.h +--- gdm-2.29.4/daemon/gdm-local-display-factory.h 2010-01-14 13:00:54.226667038 +1100 ++++ gdm-2.29.4.new/daemon/gdm-local-display-factory.h 2010-01-14 13:00:54.886674032 +1100 +@@ -64,6 +64,10 @@ + gboolean gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *factory, + char **id, + GError **error); ++gboolean gdm_local_display_factory_switch_to_user (GdmLocalDisplayFactory *factory, ++ char *username, ++ char **id, ++ GError **error); + + gboolean gdm_local_display_factory_start_guest_session (GdmLocalDisplayFactory *factory, + char **id, +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-local-display-factory.xml gdm-2.29.4.new/daemon/gdm-local-display-factory.xml +--- gdm-2.29.4/daemon/gdm-local-display-factory.xml 2010-01-14 13:00:54.226667038 +1100 ++++ gdm-2.29.4.new/daemon/gdm-local-display-factory.xml 2010-01-14 13:00:54.886674032 +1100 +@@ -12,5 +12,9 @@ + + + ++ ++ ++ ++ + + +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-simple-slave.c gdm-2.29.4.new/daemon/gdm-simple-slave.c +--- gdm-2.29.4/daemon/gdm-simple-slave.c 2010-01-14 13:00:54.386666699 +1100 ++++ gdm-2.29.4.new/daemon/gdm-simple-slave.c 2010-01-14 13:00:54.886674032 +1100 +@@ -85,10 +85,13 @@ + guint start_session_when_ready : 1; + guint waiting_to_start_session : 1; + guint plymouth_is_running : 1; ++ ++ gchar *username; + }; + + enum { + PROP_0, ++ PROP_USERNAME, + }; + + static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass); +@@ -506,6 +509,18 @@ + g_warning ("Unable to send ready"); + } + } ++ ++ g_object_get (slave, "username", &username, NULL); ++ if (username) { ++ g_debug ("GdmSimpleSlave: **user '%s'", username); ++ if (slave->priv->greeter_server != NULL) { ++ g_debug ("GdmSimpleSlave: begin login for user '%s'", username); ++ gdm_greeter_server_select_user (slave->priv->greeter_server, username); ++ } ++ g_free (username); ++ return; ++ } ++ g_debug ("GdmSimpleSlave: **nouser"); + + enabled = FALSE; + gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &enabled, &username, &delay); +@@ -1272,12 +1287,29 @@ + } + + static void ++gdm_simple_slave_set_username (GdmSimpleSlave *slave, ++ const char *username) ++{ ++ g_return_if_fail (GDM_IS_SIMPLE_SLAVE (slave)); ++ ++ g_free (slave->priv->username); ++ slave->priv->username = g_strdup (username); ++} ++ ++static void + gdm_simple_slave_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) + { ++ GdmSimpleSlave *self; ++ ++ self = GDM_SIMPLE_SLAVE (object); ++ + switch (prop_id) { ++ case PROP_USERNAME: ++ gdm_simple_slave_set_username (self, g_value_get_string (value)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1290,7 +1322,14 @@ + GValue *value, + GParamSpec *pspec) + { ++ GdmSimpleSlave *self; ++ ++ self = GDM_SIMPLE_SLAVE (object); ++ + switch (prop_id) { ++ case PROP_USERNAME: ++ g_value_set_string (value, self->priv->username); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; +@@ -1327,6 +1366,14 @@ + + g_type_class_add_private (klass, sizeof (GdmSimpleSlavePrivate)); + ++ g_object_class_install_property (object_class, ++ PROP_USERNAME, ++ g_param_spec_string ("username", ++ "id", ++ "id", ++ NULL, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); ++ + dbus_g_object_type_install_info (GDM_TYPE_SIMPLE_SLAVE, &dbus_glib_gdm_simple_slave_object_info); + } + +@@ -1359,12 +1406,13 @@ + } + + GdmSlave * +-gdm_simple_slave_new (const char *id) ++gdm_simple_slave_new (const char *id, const char *username) + { + GObject *object; + + object = g_object_new (GDM_TYPE_SIMPLE_SLAVE, + "display-id", id, ++ "username", username, + NULL); + + return GDM_SLAVE (object); +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/gdm-simple-slave.h gdm-2.29.4.new/daemon/gdm-simple-slave.h +--- gdm-2.29.4/daemon/gdm-simple-slave.h 2009-12-09 02:20:18.000000000 +1100 ++++ gdm-2.29.4.new/daemon/gdm-simple-slave.h 2010-01-14 13:00:54.886674032 +1100 +@@ -48,7 +48,8 @@ + } GdmSimpleSlaveClass; + + GType gdm_simple_slave_get_type (void); +-GdmSlave * gdm_simple_slave_new (const char *id); ++GdmSlave * gdm_simple_slave_new (const char *id, ++ const char *username); + + G_END_DECLS + +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/simple-slave-main.c gdm-2.29.4.new/daemon/simple-slave-main.c +--- gdm-2.29.4/daemon/simple-slave-main.c 2010-01-14 13:00:54.186666563 +1100 ++++ gdm-2.29.4.new/daemon/simple-slave-main.c 2010-01-14 13:00:54.886674032 +1100 +@@ -47,6 +47,7 @@ + #include "gdm-settings-direct.h" + + #include "gdm-settings.h" ++#include "gdm-settings-client.h" + #include "gdm-settings-direct.h" + #include "gdm-settings-keys.h" + +@@ -178,9 +179,11 @@ + DBusGConnection *connection; + GdmSlave *slave; + static char *display_id = NULL; ++ static char *username = NULL; + GdmSignalHandler *signal_handler; + static GOptionEntry entries [] = { + { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("ID") }, ++ { "username", 0, 0, G_OPTION_ARG_STRING, &username, N_("Username"), N_("name") }, + { NULL } + }; + +@@ -248,7 +251,7 @@ + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); + +- slave = gdm_simple_slave_new (display_id); ++ slave = gdm_simple_slave_new (display_id, username); + if (slave == NULL) { + goto out; + } +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/gdm.conf.in gdm-2.29.4.new/data/gdm.conf.in +--- gdm-2.29.4/data/gdm.conf.in 2010-01-14 13:00:54.266675125 +1100 ++++ gdm-2.29.4.new/data/gdm.conf.in 2010-01-14 13:00:54.886674032 +1100 +@@ -74,6 +74,9 @@ + send_member="CreateTransientDisplay"/> + ++ + + priv->username); ++ login_window->priv->username = g_strdup (username); ++ if (login_window->priv->user_chooser_loaded) { ++ g_debug ("GdmGreeterLoginWindow: activating user '%s'", login_window->priv->username); ++ gdm_chooser_widget_set_active_item (GDM_CHOOSER_WIDGET (login_window->priv->user_chooser), username); ++ } ++} ++ ++ + void + gdm_greeter_login_window_request_timed_login (GdmGreeterLoginWindow *login_window, + const char *username, +@@ -839,6 +859,11 @@ + adjust_other_login_visibility (login_window); + + gdm_chooser_widget_activate_if_one_item (GDM_CHOOSER_WIDGET (login_window->priv->user_chooser)); ++ ++ if (login_window->priv->username) { ++ g_debug ("GdmGreeterLoginWindow: activating user '%s'", login_window->priv->username); ++ gdm_chooser_widget_set_active_item (GDM_CHOOSER_WIDGET (login_window->priv->user_chooser), login_window->priv->username); ++ } + } + + static void +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/simple-greeter/gdm-greeter-login-window.h gdm-2.29.4.new/gui/simple-greeter/gdm-greeter-login-window.h +--- gdm-2.29.4/gui/simple-greeter/gdm-greeter-login-window.h 2009-12-09 02:20:18.000000000 +1100 ++++ gdm-2.29.4.new/gui/simple-greeter/gdm-greeter-login-window.h 2010-01-14 13:00:54.886674032 +1100 +@@ -76,6 +76,8 @@ + gboolean gdm_greeter_login_window_problem (GdmGreeterLoginWindow *login_window, + const char *text); + ++void gdm_greeter_login_window_select_user (GdmGreeterLoginWindow *login_window, ++ const char *username); + void gdm_greeter_login_window_request_timed_login (GdmGreeterLoginWindow *login_window, + const char *username, + int delay); +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/simple-greeter/gdm-greeter-session.c gdm-2.29.4.new/gui/simple-greeter/gdm-greeter-session.c +--- gdm-2.29.4/gui/simple-greeter/gdm-greeter-session.c 2010-01-14 13:00:54.176672276 +1100 ++++ gdm-2.29.4.new/gui/simple-greeter/gdm-greeter-session.c 2010-01-14 13:00:54.886674032 +1100 +@@ -153,6 +153,15 @@ + } + + static void ++on_server_select_user (GdmGreeterClient *client, ++ const char *username, ++ GdmGreeterSession *session) ++{ ++ g_debug ("GdmGreeterSession: selecting user %s", username); ++ gdm_greeter_login_window_select_user (GDM_GREETER_LOGIN_WINDOW (session->priv->login_window), username); ++} ++ ++static void + on_timed_login_requested (GdmGreeterClient *client, + const char *text, + int delay, +@@ -603,6 +612,10 @@ + G_CALLBACK (on_default_session_name_changed), + session); + g_signal_connect (session->priv->client, ++ "select-user", ++ G_CALLBACK (on_server_select_user), ++ session); ++ g_signal_connect (session->priv->client, + "timed-login-requested", + G_CALLBACK (on_timed_login_requested), + session); --- gdm-2.29.4.orig/debian/patches/01_default_keyboard_layout.patch +++ gdm-2.29.4/debian/patches/01_default_keyboard_layout.patch @@ -0,0 +1,90 @@ +Ubuntu hal patch translated to libxklavier. +Always overrides keyboard layout variants: https://bugzilla.gnome.org/show_bug.cgi?id=572765 +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/gdm-session-direct.c gdm-2.28.1.new/daemon/gdm-session-direct.c +--- gdm-2.28.1/daemon/gdm-session-direct.c 2009-10-20 00:12:45.000000000 +0200 ++++ gdm-2.28.1.new/daemon/gdm-session-direct.c 2009-11-27 08:56:30.357591406 +0100 +@@ -42,6 +42,9 @@ + #include + #include + ++#include ++#include /* for Display */ ++ + #include + #include + +@@ -598,14 +601,44 @@ + return setlocale (LC_MESSAGES, NULL); + } + ++static char * ++get_system_default_layout (GdmSessionDirect *session) ++{ ++ char *result; ++ Display *display; ++ ++ result = NULL; ++ display = XOpenDisplay (session->priv->display_name); ++ if (display) { ++ XklConfigRec *config; ++ XklEngine *engine = xkl_engine_get_instance (display); ++ if (engine) ++ { ++ XklConfigRec *config = xkl_config_rec_new (); ++ if (xkl_config_rec_get_from_server (config, engine) && config->layouts && config->layouts[0]) { ++ if (config->variants && config->variants[0] && config->variants[0][0]) ++ result = g_strdup_printf("%s\t%s", config->layouts[0], config->variants[0]); ++ else ++ result = g_strdup (config->layouts[0]); ++ } ++ g_object_unref (config); ++ } ++ XCloseDisplay (display); ++ } ++ ++ if (!result) ++ result = g_strdup ("us"); ++ return result; ++} ++ + static const char * + get_default_layout_name (GdmSessionDirect *session) + { +- if (session->priv->saved_layout != NULL) { +- return session->priv->saved_layout; ++ if (!session->priv->saved_layout) { ++ session->priv->saved_layout = get_system_default_layout (session); + } + +- return "us"; ++ return session->priv->saved_layout; + } + + static char * +diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/daemon/Makefile.am gdm-2.28.1.new/daemon/Makefile.am +--- gdm-2.28.1/daemon/Makefile.am 2009-10-20 00:12:45.000000000 +0200 ++++ gdm-2.28.1.new/daemon/Makefile.am 2009-11-27 08:55:14.640057134 +0100 +@@ -105,6 +105,7 @@ + $(EXTRA_DAEMON_LIBS) \ + $(DAEMON_LIBS) \ + $(PAM_LIBS) \ ++ $(LIBXKLAVIER_LIBS) \ + $(NULL) + + libexec_PROGRAMS = \ +@@ -151,6 +152,7 @@ + $(XLIB_LIBS) \ + $(DAEMON_LIBS) \ + $(EXTRA_DAEMON_LIBS) \ ++ $(LIBXKLAVIER_LIBS) \ + $(NULL) + + gdm_factory_slave_SOURCES = \ +@@ -214,6 +216,7 @@ + $(XLIB_LIBS) \ + $(DAEMON_LIBS) \ + $(EXTRA_DAEMON_LIBS) \ ++ $(LIBXKLAVIER_LIBS) \ + $(NULL) + + gdm_xdmcp_chooser_slave_SOURCES = \ --- gdm-2.29.4.orig/debian/patches/19_no_greeter_for_autologin.patch +++ gdm-2.29.4/debian/patches/19_no_greeter_for_autologin.patch @@ -0,0 +1,26 @@ +# +# Description: gdm_slave_get_timed_login_details() does not fill variables if username is NULL +# Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gdm/+bug/435801 +# Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=596830 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/daemon/gdm-simple-slave.c gdm-2.28.0.new/daemon/gdm-simple-slave.c +--- gdm-2.28.0/daemon/gdm-simple-slave.c 2009-09-30 17:12:26.000000000 +1000 ++++ gdm-2.28.0.new/daemon/gdm-simple-slave.c 2009-09-30 17:13:14.000000000 +1000 +@@ -1014,6 +1014,7 @@ + if (res) { + gboolean enabled; + int delay; ++ char *username; + + /* FIXME: handle wait-for-go */ + +@@ -1021,7 +1022,8 @@ + + delay = 0; + enabled = FALSE; +- gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &enabled, NULL, &delay); ++ gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &enabled, &username, &delay); ++ g_free (username); + if (! enabled || delay > 0) { + start_greeter (slave); + create_new_session (slave); --- gdm-2.29.4.orig/debian/patches/17_use_timed_login_after_autologin.patch +++ gdm-2.29.4/debian/patches/17_use_timed_login_after_autologin.patch @@ -0,0 +1,17 @@ +# +# Description: Revert upstream change to not use timed login after autologin session +# Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gdm/+bug/396489 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/daemon/gdm-static-display.c gdm-2.28.0.new/daemon/gdm-static-display.c +--- gdm-2.28.0/daemon/gdm-static-display.c 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/daemon/gdm-static-display.c 2009-09-22 17:46:19.000000000 +0200 +@@ -121,6 +121,9 @@ + { + g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); + ++ /* Only allow timed/automatic login once */ ++ GDM_STATIC_DISPLAY (display)->priv->enable_timed_login = FALSE; ++ + GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->unmanage (display); + + return TRUE; --- gdm-2.29.4.orig/debian/patches/11_crash_for_apport.patch +++ gdm-2.29.4/debian/patches/11_crash_for_apport.patch @@ -0,0 +1,63 @@ +# +# Description: Don't catch crashes so apport can do its job +# +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/daemon/factory-slave-main.c gdm-2.27.4.new/daemon/factory-slave-main.c +--- gdm-2.27.4/daemon/factory-slave-main.c 2009-06-23 08:05:32.000000000 +0200 ++++ gdm-2.27.4.new/daemon/factory-slave-main.c 2009-08-13 20:00:15.000000000 +0200 +@@ -212,7 +212,7 @@ + gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); +- gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); ++ /*gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL);*/ + gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/daemon/product-slave-main.c gdm-2.27.4.new/daemon/product-slave-main.c +--- gdm-2.27.4/daemon/product-slave-main.c 2009-05-19 17:18:12.000000000 +0200 ++++ gdm-2.27.4.new/daemon/product-slave-main.c 2009-08-13 20:00:36.000000000 +0200 +@@ -216,7 +216,7 @@ + gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); +- gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); ++ /*gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL);*/ + gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/daemon/session-worker-main.c gdm-2.27.4.new/daemon/session-worker-main.c +--- gdm-2.27.4/daemon/session-worker-main.c 2009-06-23 08:05:22.000000000 +0200 ++++ gdm-2.27.4.new/daemon/session-worker-main.c 2009-08-13 20:00:19.000000000 +0200 +@@ -175,7 +175,7 @@ + gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); +- gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); ++ /*gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL);*/ + gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/daemon/simple-slave-main.c gdm-2.27.4.new/daemon/simple-slave-main.c +--- gdm-2.27.4/daemon/simple-slave-main.c 2009-06-23 08:05:25.000000000 +0200 ++++ gdm-2.27.4.new/daemon/simple-slave-main.c 2009-08-13 20:00:29.000000000 +0200 +@@ -240,7 +240,7 @@ + gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); +- gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); ++ /*gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL);*/ + gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/daemon/xdmcp-chooser-slave-main.c gdm-2.27.4.new/daemon/xdmcp-chooser-slave-main.c +--- gdm-2.27.4/daemon/xdmcp-chooser-slave-main.c 2009-06-23 08:05:29.000000000 +0200 ++++ gdm-2.27.4.new/daemon/xdmcp-chooser-slave-main.c 2009-08-13 20:00:10.000000000 +0200 +@@ -232,7 +232,7 @@ + gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); +- gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); ++ /*gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL);*/ + gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); + gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); --- gdm-2.29.4.orig/debian/patches/26_no_debug.patch +++ gdm-2.29.4/debian/patches/26_no_debug.patch @@ -0,0 +1,21 @@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/common/gdm-common.c gdm-2.29.1.new/common/gdm-common.c +--- gdm-2.29.1/common/gdm-common.c 2009-11-16 22:37:43.000000000 +0000 ++++ gdm-2.29.1.new/common/gdm-common.c 2009-12-04 17:16:15.774987257 +0000 +@@ -46,6 +46,7 @@ + gboolean + gdm_is_version_unstable (void) + { ++#if 0 + char **versions; + gboolean unstable; + +@@ -62,6 +63,9 @@ + g_strfreev (versions); + + return unstable; ++#else ++ return FALSE; ++#endif + } + + void --- gdm-2.29.4.orig/debian/patches/06_run_xsession.d.patch +++ gdm-2.29.4/debian/patches/06_run_xsession.d.patch @@ -0,0 +1,24 @@ +# +# Description: Run /etc/X11/Xsession.d/. +# Ubuntu-Specific: /etc/X11/Xsession.d is a Debianism/Ubuntuism +# +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/data/Xsession.in gdm-2.27.4.new/data/Xsession.in +--- gdm-2.27.4/data/Xsession.in 2009-07-20 03:09:09.000000000 +0200 ++++ gdm-2.27.4.new/data/Xsession.in 2009-07-21 14:29:06.978475046 +0200 +@@ -186,6 +186,16 @@ + done + fi + ++# run /etc/X11/Xsession.d/ ++OPTIONFILE=/etc/X11/Xsession.options ++if [ -d /etc/X11/Xsession.d ]; then ++ for i in `ls /etc/X11/Xsession.d/` ; do ++ if [ -r "/etc/X11/Xsession.d/$i" ] && expr "$i" : '^[[:alnum:]_-]\+$' > /dev/null; then ++ . "/etc/X11/Xsession.d/$i" ++ fi ++ done ++fi ++ + if [ "x$command" = "xcustom" ] ; then + if [ -x "$HOME/.xsession" ]; then + command="$HOME/.xsession" --- gdm-2.29.4.orig/debian/patches/14_guest_session.patch +++ gdm-2.29.4/debian/patches/14_guest_session.patch @@ -0,0 +1,340 @@ +# +# Description: Add a new D-Bus operation StartGuestSession(). +# If setup/teardown scripts are available in +# /usr/share/gdm/guest-session/ (shipped by separate gdm-guest-user +# package), run a guest session without requiring a password. +# Guest sessions call /usr/share/gdm/guest-session/Xsession instead of +# /etc/gdm/Xsession, so that we can wrap AppArmor (or other MAC +# system) rules around it. +# Ubuntu: https://wiki.ubuntu.com/DesktopTeam/Specs/Intrepid/GuestAccount +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/daemon/gdm-local-display-factory.c gdm-2.28.0.new/daemon/gdm-local-display-factory.c +--- gdm-2.28.0/daemon/gdm-local-display-factory.c 2009-09-22 06:05:27.000000000 +1000 ++++ gdm-2.28.0.new/daemon/gdm-local-display-factory.c 2009-10-14 14:39:13.000000000 +1100 +@@ -22,6 +22,8 @@ + + #include + #include ++#include ++#include + + #include + #include +@@ -51,6 +53,8 @@ + #define HAL_DBUS_DEVICE_INTERFACE "org.freedesktop.Hal.Device" + #define SEAT_PCI_DEVICE_CLASS 3 + ++#define GUEST_USERNAME "guest" ++ + #define MAX_DISPLAY_FAILURES 5 + + struct GdmLocalDisplayFactoryPrivate +@@ -234,6 +238,269 @@ + return ret; + } + ++/* GdmGuestDisplay */ ++ ++typedef struct ++{ ++ GdmTransientDisplayClass parent_class; ++} GdmGuestDisplayClass; ++ ++typedef struct ++{ ++ GdmTransientDisplay parent; ++ GdmTransientDisplayPrivate *priv; ++} GdmGuestDisplay; ++ ++#define GDM_TYPE_GUEST_DISPLAY (gdm_guest_display_get_type ()) ++#define GDM_GUEST_DISPLAY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_GUEST_DISPLAY, GdmGuestDisplayClass)) ++GType gdm_guest_display_get_type (void); ++static void gdm_guest_display_class_init (GdmGuestDisplayClass *klass); ++static void gdm_guest_display_init (GdmGuestDisplay *display) {} ++GdmDisplay * gdm_guest_display_new (int display_number); ++static gboolean gdm_guest_display_finish (GdmDisplay *display); ++ ++G_DEFINE_TYPE (GdmGuestDisplay, gdm_guest_display, GDM_TYPE_TRANSIENT_DISPLAY); ++ ++/* override timed_login_details for guest session */ ++static void ++gdm_guest_display_get_timed_login_details (GdmDisplay *display, ++ gboolean *enabledp, ++ char **usernamep, ++ int *delayp) ++{ ++ g_debug ("GdmLocalDisplayFactory: Getting guest timed login details"); ++ *enabledp = TRUE; ++ *usernamep = g_strdup(GUEST_USERNAME); ++ *delayp = 0; ++} ++ ++static void ++gdm_guest_display_class_init (GdmGuestDisplayClass *klass) ++{ ++ GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass); ++ ++ display_class->get_timed_login_details = gdm_guest_display_get_timed_login_details; ++ display_class->finish = gdm_guest_display_finish; ++} ++ ++GdmDisplay * ++gdm_guest_display_new (int display_number) ++{ ++ GObject *object; ++ char *x11_display; ++ ++ x11_display = g_strdup_printf (":%d", display_number); ++ object = g_object_new (GDM_TYPE_GUEST_DISPLAY, ++ "x11-display-number", display_number, ++ "x11-display-name", x11_display, ++ NULL); ++ g_free (x11_display); ++ ++ return GDM_DISPLAY (object); ++} ++ ++static ++gboolean ++gdm_guest_display_finish (GdmDisplay *display) ++{ ++ GError *err = NULL; ++ gboolean result; ++ gint status; ++ struct sigaction dfl, old_act; ++ const char* argv[] = { ++ "/usr/share/gdm/guest-session/guest-session-cleanup.sh", ++ GUEST_USERNAME, NULL}; ++ ++ /* temporarily reset SIGCHLD, we need it for g_spawn_sync */ ++ dfl.sa_handler = SIG_DFL; ++ dfl.sa_flags = SA_RESTART|SA_NOCLDSTOP; ++ sigemptyset (&dfl.sa_mask); ++ g_assert (sigaction (SIGCHLD, &dfl, &old_act) == 0); ++ ++ /* destroy guest user again */ ++ result = g_spawn_sync ("/", (gchar**) argv, NULL, 0, NULL, NULL, NULL, ++ NULL, &status, &err); ++ ++ g_assert (sigaction (SIGCHLD, &old_act, NULL) == 0); ++ ++ if (!result) { ++ g_warning ("gdm_guest_display_finish: Calling '%s %s' failed: %s", argv[0], ++ argv[1], err->message); ++ g_error_free (err); ++ } ++ ++ return GDM_DISPLAY_CLASS (gdm_guest_display_parent_class)->finish (display); ++} ++ ++/* End GdmGuestDisplay */ ++ ++static gboolean ++gdm_local_display_factory_setup_guest_account () ++{ ++ GError *err = NULL; ++ gboolean result; ++ gchar *sout, *serr; ++ char *username; ++ gint status; ++ int len; ++ struct sigaction dfl, old_act; ++ const char* argv[] = { ++ "/usr/share/gdm/guest-session/guest-session-setup.sh", ++ NULL, NULL}; /* leave enough room for one argument */ ++ ++ g_debug ("gdm_local_display_factory_setup_guest_account: Calling guest-session-setup.sh"); ++ ++ /* temporarily reset SIGCHLD, we need it for g_spawn_sync */ ++ dfl.sa_handler = SIG_DFL; ++ dfl.sa_flags = SA_RESTART|SA_NOCLDSTOP; ++ sigemptyset (&dfl.sa_mask); ++ if (sigaction (SIGCHLD, &dfl, &old_act) < 0) { ++ g_warning("gdm_local_display_factory_setup_guest_account: failure to temporarily restore SIGCHLD: %s", ++ strerror(errno)); ++ return FALSE; ++ } ++ ++ /* call guest setup script */ ++ result = g_spawn_sync ("/", (gchar**) argv, NULL, 0, NULL, NULL, &sout, ++ &serr, &status, &err); ++ g_assert (sigaction (SIGCHLD, &old_act, NULL) == 0); ++ if (!result) { ++ g_warning ("gdm_local_display_factory_setup_guest_account: Calling %s failed: %s", argv[0], ++ err->message); ++ g_error_free (err); ++ return FALSE; ++ } ++ if (status != 0) { ++ g_warning ("gdm_local_display_factory_setup_guest_account: %s failed with status %i:\n%s\n%s", ++ argv[0], status, sout, serr); ++ g_free(sout); ++ g_free(serr); ++ return FALSE; ++ } ++ g_free (serr); ++ ++ /* extract user name from stdout */ ++ len = strlen (sout); ++ if (sout[len-1] == '\n') ++ sout[len-1] = 0; ++ username = strrchr (sout, '\n'); ++ if (!username || strcmp (username + 1, GUEST_USERNAME)) { ++ g_warning ("gdm_local_display_factory_setup_guest_account: no output, last line of stdout must have username; or username is not 'guest'"); ++ g_free (sout); ++ return FALSE; ++ } ++ g_debug ("gdm_local_display_factory_setup_guest_account: %s succeeded, username: '%s'", argv[0], username+1); ++ /* if we ever need to pass it to outside: */ ++ /* username = g_strdup (username + 1); */ ++ g_free (sout); ++ ++ return TRUE; ++} ++ ++static gboolean ++switch_to_guest_display (GdmLocalDisplayFactory *factory) ++{ ++ struct passwd *password; ++ DBusGProxy *proxy; ++ GPtrArray *sessions = NULL; ++ GError *error = NULL; ++ gboolean result = FALSE; ++ ++ password = getpwnam (GUEST_USERNAME); ++ if (!password) { ++ return FALSE; ++ } ++ ++ proxy = dbus_g_proxy_new_for_name (factory->priv->connection, ++ "org.freedesktop.ConsoleKit", ++ "/org/freedesktop/ConsoleKit/Manager", ++ "org.freedesktop.ConsoleKit.Manager"); ++ ++ dbus_g_proxy_call (proxy, "GetSessionsForUnixUser", &error, ++ G_TYPE_UINT, password->pw_uid, G_TYPE_INVALID, ++ dbus_g_type_get_collection("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &sessions, G_TYPE_INVALID); ++ g_object_unref(proxy); ++ if (error != NULL) { ++ g_warning ("Error getting guest sessions: %s", error->message); ++ g_error_free (error); ++ } ++ ++ if (sessions && sessions->len > 0) { ++ gchar *session_id = sessions->pdata[0]; ++ ++ g_debug ("GdmLocalDisplayFactory: Switching to guest session %s", session_id); ++ ++ proxy = dbus_g_proxy_new_for_name (factory->priv->connection, ++ "org.freedesktop.ConsoleKit", ++ session_id, ++ "org.freedesktop.ConsoleKit.Session"); ++ result = dbus_g_proxy_call (proxy, "Activate", &error, G_TYPE_INVALID, G_TYPE_INVALID); ++ g_object_unref (proxy); ++ if (error != NULL) ++ { ++ g_warning ("Error activating guest session: %s", error->message); ++ g_error_free (error); ++ } ++ } ++ ++ if (sessions != NULL) { ++ gint i; ++ for (i = 0; i < sessions->len; i++) { ++ g_free (sessions->pdata[i]); ++ } ++ g_ptr_array_free (sessions, TRUE); ++ } ++ ++ return result; ++} ++ ++gboolean ++gdm_local_display_factory_start_guest_session (GdmLocalDisplayFactory *factory, ++ char **id, ++ GError **error) ++{ ++ GdmDisplay *display = NULL; ++ guint32 num; ++ ++ g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); ++ ++ /* Switch to existing guest display */ ++ if (switch_to_guest_display (factory)) { ++ /* FIXME: How to return the ID of the guest display? It should ++ * be easy but I can't find how to get it */ ++ /*if (id != NULL) { ++ *id = g_strdup ("FIXME"); ++ }*/ ++ ++ /* FIXME: We should return TRUE here but this causes GDM to go ++ * crazy. Luckily we can return FALSE as we don't need ++ * any values returned from this call */ ++ return FALSE; ++ } ++ ++ if (!gdm_local_display_factory_setup_guest_account()) { ++ return FALSE; ++ } ++ ++ num = take_next_display_number (factory); ++ ++ g_debug ("GdmLocalDisplayFactory: Starting Guest Session %d", num); ++ ++ display = gdm_guest_display_new (num); ++ ++ /* FIXME: don't hardcode seat1? */ ++ g_object_set (display, "seat-id", CK_SEAT1_PATH, NULL); ++ ++ store_display (factory, num, display); ++ ++ if (! gdm_display_manage (display) || ! gdm_display_get_id (display, id, NULL)) { ++ return FALSE; ++ } else { ++ g_object_unref (display); ++ return TRUE; ++ } ++} ++ + gboolean + gdm_local_display_factory_create_product_display (GdmLocalDisplayFactory *factory, + const char *parent_display_id, +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/daemon/gdm-local-display-factory.h gdm-2.28.0.new/daemon/gdm-local-display-factory.h +--- gdm-2.28.0/daemon/gdm-local-display-factory.h 2009-09-22 06:05:27.000000000 +1000 ++++ gdm-2.28.0.new/daemon/gdm-local-display-factory.h 2009-10-14 14:34:31.000000000 +1100 +@@ -65,6 +65,10 @@ + char **id, + GError **error); + ++gboolean gdm_local_display_factory_start_guest_session (GdmLocalDisplayFactory *factory, ++ char **id, ++ GError **error); ++ + gboolean gdm_local_display_factory_create_product_display (GdmLocalDisplayFactory *factory, + const char *parent_display_id, + const char *relay_address, +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/daemon/gdm-local-display-factory.xml gdm-2.28.0.new/daemon/gdm-local-display-factory.xml +--- gdm-2.28.0/daemon/gdm-local-display-factory.xml 2009-09-22 06:05:27.000000000 +1000 ++++ gdm-2.28.0.new/daemon/gdm-local-display-factory.xml 2009-10-14 14:34:31.000000000 +1100 +@@ -9,5 +9,8 @@ + + + ++ ++ ++ + + +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/gdm.conf.in gdm-2.28.0.new/data/gdm.conf.in +--- gdm-2.28.0/data/gdm.conf.in 2009-10-14 14:34:30.000000000 +1100 ++++ gdm-2.28.0.new/data/gdm.conf.in 2009-10-14 14:34:31.000000000 +1100 +@@ -68,6 +68,9 @@ + ++ + + = $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++) ++AC_SUBST(SET_SESSION_CFLAGS) ++AC_SUBST(SET_SESSION_LIBS) ++ + PKG_CHECK_MODULES(SIMPLE_GREETER, + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= $GTK_REQUIRED_VERSION +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/daemon/gdm-session-direct.c gdm-2.29.1.new/daemon/gdm-session-direct.c +--- gdm-2.29.1/daemon/gdm-session-direct.c 2009-12-12 20:30:39.534337699 +0100 ++++ gdm-2.29.1.new/daemon/gdm-session-direct.c 2009-12-12 20:34:14.134355706 +0100 +@@ -60,6 +60,10 @@ + #define GDM_SESSION_DBUS_INTERFACE "org.gnome.DisplayManager.Session" + #define GDM_SESSION_DBUS_ERROR_CANCEL "org.gnome.DisplayManager.Session.Error.Cancel" + ++#define GDM_SETTINGS_DBUS_NAME "org.gnome.DisplayManager" ++#define GDM_SETTINGS_DBUS_PATH "/org/gnome/DisplayManager/Settings" ++#define GDM_SETTINGS_DBUS_INTERFACE "org.gnome.DisplayManager.Settings" ++ + #ifndef GDM_SESSION_DEFAULT_PATH + #define GDM_SESSION_DEFAULT_PATH "/usr/local/bin:/usr/bin:/bin" + #endif +@@ -639,11 +643,31 @@ + } + + static char * +-get_fallback_session_name (void) ++get_fallback_session_name (GdmSessionDirect *session) + { + const char **search_dirs; + int i; + char *name; ++ DBusGProxy *proxy = NULL; ++ GError *error = NULL; ++ ++ proxy = dbus_g_proxy_new_for_name (session->priv->connection, ++ GDM_SETTINGS_DBUS_NAME, ++ GDM_SETTINGS_DBUS_PATH, ++ GDM_SETTINGS_DBUS_INTERFACE); ++ if (dbus_g_proxy_call (proxy, "GetValue", &error, ++ G_TYPE_STRING, "daemon/DefaultSession", G_TYPE_INVALID, ++ G_TYPE_STRING, &name, G_TYPE_INVALID)) { ++ if (get_session_command_for_name (name, NULL)) { ++ return name; ++ } ++ } ++ else { ++ g_debug ("No DefaultSession: %s", error->message); ++ g_error_free (error); ++ } ++ if (proxy) ++ g_object_unref (proxy); + + name = g_strdup ("gnome"); + if (get_session_command_for_name (name, NULL)) { +@@ -695,7 +719,7 @@ + return session->priv->saved_session; + } + +- return get_fallback_session_name (); ++ return get_fallback_session_name (session); + } + + static void +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/utils/gdm-set-default-session.c gdm-2.29.1.new/utils/gdm-set-default-session.c +--- gdm-2.29.1/utils/gdm-set-default-session.c 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.29.1.new/utils/gdm-set-default-session.c 2009-12-12 20:30:40.587351694 +0100 +@@ -0,0 +1,271 @@ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include ++#include ++ ++#include ++#include ++#include ++ ++#define GDM_SETTINGS_DBUS_NAME "org.gnome.DisplayManager" ++#define GDM_SETTINGS_DBUS_PATH "/org/gnome/DisplayManager/Settings" ++#define GDM_SETTINGS_DBUS_INTERFACE "org.gnome.DisplayManager.Settings" ++ ++#define SESSION_KEY_GROUP "daemon" ++#define SESSION_KEY_NAME "DefaultSession" ++ ++typedef enum { ++ CONNEXIONSUCCEED, ++ CONNEXIONFAILED, ++ ALREADYHASVALUE, ++ HASNOVALUE, ++ VALUEFOUND ++} DBusState; ++ ++static gboolean debug = FALSE; ++static gboolean keepold = FALSE; ++static gboolean remove = FALSE; ++ ++static GOptionEntry entries[] = ++{ ++ { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, "Enable debugging", NULL }, ++ { "keep-old", 'k', 0, G_OPTION_ARG_NONE, &keepold, "Only update if no default already set", NULL }, ++ { "remove", 'r', 0, G_OPTION_ARG_NONE, &remove, "Remove default session if it's this one", NULL }, ++ { NULL } ++}; ++ ++void ++show_nothing(const gchar *log_domain, ++ GLogLevelFlags log_level, ++ const gchar *message, ++ gpointer unused_data) {}; ++ ++int ++init_dbus_connection(DBusGProxy **proxy) { ++ DBusGConnection *connection; ++ GError *error = NULL; ++ ++ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); ++ if (connection == NULL) { ++ g_debug ("Can't connect to system bus: %s", error->message); ++ g_error_free (error); ++ return(CONNEXIONFAILED); ++ } ++ ++ *proxy = dbus_g_proxy_new_for_name_owner (connection, ++ GDM_SETTINGS_DBUS_NAME, ++ GDM_SETTINGS_DBUS_PATH, ++ GDM_SETTINGS_DBUS_INTERFACE, ++ &error); ++ if(!*proxy) { ++ g_debug ("No object on the bus: %s", error->message); ++ g_error_free (error); ++ return(CONNEXIONFAILED); ++ } ++ ++ return(CONNEXIONSUCCEED); ++} ++ ++int ++get_default_session_name_with_dbus(DBusGProxy *proxy, gchar **name) ++{ ++ GError *error = NULL; ++ ++ if (!dbus_g_proxy_call (proxy, "GetValue", &error, ++ G_TYPE_STRING, SESSION_KEY_GROUP "/" SESSION_KEY_NAME, G_TYPE_INVALID, ++ G_TYPE_STRING, name, G_TYPE_INVALID)) { ++ // This probably (_owner used previously) means that the value doesn't exist in config file ++ if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) { ++ g_debug ("Probably no value registered: %s. %s", dbus_g_error_get_name (error), error->message); ++ g_error_free (error); ++ return(HASNOVALUE); ++ } ++ // possible if GDM_SETTINGS_DBUS_PATH or GDM_SETTINGS_DBUS_INTERFACE aren't exposed by the ++ // existing GDM_SETTINGS_DBUS_NAME (shouldn't happen) ++ else { ++ g_debug ("No GDM_SETTINGS_DBUS_PATH or GDM_SETTINGS_DBUS_INTERFACE on the bus: %s", error->message); ++ g_error_free (error); ++ return(CONNEXIONFAILED); ++ } ++ } ++ return(VALUEFOUND); ++ ++} ++ ++int ++set_default_session_name_with_dbus(DBusGProxy *proxy, gchar *sessionname) ++{ ++ GError *error = NULL; ++ ++ dbus_g_proxy_call (proxy, "SetValue", &error, ++ G_TYPE_STRING, SESSION_KEY_GROUP "/" SESSION_KEY_NAME, ++ G_TYPE_STRING, sessionname, G_TYPE_INVALID, G_TYPE_INVALID); ++ if (error) { ++ g_debug ("Error changing default session value to '%s': %s\nNo update will be done", sessionname, error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++int ++update_session_if_needed(gchar *default_session, gchar *proposed_session, gboolean dbusupdate, GObject *parameter) ++{ ++ DBusGProxy *proxy = NULL; ++ GKeyFile *keyfile = NULL; ++ gboolean success = FALSE; ++ ++ if (dbusupdate) ++ proxy = (DBusGProxy *) parameter; ++ else { ++ keyfile = (GKeyFile *) parameter; ++ success = TRUE; // by default, the function succeed (return void) ++ } ++ ++ if (!(default_session)) { ++ g_debug("No value previously set. Update to %s", proposed_session); ++ if (dbusupdate) ++ success = set_default_session_name_with_dbus(proxy, proposed_session); ++ else ++ g_key_file_set_string (keyfile, SESSION_KEY_GROUP, SESSION_KEY_NAME, proposed_session); ++ } ++ else { ++ if (remove) { ++ if (g_strcmp0(proposed_session, default_session) == 0) { ++ g_debug("Remove %s as default session", proposed_session); ++ if (dbusupdate) ++ success = set_default_session_name_with_dbus(proxy, ""); ++ else ++ g_key_file_set_string (keyfile, SESSION_KEY_GROUP, SESSION_KEY_NAME, ""); ++ if (!success) ++ return(2); ++ return(0); ++ } ++ g_debug("Don't remove: %s not default session", proposed_session); ++ return(4); ++ } ++ if (strlen(default_session) < 1) { ++ g_debug("Empty value set as gdm default session. Set to %s", proposed_session); ++ if (dbusupdate) ++ success = set_default_session_name_with_dbus(proxy, proposed_session); ++ else ++ g_key_file_set_string (keyfile, SESSION_KEY_GROUP, SESSION_KEY_NAME, proposed_session); ++ } ++ else { ++ g_debug("Found existing default session: %s", default_session); ++ if(keepold) ++ g_debug("keep-old mode: keep previous default session"); ++ else { ++ g_debug("Update to %s", proposed_session); ++ if (dbusupdate) ++ success = set_default_session_name_with_dbus(proxy, proposed_session); ++ else ++ g_key_file_set_string (keyfile, SESSION_KEY_GROUP, SESSION_KEY_NAME, proposed_session); ++ } ++ } ++ } ++ if (!success) ++ return(2); ++ return(0); ++} ++ ++int ++main (int argc, char *argv[]) ++{ ++ GOptionContext *context = NULL; ++ GError *error = NULL; ++ ++ DBusGProxy *proxy = NULL; ++ DBusState return_dbus_code = CONNEXIONFAILED; ++ gboolean dbus_connexion_ok = FALSE; ++ ++ GKeyFile *keyfile; ++ GKeyFileFlags flags; ++ gchar *s_data; ++ gsize size; ++ const gchar *gdm_conf_file = GDMCONFDIR "/custom.conf"; ++ ++ gchar *default_session = NULL; ++ gchar *proposed_session = NULL; ++ gint return_code; ++ ++ g_type_init (); ++ ++ context = g_option_context_new (_("- set gdm default session")); ++ g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); ++ if (!g_option_context_parse (context, &argc, &argv, &error)) { ++ g_printerr (_("option parsing failed: %s\n"), error->message); ++ g_option_context_free(context); ++ g_error_free (error); ++ exit (1); ++ } ++ if (argc!=2) { ++ g_printerr(_("Wrong usage of the command\n%s"), g_option_context_get_help (context, FALSE, NULL)); ++ g_option_context_free(context); ++ exit(1); ++ } ++ if (context) ++ g_option_context_free(context); ++ if (!debug) ++ g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, show_nothing, NULL); ++ proposed_session = argv[1]; ++ ++ ++ if (init_dbus_connection(&proxy) == CONNEXIONSUCCEED) { ++ return_dbus_code = get_default_session_name_with_dbus(proxy, &default_session); ++ if (return_dbus_code == CONNEXIONFAILED) ++ dbus_connexion_ok = FALSE; // dbus and service connexion ok, but can't access proxy ++ else { ++ dbus_connexion_ok = TRUE; ++ if (return_dbus_code == HASNOVALUE) ++ default_session = NULL; ++ return_code = update_session_if_needed (default_session, proposed_session, TRUE, (GObject *) proxy); ++ } ++ } ++ if (proxy) ++ g_object_unref (proxy); ++ ++ if (!dbus_connexion_ok) { ++ g_debug ("Can't change value by dbus, failback in %s direct modification", gdm_conf_file); ++ if (geteuid() != 0) { ++ g_printerr ("Updating directly %s requires root permission\n", gdm_conf_file); ++ exit(1); ++ } ++ keyfile = g_key_file_new (); ++ flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; ++ if (!(g_key_file_load_from_file (keyfile, gdm_conf_file, flags, &error))) { ++ g_debug ("File doesn't seem to exist or can't be read: create one (%s)", error->message); ++ g_error_free (error); ++ error = NULL; ++ } ++ // try to get the right key ++ default_session = g_key_file_get_string (keyfile, SESSION_KEY_GROUP, SESSION_KEY_NAME, NULL); ++ return_code = update_session_if_needed (default_session, proposed_session, FALSE, (GObject *) keyfile); ++ if(return_code == 0) { ++ s_data = g_key_file_to_data (keyfile, &size, &error); ++ if (!s_data) { ++ g_debug ("Can't convert data to string: %s", error->message); ++ g_error_free (error); ++ return_code = 1; ++ } ++ else { ++ if(!g_file_set_contents (gdm_conf_file, s_data, size, &error)) { ++ g_printerr ("Can't update: %s\n", error->message); ++ g_error_free (error); ++ return_code = 1; ++ } ++ g_free(s_data); ++ } ++ } ++ g_key_file_free(keyfile); ++ } ++ ++ if(default_session) ++ g_free(default_session); ++ ++ exit(return_code); ++ ++} +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/utils/Makefile.am gdm-2.29.1.new/utils/Makefile.am +--- gdm-2.29.1/utils/Makefile.am 2009-11-16 23:37:44.000000000 +0100 ++++ gdm-2.29.1.new/utils/Makefile.am 2009-12-12 20:30:40.587351694 +0100 +@@ -6,10 +6,12 @@ + -DLOCALSTATEDIR=\""$(localstatedir)"\" \ + -DGDM_SCREENSHOT_DIR=\""$(GDM_SCREENSHOT_DIR)"\"\ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ ++ -DGDMCONFDIR=\"$(gdmconfdir)\" \ + $(UTILS_CFLAGS) \ + $(CANBERRA_GTK_CFLAGS) \ + $(GTK_CFLAGS) \ + $(COMMON_CFLAGS) \ ++ $(SET_SESSION_CFLAGS) \ + $(NULL) + + edit = sed \ +@@ -36,6 +38,10 @@ + gdm-safe-restart \ + $(NULL) + ++libexec_PROGRAMS = \ ++ gdm-set-default-session \ ++ $(NULL) ++ + gdmflexiserver_SOURCES = \ + gdmflexiserver.c \ + $(NULL) +@@ -55,6 +61,15 @@ + $(COMMON_LIBS) \ + $(NULL) + ++gdm_set_default_session_SOURCES = \ ++ gdm-set-default-session.c \ ++ $(NULL) ++ ++gdm_set_default_session_LDADD = \ ++ $(SET_SESSION_LIBS) \ ++ $(COMMON_LIBS) \ ++ $(NULL) ++ + EXTRA_DIST = \ + gdm-stop.in \ + gdm-restart.in \ --- gdm-2.29.4.orig/debian/patches/10_xsplash.patch +++ gdm-2.29.4/debian/patches/10_xsplash.patch @@ -0,0 +1,50 @@ +# +# Description: Load xsplash on login +# Ubuntu: https://wiki.ubuntu.com/DesktopTeam/Specs/Karmic/LoginExperience +# +=== modified file 'data/Init.in' +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/data/Init.in gdm-2.27.4.new/data/Init.in +--- gdm-2.27.4/data/Init.in 2009-05-19 17:18:12.000000000 +0200 ++++ gdm-2.27.4.new/data/Init.in 2009-08-11 19:09:36.000000000 +0200 +@@ -6,6 +6,11 @@ + PATH=@X_PATH@:$PATH + OLD_IFS=$IFS + ++#if [ -x '/usr/bin/xsplash' ]; ++#then ++# /usr/bin/xsplash --gdm-session --daemon ++#fi ++ + gdmwhich () { + COMMAND="$1" + OUTPUT= +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/data/PreSession.in gdm-2.27.4.new/data/PreSession.in +--- gdm-2.27.4/data/PreSession.in 2009-05-19 17:18:12.000000000 +0200 ++++ gdm-2.27.4.new/data/PreSession.in 2009-08-11 19:09:36.000000000 +0200 +@@ -7,3 +7,9 @@ + # Note that output goes into the .xsession-errors file for easy debugging + # + PATH="@X_PATH@:$PATH:/bin:/usr/bin" ++ ++#if [ -x '/usr/bin/xsplash' ]; ++#then ++# /usr/bin/xsplash --daemon ++#fi ++ +diff -Nur -x '*.orig' -x '*~' gdm-2.27.4/gui/simple-greeter/gdm-greeter-session.c gdm-2.27.4.new/gui/simple-greeter/gdm-greeter-session.c +--- gdm-2.27.4/gui/simple-greeter/gdm-greeter-session.c 2009-07-20 03:06:16.000000000 +0200 ++++ gdm-2.27.4.new/gui/simple-greeter/gdm-greeter-session.c 2009-08-11 19:09:40.000000000 +0200 +@@ -426,6 +426,13 @@ + toggle_panel (session, TRUE); + toggle_login_window (session, TRUE); + ++ g_spawn_command_line_async ("dbus-send " ++ "--system --type=method_call " ++ "--dest=com.ubuntu.BootCurtain " ++ "/com/ubuntu/BootCurtain " ++ "com.ubuntu.BootCurtain.SignalLoaded string:gdm", ++ NULL); ++ + gdm_profile_end (NULL); + + return res; --- gdm-2.29.4.orig/debian/patches/07_correct_distribution_version.patch +++ gdm-2.29.4/debian/patches/07_correct_distribution_version.patch @@ -0,0 +1,34 @@ +# +# Description: use lsb informations to correctly display the distribution +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=589549 +# Ubuntu: https://bugs.launchpad.net/bugs/396805 +# +--- ./gdm-2.27.4/gui/simple-greeter/gdm-greeter-login-window.c.gnome 2009-07-23 23:12:50.000000000 +0200 ++++ ./gdm-2.27.4/gui/simple-greeter/gdm-greeter-login-window.c 2009-07-23 23:24:26.000000000 +0200 +@@ -1265,10 +1265,16 @@ + static char * + get_system_version (void) + { +- char *version; ++ char *version, *output; + int i; + + version = NULL; ++ output = NULL; ++ ++ if (g_spawn_command_line_sync ("lsb_release -sd", &output, NULL, NULL, NULL)) { ++ version = g_strchomp (output); ++ return version; ++ } + + for (i = 0; known_etc_info_files [i]; i++) { + char *path1; +@@ -1289,8 +1295,6 @@ + } + + if (version == NULL) { +- char *output; +- output = NULL; + if (g_spawn_command_line_sync ("uname -sr", &output, NULL, NULL, NULL)) { + version = g_strchomp (output); + } --- gdm-2.29.4.orig/debian/patches/27_save_root_window.patch +++ gdm-2.29.4/debian/patches/27_save_root_window.patch @@ -0,0 +1,135 @@ +# +# Description: Saves the root window background so that other things like gnome-settings-daemon can access it. Taken from the plymouth-integration branch of Upstream GIT. +# +From 9768d9e2783de7e836421d9645070bb1917800dd Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 27 Nov 2009 23:27:53 +0000 +Subject: Save root window to pixmap at _XROOTPMAP_ID + +This combined with starting the X server with -nr +will give us a nice fade transition when g-s-d starts +--- +diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c +index 2cbb568..66d1c77 100644 +--- a/daemon/gdm-simple-slave.c ++++ b/daemon/gdm-simple-slave.c +@@ -863,6 +863,15 @@ setup_server (GdmSimpleSlave *slave) + { + /* Set the busy cursor */ + gdm_slave_set_busy_cursor (GDM_SLAVE (slave)); ++ ++ /* The root window has a background that may be useful ++ * to cross fade or transition from when setting the ++ * login screen background. We read it here, and stuff ++ * it into the standard _XROOTPMAP_ID root window property, ++ * so gnome-settings-daemon can get at it. ++ */ ++ gdm_slave_save_root_windows (GDM_SLAVE (slave)); ++ + } + + static void +diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c +index e11e16c..da86f77 100644 +--- a/daemon/gdm-slave.c ++++ b/daemon/gdm-slave.c +@@ -42,6 +42,7 @@ + #include + + #include /* for Display */ ++#include /* for XA_PIXMAP */ + #include /* for watch cursor */ + + #include "gdm-common.h" +@@ -351,6 +352,77 @@ gdm_slave_run_script (GdmSlave *slave, + return ret; + } + ++static void ++gdm_slave_save_root_window_of_screen (GdmSlave *slave, ++ Atom id_atom, ++ int screen_number) ++{ ++ Window root_window; ++ GC gc; ++ XGCValues values; ++ Pixmap pixmap; ++ int width, height, depth; ++ ++ root_window = RootWindow (slave->priv->server_display, ++ screen_number); ++ ++ width = DisplayWidth (slave->priv->server_display, screen_number); ++ height = DisplayHeight (slave->priv->server_display, screen_number); ++ depth = DefaultDepth (slave->priv->server_display, screen_number); ++ pixmap = XCreatePixmap (slave->priv->server_display, ++ root_window, ++ width, height, depth); ++ ++ values.function = GXcopy; ++ values.plane_mask = AllPlanes; ++ values.fill_style = FillSolid; ++ values.subwindow_mode = IncludeInferiors; ++ ++ gc = XCreateGC (slave->priv->server_display, ++ root_window, ++ GCFunction | GCPlaneMask | GCFillStyle | GCSubwindowMode, ++ &values); ++ ++ if (XCopyArea (slave->priv->server_display, ++ root_window, pixmap, gc, 0, 0, ++ width, height, 0, 0)) { ++ ++ long pixmap_as_long; ++ ++ pixmap_as_long = (long) pixmap; ++ ++ XChangeProperty (slave->priv->server_display, ++ root_window, id_atom, XA_PIXMAP, ++ 32, PropModeReplace, (guchar *) &pixmap_as_long, ++ 1); ++ ++ } ++ ++ XFreeGC (slave->priv->server_display, gc); ++} ++ ++void ++gdm_slave_save_root_windows (GdmSlave *slave) ++{ ++ int i, number_of_screens; ++ Atom atom; ++ ++ number_of_screens = ScreenCount (slave->priv->server_display); ++ ++ atom = XInternAtom (slave->priv->server_display, ++ "_XROOTPMAP_ID", False); ++ ++ if (atom == 0) { ++ return; ++ } ++ ++ for (i = 0; i < number_of_screens; i++) { ++ gdm_slave_save_root_window_of_screen (slave, atom, i); ++ } ++ ++ XSync (slave->priv->server_display, False); ++} ++ + void + gdm_slave_set_busy_cursor (GdmSlave *slave) + { +diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h +index af28b00..1652457 100644 +--- a/daemon/gdm-slave.h ++++ b/daemon/gdm-slave.h +@@ -74,6 +74,7 @@ gboolean gdm_slave_switch_to_user_session (GdmSlave *slave, + + gboolean gdm_slave_connect_to_x11_display (GdmSlave *slave); + void gdm_slave_set_busy_cursor (GdmSlave *slave); ++void gdm_slave_save_root_windows (GdmSlave *slave); + gboolean gdm_slave_run_script (GdmSlave *slave, + const char *dir, + const char *username); +-- +cgit v0.8.2 --- gdm-2.29.4.orig/debian/patches/25_update_gconf_directories.patch +++ gdm-2.29.4/debian/patches/25_update_gconf_directories.patch @@ -0,0 +1,10 @@ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/gconf.path gdm-2.28.0.new/data/gconf.path +--- gdm-2.28.0/data/gconf.path 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/data/gconf.path 2009-10-15 12:17:35.000000000 +0200 +@@ -6,3 +6,6 @@ + # owned by GDM. Sysadmins should create + # another source if they wish to override them. + xml:readonly:$(HOME)/.gconf.mandatory ++ ++# distribution default values ++xml:readwrite:$(HOME)/.gconf.defaults --- gdm-2.29.4.orig/debian/patches/24_system_uid.patch +++ gdm-2.29.4/debian/patches/24_system_uid.patch @@ -0,0 +1,330 @@ +Description: Ignore users with UID below system configured minimum. +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/427462 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/459199 +Author: Kees Cook + +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/daemon/gdm-user-manager.c gdm-2.29.1.new/daemon/gdm-user-manager.c +--- gdm-2.29.1/daemon/gdm-user-manager.c 2009-12-13 01:44:20.000000000 -0800 ++++ gdm-2.29.1.new/daemon/gdm-user-manager.c 2009-12-13 01:46:53.000000000 -0800 +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #ifdef HAVE_PATHS_H + #include +@@ -66,7 +67,7 @@ + #ifdef __sun + #define DEFAULT_MINIMAL_UID 100 + #else +-#define DEFAULT_MINIMAL_UID 500 ++#define DEFAULT_MINIMAL_UID 1000 + #endif + + #ifndef _PATH_SHELLS +@@ -114,6 +115,7 @@ + + guint reload_id; + guint ck_history_id; ++ guint minimal_uid; + + guint8 loaded_passwd : 1; + guint8 loaded_cache : 1; +@@ -539,6 +541,10 @@ + return; + } + ++ if (pwent->pw_uid < manager->priv->minimal_uid) { ++ return; ++ } ++ + /* check exclusions up front */ + if (g_hash_table_lookup (manager->priv->exclusions, pwent->pw_name)) { + g_debug ("GdmUserManager: excluding user '%s'", pwent->pw_name); +@@ -857,7 +863,7 @@ + g_warning ("Unable to lookup user name %s: %s", username, g_strerror (errno)); + return; + } +- if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ if (pwent->pw_uid < manager->priv->minimal_uid) { + g_debug ("GdmUserManager: excluding user '%s'", username); + return; + } +@@ -1010,6 +1016,7 @@ + g_free (command); + } + ++ + static void + reload_passwd (GdmUserManager *manager) + { +@@ -1046,7 +1053,7 @@ + user = NULL; + + /* Skip users below MinimalUID... */ +- if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ if (pwent->pw_uid < manager->priv->minimal_uid) { + continue; + } + +@@ -1266,6 +1273,39 @@ + dbus_g_object_type_install_info (GDM_TYPE_USER_MANAGER, &dbus_glib_gdm_user_manager_object_info); + } + ++ ++static guint ++system_minimal_uid (void) ++{ ++ guint uid = DEFAULT_MINIMAL_UID; ++#ifndef __sun ++ char *defspath = "/etc/login.defs"; ++ FILE *fp; ++ char line[128]; ++ ++ errno = 0; ++ fp = fopen (defspath, "r"); ++ if (fp == NULL) { ++ g_warning ("Unable to open %s: %s", defspath, g_strerror (errno)); ++ goto out; ++ } ++ while (fgets (line, sizeof(line), fp)) { ++ if (strncmp (line, "UID_MIN", 7) == 0) { ++ char *ptr = line + 7; ++ int value; ++ while (*ptr && isblank (*ptr)) { ptr++; } ++ value = atoi (ptr); ++ if (value) uid = value; ++ break; ++ } ++ } ++ fclose (fp); ++#endif ++out: ++ return uid; ++} ++ ++ + static void + gdm_user_manager_init (GdmUserManager *manager) + { +@@ -1276,6 +1316,8 @@ + + manager->priv = GDM_USER_MANAGER_GET_PRIVATE (manager); + ++ manager->priv->minimal_uid = system_minimal_uid (); ++ + /* sessions */ + manager->priv->sessions = g_hash_table_new_full (g_str_hash, + g_str_equal, +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/gui/gdmsetup/gdm-user-manager.c gdm-2.29.1.new/gui/gdmsetup/gdm-user-manager.c +--- gdm-2.29.1/gui/gdmsetup/gdm-user-manager.c 2009-12-13 01:44:20.000000000 -0800 ++++ gdm-2.29.1.new/gui/gdmsetup/gdm-user-manager.c 2009-12-13 01:47:05.000000000 -0800 +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #ifdef HAVE_PATHS_H + #include +@@ -66,7 +67,7 @@ + #ifdef __sun + #define DEFAULT_MINIMAL_UID 100 + #else +-#define DEFAULT_MINIMAL_UID 500 ++#define DEFAULT_MINIMAL_UID 1000 + #endif + + #ifndef _PATH_SHELLS +@@ -112,6 +113,7 @@ + + guint reload_id; + guint ck_history_id; ++ guint minimal_uid; + + guint8 users_dirty : 1; + }; +@@ -835,6 +837,10 @@ + return; + } + ++ if (pwent->pw_uid < manager->priv->minimal_uid) { ++ return; ++ } ++ + /* check exclusions up front */ + if (g_hash_table_lookup (manager->priv->exclusions, pwent->pw_name)) { + g_debug ("GdmUserManager: excluding user '%s'", pwent->pw_name); +@@ -1154,7 +1160,7 @@ + g_warning ("Unable to lookup user name %s: %s", username, g_strerror (errno)); + return; + } +- if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ if (pwent->pw_uid < manager->priv->minimal_uid) { + g_debug ("GdmUserManager: excluding user '%s'", username); + return; + } +@@ -1317,7 +1323,7 @@ + user = NULL; + + /* Skip users below MinimalUID... */ +- if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ if (pwent->pw_uid < manager->priv->minimal_uid) { + continue; + } + +@@ -1525,6 +1531,39 @@ + g_type_class_add_private (klass, sizeof (GdmUserManagerPrivate)); + } + ++ ++static guint ++system_minimal_uid (void) ++{ ++ guint uid = DEFAULT_MINIMAL_UID; ++#ifndef __sun ++ char *defspath = "/etc/login.defs"; ++ FILE *fp; ++ char line[128]; ++ ++ errno = 0; ++ fp = fopen (defspath, "r"); ++ if (fp == NULL) { ++ g_warning ("Unable to open %s: %s", defspath, g_strerror (errno)); ++ goto out; ++ } ++ while (fgets (line, sizeof(line), fp)) { ++ if (strncmp (line, "UID_MIN", 7) == 0) { ++ char *ptr = line + 7; ++ int value; ++ while (*ptr && isblank (*ptr)) { ptr++; } ++ value = atoi (ptr); ++ if (value) uid = value; ++ break; ++ } ++ } ++ fclose (fp); ++#endif ++out: ++ return uid; ++} ++ ++ + static void + gdm_user_manager_init (GdmUserManager *manager) + { +@@ -1535,6 +1574,8 @@ + + manager->priv = GDM_USER_MANAGER_GET_PRIVATE (manager); + ++ manager->priv->minimal_uid = system_minimal_uid (); ++ + /* sessions */ + manager->priv->sessions = g_hash_table_new_full (g_str_hash, + g_str_equal, +diff -Nur -x '*.orig' -x '*~' gdm-2.29.1/gui/simple-greeter/gdm-user-manager.c gdm-2.29.1.new/gui/simple-greeter/gdm-user-manager.c +--- gdm-2.29.1/gui/simple-greeter/gdm-user-manager.c 2009-12-13 01:44:20.000000000 -0800 ++++ gdm-2.29.1.new/gui/simple-greeter/gdm-user-manager.c 2009-12-13 01:45:26.000000000 -0800 +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #ifdef HAVE_PATHS_H + #include +@@ -67,7 +68,7 @@ + #ifdef __sun + #define DEFAULT_MINIMAL_UID 100 + #else +-#define DEFAULT_MINIMAL_UID 500 ++#define DEFAULT_MINIMAL_UID 1000 + #endif + + #ifndef _PATH_SHELLS +@@ -98,6 +99,7 @@ + + guint reload_id; + guint ck_history_id; ++ guint minimal_uid; + + guint8 users_dirty : 1; + guint8 loaded_cache : 1; +@@ -928,6 +930,10 @@ + return; + } + ++ if (pwent->pw_uid < manager->priv->minimal_uid) { ++ return; ++ } ++ + /* check exclusions up front */ + if (user_in_exclude_list (manager, pwent->pw_name)) { + g_debug ("GdmUserManager: excluding user '%s'", pwent->pw_name); +@@ -1259,7 +1265,7 @@ + g_warning ("Unable to lookup user name %s: %s", username, g_strerror (errno)); + return; + } +- if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ if (pwent->pw_uid < manager->priv->minimal_uid) { + g_debug ("GdmUserManager: excluding user '%s'", username); + return; + } +@@ -1491,7 +1497,7 @@ + user = NULL; + + /* Skip users below MinimalUID... */ +- if (pwent->pw_uid < DEFAULT_MINIMAL_UID) { ++ if (pwent->pw_uid < manager->priv->minimal_uid) { + continue; + } + +@@ -1765,6 +1771,38 @@ + } + + ++static guint ++system_minimal_uid (void) ++{ ++ guint uid = DEFAULT_MINIMAL_UID; ++#ifndef __sun ++ char *defspath = "/etc/login.defs"; ++ FILE *fp; ++ char line[128]; ++ ++ errno = 0; ++ fp = fopen (defspath, "r"); ++ if (fp == NULL) { ++ g_warning ("Unable to open %s: %s", defspath, g_strerror (errno)); ++ goto out; ++ } ++ while (fgets (line, sizeof(line), fp)) { ++ if (strncmp (line, "UID_MIN", 7) == 0) { ++ char *ptr = line + 7; ++ int value; ++ while (*ptr && isblank (*ptr)) { ptr++; } ++ value = atoi (ptr); ++ if (value) uid = value; ++ break; ++ } ++ } ++ fclose (fp); ++#endif ++out: ++ return uid; ++} ++ ++ + static void + gdm_user_manager_init (GdmUserManager *manager) + { +@@ -1776,6 +1814,8 @@ + + manager->priv = GDM_USER_MANAGER_GET_PRIVATE (manager); + ++ manager->priv->minimal_uid = system_minimal_uid (); ++ + /* exclude/include */ + g_debug ("Setting users to include:"); + res = gdm_settings_client_get_string (GDM_KEY_INCLUDE, --- gdm-2.29.4.orig/debian/patches/08_use_polkit_for_settings.patch +++ gdm-2.29.4/debian/patches/08_use_polkit_for_settings.patch @@ -0,0 +1,317 @@ +# +# Description: Add PolicyKit support to GDM settings D-Bus interface +# Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/395299 +# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=587750 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/common/gdm-settings.c gdm-2.28.0.new/common/gdm-settings.c +--- gdm-2.28.0/common/gdm-settings.c 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/common/gdm-settings.c 2009-09-22 16:16:05.000000000 +0200 +@@ -36,6 +36,7 @@ + #define DBUS_API_SUBJECT_TO_CHANGE + #include + #include ++#include + + #include "gdm-settings.h" + #include "gdm-settings-glue.h" +@@ -110,6 +111,90 @@ + return res; + } + ++static void ++unlock_auth_cb (PolkitAuthority *authority, ++ GAsyncResult *result, ++ DBusGMethodInvocation *context) ++{ ++ PolkitAuthorizationResult *auth_result; ++ GError *error = NULL; ++ ++ auth_result = polkit_authority_check_authorization_finish (authority, result, &error); ++ ++ if (!auth_result) ++ dbus_g_method_return_error (context, error); ++ else { ++ dbus_g_method_return (context, ++ polkit_authorization_result_get_is_authorized (auth_result)); ++ } ++ ++ if (auth_result) ++ g_object_unref (auth_result); ++ if (error) ++ g_error_free (error); ++} ++ ++gboolean ++gdm_settings_unlock (GdmSettings *settings, ++ DBusGMethodInvocation *context) ++{ ++ polkit_authority_check_authorization (polkit_authority_get (), ++ polkit_system_bus_name_new (dbus_g_method_get_sender (context)), ++ "org.gnome.displaymanager.settings.write", ++ NULL, ++ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, ++ NULL, ++ (GAsyncReadyCallback) unlock_auth_cb, ++ context); ++} ++ ++typedef struct ++{ ++ GdmSettings *settings; ++ DBusGMethodInvocation *context; ++ gchar *key, *value; ++} SetValueData; ++ ++static void ++set_value_auth_cb (PolkitAuthority *authority, ++ GAsyncResult *result, ++ SetValueData *data) ++{ ++ PolkitAuthorizationResult *auth_result; ++ GError *error = NULL; ++ ++ auth_result = polkit_authority_check_authorization_finish (authority, result, &error); ++ ++ if (!auth_result) ++ dbus_g_method_return_error (data->context, error); ++ else { ++ if (polkit_authorization_result_get_is_authorized (auth_result)) { ++ gboolean result; ++ ++ result = gdm_settings_backend_set_value (data->settings->priv->backend, ++ data->key, ++ data->value, ++ &error); ++ if (result) ++ dbus_g_method_return (data->context); ++ else ++ dbus_g_method_return_error (data->context, error); ++ } ++ else { ++ error = g_error_new (DBUS_GERROR_REMOTE_EXCEPTION, 0, "Not authorized"); ++ dbus_g_method_return_error (data->context, error); ++ } ++ } ++ ++ if (auth_result) ++ g_object_unref (auth_result); ++ if (error) ++ g_error_free (error); ++ g_free (data->key); ++ g_free (data->value); ++ g_free (data); ++} ++ + /* + dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.SetValue string:"xdmcp/Enable" string:"false" + */ +@@ -118,26 +203,30 @@ + gdm_settings_set_value (GdmSettings *settings, + const char *key, + const char *value, +- GError **error) ++ DBusGMethodInvocation *context) + { +- GError *local_error; +- gboolean res; +- ++ SetValueData *data; ++ + g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE); + g_return_val_if_fail (key != NULL, FALSE); + + g_debug ("Setting value %s", key); +- +- local_error = NULL; +- res = gdm_settings_backend_set_value (settings->priv->backend, +- key, +- value, +- &local_error); +- if (! res) { +- g_propagate_error (error, local_error); +- } +- +- return res; ++ ++ /* Authorize with PolicyKit */ ++ data = g_malloc (sizeof(SetValueData)); ++ data->settings = settings; ++ data->context = context; ++ data->key = g_strdup(key); ++ data->value = g_strdup(value); ++ polkit_authority_check_authorization (polkit_authority_get (), ++ polkit_system_bus_name_new (dbus_g_method_get_sender (context)), ++ "org.gnome.displaymanager.settings.write", ++ NULL, ++ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, ++ NULL, ++ (GAsyncReadyCallback) set_value_auth_cb, ++ data); ++ return TRUE; + } + + static gboolean +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/common/gdm-settings.h gdm-2.28.0.new/common/gdm-settings.h +--- gdm-2.28.0/common/gdm-settings.h 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/common/gdm-settings.h 2009-09-22 16:16:05.000000000 +0200 +@@ -23,6 +23,7 @@ + #define __GDM_SETTINGS_H + + #include ++#include + + G_BEGIN_DECLS + +@@ -70,10 +71,12 @@ + const char *key, + char **value, + GError **error); ++gboolean gdm_settings_unlock (GdmSettings *settings, ++ DBusGMethodInvocation *context); + gboolean gdm_settings_set_value (GdmSettings *settings, + const char *key, + const char *value, +- GError **error); ++ DBusGMethodInvocation *context); + + G_END_DECLS + +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/common/gdm-settings.xml gdm-2.28.0.new/common/gdm-settings.xml +--- gdm-2.28.0/common/gdm-settings.xml 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/common/gdm-settings.xml 2009-09-22 16:16:05.000000000 +0200 +@@ -5,7 +5,12 @@ + + + ++ ++ ++ ++ + ++ + + + +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/configure.ac gdm-2.28.0.new/configure.ac +--- gdm-2.28.0/configure.ac 2009-09-22 16:16:04.000000000 +0200 ++++ gdm-2.28.0.new/configure.ac 2009-09-22 16:16:05.000000000 +0200 +@@ -40,6 +40,7 @@ + dnl --------------------------------------------------------------------------- + + DBUS_GLIB_REQUIRED_VERSION=0.74 ++POLKIT_GOBJECT_REQUIRED_VERSION=0.92 + GLIB_REQUIRED_VERSION=2.22.0 + GTK_REQUIRED_VERSION=2.10.0 + PANGO_REQUIRED_VERSION=1.3.0 +@@ -60,6 +61,7 @@ + + PKG_CHECK_MODULES(COMMON, + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + ) +@@ -68,6 +70,7 @@ + + PKG_CHECK_MODULES(DAEMON, + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + hal +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/gdm.conf.in gdm-2.28.0.new/data/gdm.conf.in +--- gdm-2.28.0/data/gdm.conf.in 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/data/gdm.conf.in 2009-09-22 16:16:05.000000000 +0200 +@@ -34,8 +34,6 @@ + + +- + +@@ -44,6 +42,10 @@ + + ++ ++ ++ + +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/gdm.policy.in gdm-2.28.0.new/data/gdm.policy.in +--- gdm-2.28.0/data/gdm.policy.in 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.28.0.new/data/gdm.policy.in 2009-09-22 16:16:05.000000000 +0200 +@@ -0,0 +1,18 @@ ++ ++ ++ ++ The GNOME Project ++ http://www.gnome.org/ ++ gdm ++ ++ ++ <_description>Change login screen configuration ++ <_message>Privileges are required to change the login screen configuration. ++ ++ no ++ auth_admin_keep ++ ++ ++ +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/data/Makefile.am gdm-2.28.0.new/data/Makefile.am +--- gdm-2.28.0/data/Makefile.am 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/data/Makefile.am 2009-09-22 16:16:05.000000000 +0200 +@@ -45,6 +45,8 @@ + schemas_in_files = gdm.schemas.in + schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) + ++@INTLTOOL_POLICY_RULE@ ++ + gdm.schemas.in: $(srcdir)/gdm.schemas.in.in + sed -e 's,[@]GDMPREFETCHCMD[@],$(GDMPREFETCHCMD),g' \ + -e 's,[@]GDM_CUSTOM_CONF[@],$(GDM_CUSTOM_CONF),g' \ +@@ -74,10 +76,17 @@ + -e 's,[@]sbindir[@],$(sbindir),g' \ + <$(srcdir)/gdm.schemas.in.in >gdm.schemas.in + ++polkitdir = $(datadir)/polkit-1/actions ++polkit_in_files = gdm.policy.in ++polkit_DATA = $(polkit_in_files:.policy.in=.policy) ++check: ++ $(POLKIT_POLICY_FILE_VALIDATE) $(polkit_DATA) ++ + EXTRA_DIST = \ + $(schemas_in_files) \ + $(schemas_DATA) \ + $(dbusconf_in_files) \ ++ $(polkit_in_files) \ + gdm.schemas.in.in \ + gdm.conf-custom.in \ + Xsession.in \ +@@ -100,7 +109,8 @@ + $(NULL) + + DISTCLEANFILES = \ +- $(dbusconf_DATA) \ ++ $(dbusconf_DATA) \ ++ $(polkit_DATA) \ + gdm.schemas \ + $(NULL) + +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/po/POTFILES.in gdm-2.28.0.new/po/POTFILES.in +--- gdm-2.28.0/po/POTFILES.in 2009-09-21 22:05:27.000000000 +0200 ++++ gdm-2.28.0.new/po/POTFILES.in 2009-09-22 16:16:16.000000000 +0200 +@@ -49,6 +49,7 @@ + daemon/simple-slave-main.c + daemon/test-session.c + daemon/xdmcp-chooser-slave-main.c ++data/gdm.policy.in + data/gdm.schemas.in.in + data/greeter-autostart/at-spi-registryd-wrapper.desktop.in.in + data/greeter-autostart/gdm-simple-greeter.desktop.in.in --- gdm-2.29.4.orig/debian/patches/23_login_window_hint.patch +++ gdm-2.29.4/debian/patches/23_login_window_hint.patch @@ -0,0 +1,17 @@ +# +# Description: Don't use the DOCK hint on the login window as this stops it from getting keyboard focus +# Ubuntu: https://bugs.launchpad.net/gdm/+bug/447049 +# Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=598235 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.28.0/gui/simple-greeter/gdm-greeter-login-window.c gdm-2.28.0.new/gui/simple-greeter/gdm-greeter-login-window.c +--- gdm-2.28.0/gui/simple-greeter/gdm-greeter-login-window.c 2009-10-13 15:54:50.000000000 +1100 ++++ gdm-2.28.0.new/gui/simple-greeter/gdm-greeter-login-window.c 2009-10-13 15:55:38.000000000 +1100 +@@ -1739,7 +1739,7 @@ + gtk_window_set_skip_taskbar_hint (GTK_WINDOW (login_window), TRUE); + gtk_window_set_skip_pager_hint (GTK_WINDOW (login_window), TRUE); + gtk_window_stick (GTK_WINDOW (login_window)); +- gtk_window_set_type_hint (GTK_WINDOW (login_window), GDK_WINDOW_TYPE_HINT_DOCK); ++ /*gtk_window_set_type_hint (GTK_WINDOW (login_window), GDK_WINDOW_TYPE_HINT_DOCK);*/ /* Docks cannot get focus */ + gtk_container_set_border_width (GTK_CONTAINER (login_window), 0); + + g_signal_connect (login_window, --- gdm-2.29.4.orig/debian/patches/28_plymouth_transition.patch +++ gdm-2.29.4/debian/patches/28_plymouth_transition.patch @@ -0,0 +1,252 @@ +# +# Description: Transition smoothly from plymouth when its running. Taken from the plymouth-integration branch of Upstream GIT. +# +From 2343620d464b93cfa46abddf8af14c7268f17df2 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 27 Nov 2009 23:52:54 +0000 +Subject: Enable smooth transition between plymouth and X + +This commit checks if plymouth is running, and if so, +turns on the smooth transition between plymouth and X. +--- +diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c +index ba10386..3ec21e9 100644 +--- a/daemon/gdm-server.c ++++ b/daemon/gdm-server.c +@@ -32,8 +32,11 @@ + #include + #include + #include ++#include + #include + ++#include ++ + #include + #include + #include +@@ -663,6 +666,44 @@ gdm_server_spawn (GdmServer *server, + return ret; + } + ++static int ++get_active_vt (void) ++{ ++ int console_fd; ++ struct vt_stat console_state = { 0 }; ++ ++ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY); ++ ++ if (console_fd < 0) { ++ goto out; ++ } ++ ++ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) { ++ goto out; ++ } ++ ++out: ++ if (console_fd >= 0) { ++ close (console_fd); ++ } ++ ++ return console_state.v_active; ++} ++ ++static char * ++get_active_vt_as_string (void) ++{ ++ int vt; ++ ++ vt = get_active_vt (); ++ ++ if (vt <= 0) { ++ return NULL; ++ } ++ ++ return g_strdup_printf ("vt%d", vt); ++} ++ + /** + * gdm_server_start: + * @disp: Pointer to a GdmDisplay structure +@@ -681,6 +722,21 @@ gdm_server_start (GdmServer *server) + return res; + } + ++gboolean ++gdm_server_start_on_active_vt (GdmServer *server) ++{ ++ gboolean res; ++ char *vt; ++ ++ g_free (server->priv->command); ++ server->priv->command = g_strdup (X_SERVER " -nr -verbose"); ++ vt = get_active_vt_as_string (); ++ res = gdm_server_spawn (server, vt); ++ g_free (vt); ++ ++ return res; ++} ++ + static void + server_died (GdmServer *server) + { +diff --git a/daemon/gdm-server.h b/daemon/gdm-server.h +index 535a69a..bd6c60a 100644 +--- a/daemon/gdm-server.h ++++ b/daemon/gdm-server.h +@@ -56,6 +56,7 @@ GType gdm_server_get_type (void); + GdmServer * gdm_server_new (const char *display_id, + const char *auth_file); + gboolean gdm_server_start (GdmServer *server); ++gboolean gdm_server_start_on_active_vt (GdmServer *server); + gboolean gdm_server_stop (GdmServer *server); + char * gdm_server_get_display_device (GdmServer *server); + +diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c +index 66d1c77..4703537 100644 +--- a/daemon/gdm-simple-slave.c ++++ b/daemon/gdm-simple-slave.c +@@ -84,6 +84,7 @@ struct GdmSimpleSlavePrivate + + guint start_session_when_ready : 1; + guint waiting_to_start_session : 1; ++ guint plymouth_is_running : 1; + }; + + enum { +@@ -858,6 +859,72 @@ on_start_session_later (GdmGreeterServer *session, + slave->priv->start_session_when_ready = FALSE; + } + ++static gboolean ++plymouth_is_running (void) ++{ ++ int status; ++ gboolean res; ++ GError *error; ++ ++ error = NULL; ++ res = g_spawn_command_line_sync ("/bin/plymouth --ping", ++ NULL, NULL, &status, &error); ++ if (! res) { ++ g_debug ("Could not ping plymouth: %s", error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ return WIFEXITED (status) && WEXITSTATUS (status) == 0; ++} ++ ++static void ++plymouth_prepare_for_transition (GdmSimpleSlave *slave) ++{ ++ gboolean res; ++ GError *error; ++ ++ error = NULL; ++ res = g_spawn_command_line_sync ("/bin/plymouth deactivate", ++ NULL, NULL, NULL, &error); ++ if (! res) { ++ g_warning ("Could not deactivate plymouth: %s", error->message); ++ g_error_free (error); ++ } ++} ++ ++static void ++plymouth_quit_with_transition (GdmSimpleSlave *slave) ++{ ++ gboolean res; ++ GError *error; ++ ++ error = NULL; ++ res = g_spawn_command_line_sync ("/bin/plymouth quit --retain-splash", ++ NULL, NULL, NULL, &error); ++ if (! res) { ++ g_warning ("Could not quit plymouth: %s", error->message); ++ g_error_free (error); ++ } ++ slave->priv->plymouth_is_running = FALSE; ++} ++ ++static void ++plymouth_quit_without_transition (GdmSimpleSlave *slave) ++{ ++ gboolean res; ++ GError *error; ++ ++ error = NULL; ++ res = g_spawn_command_line_sync ("/bin/plymouth quit", ++ NULL, NULL, NULL, &error); ++ if (! res) { ++ g_warning ("Could not quit plymouth: %s", error->message); ++ g_error_free (error); ++ } ++ slave->priv->plymouth_is_running = FALSE; ++} ++ + static void + setup_server (GdmSimpleSlave *slave) + { +@@ -872,6 +939,10 @@ setup_server (GdmSimpleSlave *slave) + */ + gdm_slave_save_root_windows (GDM_SLAVE (slave)); + ++ /* Plymouth is waiting for the go-ahead to exit */ ++ if (slave->priv->plymouth_is_running) { ++ plymouth_quit_with_transition (slave); ++ } + } + + static void +@@ -1063,6 +1134,10 @@ on_server_exited (GdmServer *server, + g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code); + + gdm_slave_stopped (GDM_SLAVE (slave)); ++ ++ if (slave->priv->plymouth_is_running) { ++ plymouth_quit_without_transition (slave); ++ } + } + + static void +@@ -1075,6 +1150,10 @@ on_server_died (GdmServer *server, + g_strsignal (signal_number)); + + gdm_slave_stopped (GDM_SLAVE (slave)); ++ ++ if (slave->priv->plymouth_is_running) { ++ plymouth_quit_without_transition (slave); ++ } + } + + static gboolean +@@ -1119,7 +1198,14 @@ gdm_simple_slave_run (GdmSimpleSlave *slave) + G_CALLBACK (on_server_ready), + slave); + +- res = gdm_server_start (slave->priv->server); ++ slave->priv->plymouth_is_running = plymouth_is_running (); ++ ++ if (slave->priv->plymouth_is_running) { ++ plymouth_prepare_for_transition (slave); ++ res = gdm_server_start_on_active_vt (slave->priv->server); ++ } else { ++ res = gdm_server_start (slave->priv->server); ++ } + if (! res) { + g_warning (_("Could not start the X " + "server (your graphical environment) " +@@ -1129,6 +1215,9 @@ gdm_simple_slave_run (GdmSimpleSlave *slave) + "In the meantime this display will be " + "disabled. Please restart GDM when " + "the problem is corrected.")); ++ if (slave->priv->plymouth_is_running) { ++ plymouth_quit_without_transition (slave); ++ } + exit (1); + } + +-- +cgit v0.8.2 --- gdm-2.29.4.orig/debian/patches/99_autoreconf.patch +++ gdm-2.29.4/debian/patches/99_autoreconf.patch @@ -0,0 +1,12221 @@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/aclocal.m4 gdm-2.29.4.new/aclocal.m4 +--- gdm-2.29.4/aclocal.m4 2009-12-21 23:30:41.000000000 +0100 ++++ gdm-2.29.4.new/aclocal.m4 2010-01-07 17:28:55.000000000 +0100 +@@ -1,4 +1,4 @@ +-# generated automatically by aclocal 1.11.1 -*- Autoconf -*- ++# generated automatically by aclocal 1.11 -*- Autoconf -*- + + # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +@@ -497,6 +497,8223 @@ + fi]) + + ++dnl Do not call GNOME_DOC_DEFINES directly. It is split out from ++dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself. ++AC_DEFUN([GNOME_DOC_DEFINES], ++[ ++AC_ARG_WITH([help-dir], ++ AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),, ++ [with_help_dir='${datadir}/gnome/help']) ++HELP_DIR="$with_help_dir" ++AC_SUBST(HELP_DIR) ++ ++AC_ARG_WITH([omf-dir], ++ AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),, ++ [with_omf_dir='${datadir}/omf']) ++OMF_DIR="$with_omf_dir" ++AC_SUBST(OMF_DIR) ++ ++AC_ARG_WITH([help-formats], ++ AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),, ++ [with_help_formats='']) ++DOC_USER_FORMATS="$with_help_formats" ++AC_SUBST(DOC_USER_FORMATS) ++ ++AC_ARG_ENABLE([scrollkeeper], ++ [AC_HELP_STRING([--disable-scrollkeeper], ++ [do not make updates to the scrollkeeper database])],, ++ enable_scrollkeeper=yes) ++AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"]) ++ ++dnl disable scrollkeeper automatically for distcheck ++DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" ++AC_SUBST(DISTCHECK_CONFIGURE_FLAGS) ++ ++AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"]) ++]) ++ ++# GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) ++# ++AC_DEFUN([GNOME_DOC_INIT], ++[AC_REQUIRE([AC_PROG_LN_S])dnl ++ ++ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1]) ++ ++AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required]) ++PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required], ++ [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no]) ++ ++if test "$gdu_cv_have_gdu" = "yes"; then ++ AC_MSG_RESULT([yes]) ++ ifelse([$2],,[:],[$2]) ++else ++ AC_MSG_RESULT([no]) ++ ifelse([$3],,[AC_MSG_ERROR([gnome-doc-utils >= $gdu_cv_version_required not found])],[$3]) ++fi ++ ++GNOME_DOC_DEFINES ++]) ++ ++ ++dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) ++# serial 40 IT_PROG_INTLTOOL ++AC_DEFUN([IT_PROG_INTLTOOL], [ ++AC_PREREQ([2.50])dnl ++AC_REQUIRE([AM_NLS])dnl ++ ++case "$am__api_version" in ++ 1.[01234]) ++ AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ++ ;; ++ *) ++ ;; ++esac ++ ++if test -n "$1"; then ++ AC_MSG_CHECKING([for intltool >= $1]) ++ ++ INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` ++ INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` ++ [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` ++ ] ++ AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) ++ test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || ++ AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) ++fi ++ ++AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) ++AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) ++AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) ++if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then ++ AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) ++fi ++ ++ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' ++ INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' ++ INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' ++ ++_IT_SUBST(INTLTOOL_DESKTOP_RULE) ++_IT_SUBST(INTLTOOL_DIRECTORY_RULE) ++_IT_SUBST(INTLTOOL_KEYS_RULE) ++_IT_SUBST(INTLTOOL_PROP_RULE) ++_IT_SUBST(INTLTOOL_OAF_RULE) ++_IT_SUBST(INTLTOOL_PONG_RULE) ++_IT_SUBST(INTLTOOL_SERVER_RULE) ++_IT_SUBST(INTLTOOL_SHEET_RULE) ++_IT_SUBST(INTLTOOL_SOUNDLIST_RULE) ++_IT_SUBST(INTLTOOL_UI_RULE) ++_IT_SUBST(INTLTOOL_XAM_RULE) ++_IT_SUBST(INTLTOOL_KBD_RULE) ++_IT_SUBST(INTLTOOL_XML_RULE) ++_IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) ++_IT_SUBST(INTLTOOL_CAVES_RULE) ++_IT_SUBST(INTLTOOL_SCHEMAS_RULE) ++_IT_SUBST(INTLTOOL_THEME_RULE) ++_IT_SUBST(INTLTOOL_SERVICE_RULE) ++_IT_SUBST(INTLTOOL_POLICY_RULE) ++ ++# Check the gettext tools to make sure they are GNU ++AC_PATH_PROG(XGETTEXT, xgettext) ++AC_PATH_PROG(MSGMERGE, msgmerge) ++AC_PATH_PROG(MSGFMT, msgfmt) ++AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) ++if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then ++ AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) ++fi ++xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" ++mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" ++mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" ++if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then ++ AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) ++fi ++ ++AC_PATH_PROG(INTLTOOL_PERL, perl) ++if test -z "$INTLTOOL_PERL"; then ++ AC_MSG_ERROR([perl not found]) ++fi ++AC_MSG_CHECKING([for perl >= 5.8.1]) ++$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 ++if test $? -ne 0; then ++ AC_MSG_ERROR([perl 5.8.1 is required for intltool]) ++else ++ IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" ++ AC_MSG_RESULT([$IT_PERL_VERSION]) ++fi ++if test "x$2" != "xno-xml"; then ++ AC_MSG_CHECKING([for XML::Parser]) ++ if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then ++ AC_MSG_RESULT([ok]) ++ else ++ AC_MSG_ERROR([XML::Parser perl module is required for intltool]) ++ fi ++fi ++ ++# Substitute ALL_LINGUAS so we can use it in po/Makefile ++AC_SUBST(ALL_LINGUAS) ++ ++# Set DATADIRNAME correctly if it is not set yet ++# (copied from glib-gettext.m4) ++if test -z "$DATADIRNAME"; then ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[]], ++ [[extern int _nl_msg_cat_cntr; ++ return _nl_msg_cat_cntr]])], ++ [DATADIRNAME=share], ++ [case $host in ++ *-*-solaris*) ++ dnl On Solaris, if bind_textdomain_codeset is in libc, ++ dnl GNU format message catalog is always supported, ++ dnl since both are added to the libc all together. ++ dnl Hence, we'd like to go with DATADIRNAME=share ++ dnl in this case. ++ AC_CHECK_FUNC(bind_textdomain_codeset, ++ [DATADIRNAME=share], [DATADIRNAME=lib]) ++ ;; ++ *) ++ [DATADIRNAME=lib] ++ ;; ++ esac]) ++fi ++AC_SUBST(DATADIRNAME) ++ ++IT_PO_SUBDIR([po]) ++ ++]) ++ ++ ++# IT_PO_SUBDIR(DIRNAME) ++# --------------------- ++# All po subdirs have to be declared with this macro; the subdir "po" is ++# declared by IT_PROG_INTLTOOL. ++# ++AC_DEFUN([IT_PO_SUBDIR], ++[AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. ++dnl ++dnl The following CONFIG_COMMANDS should be exetuted at the very end ++dnl of config.status. ++AC_CONFIG_COMMANDS_PRE([ ++ AC_CONFIG_COMMANDS([$1/stamp-it], [ ++ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then ++ AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) ++ fi ++ rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" ++ >"$1/stamp-it.tmp" ++ [sed '/^#/d ++ s/^[[].*] *// ++ /^[ ]*$/d ++ '"s|^| $ac_top_srcdir/|" \ ++ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ++ ] ++ [sed '/^POTFILES =/,/[^\\]$/ { ++ /^POTFILES =/!d ++ r $1/POTFILES ++ } ++ ' "$1/Makefile.in" >"$1/Makefile"] ++ rm -f "$1/Makefile.tmp" ++ mv "$1/stamp-it.tmp" "$1/stamp-it" ++ ]) ++])dnl ++]) ++ ++# _IT_SUBST(VARIABLE) ++# ------------------- ++# Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST ++# ++AC_DEFUN([_IT_SUBST], ++[ ++AC_SUBST([$1]) ++m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ++] ++) ++ ++# deprecated macros ++AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) ++# A hint is needed for aclocal from Automake <= 1.9.4: ++# AC_DEFUN([AC_PROG_INTLTOOL], ...) ++ ++ ++# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- ++# ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, ++# 2006, 2007, 2008 Free Software Foundation, Inc. ++# Written by Gordon Matzigkeit, 1996 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++m4_define([_LT_COPYING], [dnl ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, ++# 2006, 2007, 2008 Free Software Foundation, Inc. ++# Written by Gordon Matzigkeit, 1996 ++# ++# This file is part of GNU Libtool. ++# ++# GNU Libtool is free software; you can redistribute it and/or ++# modify it under the terms of the GNU General Public License as ++# published by the Free Software Foundation; either version 2 of ++# the License, or (at your option) any later version. ++# ++# As a special exception to the GNU General Public License, ++# if you distribute this file as part of a program or library that ++# is built using GNU Libtool, you may include this file under the ++# same distribution terms that you use for the rest of that program. ++# ++# GNU Libtool is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GNU Libtool; see the file COPYING. If not, a copy ++# can be downloaded from http://www.gnu.org/licenses/gpl.html, or ++# obtained by writing to the Free Software Foundation, Inc., ++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++]) ++ ++# serial 56 LT_INIT ++ ++ ++# LT_PREREQ(VERSION) ++# ------------------ ++# Complain and exit if this libtool version is less that VERSION. ++m4_defun([LT_PREREQ], ++[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, ++ [m4_default([$3], ++ [m4_fatal([Libtool version $1 or higher is required], ++ 63)])], ++ [$2])]) ++ ++ ++# _LT_CHECK_BUILDDIR ++# ------------------ ++# Complain if the absolute build directory name contains unusual characters ++m4_defun([_LT_CHECK_BUILDDIR], ++[case `pwd` in ++ *\ * | *\ *) ++ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; ++esac ++]) ++ ++ ++# LT_INIT([OPTIONS]) ++# ------------------ ++AC_DEFUN([LT_INIT], ++[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT ++AC_BEFORE([$0], [LT_LANG])dnl ++AC_BEFORE([$0], [LT_OUTPUT])dnl ++AC_BEFORE([$0], [LTDL_INIT])dnl ++m4_require([_LT_CHECK_BUILDDIR])dnl ++ ++dnl Autoconf doesn't catch unexpanded LT_ macros by default: ++m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl ++m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl ++dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 ++dnl unless we require an AC_DEFUNed macro: ++AC_REQUIRE([LTOPTIONS_VERSION])dnl ++AC_REQUIRE([LTSUGAR_VERSION])dnl ++AC_REQUIRE([LTVERSION_VERSION])dnl ++AC_REQUIRE([LTOBSOLETE_VERSION])dnl ++m4_require([_LT_PROG_LTMAIN])dnl ++ ++dnl Parse OPTIONS ++_LT_SET_OPTIONS([$0], [$1]) ++ ++# This can be used to rebuild libtool when needed ++LIBTOOL_DEPS="$ltmain" ++ ++# Always use our own libtool. ++LIBTOOL='$(SHELL) $(top_builddir)/libtool' ++AC_SUBST(LIBTOOL)dnl ++ ++_LT_SETUP ++ ++# Only expand once: ++m4_define([LT_INIT]) ++])# LT_INIT ++ ++# Old names: ++AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) ++AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_PROG_LIBTOOL], []) ++dnl AC_DEFUN([AM_PROG_LIBTOOL], []) ++ ++ ++# _LT_CC_BASENAME(CC) ++# ------------------- ++# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. ++m4_defun([_LT_CC_BASENAME], ++[for cc_temp in $1""; do ++ case $cc_temp in ++ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; ++ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; ++ \-*) ;; ++ *) break;; ++ esac ++done ++cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ++]) ++ ++ ++# _LT_FILEUTILS_DEFAULTS ++# ---------------------- ++# It is okay to use these file commands and assume they have been set ++# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. ++m4_defun([_LT_FILEUTILS_DEFAULTS], ++[: ${CP="cp -f"} ++: ${MV="mv -f"} ++: ${RM="rm -f"} ++])# _LT_FILEUTILS_DEFAULTS ++ ++ ++# _LT_SETUP ++# --------- ++m4_defun([_LT_SETUP], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++AC_REQUIRE([AC_CANONICAL_BUILD])dnl ++_LT_DECL([], [host_alias], [0], [The host system])dnl ++_LT_DECL([], [host], [0])dnl ++_LT_DECL([], [host_os], [0])dnl ++dnl ++_LT_DECL([], [build_alias], [0], [The build system])dnl ++_LT_DECL([], [build], [0])dnl ++_LT_DECL([], [build_os], [0])dnl ++dnl ++AC_REQUIRE([AC_PROG_CC])dnl ++AC_REQUIRE([LT_PATH_LD])dnl ++AC_REQUIRE([LT_PATH_NM])dnl ++dnl ++AC_REQUIRE([AC_PROG_LN_S])dnl ++test -z "$LN_S" && LN_S="ln -s" ++_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl ++dnl ++AC_REQUIRE([LT_CMD_MAX_LEN])dnl ++_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl ++_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl ++dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_CHECK_SHELL_FEATURES])dnl ++m4_require([_LT_CMD_RELOAD])dnl ++m4_require([_LT_CHECK_MAGIC_METHOD])dnl ++m4_require([_LT_CMD_OLD_ARCHIVE])dnl ++m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl ++ ++_LT_CONFIG_LIBTOOL_INIT([ ++# See if we are running on zsh, and set the options which allow our ++# commands through without removal of \ escapes INIT. ++if test -n "\${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++fi ++]) ++if test -n "${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++fi ++ ++_LT_CHECK_OBJDIR ++ ++m4_require([_LT_TAG_COMPILER])dnl ++_LT_PROG_ECHO_BACKSLASH ++ ++case $host_os in ++aix3*) ++ # AIX sometimes has problems with the GCC collect2 program. For some ++ # reason, if we set the COLLECT_NAMES environment variable, the problems ++ # vanish in a puff of smoke. ++ if test "X${COLLECT_NAMES+set}" != Xset; then ++ COLLECT_NAMES= ++ export COLLECT_NAMES ++ fi ++ ;; ++esac ++ ++# Sed substitution that helps us do robust quoting. It backslashifies ++# metacharacters that are still active within double-quoted strings. ++sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' ++ ++# Same as above, but do not quote variable references. ++double_quote_subst='s/\([["`\\]]\)/\\\1/g' ++ ++# Sed substitution to delay expansion of an escaped shell variable in a ++# double_quote_subst'ed string. ++delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' ++ ++# Sed substitution to delay expansion of an escaped single quote. ++delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' ++ ++# Sed substitution to avoid accidental globbing in evaled expressions ++no_glob_subst='s/\*/\\\*/g' ++ ++# Global variables: ++ofile=libtool ++can_build_shared=yes ++ ++# All known linkers require a `.a' archive for static linking (except MSVC, ++# which needs '.lib'). ++libext=a ++ ++with_gnu_ld="$lt_cv_prog_gnu_ld" ++ ++old_CC="$CC" ++old_CFLAGS="$CFLAGS" ++ ++# Set sane defaults for various variables ++test -z "$CC" && CC=cc ++test -z "$LTCC" && LTCC=$CC ++test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS ++test -z "$LD" && LD=ld ++test -z "$ac_objext" && ac_objext=o ++ ++_LT_CC_BASENAME([$compiler]) ++ ++# Only perform the check for file, if the check method requires it ++test -z "$MAGIC_CMD" && MAGIC_CMD=file ++case $deplibs_check_method in ++file_magic*) ++ if test "$file_magic_cmd" = '$MAGIC_CMD'; then ++ _LT_PATH_MAGIC ++ fi ++ ;; ++esac ++ ++# Use C for the default configuration in the libtool script ++LT_SUPPORTED_TAG([CC]) ++_LT_LANG_C_CONFIG ++_LT_LANG_DEFAULT_CONFIG ++_LT_CONFIG_COMMANDS ++])# _LT_SETUP ++ ++ ++# _LT_PROG_LTMAIN ++# --------------- ++# Note that this code is called both from `configure', and `config.status' ++# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, ++# `config.status' has no value for ac_aux_dir unless we are using Automake, ++# so we pass a copy along to make sure it has a sensible value anyway. ++m4_defun([_LT_PROG_LTMAIN], ++[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl ++_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ++ltmain="$ac_aux_dir/ltmain.sh" ++])# _LT_PROG_LTMAIN ++ ++ ++ ++# So that we can recreate a full libtool script including additional ++# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS ++# in macros and then make a single call at the end using the `libtool' ++# label. ++ ++ ++# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) ++# ---------------------------------------- ++# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. ++m4_define([_LT_CONFIG_LIBTOOL_INIT], ++[m4_ifval([$1], ++ [m4_append([_LT_OUTPUT_LIBTOOL_INIT], ++ [$1 ++])])]) ++ ++# Initialize. ++m4_define([_LT_OUTPUT_LIBTOOL_INIT]) ++ ++ ++# _LT_CONFIG_LIBTOOL([COMMANDS]) ++# ------------------------------ ++# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. ++m4_define([_LT_CONFIG_LIBTOOL], ++[m4_ifval([$1], ++ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], ++ [$1 ++])])]) ++ ++# Initialize. ++m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) ++ ++ ++# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) ++# ----------------------------------------------------- ++m4_defun([_LT_CONFIG_SAVE_COMMANDS], ++[_LT_CONFIG_LIBTOOL([$1]) ++_LT_CONFIG_LIBTOOL_INIT([$2]) ++]) ++ ++ ++# _LT_FORMAT_COMMENT([COMMENT]) ++# ----------------------------- ++# Add leading comment marks to the start of each line, and a trailing ++# full-stop to the whole comment if one is not present already. ++m4_define([_LT_FORMAT_COMMENT], ++[m4_ifval([$1], [ ++m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], ++ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) ++)]) ++ ++ ++ ++ ++ ++# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) ++# ------------------------------------------------------------------- ++# CONFIGNAME is the name given to the value in the libtool script. ++# VARNAME is the (base) name used in the configure script. ++# VALUE may be 0, 1 or 2 for a computed quote escaped value based on ++# VARNAME. Any other value will be used directly. ++m4_define([_LT_DECL], ++[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], ++ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], ++ [m4_ifval([$1], [$1], [$2])]) ++ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) ++ m4_ifval([$4], ++ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) ++ lt_dict_add_subkey([lt_decl_dict], [$2], ++ [tagged?], [m4_ifval([$5], [yes], [no])])]) ++]) ++ ++ ++# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) ++# -------------------------------------------------------- ++m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) ++ ++ ++# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) ++# ------------------------------------------------ ++m4_define([lt_decl_tag_varnames], ++[_lt_decl_filter([tagged?], [yes], $@)]) ++ ++ ++# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) ++# --------------------------------------------------------- ++m4_define([_lt_decl_filter], ++[m4_case([$#], ++ [0], [m4_fatal([$0: too few arguments: $#])], ++ [1], [m4_fatal([$0: too few arguments: $#: $1])], ++ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], ++ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], ++ [lt_dict_filter([lt_decl_dict], $@)])[]dnl ++]) ++ ++ ++# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) ++# -------------------------------------------------- ++m4_define([lt_decl_quote_varnames], ++[_lt_decl_filter([value], [1], $@)]) ++ ++ ++# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) ++# --------------------------------------------------- ++m4_define([lt_decl_dquote_varnames], ++[_lt_decl_filter([value], [2], $@)]) ++ ++ ++# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) ++# --------------------------------------------------- ++m4_define([lt_decl_varnames_tagged], ++[m4_assert([$# <= 2])dnl ++_$0(m4_quote(m4_default([$1], [[, ]])), ++ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), ++ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) ++m4_define([_lt_decl_varnames_tagged], ++[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) ++ ++ ++# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) ++# ------------------------------------------------ ++m4_define([lt_decl_all_varnames], ++[_$0(m4_quote(m4_default([$1], [[, ]])), ++ m4_if([$2], [], ++ m4_quote(lt_decl_varnames), ++ m4_quote(m4_shift($@))))[]dnl ++]) ++m4_define([_lt_decl_all_varnames], ++[lt_join($@, lt_decl_varnames_tagged([$1], ++ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ++]) ++ ++ ++# _LT_CONFIG_STATUS_DECLARE([VARNAME]) ++# ------------------------------------ ++# Quote a variable value, and forward it to `config.status' so that its ++# declaration there will have the same value as in `configure'. VARNAME ++# must have a single quote delimited value for this to work. ++m4_define([_LT_CONFIG_STATUS_DECLARE], ++[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) ++ ++ ++# _LT_CONFIG_STATUS_DECLARATIONS ++# ------------------------------ ++# We delimit libtool config variables with single quotes, so when ++# we write them to config.status, we have to be sure to quote all ++# embedded single quotes properly. In configure, this macro expands ++# each variable declared with _LT_DECL (and _LT_TAGDECL) into: ++# ++# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' ++m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], ++[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), ++ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) ++ ++ ++# _LT_LIBTOOL_TAGS ++# ---------------- ++# Output comment and list of tags supported by the script ++m4_defun([_LT_LIBTOOL_TAGS], ++[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl ++available_tags="_LT_TAGS"dnl ++]) ++ ++ ++# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) ++# ----------------------------------- ++# Extract the dictionary values for VARNAME (optionally with TAG) and ++# expand to a commented shell variable setting: ++# ++# # Some comment about what VAR is for. ++# visible_name=$lt_internal_name ++m4_define([_LT_LIBTOOL_DECLARE], ++[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], ++ [description])))[]dnl ++m4_pushdef([_libtool_name], ++ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl ++m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), ++ [0], [_libtool_name=[$]$1], ++ [1], [_libtool_name=$lt_[]$1], ++ [2], [_libtool_name=$lt_[]$1], ++ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl ++m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ++]) ++ ++ ++# _LT_LIBTOOL_CONFIG_VARS ++# ----------------------- ++# Produce commented declarations of non-tagged libtool config variables ++# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' ++# script. Tagged libtool config variables (even for the LIBTOOL CONFIG ++# section) are produced by _LT_LIBTOOL_TAG_VARS. ++m4_defun([_LT_LIBTOOL_CONFIG_VARS], ++[m4_foreach([_lt_var], ++ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), ++ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) ++ ++ ++# _LT_LIBTOOL_TAG_VARS(TAG) ++# ------------------------- ++m4_define([_LT_LIBTOOL_TAG_VARS], ++[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), ++ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) ++ ++ ++# _LT_TAGVAR(VARNAME, [TAGNAME]) ++# ------------------------------ ++m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) ++ ++ ++# _LT_CONFIG_COMMANDS ++# ------------------- ++# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of ++# variables for single and double quote escaping we saved from calls ++# to _LT_DECL, we can put quote escaped variables declarations ++# into `config.status', and then the shell code to quote escape them in ++# for loops in `config.status'. Finally, any additional code accumulated ++# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. ++m4_defun([_LT_CONFIG_COMMANDS], ++[AC_PROVIDE_IFELSE([LT_OUTPUT], ++ dnl If the libtool generation code has been placed in $CONFIG_LT, ++ dnl instead of duplicating it all over again into config.status, ++ dnl then we will have config.status run $CONFIG_LT later, so it ++ dnl needs to know what name is stored there: ++ [AC_CONFIG_COMMANDS([libtool], ++ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], ++ dnl If the libtool generation code is destined for config.status, ++ dnl expand the accumulated commands and init code now: ++ [AC_CONFIG_COMMANDS([libtool], ++ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ++])#_LT_CONFIG_COMMANDS ++ ++ ++# Initialize. ++m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], ++[ ++ ++# The HP-UX ksh and POSIX shell print the target directory to stdout ++# if CDPATH is set. ++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH ++ ++sed_quote_subst='$sed_quote_subst' ++double_quote_subst='$double_quote_subst' ++delay_variable_subst='$delay_variable_subst' ++_LT_CONFIG_STATUS_DECLARATIONS ++LTCC='$LTCC' ++LTCFLAGS='$LTCFLAGS' ++compiler='$compiler_DEFAULT' ++ ++# Quote evaled strings. ++for var in lt_decl_all_varnames([[ \ ++]], lt_decl_quote_varnames); do ++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in ++ *[[\\\\\\\`\\"\\\$]]*) ++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ++ ;; ++ *) ++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ++ ;; ++ esac ++done ++ ++# Double-quote double-evaled strings. ++for var in lt_decl_all_varnames([[ \ ++]], lt_decl_dquote_varnames); do ++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in ++ *[[\\\\\\\`\\"\\\$]]*) ++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ++ ;; ++ *) ++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ++ ;; ++ esac ++done ++ ++# Fix-up fallback echo if it was mangled by the above quoting rules. ++case \$lt_ECHO in ++*'\\\[$]0 --fallback-echo"')dnl " ++ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ++ ;; ++esac ++ ++_LT_OUTPUT_LIBTOOL_INIT ++]) ++ ++ ++# LT_OUTPUT ++# --------- ++# This macro allows early generation of the libtool script (before ++# AC_OUTPUT is called), incase it is used in configure for compilation ++# tests. ++AC_DEFUN([LT_OUTPUT], ++[: ${CONFIG_LT=./config.lt} ++AC_MSG_NOTICE([creating $CONFIG_LT]) ++cat >"$CONFIG_LT" <<_LTEOF ++#! $SHELL ++# Generated by $as_me. ++# Run this file to recreate a libtool stub with the current configuration. ++ ++lt_cl_silent=false ++SHELL=\${CONFIG_SHELL-$SHELL} ++_LTEOF ++ ++cat >>"$CONFIG_LT" <<\_LTEOF ++AS_SHELL_SANITIZE ++_AS_PREPARE ++ ++exec AS_MESSAGE_FD>&1 ++exec AS_MESSAGE_LOG_FD>>config.log ++{ ++ echo ++ AS_BOX([Running $as_me.]) ++} >&AS_MESSAGE_LOG_FD ++ ++lt_cl_help="\ ++\`$as_me' creates a local libtool stub from the current configuration, ++for use in further configure time tests before the real libtool is ++generated. ++ ++Usage: $[0] [[OPTIONS]] ++ ++ -h, --help print this help, then exit ++ -V, --version print version number, then exit ++ -q, --quiet do not print progress messages ++ -d, --debug don't remove temporary files ++ ++Report bugs to ." ++ ++lt_cl_version="\ ++m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl ++m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) ++configured by $[0], generated by m4_PACKAGE_STRING. ++ ++Copyright (C) 2008 Free Software Foundation, Inc. ++This config.lt script is free software; the Free Software Foundation ++gives unlimited permision to copy, distribute and modify it." ++ ++while test $[#] != 0 ++do ++ case $[1] in ++ --version | --v* | -V ) ++ echo "$lt_cl_version"; exit 0 ;; ++ --help | --h* | -h ) ++ echo "$lt_cl_help"; exit 0 ;; ++ --debug | --d* | -d ) ++ debug=: ;; ++ --quiet | --q* | --silent | --s* | -q ) ++ lt_cl_silent=: ;; ++ ++ -*) AC_MSG_ERROR([unrecognized option: $[1] ++Try \`$[0] --help' for more information.]) ;; ++ ++ *) AC_MSG_ERROR([unrecognized argument: $[1] ++Try \`$[0] --help' for more information.]) ;; ++ esac ++ shift ++done ++ ++if $lt_cl_silent; then ++ exec AS_MESSAGE_FD>/dev/null ++fi ++_LTEOF ++ ++cat >>"$CONFIG_LT" <<_LTEOF ++_LT_OUTPUT_LIBTOOL_COMMANDS_INIT ++_LTEOF ++ ++cat >>"$CONFIG_LT" <<\_LTEOF ++AC_MSG_NOTICE([creating $ofile]) ++_LT_OUTPUT_LIBTOOL_COMMANDS ++AS_EXIT(0) ++_LTEOF ++chmod +x "$CONFIG_LT" ++ ++# configure is writing to config.log, but config.lt does its own redirection, ++# appending to config.log, which fails on DOS, as config.log is still kept ++# open by configure. Here we exec the FD to /dev/null, effectively closing ++# config.log, so it can be properly (re)opened and appended to by config.lt. ++if test "$no_create" != yes; then ++ lt_cl_success=: ++ test "$silent" = yes && ++ lt_config_lt_args="$lt_config_lt_args --quiet" ++ exec AS_MESSAGE_LOG_FD>/dev/null ++ $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false ++ exec AS_MESSAGE_LOG_FD>>config.log ++ $lt_cl_success || AS_EXIT(1) ++fi ++])# LT_OUTPUT ++ ++ ++# _LT_CONFIG(TAG) ++# --------------- ++# If TAG is the built-in tag, create an initial libtool script with a ++# default configuration from the untagged config vars. Otherwise add code ++# to config.status for appending the configuration named by TAG from the ++# matching tagged config vars. ++m4_defun([_LT_CONFIG], ++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++_LT_CONFIG_SAVE_COMMANDS([ ++ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl ++ m4_if(_LT_TAG, [C], [ ++ # See if we are running on zsh, and set the options which allow our ++ # commands through without removal of \ escapes. ++ if test -n "${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++ fi ++ ++ cfgfile="${ofile}T" ++ trap "$RM \"$cfgfile\"; exit 1" 1 2 15 ++ $RM "$cfgfile" ++ ++ cat <<_LT_EOF >> "$cfgfile" ++#! $SHELL ++ ++# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. ++# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION ++# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: ++# NOTE: Changes made to this file will be lost: look at ltmain.sh. ++# ++_LT_COPYING ++_LT_LIBTOOL_TAGS ++ ++# ### BEGIN LIBTOOL CONFIG ++_LT_LIBTOOL_CONFIG_VARS ++_LT_LIBTOOL_TAG_VARS ++# ### END LIBTOOL CONFIG ++ ++_LT_EOF ++ ++ case $host_os in ++ aix3*) ++ cat <<\_LT_EOF >> "$cfgfile" ++# AIX sometimes has problems with the GCC collect2 program. For some ++# reason, if we set the COLLECT_NAMES environment variable, the problems ++# vanish in a puff of smoke. ++if test "X${COLLECT_NAMES+set}" != Xset; then ++ COLLECT_NAMES= ++ export COLLECT_NAMES ++fi ++_LT_EOF ++ ;; ++ esac ++ ++ _LT_PROG_LTMAIN ++ ++ # We use sed instead of cat because bash on DJGPP gets confused if ++ # if finds mixed CR/LF and LF-only lines. Since sed operates in ++ # text mode, it properly converts lines to CR/LF. This bash problem ++ # is reportedly fixed, but why not run on old versions too? ++ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ ++ || (rm -f "$cfgfile"; exit 1) ++ ++ _LT_PROG_XSI_SHELLFNS ++ ++ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ ++ || (rm -f "$cfgfile"; exit 1) ++ ++ mv -f "$cfgfile" "$ofile" || ++ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") ++ chmod +x "$ofile" ++], ++[cat <<_LT_EOF >> "$ofile" ++ ++dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded ++dnl in a comment (ie after a #). ++# ### BEGIN LIBTOOL TAG CONFIG: $1 ++_LT_LIBTOOL_TAG_VARS(_LT_TAG) ++# ### END LIBTOOL TAG CONFIG: $1 ++_LT_EOF ++])dnl /m4_if ++], ++[m4_if([$1], [], [ ++ PACKAGE='$PACKAGE' ++ VERSION='$VERSION' ++ TIMESTAMP='$TIMESTAMP' ++ RM='$RM' ++ ofile='$ofile'], []) ++])dnl /_LT_CONFIG_SAVE_COMMANDS ++])# _LT_CONFIG ++ ++ ++# LT_SUPPORTED_TAG(TAG) ++# --------------------- ++# Trace this macro to discover what tags are supported by the libtool ++# --tag option, using: ++# autoconf --trace 'LT_SUPPORTED_TAG:$1' ++AC_DEFUN([LT_SUPPORTED_TAG], []) ++ ++ ++# C support is built-in for now ++m4_define([_LT_LANG_C_enabled], []) ++m4_define([_LT_TAGS], []) ++ ++ ++# LT_LANG(LANG) ++# ------------- ++# Enable libtool support for the given language if not already enabled. ++AC_DEFUN([LT_LANG], ++[AC_BEFORE([$0], [LT_OUTPUT])dnl ++m4_case([$1], ++ [C], [_LT_LANG(C)], ++ [C++], [_LT_LANG(CXX)], ++ [Java], [_LT_LANG(GCJ)], ++ [Fortran 77], [_LT_LANG(F77)], ++ [Fortran], [_LT_LANG(FC)], ++ [Windows Resource], [_LT_LANG(RC)], ++ [m4_ifdef([_LT_LANG_]$1[_CONFIG], ++ [_LT_LANG($1)], ++ [m4_fatal([$0: unsupported language: "$1"])])])dnl ++])# LT_LANG ++ ++ ++# _LT_LANG(LANGNAME) ++# ------------------ ++m4_defun([_LT_LANG], ++[m4_ifdef([_LT_LANG_]$1[_enabled], [], ++ [LT_SUPPORTED_TAG([$1])dnl ++ m4_append([_LT_TAGS], [$1 ])dnl ++ m4_define([_LT_LANG_]$1[_enabled], [])dnl ++ _LT_LANG_$1_CONFIG($1)])dnl ++])# _LT_LANG ++ ++ ++# _LT_LANG_DEFAULT_CONFIG ++# ----------------------- ++m4_defun([_LT_LANG_DEFAULT_CONFIG], ++[AC_PROVIDE_IFELSE([AC_PROG_CXX], ++ [LT_LANG(CXX)], ++ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) ++ ++AC_PROVIDE_IFELSE([AC_PROG_F77], ++ [LT_LANG(F77)], ++ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) ++ ++AC_PROVIDE_IFELSE([AC_PROG_FC], ++ [LT_LANG(FC)], ++ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) ++ ++dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal ++dnl pulling things in needlessly. ++AC_PROVIDE_IFELSE([AC_PROG_GCJ], ++ [LT_LANG(GCJ)], ++ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], ++ [LT_LANG(GCJ)], ++ [AC_PROVIDE_IFELSE([LT_PROG_GCJ], ++ [LT_LANG(GCJ)], ++ [m4_ifdef([AC_PROG_GCJ], ++ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) ++ m4_ifdef([A][M_PROG_GCJ], ++ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) ++ m4_ifdef([LT_PROG_GCJ], ++ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) ++ ++AC_PROVIDE_IFELSE([LT_PROG_RC], ++ [LT_LANG(RC)], ++ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ++])# _LT_LANG_DEFAULT_CONFIG ++ ++# Obsolete macros: ++AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) ++AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) ++AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) ++AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_CXX], []) ++dnl AC_DEFUN([AC_LIBTOOL_F77], []) ++dnl AC_DEFUN([AC_LIBTOOL_FC], []) ++dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) ++ ++ ++# _LT_TAG_COMPILER ++# ---------------- ++m4_defun([_LT_TAG_COMPILER], ++[AC_REQUIRE([AC_PROG_CC])dnl ++ ++_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl ++_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl ++_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl ++_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl ++ ++# If no C compiler was specified, use CC. ++LTCC=${LTCC-"$CC"} ++ ++# If no C compiler flags were specified, use CFLAGS. ++LTCFLAGS=${LTCFLAGS-"$CFLAGS"} ++ ++# Allow CC to be a program name with arguments. ++compiler=$CC ++])# _LT_TAG_COMPILER ++ ++ ++# _LT_COMPILER_BOILERPLATE ++# ------------------------ ++# Check for compiler boilerplate output or warnings with ++# the simple compiler test code. ++m4_defun([_LT_COMPILER_BOILERPLATE], ++[m4_require([_LT_DECL_SED])dnl ++ac_outfile=conftest.$ac_objext ++echo "$lt_simple_compile_test_code" >conftest.$ac_ext ++eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err ++_lt_compiler_boilerplate=`cat conftest.err` ++$RM conftest* ++])# _LT_COMPILER_BOILERPLATE ++ ++ ++# _LT_LINKER_BOILERPLATE ++# ---------------------- ++# Check for linker boilerplate output or warnings with ++# the simple link test code. ++m4_defun([_LT_LINKER_BOILERPLATE], ++[m4_require([_LT_DECL_SED])dnl ++ac_outfile=conftest.$ac_objext ++echo "$lt_simple_link_test_code" >conftest.$ac_ext ++eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err ++_lt_linker_boilerplate=`cat conftest.err` ++$RM -r conftest* ++])# _LT_LINKER_BOILERPLATE ++ ++# _LT_REQUIRED_DARWIN_CHECKS ++# ------------------------- ++m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ ++ case $host_os in ++ rhapsody* | darwin*) ++ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) ++ AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) ++ AC_CHECK_TOOL([LIPO], [lipo], [:]) ++ AC_CHECK_TOOL([OTOOL], [otool], [:]) ++ AC_CHECK_TOOL([OTOOL64], [otool64], [:]) ++ _LT_DECL([], [DSYMUTIL], [1], ++ [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) ++ _LT_DECL([], [NMEDIT], [1], ++ [Tool to change global to local symbols on Mac OS X]) ++ _LT_DECL([], [LIPO], [1], ++ [Tool to manipulate fat objects and archives on Mac OS X]) ++ _LT_DECL([], [OTOOL], [1], ++ [ldd/readelf like tool for Mach-O binaries on Mac OS X]) ++ _LT_DECL([], [OTOOL64], [1], ++ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) ++ ++ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], ++ [lt_cv_apple_cc_single_mod=no ++ if test -z "${LT_MULTI_MODULE}"; then ++ # By default we will add the -single_module flag. You can override ++ # by either setting the environment variable LT_MULTI_MODULE ++ # non-empty at configure time, or by adding -multi_module to the ++ # link flags. ++ rm -rf libconftest.dylib* ++ echo "int foo(void){return 1;}" > conftest.c ++ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ ++-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD ++ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ ++ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err ++ _lt_result=$? ++ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then ++ lt_cv_apple_cc_single_mod=yes ++ else ++ cat conftest.err >&AS_MESSAGE_LOG_FD ++ fi ++ rm -rf libconftest.dylib* ++ rm -f conftest.* ++ fi]) ++ AC_CACHE_CHECK([for -exported_symbols_list linker flag], ++ [lt_cv_ld_exported_symbols_list], ++ [lt_cv_ld_exported_symbols_list=no ++ save_LDFLAGS=$LDFLAGS ++ echo "_main" > conftest.sym ++ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], ++ [lt_cv_ld_exported_symbols_list=yes], ++ [lt_cv_ld_exported_symbols_list=no]) ++ LDFLAGS="$save_LDFLAGS" ++ ]) ++ case $host_os in ++ rhapsody* | darwin1.[[012]]) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; ++ darwin1.*) ++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; ++ darwin*) # darwin 5.x on ++ # if running on 10.5 or later, the deployment target defaults ++ # to the OS version, if on x86, and 10.4, the deployment ++ # target defaults to 10.4. Don't you love it? ++ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in ++ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; ++ 10.[[012]]*) ++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; ++ 10.*) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; ++ esac ++ ;; ++ esac ++ if test "$lt_cv_apple_cc_single_mod" = "yes"; then ++ _lt_dar_single_mod='$single_module' ++ fi ++ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then ++ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' ++ else ++ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' ++ fi ++ if test "$DSYMUTIL" != ":"; then ++ _lt_dsymutil='~$DSYMUTIL $lib || :' ++ else ++ _lt_dsymutil= ++ fi ++ ;; ++ esac ++]) ++ ++ ++# _LT_DARWIN_LINKER_FEATURES ++# -------------------------- ++# Checks for linker and compiler features on darwin ++m4_defun([_LT_DARWIN_LINKER_FEATURES], ++[ ++ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_automatic, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" ++ case $cc_basename in ++ ifort*) _lt_dar_can_shared=yes ;; ++ *) _lt_dar_can_shared=$GCC ;; ++ esac ++ if test "$_lt_dar_can_shared" = "yes"; then ++ output_verbose_link_cmd=echo ++ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" ++ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" ++ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" ++ m4_if([$1], [CXX], ++[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then ++ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" ++ fi ++],[]) ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++]) ++ ++# _LT_SYS_MODULE_PATH_AIX ++# ----------------------- ++# Links a minimal program and checks the executable ++# for the system default hardcoded library path. In most cases, ++# this is /usr/lib:/lib, but when the MPI compilers are used ++# the location of the communication and MPI libs are included too. ++# If we don't find anything, use the default library path according ++# to the aix ld manual. ++m4_defun([_LT_SYS_MODULE_PATH_AIX], ++[m4_require([_LT_DECL_SED])dnl ++AC_LINK_IFELSE(AC_LANG_PROGRAM,[ ++lt_aix_libpath_sed=' ++ /Import File Strings/,/^$/ { ++ /^0/ { ++ s/^0 *\(.*\)$/\1/ ++ p ++ } ++ }' ++aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` ++# Check for a 64-bit object if we didn't find anything. ++if test -z "$aix_libpath"; then ++ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` ++fi],[]) ++if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ++])# _LT_SYS_MODULE_PATH_AIX ++ ++ ++# _LT_SHELL_INIT(ARG) ++# ------------------- ++m4_define([_LT_SHELL_INIT], ++[ifdef([AC_DIVERSION_NOTICE], ++ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], ++ [AC_DIVERT_PUSH(NOTICE)]) ++$1 ++AC_DIVERT_POP ++])# _LT_SHELL_INIT ++ ++ ++# _LT_PROG_ECHO_BACKSLASH ++# ----------------------- ++# Add some code to the start of the generated configure script which ++# will find an echo command which doesn't interpret backslashes. ++m4_defun([_LT_PROG_ECHO_BACKSLASH], ++[_LT_SHELL_INIT([ ++# Check that we are running under the correct shell. ++SHELL=${CONFIG_SHELL-/bin/sh} ++ ++case X$lt_ECHO in ++X*--fallback-echo) ++ # Remove one level of quotation (which was required for Make). ++ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ++ ;; ++esac ++ ++ECHO=${lt_ECHO-echo} ++if test "X[$]1" = X--no-reexec; then ++ # Discard the --no-reexec flag, and continue. ++ shift ++elif test "X[$]1" = X--fallback-echo; then ++ # Avoid inline document here, it may be left over ++ : ++elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then ++ # Yippee, $ECHO works! ++ : ++else ++ # Restart under the correct shell. ++ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} ++fi ++ ++if test "X[$]1" = X--fallback-echo; then ++ # used as fallback echo ++ shift ++ cat <<_LT_EOF ++[$]* ++_LT_EOF ++ exit 0 ++fi ++ ++# The HP-UX ksh and POSIX shell print the target directory to stdout ++# if CDPATH is set. ++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH ++ ++if test -z "$lt_ECHO"; then ++ if test "X${echo_test_string+set}" != Xset; then ++ # find a string as large as possible, as long as the shell can cope with it ++ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do ++ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... ++ if { echo_test_string=`eval $cmd`; } 2>/dev/null && ++ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null ++ then ++ break ++ fi ++ done ++ fi ++ ++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && ++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && ++ test "X$echo_testing_string" = "X$echo_test_string"; then ++ : ++ else ++ # The Solaris, AIX, and Digital Unix default echo programs unquote ++ # backslashes. This makes it impossible to quote backslashes using ++ # echo "$something" | sed 's/\\/\\\\/g' ++ # ++ # So, first we look for a working echo in the user's PATH. ++ ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ for dir in $PATH /usr/ucb; do ++ IFS="$lt_save_ifs" ++ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && ++ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && ++ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && ++ test "X$echo_testing_string" = "X$echo_test_string"; then ++ ECHO="$dir/echo" ++ break ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ++ if test "X$ECHO" = Xecho; then ++ # We didn't find a better echo, so look for alternatives. ++ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && ++ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && ++ test "X$echo_testing_string" = "X$echo_test_string"; then ++ # This shell has a builtin print -r that does the trick. ++ ECHO='print -r' ++ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && ++ test "X$CONFIG_SHELL" != X/bin/ksh; then ++ # If we have ksh, try running configure again with it. ++ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} ++ export ORIGINAL_CONFIG_SHELL ++ CONFIG_SHELL=/bin/ksh ++ export CONFIG_SHELL ++ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} ++ else ++ # Try using printf. ++ ECHO='printf %s\n' ++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && ++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && ++ test "X$echo_testing_string" = "X$echo_test_string"; then ++ # Cool, printf works ++ : ++ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && ++ test "X$echo_testing_string" = 'X\t' && ++ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && ++ test "X$echo_testing_string" = "X$echo_test_string"; then ++ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL ++ export CONFIG_SHELL ++ SHELL="$CONFIG_SHELL" ++ export SHELL ++ ECHO="$CONFIG_SHELL [$]0 --fallback-echo" ++ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && ++ test "X$echo_testing_string" = 'X\t' && ++ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && ++ test "X$echo_testing_string" = "X$echo_test_string"; then ++ ECHO="$CONFIG_SHELL [$]0 --fallback-echo" ++ else ++ # maybe with a smaller string... ++ prev=: ++ ++ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do ++ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null ++ then ++ break ++ fi ++ prev="$cmd" ++ done ++ ++ if test "$prev" != 'sed 50q "[$]0"'; then ++ echo_test_string=`eval $prev` ++ export echo_test_string ++ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} ++ else ++ # Oops. We lost completely, so just stick with echo. ++ ECHO=echo ++ fi ++ fi ++ fi ++ fi ++ fi ++fi ++ ++# Copy echo and quote the copy suitably for passing to libtool from ++# the Makefile, instead of quoting the original, which is used later. ++lt_ECHO=$ECHO ++if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ++ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" ++fi ++ ++AC_SUBST(lt_ECHO) ++]) ++_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) ++_LT_DECL([], [ECHO], [1], ++ [An echo program that does not interpret backslashes]) ++])# _LT_PROG_ECHO_BACKSLASH ++ ++ ++# _LT_ENABLE_LOCK ++# --------------- ++m4_defun([_LT_ENABLE_LOCK], ++[AC_ARG_ENABLE([libtool-lock], ++ [AS_HELP_STRING([--disable-libtool-lock], ++ [avoid locking (might break parallel builds)])]) ++test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes ++ ++# Some flags need to be propagated to the compiler or linker for good ++# libtool support. ++case $host in ++ia64-*-hpux*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *ELF-32*) ++ HPUX_IA64_MODE="32" ++ ;; ++ *ELF-64*) ++ HPUX_IA64_MODE="64" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++*-*-irix6*) ++ # Find out which ABI we are using. ++ echo '[#]line __oline__ "configure"' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ if test "$lt_cv_prog_gnu_ld" = yes; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *32-bit*) ++ LD="${LD-ld} -melf32bsmip" ++ ;; ++ *N32*) ++ LD="${LD-ld} -melf32bmipn32" ++ ;; ++ *64-bit*) ++ LD="${LD-ld} -melf64bmip" ++ ;; ++ esac ++ else ++ case `/usr/bin/file conftest.$ac_objext` in ++ *32-bit*) ++ LD="${LD-ld} -32" ++ ;; ++ *N32*) ++ LD="${LD-ld} -n32" ++ ;; ++ *64-bit*) ++ LD="${LD-ld} -64" ++ ;; ++ esac ++ fi ++ fi ++ rm -rf conftest* ++ ;; ++ ++x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ ++s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case `/usr/bin/file conftest.o` in ++ *32-bit*) ++ case $host in ++ x86_64-*kfreebsd*-gnu) ++ LD="${LD-ld} -m elf_i386_fbsd" ++ ;; ++ x86_64-*linux*) ++ LD="${LD-ld} -m elf_i386" ++ ;; ++ ppc64-*linux*|powerpc64-*linux*) ++ LD="${LD-ld} -m elf32ppclinux" ++ ;; ++ s390x-*linux*) ++ LD="${LD-ld} -m elf_s390" ++ ;; ++ sparc64-*linux*) ++ LD="${LD-ld} -m elf32_sparc" ++ ;; ++ esac ++ ;; ++ *64-bit*) ++ case $host in ++ x86_64-*kfreebsd*-gnu) ++ LD="${LD-ld} -m elf_x86_64_fbsd" ++ ;; ++ x86_64-*linux*) ++ LD="${LD-ld} -m elf_x86_64" ++ ;; ++ ppc*-*linux*|powerpc*-*linux*) ++ LD="${LD-ld} -m elf64ppc" ++ ;; ++ s390*-*linux*|s390*-*tpf*) ++ LD="${LD-ld} -m elf64_s390" ++ ;; ++ sparc*-*linux*) ++ LD="${LD-ld} -m elf64_sparc" ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ ++*-*-sco3.2v5*) ++ # On SCO OpenServer 5, we need -belf to get full-featured binaries. ++ SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -belf" ++ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, ++ [AC_LANG_PUSH(C) ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) ++ AC_LANG_POP]) ++ if test x"$lt_cv_cc_needs_belf" != x"yes"; then ++ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf ++ CFLAGS="$SAVE_CFLAGS" ++ fi ++ ;; ++sparc*-*solaris*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case `/usr/bin/file conftest.o` in ++ *64-bit*) ++ case $lt_cv_prog_gnu_ld in ++ yes*) LD="${LD-ld} -m elf64_sparc" ;; ++ *) ++ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then ++ LD="${LD-ld} -64" ++ fi ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++esac ++ ++need_locks="$enable_libtool_lock" ++])# _LT_ENABLE_LOCK ++ ++ ++# _LT_CMD_OLD_ARCHIVE ++# ------------------- ++m4_defun([_LT_CMD_OLD_ARCHIVE], ++[AC_CHECK_TOOL(AR, ar, false) ++test -z "$AR" && AR=ar ++test -z "$AR_FLAGS" && AR_FLAGS=cru ++_LT_DECL([], [AR], [1], [The archiver]) ++_LT_DECL([], [AR_FLAGS], [1]) ++ ++AC_CHECK_TOOL(STRIP, strip, :) ++test -z "$STRIP" && STRIP=: ++_LT_DECL([], [STRIP], [1], [A symbol stripping program]) ++ ++AC_CHECK_TOOL(RANLIB, ranlib, :) ++test -z "$RANLIB" && RANLIB=: ++_LT_DECL([], [RANLIB], [1], ++ [Commands used to install an old-style archive]) ++ ++# Determine commands to create old-style static archives. ++old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' ++old_postinstall_cmds='chmod 644 $oldlib' ++old_postuninstall_cmds= ++ ++if test -n "$RANLIB"; then ++ case $host_os in ++ openbsd*) ++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ++ ;; ++ *) ++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ++ ;; ++ esac ++ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" ++fi ++_LT_DECL([], [old_postinstall_cmds], [2]) ++_LT_DECL([], [old_postuninstall_cmds], [2]) ++_LT_TAGDECL([], [old_archive_cmds], [2], ++ [Commands used to build an old-style archive]) ++])# _LT_CMD_OLD_ARCHIVE ++ ++ ++# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, ++# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) ++# ---------------------------------------------------------------- ++# Check whether the given compiler option works ++AC_DEFUN([_LT_COMPILER_OPTION], ++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_SED])dnl ++AC_CACHE_CHECK([$1], [$2], ++ [$2=no ++ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ lt_compiler_flag="$3" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ # The option is referenced via a variable to avoid confusing sed. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) ++ (eval "$lt_compile" 2>conftest.err) ++ ac_status=$? ++ cat conftest.err >&AS_MESSAGE_LOG_FD ++ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD ++ if (exit $ac_status) && test -s "$ac_outfile"; then ++ # The compiler can only warn and ignore the option if not recognized ++ # So say no if there are warnings other than the usual output. ++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp ++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 ++ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then ++ $2=yes ++ fi ++ fi ++ $RM conftest* ++]) ++ ++if test x"[$]$2" = xyes; then ++ m4_if([$5], , :, [$5]) ++else ++ m4_if([$6], , :, [$6]) ++fi ++])# _LT_COMPILER_OPTION ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) ++ ++ ++# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, ++# [ACTION-SUCCESS], [ACTION-FAILURE]) ++# ---------------------------------------------------- ++# Check whether the given linker option works ++AC_DEFUN([_LT_LINKER_OPTION], ++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_SED])dnl ++AC_CACHE_CHECK([$1], [$2], ++ [$2=no ++ save_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS $3" ++ echo "$lt_simple_link_test_code" > conftest.$ac_ext ++ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then ++ # The linker can only warn and ignore the option if not recognized ++ # So say no if there are warnings ++ if test -s conftest.err; then ++ # Append any errors to the config.log. ++ cat conftest.err 1>&AS_MESSAGE_LOG_FD ++ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp ++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 ++ if diff conftest.exp conftest.er2 >/dev/null; then ++ $2=yes ++ fi ++ else ++ $2=yes ++ fi ++ fi ++ $RM -r conftest* ++ LDFLAGS="$save_LDFLAGS" ++]) ++ ++if test x"[$]$2" = xyes; then ++ m4_if([$4], , :, [$4]) ++else ++ m4_if([$5], , :, [$5]) ++fi ++])# _LT_LINKER_OPTION ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) ++ ++ ++# LT_CMD_MAX_LEN ++#--------------- ++AC_DEFUN([LT_CMD_MAX_LEN], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++# find the maximum length of command line arguments ++AC_MSG_CHECKING([the maximum length of command line arguments]) ++AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl ++ i=0 ++ teststring="ABCD" ++ ++ case $build_os in ++ msdosdjgpp*) ++ # On DJGPP, this test can blow up pretty badly due to problems in libc ++ # (any single argument exceeding 2000 bytes causes a buffer overrun ++ # during glob expansion). Even if it were fixed, the result of this ++ # check would be larger than it should be. ++ lt_cv_sys_max_cmd_len=12288; # 12K is about right ++ ;; ++ ++ gnu*) ++ # Under GNU Hurd, this test is not required because there is ++ # no limit to the length of command line arguments. ++ # Libtool will interpret -1 as no limit whatsoever ++ lt_cv_sys_max_cmd_len=-1; ++ ;; ++ ++ cygwin* | mingw* | cegcc*) ++ # On Win9x/ME, this test blows up -- it succeeds, but takes ++ # about 5 minutes as the teststring grows exponentially. ++ # Worse, since 9x/ME are not pre-emptively multitasking, ++ # you end up with a "frozen" computer, even though with patience ++ # the test eventually succeeds (with a max line length of 256k). ++ # Instead, let's just punt: use the minimum linelength reported by ++ # all of the supported platforms: 8192 (on NT/2K/XP). ++ lt_cv_sys_max_cmd_len=8192; ++ ;; ++ ++ amigaos*) ++ # On AmigaOS with pdksh, this test takes hours, literally. ++ # So we just punt and use a minimum line length of 8192. ++ lt_cv_sys_max_cmd_len=8192; ++ ;; ++ ++ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) ++ # This has been around since 386BSD, at least. Likely further. ++ if test -x /sbin/sysctl; then ++ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` ++ elif test -x /usr/sbin/sysctl; then ++ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` ++ else ++ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs ++ fi ++ # And add a safety zone ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ++ ;; ++ ++ interix*) ++ # We know the value 262144 and hardcode it with a safety zone (like BSD) ++ lt_cv_sys_max_cmd_len=196608 ++ ;; ++ ++ osf*) ++ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure ++ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not ++ # nice to cause kernel panics so lets avoid the loop below. ++ # First set a reasonable default. ++ lt_cv_sys_max_cmd_len=16384 ++ # ++ if test -x /sbin/sysconfig; then ++ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in ++ *1*) lt_cv_sys_max_cmd_len=-1 ;; ++ esac ++ fi ++ ;; ++ sco3.2v5*) ++ lt_cv_sys_max_cmd_len=102400 ++ ;; ++ sysv5* | sco5v6* | sysv4.2uw2*) ++ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` ++ if test -n "$kargmax"; then ++ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` ++ else ++ lt_cv_sys_max_cmd_len=32768 ++ fi ++ ;; ++ *) ++ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` ++ if test -n "$lt_cv_sys_max_cmd_len"; then ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ++ else ++ # Make teststring a little bigger before we do anything with it. ++ # a 1K string should be a reasonable start. ++ for i in 1 2 3 4 5 6 7 8 ; do ++ teststring=$teststring$teststring ++ done ++ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} ++ # If test is not a shell built-in, we'll probably end up computing a ++ # maximum length that is only half of the actual maximum length, but ++ # we can't tell. ++ while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ ++ = "XX$teststring$teststring"; } >/dev/null 2>&1 && ++ test $i != 17 # 1/2 MB should be enough ++ do ++ i=`expr $i + 1` ++ teststring=$teststring$teststring ++ done ++ # Only check the string length outside the loop. ++ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` ++ teststring= ++ # Add a significant safety factor because C++ compilers can tack on ++ # massive amounts of additional arguments before passing them to the ++ # linker. It appears as though 1/2 is a usable value. ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ++ fi ++ ;; ++ esac ++]) ++if test -n $lt_cv_sys_max_cmd_len ; then ++ AC_MSG_RESULT($lt_cv_sys_max_cmd_len) ++else ++ AC_MSG_RESULT(none) ++fi ++max_cmd_len=$lt_cv_sys_max_cmd_len ++_LT_DECL([], [max_cmd_len], [0], ++ [What is the maximum length of a command?]) ++])# LT_CMD_MAX_LEN ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) ++ ++ ++# _LT_HEADER_DLFCN ++# ---------------- ++m4_defun([_LT_HEADER_DLFCN], ++[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ++])# _LT_HEADER_DLFCN ++ ++ ++# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, ++# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) ++# ---------------------------------------------------------------- ++m4_defun([_LT_TRY_DLOPEN_SELF], ++[m4_require([_LT_HEADER_DLFCN])dnl ++if test "$cross_compiling" = yes; then : ++ [$4] ++else ++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 ++ lt_status=$lt_dlunknown ++ cat > conftest.$ac_ext <<_LT_EOF ++[#line __oline__ "configure" ++#include "confdefs.h" ++ ++#if HAVE_DLFCN_H ++#include ++#endif ++ ++#include ++ ++#ifdef RTLD_GLOBAL ++# define LT_DLGLOBAL RTLD_GLOBAL ++#else ++# ifdef DL_GLOBAL ++# define LT_DLGLOBAL DL_GLOBAL ++# else ++# define LT_DLGLOBAL 0 ++# endif ++#endif ++ ++/* We may have to define LT_DLLAZY_OR_NOW in the command line if we ++ find out it does not work in some platform. */ ++#ifndef LT_DLLAZY_OR_NOW ++# ifdef RTLD_LAZY ++# define LT_DLLAZY_OR_NOW RTLD_LAZY ++# else ++# ifdef DL_LAZY ++# define LT_DLLAZY_OR_NOW DL_LAZY ++# else ++# ifdef RTLD_NOW ++# define LT_DLLAZY_OR_NOW RTLD_NOW ++# else ++# ifdef DL_NOW ++# define LT_DLLAZY_OR_NOW DL_NOW ++# else ++# define LT_DLLAZY_OR_NOW 0 ++# endif ++# endif ++# endif ++# endif ++#endif ++ ++void fnord() { int i=42;} ++int main () ++{ ++ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); ++ int status = $lt_dlunknown; ++ ++ if (self) ++ { ++ if (dlsym (self,"fnord")) status = $lt_dlno_uscore; ++ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; ++ /* dlclose (self); */ ++ } ++ else ++ puts (dlerror ()); ++ ++ return status; ++}] ++_LT_EOF ++ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then ++ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null ++ lt_status=$? ++ case x$lt_status in ++ x$lt_dlno_uscore) $1 ;; ++ x$lt_dlneed_uscore) $2 ;; ++ x$lt_dlunknown|x*) $3 ;; ++ esac ++ else : ++ # compilation failed ++ $3 ++ fi ++fi ++rm -fr conftest* ++])# _LT_TRY_DLOPEN_SELF ++ ++ ++# LT_SYS_DLOPEN_SELF ++# ------------------ ++AC_DEFUN([LT_SYS_DLOPEN_SELF], ++[m4_require([_LT_HEADER_DLFCN])dnl ++if test "x$enable_dlopen" != xyes; then ++ enable_dlopen=unknown ++ enable_dlopen_self=unknown ++ enable_dlopen_self_static=unknown ++else ++ lt_cv_dlopen=no ++ lt_cv_dlopen_libs= ++ ++ case $host_os in ++ beos*) ++ lt_cv_dlopen="load_add_on" ++ lt_cv_dlopen_libs= ++ lt_cv_dlopen_self=yes ++ ;; ++ ++ mingw* | pw32* | cegcc*) ++ lt_cv_dlopen="LoadLibrary" ++ lt_cv_dlopen_libs= ++ ;; ++ ++ cygwin*) ++ lt_cv_dlopen="dlopen" ++ lt_cv_dlopen_libs= ++ ;; ++ ++ darwin*) ++ # if libdl is installed we need to link against it ++ AC_CHECK_LIB([dl], [dlopen], ++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ ++ lt_cv_dlopen="dyld" ++ lt_cv_dlopen_libs= ++ lt_cv_dlopen_self=yes ++ ]) ++ ;; ++ ++ *) ++ AC_CHECK_FUNC([shl_load], ++ [lt_cv_dlopen="shl_load"], ++ [AC_CHECK_LIB([dld], [shl_load], ++ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], ++ [AC_CHECK_FUNC([dlopen], ++ [lt_cv_dlopen="dlopen"], ++ [AC_CHECK_LIB([dl], [dlopen], ++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], ++ [AC_CHECK_LIB([svld], [dlopen], ++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], ++ [AC_CHECK_LIB([dld], [dld_link], ++ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ++ ]) ++ ]) ++ ]) ++ ]) ++ ]) ++ ;; ++ esac ++ ++ if test "x$lt_cv_dlopen" != xno; then ++ enable_dlopen=yes ++ else ++ enable_dlopen=no ++ fi ++ ++ case $lt_cv_dlopen in ++ dlopen) ++ save_CPPFLAGS="$CPPFLAGS" ++ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" ++ ++ save_LDFLAGS="$LDFLAGS" ++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" ++ ++ save_LIBS="$LIBS" ++ LIBS="$lt_cv_dlopen_libs $LIBS" ++ ++ AC_CACHE_CHECK([whether a program can dlopen itself], ++ lt_cv_dlopen_self, [dnl ++ _LT_TRY_DLOPEN_SELF( ++ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, ++ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ++ ]) ++ ++ if test "x$lt_cv_dlopen_self" = xyes; then ++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" ++ AC_CACHE_CHECK([whether a statically linked program can dlopen itself], ++ lt_cv_dlopen_self_static, [dnl ++ _LT_TRY_DLOPEN_SELF( ++ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, ++ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ++ ]) ++ fi ++ ++ CPPFLAGS="$save_CPPFLAGS" ++ LDFLAGS="$save_LDFLAGS" ++ LIBS="$save_LIBS" ++ ;; ++ esac ++ ++ case $lt_cv_dlopen_self in ++ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; ++ *) enable_dlopen_self=unknown ;; ++ esac ++ ++ case $lt_cv_dlopen_self_static in ++ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; ++ *) enable_dlopen_self_static=unknown ;; ++ esac ++fi ++_LT_DECL([dlopen_support], [enable_dlopen], [0], ++ [Whether dlopen is supported]) ++_LT_DECL([dlopen_self], [enable_dlopen_self], [0], ++ [Whether dlopen of programs is supported]) ++_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], ++ [Whether dlopen of statically linked programs is supported]) ++])# LT_SYS_DLOPEN_SELF ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) ++ ++ ++# _LT_COMPILER_C_O([TAGNAME]) ++# --------------------------- ++# Check to see if options -c and -o are simultaneously supported by compiler. ++# This macro does not hard code the compiler like AC_PROG_CC_C_O. ++m4_defun([_LT_COMPILER_C_O], ++[m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_TAG_COMPILER])dnl ++AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], ++ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], ++ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no ++ $RM -r conftest 2>/dev/null ++ mkdir conftest ++ cd conftest ++ mkdir out ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ ++ lt_compiler_flag="-o out/conftest2.$ac_objext" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) ++ (eval "$lt_compile" 2>out/conftest.err) ++ ac_status=$? ++ cat out/conftest.err >&AS_MESSAGE_LOG_FD ++ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD ++ if (exit $ac_status) && test -s out/conftest2.$ac_objext ++ then ++ # The compiler can only warn and ignore the option if not recognized ++ # So say no if there are warnings ++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp ++ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 ++ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then ++ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes ++ fi ++ fi ++ chmod u+w . 2>&AS_MESSAGE_LOG_FD ++ $RM conftest* ++ # SGI C++ compiler will create directory out/ii_files/ for ++ # template instantiation ++ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files ++ $RM out/* && rmdir out ++ cd .. ++ $RM -r conftest ++ $RM conftest* ++]) ++_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], ++ [Does compiler simultaneously support -c and -o options?]) ++])# _LT_COMPILER_C_O ++ ++ ++# _LT_COMPILER_FILE_LOCKS([TAGNAME]) ++# ---------------------------------- ++# Check to see if we can do hard links to lock some files if needed ++m4_defun([_LT_COMPILER_FILE_LOCKS], ++[m4_require([_LT_ENABLE_LOCK])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++_LT_COMPILER_C_O([$1]) ++ ++hard_links="nottested" ++if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then ++ # do not overwrite the value of need_locks provided by the user ++ AC_MSG_CHECKING([if we can lock with hard links]) ++ hard_links=yes ++ $RM conftest* ++ ln conftest.a conftest.b 2>/dev/null && hard_links=no ++ touch conftest.a ++ ln conftest.a conftest.b 2>&5 || hard_links=no ++ ln conftest.a conftest.b 2>/dev/null && hard_links=no ++ AC_MSG_RESULT([$hard_links]) ++ if test "$hard_links" = no; then ++ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) ++ need_locks=warn ++ fi ++else ++ need_locks=no ++fi ++_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ++])# _LT_COMPILER_FILE_LOCKS ++ ++ ++# _LT_CHECK_OBJDIR ++# ---------------- ++m4_defun([_LT_CHECK_OBJDIR], ++[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], ++[rm -f .libs 2>/dev/null ++mkdir .libs 2>/dev/null ++if test -d .libs; then ++ lt_cv_objdir=.libs ++else ++ # MS-DOS does not allow filenames that begin with a dot. ++ lt_cv_objdir=_libs ++fi ++rmdir .libs 2>/dev/null]) ++objdir=$lt_cv_objdir ++_LT_DECL([], [objdir], [0], ++ [The name of the directory that contains temporary libtool files])dnl ++m4_pattern_allow([LT_OBJDIR])dnl ++AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", ++ [Define to the sub-directory in which libtool stores uninstalled libraries.]) ++])# _LT_CHECK_OBJDIR ++ ++ ++# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) ++# -------------------------------------- ++# Check hardcoding attributes. ++m4_defun([_LT_LINKER_HARDCODE_LIBPATH], ++[AC_MSG_CHECKING([how to hardcode library paths into programs]) ++_LT_TAGVAR(hardcode_action, $1)= ++if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || ++ test -n "$_LT_TAGVAR(runpath_var, $1)" || ++ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then ++ ++ # We can hardcode non-existent directories. ++ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && ++ # If the only mechanism to avoid hardcoding is shlibpath_var, we ++ # have to relink, otherwise we might link with an installed library ++ # when we should be linking with a yet-to-be-installed one ++ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && ++ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then ++ # Linking always hardcodes the temporary library directory. ++ _LT_TAGVAR(hardcode_action, $1)=relink ++ else ++ # We can link without hardcoding, and we can hardcode nonexisting dirs. ++ _LT_TAGVAR(hardcode_action, $1)=immediate ++ fi ++else ++ # We cannot hardcode anything, or else we can only hardcode existing ++ # directories. ++ _LT_TAGVAR(hardcode_action, $1)=unsupported ++fi ++AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) ++ ++if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || ++ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then ++ # Fast installation is not supported ++ enable_fast_install=no ++elif test "$shlibpath_overrides_runpath" = yes || ++ test "$enable_shared" = no; then ++ # Fast installation is not necessary ++ enable_fast_install=needless ++fi ++_LT_TAGDECL([], [hardcode_action], [0], ++ [How to hardcode a shared library path into an executable]) ++])# _LT_LINKER_HARDCODE_LIBPATH ++ ++ ++# _LT_CMD_STRIPLIB ++# ---------------- ++m4_defun([_LT_CMD_STRIPLIB], ++[m4_require([_LT_DECL_EGREP]) ++striplib= ++old_striplib= ++AC_MSG_CHECKING([whether stripping libraries is possible]) ++if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then ++ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" ++ test -z "$striplib" && striplib="$STRIP --strip-unneeded" ++ AC_MSG_RESULT([yes]) ++else ++# FIXME - insert some real tests, host_os isn't really good enough ++ case $host_os in ++ darwin*) ++ if test -n "$STRIP" ; then ++ striplib="$STRIP -x" ++ old_striplib="$STRIP -S" ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ fi ++ ;; ++ *) ++ AC_MSG_RESULT([no]) ++ ;; ++ esac ++fi ++_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) ++_LT_DECL([], [striplib], [1]) ++])# _LT_CMD_STRIPLIB ++ ++ ++# _LT_SYS_DYNAMIC_LINKER([TAG]) ++# ----------------------------- ++# PORTME Fill in your ld.so characteristics ++m4_defun([_LT_SYS_DYNAMIC_LINKER], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++m4_require([_LT_DECL_EGREP])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_OBJDUMP])dnl ++m4_require([_LT_DECL_SED])dnl ++AC_MSG_CHECKING([dynamic linker characteristics]) ++m4_if([$1], ++ [], [ ++if test "$GCC" = yes; then ++ case $host_os in ++ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; ++ *) lt_awk_arg="/^libraries:/" ;; ++ esac ++ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` ++ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then ++ # if the path contains ";" then we assume it to be the separator ++ # otherwise default to the standard path separator (i.e. ":") - it is ++ # assumed that no part of a normal pathname contains ";" but that should ++ # okay in the real world where ";" in dirpaths is itself problematic. ++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` ++ else ++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ++ fi ++ # Ok, now we have the path, separated by spaces, we can step through it ++ # and add multilib dir if necessary. ++ lt_tmp_lt_search_path_spec= ++ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` ++ for lt_sys_path in $lt_search_path_spec; do ++ if test -d "$lt_sys_path/$lt_multi_os_dir"; then ++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" ++ else ++ test -d "$lt_sys_path" && \ ++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" ++ fi ++ done ++ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' ++BEGIN {RS=" "; FS="/|\n";} { ++ lt_foo=""; ++ lt_count=0; ++ for (lt_i = NF; lt_i > 0; lt_i--) { ++ if ($lt_i != "" && $lt_i != ".") { ++ if ($lt_i == "..") { ++ lt_count++; ++ } else { ++ if (lt_count == 0) { ++ lt_foo="/" $lt_i lt_foo; ++ } else { ++ lt_count--; ++ } ++ } ++ } ++ } ++ if (lt_foo != "") { lt_freq[[lt_foo]]++; } ++ if (lt_freq[[lt_foo]] == 1) { print lt_foo; } ++}'` ++ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` ++else ++ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" ++fi]) ++library_names_spec= ++libname_spec='lib$name' ++soname_spec= ++shrext_cmds=".so" ++postinstall_cmds= ++postuninstall_cmds= ++finish_cmds= ++finish_eval= ++shlibpath_var= ++shlibpath_overrides_runpath=unknown ++version_type=none ++dynamic_linker="$host_os ld.so" ++sys_lib_dlsearch_path_spec="/lib /usr/lib" ++need_lib_prefix=unknown ++hardcode_into_libs=no ++ ++# when you set need_version to no, make sure it does not cause -set_version ++# flags to be left without arguments ++need_version=unknown ++ ++case $host_os in ++aix3*) ++ version_type=linux ++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' ++ shlibpath_var=LIBPATH ++ ++ # AIX 3 has no versioning support, so we append a major version to the name. ++ soname_spec='${libname}${release}${shared_ext}$major' ++ ;; ++ ++aix[[4-9]]*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ hardcode_into_libs=yes ++ if test "$host_cpu" = ia64; then ++ # AIX 5 supports IA64 ++ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ else ++ # With GCC up to 2.95.x, collect2 would create an import file ++ # for dependence libraries. The import file would start with ++ # the line `#! .'. This would cause the generated library to ++ # depend on `.', always an invalid library. This was fixed in ++ # development snapshots of GCC prior to 3.0. ++ case $host_os in ++ aix4 | aix4.[[01]] | aix4.[[01]].*) ++ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' ++ echo ' yes ' ++ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then ++ : ++ else ++ can_build_shared=no ++ fi ++ ;; ++ esac ++ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct ++ # soname into executable. Probably we can add versioning support to ++ # collect2, so additional links can be useful in future. ++ if test "$aix_use_runtimelinking" = yes; then ++ # If using run time linking (on AIX 4.2 or later) use lib.so ++ # instead of lib.a to let people know that these are not ++ # typical AIX shared libraries. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ else ++ # We preserve .a as extension for shared libraries through AIX4.2 ++ # and later when we are not doing run time linking. ++ library_names_spec='${libname}${release}.a $libname.a' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ fi ++ shlibpath_var=LIBPATH ++ fi ++ ;; ++ ++amigaos*) ++ case $host_cpu in ++ powerpc) ++ # Since July 2007 AmigaOS4 officially supports .so libraries. ++ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ ;; ++ m68k) ++ library_names_spec='$libname.ixlibrary $libname.a' ++ # Create ${libname}_ixlibrary.a entries in /sys/libs. ++ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ++ ;; ++ esac ++ ;; ++ ++beos*) ++ library_names_spec='${libname}${shared_ext}' ++ dynamic_linker="$host_os ld.so" ++ shlibpath_var=LIBRARY_PATH ++ ;; ++ ++bsdi[[45]]*) ++ version_type=linux ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" ++ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" ++ # the default ld.so.conf also contains /usr/contrib/lib and ++ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow ++ # libtool to hard-code these into programs ++ ;; ++ ++cygwin* | mingw* | pw32* | cegcc*) ++ version_type=windows ++ shrext_cmds=".dll" ++ need_version=no ++ need_lib_prefix=no ++ ++ case $GCC,$host_os in ++ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) ++ library_names_spec='$libname.dll.a' ++ # DLL is installed to $(libdir)/../bin by postinstall_cmds ++ postinstall_cmds='base_file=`basename \${file}`~ ++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ ++ dldir=$destdir/`dirname \$dlpath`~ ++ test -d \$dldir || mkdir -p \$dldir~ ++ $install_prog $dir/$dlname \$dldir/$dlname~ ++ chmod a+x \$dldir/$dlname~ ++ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then ++ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; ++ fi' ++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ ++ dlpath=$dir/\$dldll~ ++ $RM \$dlpath' ++ shlibpath_overrides_runpath=yes ++ ++ case $host_os in ++ cygwin*) ++ # Cygwin DLLs use 'cyg' prefix rather than 'lib' ++ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ++ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ++ ;; ++ mingw* | cegcc*) ++ # MinGW DLLs use traditional 'lib' prefix ++ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ++ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` ++ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then ++ # It is most probably a Windows format PATH printed by ++ # mingw gcc, but we are running on Cygwin. Gcc prints its search ++ # path with ; separators, and with drive letters. We can handle the ++ # drive letters (cygwin fileutils understands them), so leave them, ++ # especially as we might pass files found there to a mingw objdump, ++ # which wouldn't understand a cygwinified path. Ahh. ++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` ++ else ++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ++ fi ++ ;; ++ pw32*) ++ # pw32 DLLs use 'pw' prefix rather than 'lib' ++ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ++ ;; ++ esac ++ ;; ++ ++ *) ++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ++ ;; ++ esac ++ dynamic_linker='Win32 ld.exe' ++ # FIXME: first we should search . and the directory the executable is in ++ shlibpath_var=PATH ++ ;; ++ ++darwin* | rhapsody*) ++ dynamic_linker="$host_os dyld" ++ version_type=darwin ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' ++ soname_spec='${libname}${release}${major}$shared_ext' ++ shlibpath_overrides_runpath=yes ++ shlibpath_var=DYLD_LIBRARY_PATH ++ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' ++m4_if([$1], [],[ ++ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) ++ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ++ ;; ++ ++dgux*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ ;; ++ ++freebsd1*) ++ dynamic_linker=no ++ ;; ++ ++freebsd* | dragonfly*) ++ # DragonFly does not have aout. When/if they implement a new ++ # versioning mechanism, adjust this. ++ if test -x /usr/bin/objformat; then ++ objformat=`/usr/bin/objformat` ++ else ++ case $host_os in ++ freebsd[[123]]*) objformat=aout ;; ++ *) objformat=elf ;; ++ esac ++ fi ++ version_type=freebsd-$objformat ++ case $version_type in ++ freebsd-elf*) ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' ++ need_version=no ++ need_lib_prefix=no ++ ;; ++ freebsd-*) ++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' ++ need_version=yes ++ ;; ++ esac ++ shlibpath_var=LD_LIBRARY_PATH ++ case $host_os in ++ freebsd2*) ++ shlibpath_overrides_runpath=yes ++ ;; ++ freebsd3.[[01]]* | freebsdelf3.[[01]]*) ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ ++ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ ;; ++ *) # from 4.6 on, and DragonFly ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ esac ++ ;; ++ ++gnu*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ hardcode_into_libs=yes ++ ;; ++ ++hpux9* | hpux10* | hpux11*) ++ # Give a soname corresponding to the major version so that dld.sl refuses to ++ # link against other versions. ++ version_type=sunos ++ need_lib_prefix=no ++ need_version=no ++ case $host_cpu in ++ ia64*) ++ shrext_cmds='.so' ++ hardcode_into_libs=yes ++ dynamic_linker="$host_os dld.so" ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ if test "X$HPUX_IA64_MODE" = X32; then ++ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" ++ else ++ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" ++ fi ++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ++ ;; ++ hppa*64*) ++ shrext_cmds='.sl' ++ hardcode_into_libs=yes ++ dynamic_linker="$host_os dld.sl" ++ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH ++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" ++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ++ ;; ++ *) ++ shrext_cmds='.sl' ++ dynamic_linker="$host_os dld.sl" ++ shlibpath_var=SHLIB_PATH ++ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ ;; ++ esac ++ # HP-UX runs *really* slowly unless shared libraries are mode 555. ++ postinstall_cmds='chmod 555 $lib' ++ ;; ++ ++interix[[3-9]]*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ ;; ++ ++irix5* | irix6* | nonstopux*) ++ case $host_os in ++ nonstopux*) version_type=nonstopux ;; ++ *) ++ if test "$lt_cv_prog_gnu_ld" = yes; then ++ version_type=linux ++ else ++ version_type=irix ++ fi ;; ++ esac ++ need_lib_prefix=no ++ need_version=no ++ soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' ++ case $host_os in ++ irix5* | nonstopux*) ++ libsuff= shlibsuff= ++ ;; ++ *) ++ case $LD in # libtool.m4 will add one of these switches to LD ++ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") ++ libsuff= shlibsuff= libmagic=32-bit;; ++ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") ++ libsuff=32 shlibsuff=N32 libmagic=N32;; ++ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") ++ libsuff=64 shlibsuff=64 libmagic=64-bit;; ++ *) libsuff= shlibsuff= libmagic=never-match;; ++ esac ++ ;; ++ esac ++ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH ++ shlibpath_overrides_runpath=no ++ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" ++ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" ++ hardcode_into_libs=yes ++ ;; ++ ++# No shared lib support for Linux oldld, aout, or coff. ++linux*oldld* | linux*aout* | linux*coff*) ++ dynamic_linker=no ++ ;; ++ ++# This must be Linux ELF. ++linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ # Some binutils ld are patched to set DT_RUNPATH ++ save_LDFLAGS=$LDFLAGS ++ save_libdir=$libdir ++ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ ++ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], ++ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], ++ [shlibpath_overrides_runpath=yes])]) ++ LDFLAGS=$save_LDFLAGS ++ libdir=$save_libdir ++ ++ # This implies no fast_install, which is unacceptable. ++ # Some rework will be needed to allow for fast_install ++ # before this can be enabled. ++ hardcode_into_libs=yes ++ ++ # Append ld.so.conf contents to the search path ++ if test -f /etc/ld.so.conf; then ++ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` ++ sys_lib_dlsearch_path_spec="/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=qnx ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ dynamic_linker='ldqnx.so' ++ ;; ++ ++openbsd*) ++ version_type=sunos ++ sys_lib_dlsearch_path_spec="/usr/lib" ++ need_lib_prefix=no ++ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. ++ case $host_os in ++ openbsd3.3 | openbsd3.3.*) need_version=yes ;; ++ *) need_version=no ;; ++ esac ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ case $host_os in ++ openbsd2.[[89]] | openbsd2.[[89]].*) ++ shlibpath_overrides_runpath=no ++ ;; ++ *) ++ shlibpath_overrides_runpath=yes ++ ;; ++ esac ++ else ++ shlibpath_overrides_runpath=yes ++ fi ++ ;; ++ ++os2*) ++ libname_spec='$name' ++ shrext_cmds=".dll" ++ need_lib_prefix=no ++ library_names_spec='$libname${shared_ext} $libname.a' ++ dynamic_linker='OS/2 ld.exe' ++ shlibpath_var=LIBPATH ++ ;; ++ ++osf3* | osf4* | osf5*) ++ version_type=osf ++ need_lib_prefix=no ++ need_version=no ++ soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" ++ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ++ ;; ++ ++rdos*) ++ dynamic_linker=no ++ ;; ++ ++solaris*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ # ldd complains unless libraries are executable ++ postinstall_cmds='chmod +x $lib' ++ ;; ++ ++sunos4*) ++ version_type=sunos ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ if test "$with_gnu_ld" = yes; then ++ need_lib_prefix=no ++ fi ++ need_version=yes ++ ;; ++ ++sysv4 | sysv4.3*) ++ version_type=linux ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ case $host_vendor in ++ sni) ++ shlibpath_overrides_runpath=no ++ need_lib_prefix=no ++ runpath_var=LD_RUN_PATH ++ ;; ++ siemens) ++ need_lib_prefix=no ++ ;; ++ motorola) ++ need_lib_prefix=no ++ need_version=no ++ shlibpath_overrides_runpath=no ++ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ++ ;; ++ esac ++ ;; ++ ++sysv4*MP*) ++ if test -d /usr/nec ;then ++ version_type=linux ++ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' ++ soname_spec='$libname${shared_ext}.$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ fi ++ ;; ++ ++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) ++ version_type=freebsd-elf ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ if test "$with_gnu_ld" = yes; then ++ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' ++ else ++ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' ++ case $host_os in ++ sco3.2v5*) ++ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ++ ;; ++ esac ++ fi ++ sys_lib_dlsearch_path_spec='/usr/lib' ++ ;; ++ ++tpf*) ++ # TPF is a cross-target only. Preferred cross-host = GNU/Linux. ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ ;; ++ ++uts4*) ++ version_type=linux ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ ;; ++ ++*) ++ dynamic_linker=no ++ ;; ++esac ++AC_MSG_RESULT([$dynamic_linker]) ++test "$dynamic_linker" = no && can_build_shared=no ++ ++variables_saved_for_relink="PATH $shlibpath_var $runpath_var" ++if test "$GCC" = yes; then ++ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" ++fi ++ ++if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then ++ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" ++fi ++if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then ++ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" ++fi ++ ++_LT_DECL([], [variables_saved_for_relink], [1], ++ [Variables whose values should be saved in libtool wrapper scripts and ++ restored at link time]) ++_LT_DECL([], [need_lib_prefix], [0], ++ [Do we need the "lib" prefix for modules?]) ++_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) ++_LT_DECL([], [version_type], [0], [Library versioning type]) ++_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) ++_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) ++_LT_DECL([], [shlibpath_overrides_runpath], [0], ++ [Is shlibpath searched before the hard-coded library search path?]) ++_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) ++_LT_DECL([], [library_names_spec], [1], ++ [[List of archive names. First name is the real one, the rest are links. ++ The last name is the one that the linker finds with -lNAME]]) ++_LT_DECL([], [soname_spec], [1], ++ [[The coded name of the library, if different from the real name]]) ++_LT_DECL([], [postinstall_cmds], [2], ++ [Command to use after installation of a shared archive]) ++_LT_DECL([], [postuninstall_cmds], [2], ++ [Command to use after uninstallation of a shared archive]) ++_LT_DECL([], [finish_cmds], [2], ++ [Commands used to finish a libtool library installation in a directory]) ++_LT_DECL([], [finish_eval], [1], ++ [[As "finish_cmds", except a single script fragment to be evaled but ++ not shown]]) ++_LT_DECL([], [hardcode_into_libs], [0], ++ [Whether we should hardcode library paths into libraries]) ++_LT_DECL([], [sys_lib_search_path_spec], [2], ++ [Compile-time system search path for libraries]) ++_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], ++ [Run-time system search path for libraries]) ++])# _LT_SYS_DYNAMIC_LINKER ++ ++ ++# _LT_PATH_TOOL_PREFIX(TOOL) ++# -------------------------- ++# find a file program which can recognize shared library ++AC_DEFUN([_LT_PATH_TOOL_PREFIX], ++[m4_require([_LT_DECL_EGREP])dnl ++AC_MSG_CHECKING([for $1]) ++AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, ++[case $MAGIC_CMD in ++[[\\/*] | ?:[\\/]*]) ++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ++ ;; ++*) ++ lt_save_MAGIC_CMD="$MAGIC_CMD" ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++dnl $ac_dummy forces splitting on constant user-supplied paths. ++dnl POSIX.2 word splitting is done only on the output of word expansions, ++dnl not every word. This closes a longstanding sh security hole. ++ ac_dummy="m4_if([$2], , $PATH, [$2])" ++ for ac_dir in $ac_dummy; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$1; then ++ lt_cv_path_MAGIC_CMD="$ac_dir/$1" ++ if test -n "$file_magic_test_file"; then ++ case $deplibs_check_method in ++ "file_magic "*) ++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` ++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | ++ $EGREP "$file_magic_regex" > /dev/null; then ++ : ++ else ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the command libtool uses to detect shared libraries, ++*** $file_magic_cmd, produces output that libtool cannot recognize. ++*** The result is that libtool may fail to recognize shared libraries ++*** as such. This will affect the creation of libtool libraries that ++*** depend on shared libraries, but programs linked with such libtool ++*** libraries will work regardless of this problem. Nevertheless, you ++*** may want to report the problem to your system manager and/or to ++*** bug-libtool@gnu.org ++ ++_LT_EOF ++ fi ;; ++ esac ++ fi ++ break ++ fi ++ done ++ IFS="$lt_save_ifs" ++ MAGIC_CMD="$lt_save_MAGIC_CMD" ++ ;; ++esac]) ++MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++if test -n "$MAGIC_CMD"; then ++ AC_MSG_RESULT($MAGIC_CMD) ++else ++ AC_MSG_RESULT(no) ++fi ++_LT_DECL([], [MAGIC_CMD], [0], ++ [Used to examine libraries when file_magic_cmd begins with "file"])dnl ++])# _LT_PATH_TOOL_PREFIX ++ ++# Old name: ++AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) ++ ++ ++# _LT_PATH_MAGIC ++# -------------- ++# find a file program which can recognize a shared library ++m4_defun([_LT_PATH_MAGIC], ++[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) ++if test -z "$lt_cv_path_MAGIC_CMD"; then ++ if test -n "$ac_tool_prefix"; then ++ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) ++ else ++ MAGIC_CMD=: ++ fi ++fi ++])# _LT_PATH_MAGIC ++ ++ ++# LT_PATH_LD ++# ---------- ++# find the pathname to the GNU or non-GNU linker ++AC_DEFUN([LT_PATH_LD], ++[AC_REQUIRE([AC_PROG_CC])dnl ++AC_REQUIRE([AC_CANONICAL_HOST])dnl ++AC_REQUIRE([AC_CANONICAL_BUILD])dnl ++m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_DECL_EGREP])dnl ++ ++AC_ARG_WITH([gnu-ld], ++ [AS_HELP_STRING([--with-gnu-ld], ++ [assume the C compiler uses GNU ld @<:@default=no@:>@])], ++ [test "$withval" = no || with_gnu_ld=yes], ++ [with_gnu_ld=no])dnl ++ ++ac_prog=ld ++if test "$GCC" = yes; then ++ # Check if gcc -print-prog-name=ld gives a path. ++ AC_MSG_CHECKING([for ld used by $CC]) ++ case $host in ++ *-*-mingw*) ++ # gcc leaves a trailing carriage return which upsets mingw ++ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; ++ *) ++ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; ++ esac ++ case $ac_prog in ++ # Accept absolute paths. ++ [[\\/]]* | ?:[[\\/]]*) ++ re_direlt='/[[^/]][[^/]]*/\.\./' ++ # Canonicalize the pathname of ld ++ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` ++ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ++ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` ++ done ++ test -z "$LD" && LD="$ac_prog" ++ ;; ++ "") ++ # If it fails, then pretend we aren't using GCC. ++ ac_prog=ld ++ ;; ++ *) ++ # If it is relative, then search for the first ld in PATH. ++ with_gnu_ld=unknown ++ ;; ++ esac ++elif test "$with_gnu_ld" = yes; then ++ AC_MSG_CHECKING([for GNU ld]) ++else ++ AC_MSG_CHECKING([for non-GNU ld]) ++fi ++AC_CACHE_VAL(lt_cv_path_LD, ++[if test -z "$LD"; then ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ for ac_dir in $PATH; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then ++ lt_cv_path_LD="$ac_dir/$ac_prog" ++ # Check to see if the program is GNU ld. I'd rather use --version, ++ # but apparently some variants of GNU ld only accept -v. ++ # Break only if it was the GNU/non-GNU ld that we prefer. ++ case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then ++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' ++ lt_cv_file_magic_cmd='func_win32_libid' ++ else ++ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' ++ lt_cv_file_magic_cmd='$OBJDUMP -f' ++ fi ++ ;; ++ ++cegcc) ++ # use the weaker test based on 'objdump'. See mingw*. ++ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' ++ lt_cv_file_magic_cmd='$OBJDUMP -f' ++ ;; ++ ++darwin* | rhapsody*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++freebsd* | dragonfly*) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then ++ case $host_cpu in ++ i*86 ) ++ # Not sure whether the presence of OpenBSD here was a mistake. ++ # Let's accept both of them until this is cleared up. ++ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' ++ lt_cv_file_magic_cmd=/usr/bin/file ++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ++ ;; ++ esac ++ else ++ lt_cv_deplibs_check_method=pass_all ++ fi ++ ;; ++ ++gnu*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++hpux10.20* | hpux11*) ++ lt_cv_file_magic_cmd=/usr/bin/file ++ case $host_cpu in ++ ia64*) ++ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' ++ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ++ ;; ++ hppa*64*) ++ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] ++ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ++ ;; ++ *) ++ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' ++ lt_cv_file_magic_test_file=/usr/lib/libc.sl ++ ;; ++ esac ++ ;; ++ ++interix[[3-9]]*) ++ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ++ ;; ++ ++irix5* | irix6* | nonstopux*) ++ case $LD in ++ *-32|*"-32 ") libmagic=32-bit;; ++ *-n32|*"-n32 ") libmagic=N32;; ++ *-64|*"-64 ") libmagic=64-bit;; ++ *) libmagic=never-match;; ++ esac ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++# This must be Linux ELF. ++linux* | k*bsd*-gnu | kopensolaris*-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=pass_all ++ ;; ++ ++openbsd*) ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' ++ else ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' ++ fi ++ ;; ++ ++osf3* | osf4* | osf5*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++rdos*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++solaris*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++sysv4 | sysv4.3*) ++ case $host_vendor in ++ motorola) ++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' ++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ++ ;; ++ ncr) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ sequent) ++ lt_cv_file_magic_cmd='/bin/file' ++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ++ ;; ++ sni) ++ lt_cv_file_magic_cmd='/bin/file' ++ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" ++ lt_cv_file_magic_test_file=/lib/libc.so ++ ;; ++ siemens) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ pc) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ esac ++ ;; ++ ++tpf*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++esac ++]) ++file_magic_cmd=$lt_cv_file_magic_cmd ++deplibs_check_method=$lt_cv_deplibs_check_method ++test -z "$deplibs_check_method" && deplibs_check_method=unknown ++ ++_LT_DECL([], [deplibs_check_method], [1], ++ [Method to check whether dependent libraries are shared objects]) ++_LT_DECL([], [file_magic_cmd], [1], ++ [Command to use when deplibs_check_method == "file_magic"]) ++])# _LT_CHECK_MAGIC_METHOD ++ ++ ++# LT_PATH_NM ++# ---------- ++# find the pathname to a BSD- or MS-compatible name lister ++AC_DEFUN([LT_PATH_NM], ++[AC_REQUIRE([AC_PROG_CC])dnl ++AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, ++[if test -n "$NM"; then ++ # Let the user override the test. ++ lt_cv_path_NM="$NM" ++else ++ lt_nm_to_check="${ac_tool_prefix}nm" ++ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then ++ lt_nm_to_check="$lt_nm_to_check nm" ++ fi ++ for lt_tmp_nm in $lt_nm_to_check; do ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ tmp_nm="$ac_dir/$lt_tmp_nm" ++ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then ++ # Check to see if the nm accepts a BSD-compat flag. ++ # Adding the `sed 1q' prevents false positives on HP-UX, which says: ++ # nm: unknown option "B" ignored ++ # Tru64's nm complains that /dev/null is an invalid object file ++ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in ++ */dev/null* | *'Invalid file or object type'*) ++ lt_cv_path_NM="$tmp_nm -B" ++ break ++ ;; ++ *) ++ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in ++ */dev/null*) ++ lt_cv_path_NM="$tmp_nm -p" ++ break ++ ;; ++ *) ++ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but ++ continue # so that we can try to find one that supports BSD flags ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ done ++ IFS="$lt_save_ifs" ++ done ++ : ${lt_cv_path_NM=no} ++fi]) ++if test "$lt_cv_path_NM" != "no"; then ++ NM="$lt_cv_path_NM" ++else ++ # Didn't find any BSD compatible name lister, look for dumpbin. ++ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) ++ AC_SUBST([DUMPBIN]) ++ if test "$DUMPBIN" != ":"; then ++ NM="$DUMPBIN" ++ fi ++fi ++test -z "$NM" && NM=nm ++AC_SUBST([NM]) ++_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl ++ ++AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], ++ [lt_cv_nm_interface="BSD nm" ++ echo "int some_variable = 0;" > conftest.$ac_ext ++ (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) ++ (eval "$ac_compile" 2>conftest.err) ++ cat conftest.err >&AS_MESSAGE_LOG_FD ++ (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) ++ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) ++ cat conftest.err >&AS_MESSAGE_LOG_FD ++ (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) ++ cat conftest.out >&AS_MESSAGE_LOG_FD ++ if $GREP 'External.*some_variable' conftest.out > /dev/null; then ++ lt_cv_nm_interface="MS dumpbin" ++ fi ++ rm -f conftest*]) ++])# LT_PATH_NM ++ ++# Old names: ++AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) ++AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AM_PROG_NM], []) ++dnl AC_DEFUN([AC_PROG_NM], []) ++ ++ ++# LT_LIB_M ++# -------- ++# check for math library ++AC_DEFUN([LT_LIB_M], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++LIBM= ++case $host in ++*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) ++ # These system don't have libm, or don't need it ++ ;; ++*-ncr-sysv4.3*) ++ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") ++ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ++ ;; ++*) ++ AC_CHECK_LIB(m, cos, LIBM="-lm") ++ ;; ++esac ++AC_SUBST([LIBM]) ++])# LT_LIB_M ++ ++# Old name: ++AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_CHECK_LIBM], []) ++ ++ ++# _LT_COMPILER_NO_RTTI([TAGNAME]) ++# ------------------------------- ++m4_defun([_LT_COMPILER_NO_RTTI], ++[m4_require([_LT_TAG_COMPILER])dnl ++ ++_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= ++ ++if test "$GCC" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ++ ++ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], ++ lt_cv_prog_compiler_rtti_exceptions, ++ [-fno-rtti -fno-exceptions], [], ++ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) ++fi ++_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], ++ [Compiler flag to turn off builtin functions]) ++])# _LT_COMPILER_NO_RTTI ++ ++ ++# _LT_CMD_GLOBAL_SYMBOLS ++# ---------------------- ++m4_defun([_LT_CMD_GLOBAL_SYMBOLS], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++AC_REQUIRE([AC_PROG_CC])dnl ++AC_REQUIRE([LT_PATH_NM])dnl ++AC_REQUIRE([LT_PATH_LD])dnl ++m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_DECL_EGREP])dnl ++m4_require([_LT_TAG_COMPILER])dnl ++ ++# Check for command to grab the raw symbol name followed by C symbol from nm. ++AC_MSG_CHECKING([command to parse $NM output from $compiler object]) ++AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], ++[ ++# These are sane defaults that work on at least a few old systems. ++# [They come from Ultrix. What could be older than Ultrix?!! ;)] ++ ++# Character class describing NM global symbol codes. ++symcode='[[BCDEGRST]]' ++ ++# Regexp to match symbols that can be accessed directly from C. ++sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' ++ ++# Define system-specific variables. ++case $host_os in ++aix*) ++ symcode='[[BCDT]]' ++ ;; ++cygwin* | mingw* | pw32* | cegcc*) ++ symcode='[[ABCDGISTW]]' ++ ;; ++hpux*) ++ if test "$host_cpu" = ia64; then ++ symcode='[[ABCDEGRST]]' ++ fi ++ ;; ++irix* | nonstopux*) ++ symcode='[[BCDEGRST]]' ++ ;; ++osf*) ++ symcode='[[BCDEGQRST]]' ++ ;; ++solaris*) ++ symcode='[[BDRT]]' ++ ;; ++sco3.2v5*) ++ symcode='[[DT]]' ++ ;; ++sysv4.2uw2*) ++ symcode='[[DT]]' ++ ;; ++sysv5* | sco5v6* | unixware* | OpenUNIX*) ++ symcode='[[ABDT]]' ++ ;; ++sysv4) ++ symcode='[[DFNSTU]]' ++ ;; ++esac ++ ++# If we're using GNU nm, then use its standard symbol codes. ++case `$NM -V 2>&1` in ++*GNU* | *'with BFD'*) ++ symcode='[[ABCDGIRSTW]]' ;; ++esac ++ ++# Transform an extracted symbol line into a proper C declaration. ++# Some systems (esp. on ia64) link data and code symbols differently, ++# so use this general approach. ++lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" ++ ++# Transform an extracted symbol line into symbol name and symbol address ++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" ++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" ++ ++# Handle CRLF in mingw tool chain ++opt_cr= ++case $build_os in ++mingw*) ++ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ++ ;; ++esac ++ ++# Try without a prefix underscore, then with it. ++for ac_symprfx in "" "_"; do ++ ++ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. ++ symxfrm="\\1 $ac_symprfx\\2 \\2" ++ ++ # Write the raw and C identifiers. ++ if test "$lt_cv_nm_interface" = "MS dumpbin"; then ++ # Fake it for dumpbin and say T for any non-static function ++ # and D for any global variable. ++ # Also find C++ and __fastcall symbols from MSVC++, ++ # which start with @ or ?. ++ lt_cv_sys_global_symbol_pipe="$AWK ['"\ ++" {last_section=section; section=\$ 3};"\ ++" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ ++" \$ 0!~/External *\|/{next};"\ ++" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ ++" {if(hide[section]) next};"\ ++" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ ++" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ ++" s[1]~/^[@?]/{print s[1], s[1]; next};"\ ++" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ ++" ' prfx=^$ac_symprfx]" ++ else ++ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" ++ fi ++ ++ # Check to see that the pipe works correctly. ++ pipe_works=no ++ ++ rm -f conftest* ++ cat > conftest.$ac_ext <<_LT_EOF ++#ifdef __cplusplus ++extern "C" { ++#endif ++char nm_test_var; ++void nm_test_func(void); ++void nm_test_func(void){} ++#ifdef __cplusplus ++} ++#endif ++int main(){nm_test_var='a';nm_test_func();return(0);} ++_LT_EOF ++ ++ if AC_TRY_EVAL(ac_compile); then ++ # Now try to grab the symbols. ++ nlist=conftest.nm ++ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then ++ # Try sorting and uniquifying the output. ++ if sort "$nlist" | uniq > "$nlist"T; then ++ mv -f "$nlist"T "$nlist" ++ else ++ rm -f "$nlist"T ++ fi ++ ++ # Make sure that we snagged all the symbols we need. ++ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then ++ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then ++ cat <<_LT_EOF > conftest.$ac_ext ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++_LT_EOF ++ # Now generate the symbol file. ++ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' ++ ++ cat <<_LT_EOF >> conftest.$ac_ext ++ ++/* The mapping between symbol names and symbols. */ ++const struct { ++ const char *name; ++ void *address; ++} ++lt__PROGRAM__LTX_preloaded_symbols[[]] = ++{ ++ { "@PROGRAM@", (void *) 0 }, ++_LT_EOF ++ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext ++ cat <<\_LT_EOF >> conftest.$ac_ext ++ {0, (void *) 0} ++}; ++ ++/* This works around a problem in FreeBSD linker */ ++#ifdef FREEBSD_WORKAROUND ++static const void *lt_preloaded_setup() { ++ return lt__PROGRAM__LTX_preloaded_symbols; ++} ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++_LT_EOF ++ # Now try linking the two files. ++ mv conftest.$ac_objext conftstm.$ac_objext ++ lt_save_LIBS="$LIBS" ++ lt_save_CFLAGS="$CFLAGS" ++ LIBS="conftstm.$ac_objext" ++ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" ++ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then ++ pipe_works=yes ++ fi ++ LIBS="$lt_save_LIBS" ++ CFLAGS="$lt_save_CFLAGS" ++ else ++ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD ++ fi ++ else ++ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD ++ fi ++ else ++ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD ++ fi ++ else ++ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD ++ cat conftest.$ac_ext >&5 ++ fi ++ rm -rf conftest* conftst* ++ ++ # Do not use the global_symbol_pipe unless it works. ++ if test "$pipe_works" = yes; then ++ break ++ else ++ lt_cv_sys_global_symbol_pipe= ++ fi ++done ++]) ++if test -z "$lt_cv_sys_global_symbol_pipe"; then ++ lt_cv_sys_global_symbol_to_cdecl= ++fi ++if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then ++ AC_MSG_RESULT(failed) ++else ++ AC_MSG_RESULT(ok) ++fi ++ ++_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], ++ [Take the output of nm and produce a listing of raw symbols and C names]) ++_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], ++ [Transform the output of nm in a proper C declaration]) ++_LT_DECL([global_symbol_to_c_name_address], ++ [lt_cv_sys_global_symbol_to_c_name_address], [1], ++ [Transform the output of nm in a C name address pair]) ++_LT_DECL([global_symbol_to_c_name_address_lib_prefix], ++ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], ++ [Transform the output of nm in a C name address pair when lib prefix is needed]) ++]) # _LT_CMD_GLOBAL_SYMBOLS ++ ++ ++# _LT_COMPILER_PIC([TAGNAME]) ++# --------------------------- ++m4_defun([_LT_COMPILER_PIC], ++[m4_require([_LT_TAG_COMPILER])dnl ++_LT_TAGVAR(lt_prog_compiler_wl, $1)= ++_LT_TAGVAR(lt_prog_compiler_pic, $1)= ++_LT_TAGVAR(lt_prog_compiler_static, $1)= ++ ++AC_MSG_CHECKING([for $compiler option to produce PIC]) ++m4_if([$1], [CXX], [ ++ # C++ specific cases for pic, static, wl, etc. ++ if test "$GXX" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ++ case $host_os in ++ aix*) ++ # All AIX code is PIC. ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ m68k) ++ # FIXME: we need at least 68020 code to build shared libraries, but ++ # adding the `-m68020' flag to GCC prevents building anything better, ++ # like `-m68040'. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ++ ;; ++ esac ++ ;; ++ ++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) ++ # PIC is the default for these OSes. ++ ;; ++ mingw* | cygwin* | os2* | pw32* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ # Although the cygwin gcc ignores -fPIC, still need this for old-style ++ # (--disable-auto-import) libraries ++ m4_if([$1], [GCJ], [], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ++ ;; ++ darwin* | rhapsody*) ++ # PIC is the default on this platform ++ # Common symbols not allowed in MH_DYLIB files ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ++ ;; ++ *djgpp*) ++ # DJGPP does not support shared libraries at all ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ ;; ++ interix[[3-9]]*) ++ # Interix 3.x gcc -fpic/-fPIC options generate broken code. ++ # Instead, we relocate shared libraries at runtime. ++ ;; ++ sysv4*MP*) ++ if test -d /usr/nec; then ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic ++ fi ++ ;; ++ hpux*) ++ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit ++ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag ++ # sets the default TLS model and affects inlining. ++ case $host_cpu in ++ hppa*64*) ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ esac ++ ;; ++ *qnx* | *nto*) ++ # QNX uses GNU C++, but need to define -shared option too, otherwise ++ # it will coredump. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ esac ++ else ++ case $host_os in ++ aix[[4-9]]*) ++ # All AIX code is PIC. ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ else ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' ++ fi ++ ;; ++ chorus*) ++ case $cc_basename in ++ cxch68*) ++ # Green Hills C++ Compiler ++ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ++ ;; ++ esac ++ ;; ++ dgux*) ++ case $cc_basename in ++ ec++*) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ ;; ++ ghcx*) ++ # Green Hills C++ Compiler ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ freebsd* | dragonfly*) ++ # FreeBSD uses GNU C++ ++ ;; ++ hpux9* | hpux10* | hpux11*) ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ++ if test "$host_cpu" != ia64; then ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ++ fi ++ ;; ++ aCC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ++ case $host_cpu in ++ hppa*64*|ia64*) ++ # +Z the default ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ++ ;; ++ esac ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ interix*) ++ # This is c89, which is MS Visual C++ (no shared libs) ++ # Anyone wants to do a port? ++ ;; ++ irix5* | irix6* | nonstopux*) ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ # CC pic flag -KPIC is the default. ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ case $cc_basename in ++ KCC*) ++ # KAI C++ Compiler ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ ecpc* ) ++ # old Intel C++ for x86_64 which still supported -KPIC. ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ icpc* ) ++ # Intel C++, used to be incompatible with GCC. ++ # ICC 10 doesn't accept -KPIC any more. ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ pgCC* | pgcpp*) ++ # Portland Group C++ compiler ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ cxx*) ++ # Compaq C++ ++ # Make sure the PIC flag is empty. It appears that all Alpha ++ # Linux and Compaq Tru64 Unix objects are PIC. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ xlc* | xlC*) ++ # IBM XL 8.0 on PPC ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ++ ;; ++ *) ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) ++ # Sun C++ 5.9 ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ++ ;; ++ esac ++ ;; ++ esac ++ ;; ++ lynxos*) ++ ;; ++ m88k*) ++ ;; ++ mvs*) ++ case $cc_basename in ++ cxx*) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ netbsd* | netbsdelf*-gnu) ++ ;; ++ *qnx* | *nto*) ++ # QNX uses GNU C++, but need to define -shared option too, otherwise ++ # it will coredump. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ++ ;; ++ osf3* | osf4* | osf5*) ++ case $cc_basename in ++ KCC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ++ ;; ++ RCC*) ++ # Rational C++ 2.4.1 ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ++ ;; ++ cxx*) ++ # Digital/Compaq C++ ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # Make sure the PIC flag is empty. It appears that all Alpha ++ # Linux and Compaq Tru64 Unix objects are PIC. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ psos*) ++ ;; ++ solaris*) ++ case $cc_basename in ++ CC*) ++ # Sun C++ 4.2, 5.x and Centerline C++ ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ++ ;; ++ gcx*) ++ # Green Hills C++ Compiler ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ sunos4*) ++ case $cc_basename in ++ CC*) ++ # Sun C++ 4.x ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ lcc*) ++ # Lucid ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ esac ++ ;; ++ tandem*) ++ case $cc_basename in ++ NCC*) ++ # NonStop-UX NCC 3.20 ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ vxworks*) ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ++ ;; ++ esac ++ fi ++], ++[ ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ++ case $host_os in ++ aix*) ++ # All AIX code is PIC. ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ m68k) ++ # FIXME: we need at least 68020 code to build shared libraries, but ++ # adding the `-m68020' flag to GCC prevents building anything better, ++ # like `-m68040'. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ++ ;; ++ esac ++ ;; ++ ++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) ++ # PIC is the default for these OSes. ++ ;; ++ ++ mingw* | cygwin* | pw32* | os2* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ # Although the cygwin gcc ignores -fPIC, still need this for old-style ++ # (--disable-auto-import) libraries ++ m4_if([$1], [GCJ], [], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ++ ;; ++ ++ darwin* | rhapsody*) ++ # PIC is the default on this platform ++ # Common symbols not allowed in MH_DYLIB files ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ++ ;; ++ ++ hpux*) ++ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit ++ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag ++ # sets the default TLS model and affects inlining. ++ case $host_cpu in ++ hppa*64*) ++ # +Z the default ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ esac ++ ;; ++ ++ interix[[3-9]]*) ++ # Interix 3.x gcc -fpic/-fPIC options generate broken code. ++ # Instead, we relocate shared libraries at runtime. ++ ;; ++ ++ msdosdjgpp*) ++ # Just because we use GCC doesn't mean we suddenly get shared libraries ++ # on systems that don't support them. ++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ++ enable_shared=no ++ ;; ++ ++ *nto* | *qnx*) ++ # QNX uses GNU C++, but need to define -shared option too, otherwise ++ # it will coredump. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ++ ;; ++ ++ sysv4*MP*) ++ if test -d /usr/nec; then ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic ++ fi ++ ;; ++ ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ esac ++ else ++ # PORTME Check for flag to pass linker flags through the system compiler. ++ case $host_os in ++ aix*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ else ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' ++ fi ++ ;; ++ ++ mingw* | cygwin* | pw32* | os2* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ m4_if([$1], [GCJ], [], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ++ ;; ++ ++ hpux9* | hpux10* | hpux11*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but ++ # not for PA HP-UX. ++ case $host_cpu in ++ hppa*64*|ia64*) ++ # +Z the default ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ++ ;; ++ esac ++ # Is there a better lt_prog_compiler_static that works with the bundled CC? ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ++ ;; ++ ++ irix5* | irix6* | nonstopux*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # PIC (with -KPIC) is the default. ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ case $cc_basename in ++ # old Intel for x86_64 which still supported -KPIC. ++ ecc*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ # icc used to be incompatible with GCC. ++ # ICC 10 doesn't accept -KPIC any more. ++ icc* | ifort*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ # Lahey Fortran 8.1. ++ lf95*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ++ ;; ++ pgcc* | pgf77* | pgf90* | pgf95*) ++ # Portland Group compilers (*not* the Pentium gcc compiler, ++ # which looks to be a dead project) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ ccc*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # All Alpha code is PIC. ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ xl*) ++ # IBM XL C 8.0/Fortran 10.1 on PPC ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ++ ;; ++ *) ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) ++ # Sun C 5.9 ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ ;; ++ *Sun\ F*) ++ # Sun Fortran 8.3 passes all unrecognized flags to the linker ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ++ ;; ++ esac ++ ;; ++ esac ++ ;; ++ ++ newsos6) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ ++ *nto* | *qnx*) ++ # QNX uses GNU C++, but need to define -shared option too, otherwise ++ # it will coredump. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ++ ;; ++ ++ osf3* | osf4* | osf5*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # All OSF/1 code is PIC. ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ ++ rdos*) ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ ++ solaris*) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ case $cc_basename in ++ f77* | f90* | f95*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; ++ esac ++ ;; ++ ++ sunos4*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ ++ sysv4 | sysv4.2uw2* | sysv4.3*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ ++ sysv4*MP*) ++ if test -d /usr/nec ;then ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ fi ++ ;; ++ ++ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ ++ unicos*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ++ ;; ++ ++ uts4*) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ ++ *) ++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ++ ;; ++ esac ++ fi ++]) ++case $host_os in ++ # For platforms which do not support PIC, -DPIC is meaningless: ++ *djgpp*) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ++ ;; ++esac ++AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) ++_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], ++ [How to pass a linker flag through the compiler]) ++ ++# ++# Check to make sure the PIC flag actually works. ++# ++if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then ++ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], ++ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], ++ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], ++ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in ++ "" | " "*) ;; ++ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; ++ esac], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) ++fi ++_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], ++ [Additional compiler flags for building library objects]) ++ ++# ++# Check to make sure the static flag actually works. ++# ++wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" ++_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], ++ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), ++ $lt_tmp_static_flag, ++ [], ++ [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) ++_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], ++ [Compiler flag to prevent dynamic linking]) ++])# _LT_COMPILER_PIC ++ ++ ++# _LT_LINKER_SHLIBS([TAGNAME]) ++# ---------------------------- ++# See if the linker supports building shared libraries. ++m4_defun([_LT_LINKER_SHLIBS], ++[AC_REQUIRE([LT_PATH_LD])dnl ++AC_REQUIRE([LT_PATH_NM])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_EGREP])dnl ++m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl ++m4_require([_LT_TAG_COMPILER])dnl ++AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ++m4_if([$1], [CXX], [ ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ++ case $host_os in ++ aix[[4-9]]*) ++ # If we're using GNU nm, then we don't want the "-C" option. ++ # -C means demangle to AIX nm, but means don't demangle with GNU nm ++ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ else ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ fi ++ ;; ++ pw32*) ++ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ++ ;; ++ cygwin* | mingw* | cegcc*) ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ++ ;; ++ linux* | k*bsd*-gnu) ++ _LT_TAGVAR(link_all_deplibs, $1)=no ++ ;; ++ *) ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ++ ;; ++ esac ++ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ++], [ ++ runpath_var= ++ _LT_TAGVAR(allow_undefined_flag, $1)= ++ _LT_TAGVAR(always_export_symbols, $1)=no ++ _LT_TAGVAR(archive_cmds, $1)= ++ _LT_TAGVAR(archive_expsym_cmds, $1)= ++ _LT_TAGVAR(compiler_needs_object, $1)=no ++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)= ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ++ _LT_TAGVAR(hardcode_automatic, $1)=no ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= ++ _LT_TAGVAR(hardcode_libdir_separator, $1)= ++ _LT_TAGVAR(hardcode_minus_L, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported ++ _LT_TAGVAR(inherit_rpath, $1)=no ++ _LT_TAGVAR(link_all_deplibs, $1)=unknown ++ _LT_TAGVAR(module_cmds, $1)= ++ _LT_TAGVAR(module_expsym_cmds, $1)= ++ _LT_TAGVAR(old_archive_from_new_cmds, $1)= ++ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= ++ _LT_TAGVAR(thread_safe_flag_spec, $1)= ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ # include_expsyms should be a list of space-separated symbols to be *always* ++ # included in the symbol list ++ _LT_TAGVAR(include_expsyms, $1)= ++ # exclude_expsyms can be an extended regexp of symbols to exclude ++ # it will be wrapped by ` (' and `)$', so one must not match beginning or ++ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', ++ # as well as any symbol that contains `d'. ++ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ++ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out ++ # platforms (ab)use it in PIC code, but their linkers get confused if ++ # the symbol is explicitly referenced. Since portable code cannot ++ # rely on this symbol name, it's probably fine to never include it in ++ # preloaded symbol tables. ++ # Exclude shared library initialization/finalization symbols. ++dnl Note also adjust exclude_expsyms for C++ above. ++ extract_expsyms_cmds= ++ ++ case $host_os in ++ cygwin* | mingw* | pw32* | cegcc*) ++ # FIXME: the MSVC++ port hasn't been tested in a loooong time ++ # When not using gcc, we currently assume that we are using ++ # Microsoft Visual C++. ++ if test "$GCC" != yes; then ++ with_gnu_ld=no ++ fi ++ ;; ++ interix*) ++ # we just hope/assume this is gcc and not c89 (= MSVC++) ++ with_gnu_ld=yes ++ ;; ++ openbsd*) ++ with_gnu_ld=no ++ ;; ++ linux* | k*bsd*-gnu) ++ _LT_TAGVAR(link_all_deplibs, $1)=no ++ ;; ++ esac ++ ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ if test "$with_gnu_ld" = yes; then ++ # If archive_cmds runs LD, not CC, wlarc should be empty ++ wlarc='${wl}' ++ ++ # Set some defaults for GNU ld with shared library support. These ++ # are reset later if shared libraries are not supported. Putting them ++ # here allows them to be overridden if necessary. ++ runpath_var=LD_RUN_PATH ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ # ancient GNU ld didn't support --whole-archive et. al. ++ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then ++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' ++ else ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ fi ++ supports_anon_versioning=no ++ case `$LD -v 2>&1` in ++ *GNU\ gold*) supports_anon_versioning=yes ;; ++ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 ++ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... ++ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... ++ *\ 2.11.*) ;; # other 2.11 versions ++ *) supports_anon_versioning=yes ;; ++ esac ++ ++ # See if GNU ld supports shared libraries. ++ case $host_os in ++ aix[[3-9]]*) ++ # On AIX/PPC, the GNU linker is very broken ++ if test "$host_cpu" != ia64; then ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the GNU linker, at least up to release 2.9.1, is reported ++*** to be unable to reliably create shared libraries on AIX. ++*** Therefore, libtool is disabling shared libraries support. If you ++*** really care for shared libraries, you may want to modify your PATH ++*** so that a non-GNU linker is found, and then restart. ++ ++_LT_EOF ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='' ++ ;; ++ m68k) ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ ;; ++ esac ++ ;; ++ ++ beos*) ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ # Joseph Beckenbach says some releases of gcc ++ # support --undefined. This deserves some investigation. FIXME ++ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ cygwin* | mingw* | pw32* | cegcc*) ++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, ++ # as there is no search path for DLLs. ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ _LT_TAGVAR(always_export_symbols, $1)=no ++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' ++ ++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ # If the export-symbols file already is a .def file (1st line ++ # is EXPORTS), use it as is; otherwise, prepend... ++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ cp $export_symbols $output_objdir/$soname.def; ++ else ++ echo EXPORTS > $output_objdir/$soname.def; ++ cat $export_symbols >> $output_objdir/$soname.def; ++ fi~ ++ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ interix[[3-9]]*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. ++ # Instead, shared libraries are loaded at an image base (0x10000000 by ++ # default) and relocated if they conflict, which is a slow very memory ++ # consuming and fragmenting process. To avoid this, we pick a random, ++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link ++ # time. Moving up from 0x10000000 also allows more sbrk(2) space. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ ;; ++ ++ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) ++ tmp_diet=no ++ if test "$host_os" = linux-dietlibc; then ++ case $cc_basename in ++ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) ++ esac ++ fi ++ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ ++ && test "$tmp_diet" = no ++ then ++ tmp_addflag= ++ tmp_sharedflag='-shared' ++ case $cc_basename,$host_cpu in ++ pgcc*) # Portland Group C compiler ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ++ tmp_addflag=' $pic_flag' ++ ;; ++ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ++ tmp_addflag=' $pic_flag -Mnomain' ;; ++ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 ++ tmp_addflag=' -i_dynamic' ;; ++ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 ++ tmp_addflag=' -i_dynamic -nofor_main' ;; ++ ifc* | ifort*) # Intel Fortran compiler ++ tmp_addflag=' -nofor_main' ;; ++ lf95*) # Lahey Fortran 8.1 ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ tmp_sharedflag='--shared' ;; ++ xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) ++ tmp_sharedflag='-qmkshrobj' ++ tmp_addflag= ;; ++ esac ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) # Sun C 5.9 ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ++ _LT_TAGVAR(compiler_needs_object, $1)=yes ++ tmp_sharedflag='-G' ;; ++ *Sun\ F*) # Sun Fortran 8.3 ++ tmp_sharedflag='-G' ;; ++ esac ++ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ ++ if test "x$supports_anon_versioning" = xyes; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' ++ fi ++ ++ case $cc_basename in ++ xlf*) ++ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' ++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' ++ if test "x$supports_anon_versioning" = xyes; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' ++ fi ++ ;; ++ esac ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' ++ wlarc= ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ fi ++ ;; ++ ++ solaris*) ++ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: The releases 2.8.* of the GNU linker cannot reliably ++*** create shared libraries on Solaris systems. Therefore, libtool ++*** is disabling shared libraries support. We urge you to upgrade GNU ++*** binutils to release 2.9.1 or newer. Another option is to modify ++*** your PATH or compiler configuration so that the native linker is ++*** used, and then restart. ++ ++_LT_EOF ++ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) ++ case `$LD -v 2>&1` in ++ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not ++*** reliably create shared libraries on SCO systems. Therefore, libtool ++*** is disabling shared libraries support. We urge you to upgrade GNU ++*** binutils to release 2.16.91.0.3 or newer. Another option is to modify ++*** your PATH or compiler configuration so that the native linker is ++*** used, and then restart. ++ ++_LT_EOF ++ ;; ++ *) ++ # For security reasons, it is highly recommended that you always ++ # use absolute paths for naming shared libraries, and exclude the ++ # DT_RUNPATH tag from executables and libraries. But doing so ++ # requires that you compile everything twice, which is a pain. ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ sunos4*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ wlarc= ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ *) ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ++ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then ++ runpath_var= ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)= ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ fi ++ else ++ # PORTME fill in a description of your system's linker (not GNU ld) ++ case $host_os in ++ aix3*) ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ _LT_TAGVAR(always_export_symbols, $1)=yes ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' ++ # Note: this linker hardcodes the directories in LIBPATH if there ++ # are no directories specified by -L. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then ++ # Neither direct hardcoding nor static linking is supported with a ++ # broken collect2. ++ _LT_TAGVAR(hardcode_direct, $1)=unsupported ++ fi ++ ;; ++ ++ aix[[4-9]]*) ++ if test "$host_cpu" = ia64; then ++ # On IA64, the linker does run time linking by default, so we don't ++ # have to do anything special. ++ aix_use_runtimelinking=no ++ exp_sym_flag='-Bexport' ++ no_entry_flag="" ++ else ++ # If we're using GNU nm, then we don't want the "-C" option. ++ # -C means demangle to AIX nm, but means don't demangle with GNU nm ++ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ else ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ fi ++ aix_use_runtimelinking=no ++ ++ # Test if we are trying to use run time linking or normal ++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we ++ # need to do runtime linking. ++ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) ++ for ld_flag in $LDFLAGS; do ++ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then ++ aix_use_runtimelinking=yes ++ break ++ fi ++ done ++ ;; ++ esac ++ ++ exp_sym_flag='-bexport' ++ no_entry_flag='-bnoentry' ++ fi ++ ++ # When large executables or shared objects are built, AIX ld can ++ # have problems creating the table of contents. If linking a library ++ # or program results in "error TOC overflow" add -mminimal-toc to ++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not ++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. ++ ++ _LT_TAGVAR(archive_cmds, $1)='' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' ++ ++ if test "$GCC" = yes; then ++ case $host_os in aix4.[[012]]|aix4.[[012]].*) ++ # We only want to do this on AIX 4.2 and lower, the check ++ # below for broken collect2 doesn't work under 4.3+ ++ collect2name=`${CC} -print-prog-name=collect2` ++ if test -f "$collect2name" && ++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null ++ then ++ # We have reworked collect2 ++ : ++ else ++ # We have old collect2 ++ _LT_TAGVAR(hardcode_direct, $1)=unsupported ++ # It fails to find uninstalled libraries when the uninstalled ++ # path is not listed in the libpath. Setting hardcode_minus_L ++ # to unsupported forces relinking ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)= ++ fi ++ ;; ++ esac ++ shared_flag='-shared' ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag="$shared_flag "'${wl}-G' ++ fi ++ _LT_TAGVAR(link_all_deplibs, $1)=no ++ else ++ # not using gcc ++ if test "$host_cpu" = ia64; then ++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release ++ # chokes on -Wl,-G. The following line is correct: ++ shared_flag='-G' ++ else ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag='${wl}-G' ++ else ++ shared_flag='${wl}-bM:SRE' ++ fi ++ fi ++ fi ++ ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' ++ # It seems that -bexpall does not export symbols beginning with ++ # underscore (_), so it is better to generate a list of symbols to export. ++ _LT_TAGVAR(always_export_symbols, $1)=yes ++ if test "$aix_use_runtimelinking" = yes; then ++ # Warning - without using the other runtime loading flags (-brtl), ++ # -berok will link without error, but may produce a broken library. ++ _LT_TAGVAR(allow_undefined_flag, $1)='-berok' ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ _LT_SYS_MODULE_PATH_AIX ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" ++ else ++ if test "$host_cpu" = ia64; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' ++ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" ++ else ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ _LT_SYS_MODULE_PATH_AIX ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" ++ # Warning - without using the other run time loading flags, ++ # -berok will link without error, but may produce a broken library. ++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' ++ # Exported symbols can be pulled into shared objects from archives ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes ++ # This is similar to how AIX traditionally builds its shared libraries. ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' ++ fi ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='' ++ ;; ++ m68k) ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ ;; ++ esac ++ ;; ++ ++ bsdi[[45]]*) ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ++ ;; ++ ++ cygwin* | mingw* | pw32* | cegcc*) ++ # When not using gcc, we currently assume that we are using ++ # Microsoft Visual C++. ++ # hardcode_libdir_flag_spec is actually meaningless, as there is ++ # no search path for DLLs. ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ # Tell ltmain to make .lib files, not .a files. ++ libext=lib ++ # Tell ltmain to make .dll files, not .so files. ++ shrext_cmds=".dll" ++ # FIXME: Setting linknames here is a bad hack. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' ++ # The linker will automatically build a .lib file if we build a DLL. ++ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' ++ # FIXME: Should let the user specify the lib program. ++ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' ++ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' ++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ++ ;; ++ ++ darwin* | rhapsody*) ++ _LT_DARWIN_LINKER_FEATURES($1) ++ ;; ++ ++ dgux*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ freebsd1*) ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor ++ # support. Future versions do this automatically, but an explicit c++rt0.o ++ # does not break anything, and helps significantly (at the cost of a little ++ # extra space). ++ freebsd2.2*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ # Unfortunately, older versions of FreeBSD 2 do not have this feature. ++ freebsd2*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ # FreeBSD 3 and greater uses gcc -shared to do shared libraries. ++ freebsd* | dragonfly*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ hpux9*) ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ ;; ++ ++ hpux10*) ++ if test "$GCC" = yes -a "$with_gnu_ld" = no; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ++ fi ++ if test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ fi ++ ;; ++ ++ hpux11*) ++ if test "$GCC" = yes -a "$with_gnu_ld" = no; then ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ esac ++ else ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ esac ++ fi ++ if test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ case $host_cpu in ++ hppa*64*|ia64*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ *) ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ ;; ++ esac ++ fi ++ ;; ++ ++ irix5* | irix6* | nonstopux*) ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ # Try to use the -exported_symbol ld option, if it does not ++ # work, assume that -exports_file does not work either and ++ # implicitly export all symbols. ++ save_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" ++ AC_LINK_IFELSE(int foo(void) {}, ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ++ ) ++ LDFLAGS="$save_LDFLAGS" ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' ++ fi ++ _LT_TAGVAR(archive_cmds_need_lc, $1)='no' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(inherit_rpath, $1)=yes ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ ;; ++ ++ netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ newsos6) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ *nto* | *qnx*) ++ ;; ++ ++ openbsd*) ++ if test -f /usr/libexec/ld.so; then ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ else ++ case $host_os in ++ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ ;; ++ esac ++ fi ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ os2*) ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' ++ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ++ ;; ++ ++ osf3*) ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ else ++ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' ++ fi ++ _LT_TAGVAR(archive_cmds_need_lc, $1)='no' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ;; ++ ++ osf4* | osf5*) # as osf3* with the addition of -msym flag ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ else ++ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ ++ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' ++ ++ # Both c and cxx compiler support -rpath directly ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ++ fi ++ _LT_TAGVAR(archive_cmds_need_lc, $1)='no' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ;; ++ ++ solaris*) ++ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' ++ if test "$GCC" = yes; then ++ wlarc='${wl}' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ++ else ++ case `$CC -V 2>&1` in ++ *"Compilers 5.0"*) ++ wlarc='' ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ++ ;; ++ *) ++ wlarc='${wl}' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ++ ;; ++ esac ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ case $host_os in ++ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; ++ *) ++ # The compiler driver will combine and reorder linker options, ++ # but understands `-z linker_flag'. GCC discards it without `$wl', ++ # but is careful enough not to reorder. ++ # Supported since Solaris 2.6 (maybe 2.5.1?) ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ++ else ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ++ fi ++ ;; ++ esac ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ ;; ++ ++ sunos4*) ++ if test "x$host_vendor" = xsequent; then ++ # Use $CC to link under sequent, because it throws in some extra .o ++ # files that make .init and .fini sections work. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ sysv4) ++ case $host_vendor in ++ sni) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ++ ;; ++ siemens) ++ ## LD is ld it makes a PLAMLIB ++ ## CC just makes a GrossModule. ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ ;; ++ motorola) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ++ ;; ++ esac ++ runpath_var='LD_RUN_PATH' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ sysv4.3*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ++ ;; ++ ++ sysv4*MP*) ++ if test -d /usr/nec; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ runpath_var=LD_RUN_PATH ++ hardcode_runpath_var=yes ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ fi ++ ;; ++ ++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ runpath_var='LD_RUN_PATH' ++ ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ fi ++ ;; ++ ++ sysv5* | sco3.2v5* | sco5v6*) ++ # Note: We can NOT use -z defs as we might desire, because we do not ++ # link with -lc, and that would cause any symbols used from libc to ++ # always be unresolved, which means just about no library would ++ # ever link correctly. If we're not using GNU ld we use -z text ++ # though, which does catch some bad symbols but isn't as heavy-handed ++ # as -z defs. ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' ++ runpath_var='LD_RUN_PATH' ++ ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ fi ++ ;; ++ ++ uts4*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ *) ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ++ if test x$host_vendor = xsni; then ++ case $host in ++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ++ ;; ++ esac ++ fi ++ fi ++]) ++AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) ++test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no ++ ++_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld ++ ++_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl ++_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl ++_LT_DECL([], [extract_expsyms_cmds], [2], ++ [The commands to extract the exported symbol list from a shared archive]) ++ ++# ++# Do we need to explicitly link libc? ++# ++case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in ++x|xyes) ++ # Assume -lc should be added ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes ++ ++ if test "$enable_shared" = yes && test "$GCC" = yes; then ++ case $_LT_TAGVAR(archive_cmds, $1) in ++ *'~'*) ++ # FIXME: we may have to deal with multi-command sequences. ++ ;; ++ '$CC '*) ++ # Test whether the compiler implicitly links with -lc since on some ++ # systems, -lgcc has to come before -lc. If gcc already passes -lc ++ # to ld, don't add -lc before -lgcc. ++ AC_MSG_CHECKING([whether -lc should be explicitly linked in]) ++ $RM conftest* ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ ++ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then ++ soname=conftest ++ lib=conftest ++ libobjs=conftest.$ac_objext ++ deplibs= ++ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) ++ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) ++ compiler_flags=-v ++ linker_flags=-v ++ verstring= ++ output_objdir=. ++ libname=conftest ++ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) ++ _LT_TAGVAR(allow_undefined_flag, $1)= ++ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) ++ then ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ else ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes ++ fi ++ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag ++ else ++ cat conftest.err 1>&5 ++ fi ++ $RM conftest* ++ AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) ++ ;; ++ esac ++ fi ++ ;; ++esac ++ ++_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], ++ [Whether or not to add -lc for building shared libraries]) ++_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], ++ [enable_shared_with_static_runtimes], [0], ++ [Whether or not to disallow shared libs when runtime libs are static]) ++_LT_TAGDECL([], [export_dynamic_flag_spec], [1], ++ [Compiler flag to allow reflexive dlopens]) ++_LT_TAGDECL([], [whole_archive_flag_spec], [1], ++ [Compiler flag to generate shared objects directly from archives]) ++_LT_TAGDECL([], [compiler_needs_object], [1], ++ [Whether the compiler copes with passing no objects directly]) ++_LT_TAGDECL([], [old_archive_from_new_cmds], [2], ++ [Create an old-style archive from a shared archive]) ++_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], ++ [Create a temporary old-style archive to link instead of a shared archive]) ++_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) ++_LT_TAGDECL([], [archive_expsym_cmds], [2]) ++_LT_TAGDECL([], [module_cmds], [2], ++ [Commands used to build a loadable module if different from building ++ a shared archive.]) ++_LT_TAGDECL([], [module_expsym_cmds], [2]) ++_LT_TAGDECL([], [with_gnu_ld], [1], ++ [Whether we are building with GNU ld or not]) ++_LT_TAGDECL([], [allow_undefined_flag], [1], ++ [Flag that allows shared libraries with undefined symbols to be built]) ++_LT_TAGDECL([], [no_undefined_flag], [1], ++ [Flag that enforces no undefined symbols]) ++_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], ++ [Flag to hardcode $libdir into a binary during linking. ++ This must work even if $libdir does not exist]) ++_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], ++ [[If ld is used when linking, flag to hardcode $libdir into a binary ++ during linking. This must work even if $libdir does not exist]]) ++_LT_TAGDECL([], [hardcode_libdir_separator], [1], ++ [Whether we need a single "-rpath" flag with a separated argument]) ++_LT_TAGDECL([], [hardcode_direct], [0], ++ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes ++ DIR into the resulting binary]) ++_LT_TAGDECL([], [hardcode_direct_absolute], [0], ++ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes ++ DIR into the resulting binary and the resulting library dependency is ++ "absolute", i.e impossible to change by setting ${shlibpath_var} if the ++ library is relocated]) ++_LT_TAGDECL([], [hardcode_minus_L], [0], ++ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR ++ into the resulting binary]) ++_LT_TAGDECL([], [hardcode_shlibpath_var], [0], ++ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR ++ into the resulting binary]) ++_LT_TAGDECL([], [hardcode_automatic], [0], ++ [Set to "yes" if building a shared library automatically hardcodes DIR ++ into the library and all subsequent libraries and executables linked ++ against it]) ++_LT_TAGDECL([], [inherit_rpath], [0], ++ [Set to yes if linker adds runtime paths of dependent libraries ++ to runtime path list]) ++_LT_TAGDECL([], [link_all_deplibs], [0], ++ [Whether libtool must link a program against all its dependency libraries]) ++_LT_TAGDECL([], [fix_srcfile_path], [1], ++ [Fix the shell variable $srcfile for the compiler]) ++_LT_TAGDECL([], [always_export_symbols], [0], ++ [Set to "yes" if exported symbols are required]) ++_LT_TAGDECL([], [export_symbols_cmds], [2], ++ [The commands to list exported symbols]) ++_LT_TAGDECL([], [exclude_expsyms], [1], ++ [Symbols that should not be listed in the preloaded symbols]) ++_LT_TAGDECL([], [include_expsyms], [1], ++ [Symbols that must always be exported]) ++_LT_TAGDECL([], [prelink_cmds], [2], ++ [Commands necessary for linking programs (against libraries) with templates]) ++_LT_TAGDECL([], [file_list_spec], [1], ++ [Specify filename containing input files]) ++dnl FIXME: Not yet implemented ++dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], ++dnl [Compiler flag to generate thread safe objects]) ++])# _LT_LINKER_SHLIBS ++ ++ ++# _LT_LANG_C_CONFIG([TAG]) ++# ------------------------ ++# Ensure that the configuration variables for a C compiler are suitably ++# defined. These variables are subsequently used by _LT_CONFIG to write ++# the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_C_CONFIG], ++[m4_require([_LT_DECL_EGREP])dnl ++lt_save_CC="$CC" ++AC_LANG_PUSH(C) ++ ++# Source file extension for C test sources. ++ac_ext=c ++ ++# Object file extension for compiled C test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# Code to be used in simple compile tests ++lt_simple_compile_test_code="int some_variable = 0;" ++ ++# Code to be used in simple link tests ++lt_simple_link_test_code='int main(){return(0);}' ++ ++_LT_TAG_COMPILER ++# Save the default compiler, since it gets overwritten when the other ++# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. ++compiler_DEFAULT=$CC ++ ++# save warnings/boilerplate of simple test code ++_LT_COMPILER_BOILERPLATE ++_LT_LINKER_BOILERPLATE ++ ++if test -n "$compiler"; then ++ _LT_COMPILER_NO_RTTI($1) ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ LT_SYS_DLOPEN_SELF ++ _LT_CMD_STRIPLIB ++ ++ # Report which library types will actually be built ++ AC_MSG_CHECKING([if libtool supports shared libraries]) ++ AC_MSG_RESULT([$can_build_shared]) ++ ++ AC_MSG_CHECKING([whether to build shared libraries]) ++ test "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ ++ aix[[4-9]]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$enable_shared]) ++ ++ AC_MSG_CHECKING([whether to build static libraries]) ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ AC_MSG_RESULT([$enable_static]) ++ ++ _LT_CONFIG($1) ++fi ++AC_LANG_POP ++CC="$lt_save_CC" ++])# _LT_LANG_C_CONFIG ++ ++ ++# _LT_PROG_CXX ++# ------------ ++# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ ++# compiler, we have our own version here. ++m4_defun([_LT_PROG_CXX], ++[ ++pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) ++AC_PROG_CXX ++if test -n "$CXX" && ( test "X$CXX" != "Xno" && ++ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || ++ (test "X$CXX" != "Xg++"))) ; then ++ AC_PROG_CXXCPP ++else ++ _lt_caught_CXX_error=yes ++fi ++popdef([AC_MSG_ERROR]) ++])# _LT_PROG_CXX ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([_LT_PROG_CXX], []) ++ ++ ++# _LT_LANG_CXX_CONFIG([TAG]) ++# -------------------------- ++# Ensure that the configuration variables for a C++ compiler are suitably ++# defined. These variables are subsequently used by _LT_CONFIG to write ++# the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_CXX_CONFIG], ++[AC_REQUIRE([_LT_PROG_CXX])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_EGREP])dnl ++ ++AC_LANG_PUSH(C++) ++_LT_TAGVAR(archive_cmds_need_lc, $1)=no ++_LT_TAGVAR(allow_undefined_flag, $1)= ++_LT_TAGVAR(always_export_symbols, $1)=no ++_LT_TAGVAR(archive_expsym_cmds, $1)= ++_LT_TAGVAR(compiler_needs_object, $1)=no ++_LT_TAGVAR(export_dynamic_flag_spec, $1)= ++_LT_TAGVAR(hardcode_direct, $1)=no ++_LT_TAGVAR(hardcode_direct_absolute, $1)=no ++_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= ++_LT_TAGVAR(hardcode_libdir_separator, $1)= ++_LT_TAGVAR(hardcode_minus_L, $1)=no ++_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported ++_LT_TAGVAR(hardcode_automatic, $1)=no ++_LT_TAGVAR(inherit_rpath, $1)=no ++_LT_TAGVAR(module_cmds, $1)= ++_LT_TAGVAR(module_expsym_cmds, $1)= ++_LT_TAGVAR(link_all_deplibs, $1)=unknown ++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ++_LT_TAGVAR(no_undefined_flag, $1)= ++_LT_TAGVAR(whole_archive_flag_spec, $1)= ++_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no ++ ++# Source file extension for C++ test sources. ++ac_ext=cpp ++ ++# Object file extension for compiled C++ test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# No sense in running all these tests if we already determined that ++# the CXX compiler isn't working. Some variables (like enable_shared) ++# are currently assumed to apply to all compilers on this platform, ++# and will be corrupted by setting them based on a non-working compiler. ++if test "$_lt_caught_CXX_error" != yes; then ++ # Code to be used in simple compile tests ++ lt_simple_compile_test_code="int some_variable = 0;" ++ ++ # Code to be used in simple link tests ++ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' ++ ++ # ltmain only uses $CC for tagged configurations so make sure $CC is set. ++ _LT_TAG_COMPILER ++ ++ # save warnings/boilerplate of simple test code ++ _LT_COMPILER_BOILERPLATE ++ _LT_LINKER_BOILERPLATE ++ ++ # Allow CC to be a program name with arguments. ++ lt_save_CC=$CC ++ lt_save_LD=$LD ++ lt_save_GCC=$GCC ++ GCC=$GXX ++ lt_save_with_gnu_ld=$with_gnu_ld ++ lt_save_path_LD=$lt_cv_path_LD ++ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then ++ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx ++ else ++ $as_unset lt_cv_prog_gnu_ld ++ fi ++ if test -n "${lt_cv_path_LDCXX+set}"; then ++ lt_cv_path_LD=$lt_cv_path_LDCXX ++ else ++ $as_unset lt_cv_path_LD ++ fi ++ test -z "${LDCXX+set}" || LD=$LDCXX ++ CC=${CXX-"c++"} ++ compiler=$CC ++ _LT_TAGVAR(compiler, $1)=$CC ++ _LT_CC_BASENAME([$compiler]) ++ ++ if test -n "$compiler"; then ++ # We don't want -fno-exception when compiling C++ code, so set the ++ # no_builtin_flag separately ++ if test "$GXX" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ++ else ++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= ++ fi ++ ++ if test "$GXX" = yes; then ++ # Set up default GNU C++ configuration ++ ++ LT_PATH_LD ++ ++ # Check if GNU C++ uses GNU ld as the underlying linker, since the ++ # archiving commands below assume that GNU ld is being used. ++ if test "$with_gnu_ld" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ ++ # If archive_cmds runs LD, not CC, wlarc should be empty ++ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to ++ # investigate it a little bit more. (MM) ++ wlarc='${wl}' ++ ++ # ancient GNU ld didn't support --whole-archive et. al. ++ if eval "`$CC -print-prog-name=ld` --help 2>&1" | ++ $GREP 'no-whole-archive' > /dev/null; then ++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' ++ else ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ fi ++ else ++ with_gnu_ld=no ++ wlarc= ++ ++ # A generic and very simple default shared library creation ++ # command for GNU C++ for the case where it uses the native ++ # linker, instead of GNU ld. If possible, this setting should ++ # overridden to take advantage of the native linker features on ++ # the platform it is being used on. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' ++ fi ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' ++ ++ else ++ GXX=no ++ with_gnu_ld=no ++ wlarc= ++ fi ++ ++ # PORTME: fill in a description of your system's C++ link characteristics ++ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ case $host_os in ++ aix3*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ aix[[4-9]]*) ++ if test "$host_cpu" = ia64; then ++ # On IA64, the linker does run time linking by default, so we don't ++ # have to do anything special. ++ aix_use_runtimelinking=no ++ exp_sym_flag='-Bexport' ++ no_entry_flag="" ++ else ++ aix_use_runtimelinking=no ++ ++ # Test if we are trying to use run time linking or normal ++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we ++ # need to do runtime linking. ++ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) ++ for ld_flag in $LDFLAGS; do ++ case $ld_flag in ++ *-brtl*) ++ aix_use_runtimelinking=yes ++ break ++ ;; ++ esac ++ done ++ ;; ++ esac ++ ++ exp_sym_flag='-bexport' ++ no_entry_flag='-bnoentry' ++ fi ++ ++ # When large executables or shared objects are built, AIX ld can ++ # have problems creating the table of contents. If linking a library ++ # or program results in "error TOC overflow" add -mminimal-toc to ++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not ++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. ++ ++ _LT_TAGVAR(archive_cmds, $1)='' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' ++ ++ if test "$GXX" = yes; then ++ case $host_os in aix4.[[012]]|aix4.[[012]].*) ++ # We only want to do this on AIX 4.2 and lower, the check ++ # below for broken collect2 doesn't work under 4.3+ ++ collect2name=`${CC} -print-prog-name=collect2` ++ if test -f "$collect2name" && ++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null ++ then ++ # We have reworked collect2 ++ : ++ else ++ # We have old collect2 ++ _LT_TAGVAR(hardcode_direct, $1)=unsupported ++ # It fails to find uninstalled libraries when the uninstalled ++ # path is not listed in the libpath. Setting hardcode_minus_L ++ # to unsupported forces relinking ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)= ++ fi ++ esac ++ shared_flag='-shared' ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag="$shared_flag "'${wl}-G' ++ fi ++ else ++ # not using gcc ++ if test "$host_cpu" = ia64; then ++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release ++ # chokes on -Wl,-G. The following line is correct: ++ shared_flag='-G' ++ else ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag='${wl}-G' ++ else ++ shared_flag='${wl}-bM:SRE' ++ fi ++ fi ++ fi ++ ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' ++ # It seems that -bexpall does not export symbols beginning with ++ # underscore (_), so it is better to generate a list of symbols to ++ # export. ++ _LT_TAGVAR(always_export_symbols, $1)=yes ++ if test "$aix_use_runtimelinking" = yes; then ++ # Warning - without using the other runtime loading flags (-brtl), ++ # -berok will link without error, but may produce a broken library. ++ _LT_TAGVAR(allow_undefined_flag, $1)='-berok' ++ # Determine the default libpath from the value encoded in an empty ++ # executable. ++ _LT_SYS_MODULE_PATH_AIX ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" ++ ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" ++ else ++ if test "$host_cpu" = ia64; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' ++ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" ++ else ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ _LT_SYS_MODULE_PATH_AIX ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" ++ # Warning - without using the other run time loading flags, ++ # -berok will link without error, but may produce a broken library. ++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' ++ # Exported symbols can be pulled into shared objects from archives ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes ++ # This is similar to how AIX traditionally builds its shared ++ # libraries. ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' ++ fi ++ fi ++ ;; ++ ++ beos*) ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ # Joseph Beckenbach says some releases of gcc ++ # support --undefined. This deserves some investigation. FIXME ++ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ chorus*) ++ case $cc_basename in ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ cygwin* | mingw* | pw32* | cegcc*) ++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, ++ # as there is no search path for DLLs. ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ _LT_TAGVAR(always_export_symbols, $1)=no ++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ++ ++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ # If the export-symbols file already is a .def file (1st line ++ # is EXPORTS), use it as is; otherwise, prepend... ++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ cp $export_symbols $output_objdir/$soname.def; ++ else ++ echo EXPORTS > $output_objdir/$soname.def; ++ cat $export_symbols >> $output_objdir/$soname.def; ++ fi~ ++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ darwin* | rhapsody*) ++ _LT_DARWIN_LINKER_FEATURES($1) ++ ;; ++ ++ dgux*) ++ case $cc_basename in ++ ec++*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ghcx*) ++ # Green Hills C++ Compiler ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ freebsd[[12]]*) ++ # C++ shared libraries reported to be fairly broken before ++ # switch to ELF ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ freebsd-elf*) ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ ;; ++ ++ freebsd* | dragonfly*) ++ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF ++ # conventions ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ ;; ++ ++ gnu*) ++ ;; ++ ++ hpux9*) ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, ++ # but as the default ++ # location of the library. ++ ++ case $cc_basename in ++ CC*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ aCC*) ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ++ ;; ++ *) ++ if test "$GXX" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ else ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ hpux10*|hpux11*) ++ if test $with_gnu_ld = no; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ case $host_cpu in ++ hppa*64*|ia64*) ++ ;; ++ *) ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ ;; ++ esac ++ fi ++ case $host_cpu in ++ hppa*64*|ia64*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ *) ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, ++ # but as the default ++ # location of the library. ++ ;; ++ esac ++ ++ case $cc_basename in ++ CC*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ aCC*) ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ esac ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ++ ;; ++ *) ++ if test "$GXX" = yes; then ++ if test $with_gnu_ld = no; then ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ esac ++ fi ++ else ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ interix[[3-9]]*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. ++ # Instead, shared libraries are loaded at an image base (0x10000000 by ++ # default) and relocated if they conflict, which is a slow very memory ++ # consuming and fragmenting process. To avoid this, we pick a random, ++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link ++ # time. Moving up from 0x10000000 also allows more sbrk(2) space. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ ;; ++ irix5* | irix6*) ++ case $cc_basename in ++ CC*) ++ # SGI C++ ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' ++ ++ # Archives containing C++ object files must be created using ++ # "CC -ar", where "CC" is the IRIX C++ compiler. This is ++ # necessary to make sure instantiated templates are included ++ # in the archive. ++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ++ ;; ++ *) ++ if test "$GXX" = yes; then ++ if test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' ++ fi ++ fi ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ ;; ++ esac ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(inherit_rpath, $1)=yes ++ ;; ++ ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ case $cc_basename in ++ KCC*) ++ # Kuck and Associates, Inc. (KAI) C++ Compiler ++ ++ # KCC will only create a shared library if the output file ++ # ends with ".so" (or ".sl" for HP-UX), so rename the library ++ # to its proper name (with version) after linking. ++ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ ++ # Archives containing C++ object files must be created using ++ # "CC -Bstatic", where "CC" is the KAI C++ compiler. ++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ++ ;; ++ icpc* | ecpc* ) ++ # Intel C++ ++ with_gnu_ld=yes ++ # version 8.0 and above of icpc choke on multiply defined symbols ++ # if we add $predep_objects and $postdep_objects, however 7.1 and ++ # earlier do not add the objects themselves. ++ case `$CC -V 2>&1` in ++ *"Version 7."*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ ;; ++ *) # Version 8.0 or newer ++ tmp_idyn= ++ case $host_cpu in ++ ia64*) tmp_idyn=' -i_dynamic';; ++ esac ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ ;; ++ esac ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ++ ;; ++ pgCC* | pgcpp*) ++ # Portland Group C++ compiler ++ case `$CC -V` in ++ *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) ++ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ ++ rm -rf $tpldir~ ++ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ ++ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' ++ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ ++ rm -rf $tpldir~ ++ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ ++ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ ++ $RANLIB $oldlib' ++ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ ++ rm -rf $tpldir~ ++ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ ++ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ ++ rm -rf $tpldir~ ++ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ ++ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ++ ;; ++ *) # Version 6 will use weak symbols ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ++ ;; ++ esac ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ++ ;; ++ cxx*) ++ # Compaq C++ ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' ++ ++ runpath_var=LD_RUN_PATH ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ++ ;; ++ xl*) ++ # IBM XL 8.0 on PPC, with GNU ld ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ if test "x$supports_anon_versioning" = xyes; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' ++ fi ++ ;; ++ *) ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) ++ # Sun C++ 5.9 ++ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ++ _LT_TAGVAR(compiler_needs_object, $1)=yes ++ ++ # Not sure whether something based on ++ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 ++ # would be better. ++ output_verbose_link_cmd='echo' ++ ++ # Archives containing C++ object files must be created using ++ # "CC -xar", where "CC" is the Sun C++ compiler. This is ++ # necessary to make sure instantiated templates are included ++ # in the archive. ++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ++ ;; ++ esac ++ ;; ++ esac ++ ;; ++ ++ lynxos*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ m88k*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ mvs*) ++ case $cc_basename in ++ cxx*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ netbsd*) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' ++ wlarc= ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ fi ++ # Workaround some broken pre-1.5 toolchains ++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ++ ;; ++ ++ *nto* | *qnx*) ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ ;; ++ ++ openbsd2*) ++ # C++ shared libraries are fairly broken ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ openbsd*) ++ if test -f /usr/libexec/ld.so; then ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' ++ fi ++ output_verbose_link_cmd=echo ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ osf3* | osf4* | osf5*) ++ case $cc_basename in ++ KCC*) ++ # Kuck and Associates, Inc. (KAI) C++ Compiler ++ ++ # KCC will only create a shared library if the output file ++ # ends with ".so" (or ".sl" for HP-UX), so rename the library ++ # to its proper name (with version) after linking. ++ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ # Archives containing C++ object files must be created using ++ # the KAI C++ compiler. ++ case $host in ++ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; ++ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; ++ esac ++ ;; ++ RCC*) ++ # Rational C++ 2.4.1 ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ cxx*) ++ case $host in ++ osf3*) ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ ;; ++ *) ++ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ ++ echo "-hidden">> $lib.exp~ ++ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ ++ $RM $lib.exp' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ++ ;; ++ esac ++ ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ++ ;; ++ *) ++ if test "$GXX" = yes && test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' ++ case $host in ++ osf3*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ ;; ++ esac ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' ++ ++ else ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ psos*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ sunos4*) ++ case $cc_basename in ++ CC*) ++ # Sun C++ 4.x ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ lcc*) ++ # Lucid ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ solaris*) ++ case $cc_basename in ++ CC*) ++ # Sun C++ 4.2, 5.x and Centerline C++ ++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes ++ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ case $host_os in ++ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; ++ *) ++ # The compiler driver will combine and reorder linker options, ++ # but understands `-z linker_flag'. ++ # Supported since Solaris 2.6 (maybe 2.5.1?) ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ++ ;; ++ esac ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ ++ output_verbose_link_cmd='echo' ++ ++ # Archives containing C++ object files must be created using ++ # "CC -xar", where "CC" is the Sun C++ compiler. This is ++ # necessary to make sure instantiated templates are included ++ # in the archive. ++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ++ ;; ++ gcx*) ++ # Green Hills C++ Compiler ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' ++ ++ # The C++ compiler must be used to create the archive. ++ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ++ ;; ++ *) ++ # GNU C++ compiler with Solaris linker ++ if test "$GXX" = yes && test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' ++ if $CC --version | $GREP -v '^2\.7' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' ++ else ++ # g++ 2.7 appears to require `-G' NOT `-shared' on this ++ # platform. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' ++ fi ++ ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' ++ case $host_os in ++ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; ++ *) ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ++ ;; ++ esac ++ fi ++ ;; ++ esac ++ ;; ++ ++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ runpath_var='LD_RUN_PATH' ++ ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ esac ++ ;; ++ ++ sysv5* | sco3.2v5* | sco5v6*) ++ # Note: We can NOT use -z defs as we might desire, because we do not ++ # link with -lc, and that would cause any symbols used from libc to ++ # always be unresolved, which means just about no library would ++ # ever link correctly. If we're not using GNU ld we use -z text ++ # though, which does catch some bad symbols but isn't as heavy-handed ++ # as -z defs. ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' ++ runpath_var='LD_RUN_PATH' ++ ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ esac ++ ;; ++ ++ tandem*) ++ case $cc_basename in ++ NCC*) ++ # NonStop-UX NCC 3.20 ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ vxworks*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ++ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) ++ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no ++ ++ _LT_TAGVAR(GCC, $1)="$GXX" ++ _LT_TAGVAR(LD, $1)="$LD" ++ ++ ## CAVEAT EMPTOR: ++ ## There is no encapsulation within the following macros, do not change ++ ## the running order or otherwise move them around unless you know exactly ++ ## what you are doing... ++ _LT_SYS_HIDDEN_LIBDEPS($1) ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++ fi # test -n "$compiler" ++ ++ CC=$lt_save_CC ++ LDCXX=$LD ++ LD=$lt_save_LD ++ GCC=$lt_save_GCC ++ with_gnu_ld=$lt_save_with_gnu_ld ++ lt_cv_path_LDCXX=$lt_cv_path_LD ++ lt_cv_path_LD=$lt_save_path_LD ++ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld ++ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ++fi # test "$_lt_caught_CXX_error" != yes ++ ++AC_LANG_POP ++])# _LT_LANG_CXX_CONFIG ++ ++ ++# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) ++# --------------------------------- ++# Figure out "hidden" library dependencies from verbose ++# compiler output when linking a shared library. ++# Parse the compiler output and extract the necessary ++# objects, libraries and library flags. ++m4_defun([_LT_SYS_HIDDEN_LIBDEPS], ++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++# Dependencies to place before and after the object being linked: ++_LT_TAGVAR(predep_objects, $1)= ++_LT_TAGVAR(postdep_objects, $1)= ++_LT_TAGVAR(predeps, $1)= ++_LT_TAGVAR(postdeps, $1)= ++_LT_TAGVAR(compiler_lib_search_path, $1)= ++ ++dnl we can't use the lt_simple_compile_test_code here, ++dnl because it contains code intended for an executable, ++dnl not a library. It's possible we should let each ++dnl tag define a new lt_????_link_test_code variable, ++dnl but it's only used here... ++m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF ++int a; ++void foo (void) { a = 0; } ++_LT_EOF ++], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF ++class Foo ++{ ++public: ++ Foo (void) { a = 0; } ++private: ++ int a; ++}; ++_LT_EOF ++], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF ++ subroutine foo ++ implicit none ++ integer*4 a ++ a=0 ++ return ++ end ++_LT_EOF ++], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF ++ subroutine foo ++ implicit none ++ integer a ++ a=0 ++ return ++ end ++_LT_EOF ++], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF ++public class foo { ++ private int a; ++ public void bar (void) { ++ a = 0; ++ } ++}; ++_LT_EOF ++]) ++dnl Parse the compiler output and extract the necessary ++dnl objects, libraries and library flags. ++if AC_TRY_EVAL(ac_compile); then ++ # Parse the compiler output and extract the necessary ++ # objects, libraries and library flags. ++ ++ # Sentinel used to keep track of whether or not we are before ++ # the conftest object file. ++ pre_test_object_deps_done=no ++ ++ for p in `eval "$output_verbose_link_cmd"`; do ++ case $p in ++ ++ -L* | -R* | -l*) ++ # Some compilers place space between "-{L,R}" and the path. ++ # Remove the space. ++ if test $p = "-L" || ++ test $p = "-R"; then ++ prev=$p ++ continue ++ else ++ prev= ++ fi ++ ++ if test "$pre_test_object_deps_done" = no; then ++ case $p in ++ -L* | -R*) ++ # Internal compiler library paths should come after those ++ # provided the user. The postdeps already come after the ++ # user supplied libs so there is no need to process them. ++ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then ++ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" ++ else ++ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" ++ fi ++ ;; ++ # The "-l" case would never come before the object being ++ # linked, so don't bother handling this case. ++ esac ++ else ++ if test -z "$_LT_TAGVAR(postdeps, $1)"; then ++ _LT_TAGVAR(postdeps, $1)="${prev}${p}" ++ else ++ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" ++ fi ++ fi ++ ;; ++ ++ *.$objext) ++ # This assumes that the test object file only shows up ++ # once in the compiler output. ++ if test "$p" = "conftest.$objext"; then ++ pre_test_object_deps_done=yes ++ continue ++ fi ++ ++ if test "$pre_test_object_deps_done" = no; then ++ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then ++ _LT_TAGVAR(predep_objects, $1)="$p" ++ else ++ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" ++ fi ++ else ++ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then ++ _LT_TAGVAR(postdep_objects, $1)="$p" ++ else ++ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" ++ fi ++ fi ++ ;; ++ ++ *) ;; # Ignore the rest. ++ ++ esac ++ done ++ ++ # Clean up. ++ rm -f a.out a.exe ++else ++ echo "libtool.m4: error: problem compiling $1 test program" ++fi ++ ++$RM -f confest.$objext ++ ++# PORTME: override above test on systems where it is broken ++m4_if([$1], [CXX], ++[case $host_os in ++interix[[3-9]]*) ++ # Interix 3.5 installs completely hosed .la files for C++, so rather than ++ # hack all around it, let's just trust "g++" to DTRT. ++ _LT_TAGVAR(predep_objects,$1)= ++ _LT_TAGVAR(postdep_objects,$1)= ++ _LT_TAGVAR(postdeps,$1)= ++ ;; ++ ++linux*) ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) ++ # Sun C++ 5.9 ++ ++ # The more standards-conforming stlport4 library is ++ # incompatible with the Cstd library. Avoid specifying ++ # it if it's in CXXFLAGS. Ignore libCrun as ++ # -library=stlport4 depends on it. ++ case " $CXX $CXXFLAGS " in ++ *" -library=stlport4 "*) ++ solaris_use_stlport4=yes ++ ;; ++ esac ++ ++ if test "$solaris_use_stlport4" != yes; then ++ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' ++ fi ++ ;; ++ esac ++ ;; ++ ++solaris*) ++ case $cc_basename in ++ CC*) ++ # The more standards-conforming stlport4 library is ++ # incompatible with the Cstd library. Avoid specifying ++ # it if it's in CXXFLAGS. Ignore libCrun as ++ # -library=stlport4 depends on it. ++ case " $CXX $CXXFLAGS " in ++ *" -library=stlport4 "*) ++ solaris_use_stlport4=yes ++ ;; ++ esac ++ ++ # Adding this requires a known-good setup of shared libraries for ++ # Sun compiler versions before 5.6, else PIC objects from an old ++ # archive will be linked into the output, leading to subtle bugs. ++ if test "$solaris_use_stlport4" != yes; then ++ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' ++ fi ++ ;; ++ esac ++ ;; ++esac ++]) ++ ++case " $_LT_TAGVAR(postdeps, $1) " in ++*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; ++esac ++ _LT_TAGVAR(compiler_lib_search_dirs, $1)= ++if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then ++ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` ++fi ++_LT_TAGDECL([], [compiler_lib_search_dirs], [1], ++ [The directories searched by this compiler when creating a shared library]) ++_LT_TAGDECL([], [predep_objects], [1], ++ [Dependencies to place before and after the objects being linked to ++ create a shared library]) ++_LT_TAGDECL([], [postdep_objects], [1]) ++_LT_TAGDECL([], [predeps], [1]) ++_LT_TAGDECL([], [postdeps], [1]) ++_LT_TAGDECL([], [compiler_lib_search_path], [1], ++ [The library search path used internally by the compiler when linking ++ a shared library]) ++])# _LT_SYS_HIDDEN_LIBDEPS ++ ++ ++# _LT_PROG_F77 ++# ------------ ++# Since AC_PROG_F77 is broken, in that it returns the empty string ++# if there is no fortran compiler, we have our own version here. ++m4_defun([_LT_PROG_F77], ++[ ++pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) ++AC_PROG_F77 ++if test -z "$F77" || test "X$F77" = "Xno"; then ++ _lt_disable_F77=yes ++fi ++popdef([AC_MSG_ERROR]) ++])# _LT_PROG_F77 ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([_LT_PROG_F77], []) ++ ++ ++# _LT_LANG_F77_CONFIG([TAG]) ++# -------------------------- ++# Ensure that the configuration variables for a Fortran 77 compiler are ++# suitably defined. These variables are subsequently used by _LT_CONFIG ++# to write the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_F77_CONFIG], ++[AC_REQUIRE([_LT_PROG_F77])dnl ++AC_LANG_PUSH(Fortran 77) ++ ++_LT_TAGVAR(archive_cmds_need_lc, $1)=no ++_LT_TAGVAR(allow_undefined_flag, $1)= ++_LT_TAGVAR(always_export_symbols, $1)=no ++_LT_TAGVAR(archive_expsym_cmds, $1)= ++_LT_TAGVAR(export_dynamic_flag_spec, $1)= ++_LT_TAGVAR(hardcode_direct, $1)=no ++_LT_TAGVAR(hardcode_direct_absolute, $1)=no ++_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= ++_LT_TAGVAR(hardcode_libdir_separator, $1)= ++_LT_TAGVAR(hardcode_minus_L, $1)=no ++_LT_TAGVAR(hardcode_automatic, $1)=no ++_LT_TAGVAR(inherit_rpath, $1)=no ++_LT_TAGVAR(module_cmds, $1)= ++_LT_TAGVAR(module_expsym_cmds, $1)= ++_LT_TAGVAR(link_all_deplibs, $1)=unknown ++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ++_LT_TAGVAR(no_undefined_flag, $1)= ++_LT_TAGVAR(whole_archive_flag_spec, $1)= ++_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no ++ ++# Source file extension for f77 test sources. ++ac_ext=f ++ ++# Object file extension for compiled f77 test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# No sense in running all these tests if we already determined that ++# the F77 compiler isn't working. Some variables (like enable_shared) ++# are currently assumed to apply to all compilers on this platform, ++# and will be corrupted by setting them based on a non-working compiler. ++if test "$_lt_disable_F77" != yes; then ++ # Code to be used in simple compile tests ++ lt_simple_compile_test_code="\ ++ subroutine t ++ return ++ end ++" ++ ++ # Code to be used in simple link tests ++ lt_simple_link_test_code="\ ++ program t ++ end ++" ++ ++ # ltmain only uses $CC for tagged configurations so make sure $CC is set. ++ _LT_TAG_COMPILER ++ ++ # save warnings/boilerplate of simple test code ++ _LT_COMPILER_BOILERPLATE ++ _LT_LINKER_BOILERPLATE ++ ++ # Allow CC to be a program name with arguments. ++ lt_save_CC="$CC" ++ lt_save_GCC=$GCC ++ CC=${F77-"f77"} ++ compiler=$CC ++ _LT_TAGVAR(compiler, $1)=$CC ++ _LT_CC_BASENAME([$compiler]) ++ GCC=$G77 ++ if test -n "$compiler"; then ++ AC_MSG_CHECKING([if libtool supports shared libraries]) ++ AC_MSG_RESULT([$can_build_shared]) ++ ++ AC_MSG_CHECKING([whether to build shared libraries]) ++ test "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ aix[[4-9]]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$enable_shared]) ++ ++ AC_MSG_CHECKING([whether to build static libraries]) ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ AC_MSG_RESULT([$enable_static]) ++ ++ _LT_TAGVAR(GCC, $1)="$G77" ++ _LT_TAGVAR(LD, $1)="$LD" ++ ++ ## CAVEAT EMPTOR: ++ ## There is no encapsulation within the following macros, do not change ++ ## the running order or otherwise move them around unless you know exactly ++ ## what you are doing... ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++ fi # test -n "$compiler" ++ ++ GCC=$lt_save_GCC ++ CC="$lt_save_CC" ++fi # test "$_lt_disable_F77" != yes ++ ++AC_LANG_POP ++])# _LT_LANG_F77_CONFIG ++ ++ ++# _LT_PROG_FC ++# ----------- ++# Since AC_PROG_FC is broken, in that it returns the empty string ++# if there is no fortran compiler, we have our own version here. ++m4_defun([_LT_PROG_FC], ++[ ++pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) ++AC_PROG_FC ++if test -z "$FC" || test "X$FC" = "Xno"; then ++ _lt_disable_FC=yes ++fi ++popdef([AC_MSG_ERROR]) ++])# _LT_PROG_FC ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([_LT_PROG_FC], []) ++ ++ ++# _LT_LANG_FC_CONFIG([TAG]) ++# ------------------------- ++# Ensure that the configuration variables for a Fortran compiler are ++# suitably defined. These variables are subsequently used by _LT_CONFIG ++# to write the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_FC_CONFIG], ++[AC_REQUIRE([_LT_PROG_FC])dnl ++AC_LANG_PUSH(Fortran) ++ ++_LT_TAGVAR(archive_cmds_need_lc, $1)=no ++_LT_TAGVAR(allow_undefined_flag, $1)= ++_LT_TAGVAR(always_export_symbols, $1)=no ++_LT_TAGVAR(archive_expsym_cmds, $1)= ++_LT_TAGVAR(export_dynamic_flag_spec, $1)= ++_LT_TAGVAR(hardcode_direct, $1)=no ++_LT_TAGVAR(hardcode_direct_absolute, $1)=no ++_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= ++_LT_TAGVAR(hardcode_libdir_separator, $1)= ++_LT_TAGVAR(hardcode_minus_L, $1)=no ++_LT_TAGVAR(hardcode_automatic, $1)=no ++_LT_TAGVAR(inherit_rpath, $1)=no ++_LT_TAGVAR(module_cmds, $1)= ++_LT_TAGVAR(module_expsym_cmds, $1)= ++_LT_TAGVAR(link_all_deplibs, $1)=unknown ++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ++_LT_TAGVAR(no_undefined_flag, $1)= ++_LT_TAGVAR(whole_archive_flag_spec, $1)= ++_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no ++ ++# Source file extension for fc test sources. ++ac_ext=${ac_fc_srcext-f} ++ ++# Object file extension for compiled fc test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# No sense in running all these tests if we already determined that ++# the FC compiler isn't working. Some variables (like enable_shared) ++# are currently assumed to apply to all compilers on this platform, ++# and will be corrupted by setting them based on a non-working compiler. ++if test "$_lt_disable_FC" != yes; then ++ # Code to be used in simple compile tests ++ lt_simple_compile_test_code="\ ++ subroutine t ++ return ++ end ++" ++ ++ # Code to be used in simple link tests ++ lt_simple_link_test_code="\ ++ program t ++ end ++" ++ ++ # ltmain only uses $CC for tagged configurations so make sure $CC is set. ++ _LT_TAG_COMPILER ++ ++ # save warnings/boilerplate of simple test code ++ _LT_COMPILER_BOILERPLATE ++ _LT_LINKER_BOILERPLATE ++ ++ # Allow CC to be a program name with arguments. ++ lt_save_CC="$CC" ++ lt_save_GCC=$GCC ++ CC=${FC-"f95"} ++ compiler=$CC ++ GCC=$ac_cv_fc_compiler_gnu ++ ++ _LT_TAGVAR(compiler, $1)=$CC ++ _LT_CC_BASENAME([$compiler]) ++ ++ if test -n "$compiler"; then ++ AC_MSG_CHECKING([if libtool supports shared libraries]) ++ AC_MSG_RESULT([$can_build_shared]) ++ ++ AC_MSG_CHECKING([whether to build shared libraries]) ++ test "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ aix[[4-9]]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$enable_shared]) ++ ++ AC_MSG_CHECKING([whether to build static libraries]) ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ AC_MSG_RESULT([$enable_static]) ++ ++ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" ++ _LT_TAGVAR(LD, $1)="$LD" ++ ++ ## CAVEAT EMPTOR: ++ ## There is no encapsulation within the following macros, do not change ++ ## the running order or otherwise move them around unless you know exactly ++ ## what you are doing... ++ _LT_SYS_HIDDEN_LIBDEPS($1) ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++ fi # test -n "$compiler" ++ ++ GCC=$lt_save_GCC ++ CC="$lt_save_CC" ++fi # test "$_lt_disable_FC" != yes ++ ++AC_LANG_POP ++])# _LT_LANG_FC_CONFIG ++ ++ ++# _LT_LANG_GCJ_CONFIG([TAG]) ++# -------------------------- ++# Ensure that the configuration variables for the GNU Java Compiler compiler ++# are suitably defined. These variables are subsequently used by _LT_CONFIG ++# to write the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_GCJ_CONFIG], ++[AC_REQUIRE([LT_PROG_GCJ])dnl ++AC_LANG_SAVE ++ ++# Source file extension for Java test sources. ++ac_ext=java ++ ++# Object file extension for compiled Java test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# Code to be used in simple compile tests ++lt_simple_compile_test_code="class foo {}" ++ ++# Code to be used in simple link tests ++lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' ++ ++# ltmain only uses $CC for tagged configurations so make sure $CC is set. ++_LT_TAG_COMPILER ++ ++# save warnings/boilerplate of simple test code ++_LT_COMPILER_BOILERPLATE ++_LT_LINKER_BOILERPLATE ++ ++# Allow CC to be a program name with arguments. ++lt_save_CC="$CC" ++lt_save_GCC=$GCC ++GCC=yes ++CC=${GCJ-"gcj"} ++compiler=$CC ++_LT_TAGVAR(compiler, $1)=$CC ++_LT_TAGVAR(LD, $1)="$LD" ++_LT_CC_BASENAME([$compiler]) ++ ++# GCJ did not exist at the time GCC didn't implicitly link libc in. ++_LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ ++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ++ ++if test -n "$compiler"; then ++ _LT_COMPILER_NO_RTTI($1) ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++fi ++ ++AC_LANG_RESTORE ++ ++GCC=$lt_save_GCC ++CC="$lt_save_CC" ++])# _LT_LANG_GCJ_CONFIG ++ ++ ++# _LT_LANG_RC_CONFIG([TAG]) ++# ------------------------- ++# Ensure that the configuration variables for the Windows resource compiler ++# are suitably defined. These variables are subsequently used by _LT_CONFIG ++# to write the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_RC_CONFIG], ++[AC_REQUIRE([LT_PROG_RC])dnl ++AC_LANG_SAVE ++ ++# Source file extension for RC test sources. ++ac_ext=rc ++ ++# Object file extension for compiled RC test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# Code to be used in simple compile tests ++lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' ++ ++# Code to be used in simple link tests ++lt_simple_link_test_code="$lt_simple_compile_test_code" ++ ++# ltmain only uses $CC for tagged configurations so make sure $CC is set. ++_LT_TAG_COMPILER ++ ++# save warnings/boilerplate of simple test code ++_LT_COMPILER_BOILERPLATE ++_LT_LINKER_BOILERPLATE ++ ++# Allow CC to be a program name with arguments. ++lt_save_CC="$CC" ++lt_save_GCC=$GCC ++GCC= ++CC=${RC-"windres"} ++compiler=$CC ++_LT_TAGVAR(compiler, $1)=$CC ++_LT_CC_BASENAME([$compiler]) ++_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes ++ ++if test -n "$compiler"; then ++ : ++ _LT_CONFIG($1) ++fi ++ ++GCC=$lt_save_GCC ++AC_LANG_RESTORE ++CC="$lt_save_CC" ++])# _LT_LANG_RC_CONFIG ++ ++ ++# LT_PROG_GCJ ++# ----------- ++AC_DEFUN([LT_PROG_GCJ], ++[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], ++ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], ++ [AC_CHECK_TOOL(GCJ, gcj,) ++ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" ++ AC_SUBST(GCJFLAGS)])])[]dnl ++]) ++ ++# Old name: ++AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([LT_AC_PROG_GCJ], []) ++ ++ ++# LT_PROG_RC ++# ---------- ++AC_DEFUN([LT_PROG_RC], ++[AC_CHECK_TOOL(RC, windres,) ++]) ++ ++# Old name: ++AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([LT_AC_PROG_RC], []) ++ ++ ++# _LT_DECL_EGREP ++# -------------- ++# If we don't have a new enough Autoconf to choose the best grep ++# available, choose the one first in the user's PATH. ++m4_defun([_LT_DECL_EGREP], ++[AC_REQUIRE([AC_PROG_EGREP])dnl ++AC_REQUIRE([AC_PROG_FGREP])dnl ++test -z "$GREP" && GREP=grep ++_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) ++_LT_DECL([], [EGREP], [1], [An ERE matcher]) ++_LT_DECL([], [FGREP], [1], [A literal string matcher]) ++dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too ++AC_SUBST([GREP]) ++]) ++ ++ ++# _LT_DECL_OBJDUMP ++# -------------- ++# If we don't have a new enough Autoconf to choose the best objdump ++# available, choose the one first in the user's PATH. ++m4_defun([_LT_DECL_OBJDUMP], ++[AC_CHECK_TOOL(OBJDUMP, objdump, false) ++test -z "$OBJDUMP" && OBJDUMP=objdump ++_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) ++AC_SUBST([OBJDUMP]) ++]) ++ ++ ++# _LT_DECL_SED ++# ------------ ++# Check for a fully-functional sed program, that truncates ++# as few characters as possible. Prefer GNU sed if found. ++m4_defun([_LT_DECL_SED], ++[AC_PROG_SED ++test -z "$SED" && SED=sed ++Xsed="$SED -e 1s/^X//" ++_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) ++_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], ++ [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ++])# _LT_DECL_SED ++ ++m4_ifndef([AC_PROG_SED], [ ++# NOTE: This macro has been submitted for inclusion into # ++# GNU Autoconf as AC_PROG_SED. When it is available in # ++# a released version of Autoconf we should remove this # ++# macro and use it instead. # ++ ++m4_defun([AC_PROG_SED], ++[AC_MSG_CHECKING([for a sed that does not truncate output]) ++AC_CACHE_VAL(lt_cv_path_SED, ++[# Loop through the user's path and test for sed and gsed. ++# Then use that list of sed's as ones to test for truncation. ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for lt_ac_prog in sed gsed; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then ++ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" ++ fi ++ done ++ done ++done ++IFS=$as_save_IFS ++lt_ac_max=0 ++lt_ac_count=0 ++# Add /usr/xpg4/bin/sed as it is typically found on Solaris ++# along with /bin/sed that truncates output. ++for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do ++ test ! -f $lt_ac_sed && continue ++ cat /dev/null > conftest.in ++ lt_ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >conftest.in ++ # Check for GNU sed and select it if it is found. ++ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then ++ lt_cv_path_SED=$lt_ac_sed ++ break ++ fi ++ while true; do ++ cat conftest.in conftest.in >conftest.tmp ++ mv conftest.tmp conftest.in ++ cp conftest.in conftest.nl ++ echo >>conftest.nl ++ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break ++ cmp -s conftest.out conftest.nl || break ++ # 10000 chars as input seems more than enough ++ test $lt_ac_count -gt 10 && break ++ lt_ac_count=`expr $lt_ac_count + 1` ++ if test $lt_ac_count -gt $lt_ac_max; then ++ lt_ac_max=$lt_ac_count ++ lt_cv_path_SED=$lt_ac_sed ++ fi ++ done ++done ++]) ++SED=$lt_cv_path_SED ++AC_SUBST([SED]) ++AC_MSG_RESULT([$SED]) ++])#AC_PROG_SED ++])#m4_ifndef ++ ++# Old name: ++AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([LT_AC_PROG_SED], []) ++ ++ ++# _LT_CHECK_SHELL_FEATURES ++# ------------------------ ++# Find out whether the shell is Bourne or XSI compatible, ++# or has some other useful features. ++m4_defun([_LT_CHECK_SHELL_FEATURES], ++[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) ++# Try some XSI features ++xsi_shell=no ++( _lt_dummy="a/b/c" ++ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ ++ = c,a/b,, \ ++ && eval 'test $(( 1 + 1 )) -eq 2 \ ++ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ ++ && xsi_shell=yes ++AC_MSG_RESULT([$xsi_shell]) ++_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) ++ ++AC_MSG_CHECKING([whether the shell understands "+="]) ++lt_shell_append=no ++( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ ++ >/dev/null 2>&1 \ ++ && lt_shell_append=yes ++AC_MSG_RESULT([$lt_shell_append]) ++_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) ++ ++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then ++ lt_unset=unset ++else ++ lt_unset=false ++fi ++_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl ++ ++# test EBCDIC or ASCII ++case `echo X|tr X '\101'` in ++ A) # ASCII based system ++ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr ++ lt_SP2NL='tr \040 \012' ++ lt_NL2SP='tr \015\012 \040\040' ++ ;; ++ *) # EBCDIC based system ++ lt_SP2NL='tr \100 \n' ++ lt_NL2SP='tr \r\n \100\100' ++ ;; ++esac ++_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl ++_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ++])# _LT_CHECK_SHELL_FEATURES ++ ++ ++# _LT_PROG_XSI_SHELLFNS ++# --------------------- ++# Bourne and XSI compatible variants of some useful shell functions. ++m4_defun([_LT_PROG_XSI_SHELLFNS], ++[case $xsi_shell in ++ yes) ++ cat << \_LT_EOF >> "$cfgfile" ++ ++# func_dirname file append nondir_replacement ++# Compute the dirname of FILE. If nonempty, add APPEND to the result, ++# otherwise set result to NONDIR_REPLACEMENT. ++func_dirname () ++{ ++ case ${1} in ++ */*) func_dirname_result="${1%/*}${2}" ;; ++ * ) func_dirname_result="${3}" ;; ++ esac ++} ++ ++# func_basename file ++func_basename () ++{ ++ func_basename_result="${1##*/}" ++} ++ ++# func_dirname_and_basename file append nondir_replacement ++# perform func_basename and func_dirname in a single function ++# call: ++# dirname: Compute the dirname of FILE. If nonempty, ++# add APPEND to the result, otherwise set result ++# to NONDIR_REPLACEMENT. ++# value returned in "$func_dirname_result" ++# basename: Compute filename of FILE. ++# value retuned in "$func_basename_result" ++# Implementation must be kept synchronized with func_dirname ++# and func_basename. For efficiency, we do not delegate to ++# those functions but instead duplicate the functionality here. ++func_dirname_and_basename () ++{ ++ case ${1} in ++ */*) func_dirname_result="${1%/*}${2}" ;; ++ * ) func_dirname_result="${3}" ;; ++ esac ++ func_basename_result="${1##*/}" ++} ++ ++# func_stripname prefix suffix name ++# strip PREFIX and SUFFIX off of NAME. ++# PREFIX and SUFFIX must not contain globbing or regex special ++# characters, hashes, percent signs, but SUFFIX may contain a leading ++# dot (in which case that matches only a dot). ++func_stripname () ++{ ++ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are ++ # positional parameters, so assign one to ordinary parameter first. ++ func_stripname_result=${3} ++ func_stripname_result=${func_stripname_result#"${1}"} ++ func_stripname_result=${func_stripname_result%"${2}"} ++} ++ ++# func_opt_split ++func_opt_split () ++{ ++ func_opt_split_opt=${1%%=*} ++ func_opt_split_arg=${1#*=} ++} ++ ++# func_lo2o object ++func_lo2o () ++{ ++ case ${1} in ++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;; ++ *) func_lo2o_result=${1} ;; ++ esac ++} ++ ++# func_xform libobj-or-source ++func_xform () ++{ ++ func_xform_result=${1%.*}.lo ++} ++ ++# func_arith arithmetic-term... ++func_arith () ++{ ++ func_arith_result=$(( $[*] )) ++} ++ ++# func_len string ++# STRING may not start with a hyphen. ++func_len () ++{ ++ func_len_result=${#1} ++} ++ ++_LT_EOF ++ ;; ++ *) # Bourne compatible functions. ++ cat << \_LT_EOF >> "$cfgfile" ++ ++# func_dirname file append nondir_replacement ++# Compute the dirname of FILE. If nonempty, add APPEND to the result, ++# otherwise set result to NONDIR_REPLACEMENT. ++func_dirname () ++{ ++ # Extract subdirectory from the argument. ++ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` ++ if test "X$func_dirname_result" = "X${1}"; then ++ func_dirname_result="${3}" ++ else ++ func_dirname_result="$func_dirname_result${2}" ++ fi ++} ++ ++# func_basename file ++func_basename () ++{ ++ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` ++} ++ ++dnl func_dirname_and_basename ++dnl A portable version of this function is already defined in general.m4sh ++dnl so there is no need for it here. ++ ++# func_stripname prefix suffix name ++# strip PREFIX and SUFFIX off of NAME. ++# PREFIX and SUFFIX must not contain globbing or regex special ++# characters, hashes, percent signs, but SUFFIX may contain a leading ++# dot (in which case that matches only a dot). ++# func_strip_suffix prefix name ++func_stripname () ++{ ++ case ${2} in ++ .*) func_stripname_result=`$ECHO "X${3}" \ ++ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; ++ *) func_stripname_result=`$ECHO "X${3}" \ ++ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; ++ esac ++} ++ ++# sed scripts: ++my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' ++my_sed_long_arg='1s/^-[[^=]]*=//' ++ ++# func_opt_split ++func_opt_split () ++{ ++ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` ++ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` ++} ++ ++# func_lo2o object ++func_lo2o () ++{ ++ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` ++} ++ ++# func_xform libobj-or-source ++func_xform () ++{ ++ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` ++} ++ ++# func_arith arithmetic-term... ++func_arith () ++{ ++ func_arith_result=`expr "$[@]"` ++} ++ ++# func_len string ++# STRING may not start with a hyphen. ++func_len () ++{ ++ func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` ++} ++ ++_LT_EOF ++esac ++ ++case $lt_shell_append in ++ yes) ++ cat << \_LT_EOF >> "$cfgfile" ++ ++# func_append var value ++# Append VALUE to the end of shell variable VAR. ++func_append () ++{ ++ eval "$[1]+=\$[2]" ++} ++_LT_EOF ++ ;; ++ *) ++ cat << \_LT_EOF >> "$cfgfile" ++ ++# func_append var value ++# Append VALUE to the end of shell variable VAR. ++func_append () ++{ ++ eval "$[1]=\$$[1]\$[2]" ++} ++ ++_LT_EOF ++ ;; ++ esac ++]) ++ ++# Helper functions for option handling. -*- Autoconf -*- ++# ++# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. ++# Written by Gary V. Vaughan, 2004 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++# serial 6 ltoptions.m4 ++ ++# This is to help aclocal find these macros, as it can't see m4_define. ++AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) ++ ++ ++# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) ++# ------------------------------------------ ++m4_define([_LT_MANGLE_OPTION], ++[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) ++ ++ ++# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) ++# --------------------------------------- ++# Set option OPTION-NAME for macro MACRO-NAME, and if there is a ++# matching handler defined, dispatch to it. Other OPTION-NAMEs are ++# saved as a flag. ++m4_define([_LT_SET_OPTION], ++[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl ++m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), ++ _LT_MANGLE_DEFUN([$1], [$2]), ++ [m4_warning([Unknown $1 option `$2'])])[]dnl ++]) ++ ++ ++# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) ++# ------------------------------------------------------------ ++# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. ++m4_define([_LT_IF_OPTION], ++[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) ++ ++ ++# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) ++# ------------------------------------------------------- ++# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME ++# are set. ++m4_define([_LT_UNLESS_OPTIONS], ++[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), ++ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), ++ [m4_define([$0_found])])])[]dnl ++m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ++])[]dnl ++]) ++ ++ ++# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) ++# ---------------------------------------- ++# OPTION-LIST is a space-separated list of Libtool options associated ++# with MACRO-NAME. If any OPTION has a matching handler declared with ++# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about ++# the unknown option and exit. ++m4_defun([_LT_SET_OPTIONS], ++[# Set options ++m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), ++ [_LT_SET_OPTION([$1], _LT_Option)]) ++ ++m4_if([$1],[LT_INIT],[ ++ dnl ++ dnl Simply set some default values (i.e off) if boolean options were not ++ dnl specified: ++ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ++ ]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ++ ]) ++ dnl ++ dnl If no reference was made to various pairs of opposing options, then ++ dnl we run the default mode handler for the pair. For example, if neither ++ dnl `shared' nor `disable-shared' was passed, we enable building of shared ++ dnl archives by default: ++ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], ++ [_LT_ENABLE_FAST_INSTALL]) ++ ]) ++])# _LT_SET_OPTIONS ++ ++ ++ ++# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) ++# ----------------------------------------- ++m4_define([_LT_MANGLE_DEFUN], ++[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) ++ ++ ++# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) ++# ----------------------------------------------- ++m4_define([LT_OPTION_DEFINE], ++[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ++])# LT_OPTION_DEFINE ++ ++ ++# dlopen ++# ------ ++LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ++]) ++ ++AU_DEFUN([AC_LIBTOOL_DLOPEN], ++[_LT_SET_OPTION([LT_INIT], [dlopen]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you ++put the `dlopen' option into LT_INIT's first parameter.]) ++]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) ++ ++ ++# win32-dll ++# --------- ++# Declare package support for building win32 dll's. ++LT_OPTION_DEFINE([LT_INIT], [win32-dll], ++[enable_win32_dll=yes ++ ++case $host in ++*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) ++ AC_CHECK_TOOL(AS, as, false) ++ AC_CHECK_TOOL(DLLTOOL, dlltool, false) ++ AC_CHECK_TOOL(OBJDUMP, objdump, false) ++ ;; ++esac ++ ++test -z "$AS" && AS=as ++_LT_DECL([], [AS], [0], [Assembler program])dnl ++ ++test -z "$DLLTOOL" && DLLTOOL=dlltool ++_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl ++ ++test -z "$OBJDUMP" && OBJDUMP=objdump ++_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl ++])# win32-dll ++ ++AU_DEFUN([AC_LIBTOOL_WIN32_DLL], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++_LT_SET_OPTION([LT_INIT], [win32-dll]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you ++put the `win32-dll' option into LT_INIT's first parameter.]) ++]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) ++ ++ ++# _LT_ENABLE_SHARED([DEFAULT]) ++# ---------------------------- ++# implement the --enable-shared flag, and supports the `shared' and ++# `disable-shared' LT_INIT options. ++# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. ++m4_define([_LT_ENABLE_SHARED], ++[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl ++AC_ARG_ENABLE([shared], ++ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], ++ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], ++ [p=${PACKAGE-default} ++ case $enableval in ++ yes) enable_shared=yes ;; ++ no) enable_shared=no ;; ++ *) ++ enable_shared=no ++ # Look at the argument we got. We use all the common list separators. ++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," ++ for pkg in $enableval; do ++ IFS="$lt_save_ifs" ++ if test "X$pkg" = "X$p"; then ++ enable_shared=yes ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ;; ++ esac], ++ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) ++ ++ _LT_DECL([build_libtool_libs], [enable_shared], [0], ++ [Whether or not to build shared libraries]) ++])# _LT_ENABLE_SHARED ++ ++LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) ++LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) ++ ++# Old names: ++AC_DEFUN([AC_ENABLE_SHARED], ++[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ++]) ++ ++AC_DEFUN([AC_DISABLE_SHARED], ++[_LT_SET_OPTION([LT_INIT], [disable-shared]) ++]) ++ ++AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) ++AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AM_ENABLE_SHARED], []) ++dnl AC_DEFUN([AM_DISABLE_SHARED], []) ++ ++ ++ ++# _LT_ENABLE_STATIC([DEFAULT]) ++# ---------------------------- ++# implement the --enable-static flag, and support the `static' and ++# `disable-static' LT_INIT options. ++# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. ++m4_define([_LT_ENABLE_STATIC], ++[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl ++AC_ARG_ENABLE([static], ++ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], ++ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], ++ [p=${PACKAGE-default} ++ case $enableval in ++ yes) enable_static=yes ;; ++ no) enable_static=no ;; ++ *) ++ enable_static=no ++ # Look at the argument we got. We use all the common list separators. ++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," ++ for pkg in $enableval; do ++ IFS="$lt_save_ifs" ++ if test "X$pkg" = "X$p"; then ++ enable_static=yes ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ;; ++ esac], ++ [enable_static=]_LT_ENABLE_STATIC_DEFAULT) ++ ++ _LT_DECL([build_old_libs], [enable_static], [0], ++ [Whether or not to build static libraries]) ++])# _LT_ENABLE_STATIC ++ ++LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) ++LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) ++ ++# Old names: ++AC_DEFUN([AC_ENABLE_STATIC], ++[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ++]) ++ ++AC_DEFUN([AC_DISABLE_STATIC], ++[_LT_SET_OPTION([LT_INIT], [disable-static]) ++]) ++ ++AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) ++AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AM_ENABLE_STATIC], []) ++dnl AC_DEFUN([AM_DISABLE_STATIC], []) ++ ++ ++ ++# _LT_ENABLE_FAST_INSTALL([DEFAULT]) ++# ---------------------------------- ++# implement the --enable-fast-install flag, and support the `fast-install' ++# and `disable-fast-install' LT_INIT options. ++# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. ++m4_define([_LT_ENABLE_FAST_INSTALL], ++[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl ++AC_ARG_ENABLE([fast-install], ++ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], ++ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], ++ [p=${PACKAGE-default} ++ case $enableval in ++ yes) enable_fast_install=yes ;; ++ no) enable_fast_install=no ;; ++ *) ++ enable_fast_install=no ++ # Look at the argument we got. We use all the common list separators. ++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," ++ for pkg in $enableval; do ++ IFS="$lt_save_ifs" ++ if test "X$pkg" = "X$p"; then ++ enable_fast_install=yes ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ;; ++ esac], ++ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) ++ ++_LT_DECL([fast_install], [enable_fast_install], [0], ++ [Whether or not to optimize for fast installation])dnl ++])# _LT_ENABLE_FAST_INSTALL ++ ++LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) ++LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) ++ ++# Old names: ++AU_DEFUN([AC_ENABLE_FAST_INSTALL], ++[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you put ++the `fast-install' option into LT_INIT's first parameter.]) ++]) ++ ++AU_DEFUN([AC_DISABLE_FAST_INSTALL], ++[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you put ++the `disable-fast-install' option into LT_INIT's first parameter.]) ++]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) ++dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) ++ ++ ++# _LT_WITH_PIC([MODE]) ++# -------------------- ++# implement the --with-pic flag, and support the `pic-only' and `no-pic' ++# LT_INIT options. ++# MODE is either `yes' or `no'. If omitted, it defaults to `both'. ++m4_define([_LT_WITH_PIC], ++[AC_ARG_WITH([pic], ++ [AS_HELP_STRING([--with-pic], ++ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], ++ [pic_mode="$withval"], ++ [pic_mode=default]) ++ ++test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) ++ ++_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ++])# _LT_WITH_PIC ++ ++LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) ++LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) ++ ++# Old name: ++AU_DEFUN([AC_LIBTOOL_PICMODE], ++[_LT_SET_OPTION([LT_INIT], [pic-only]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you ++put the `pic-only' option into LT_INIT's first parameter.]) ++]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ++ ++ ++m4_define([_LTDL_MODE], []) ++LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], ++ [m4_define([_LTDL_MODE], [nonrecursive])]) ++LT_OPTION_DEFINE([LTDL_INIT], [recursive], ++ [m4_define([_LTDL_MODE], [recursive])]) ++LT_OPTION_DEFINE([LTDL_INIT], [subproject], ++ [m4_define([_LTDL_MODE], [subproject])]) ++ ++m4_define([_LTDL_TYPE], []) ++LT_OPTION_DEFINE([LTDL_INIT], [installable], ++ [m4_define([_LTDL_TYPE], [installable])]) ++LT_OPTION_DEFINE([LTDL_INIT], [convenience], ++ [m4_define([_LTDL_TYPE], [convenience])]) ++ ++# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- ++# ++# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. ++# Written by Gary V. Vaughan, 2004 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++# serial 6 ltsugar.m4 ++ ++# This is to help aclocal find these macros, as it can't see m4_define. ++AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) ++ ++ ++# lt_join(SEP, ARG1, [ARG2...]) ++# ----------------------------- ++# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their ++# associated separator. ++# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier ++# versions in m4sugar had bugs. ++m4_define([lt_join], ++[m4_if([$#], [1], [], ++ [$#], [2], [[$2]], ++ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) ++m4_define([_lt_join], ++[m4_if([$#$2], [2], [], ++ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) ++ ++ ++# lt_car(LIST) ++# lt_cdr(LIST) ++# ------------ ++# Manipulate m4 lists. ++# These macros are necessary as long as will still need to support ++# Autoconf-2.59 which quotes differently. ++m4_define([lt_car], [[$1]]) ++m4_define([lt_cdr], ++[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], ++ [$#], 1, [], ++ [m4_dquote(m4_shift($@))])]) ++m4_define([lt_unquote], $1) ++ ++ ++# lt_append(MACRO-NAME, STRING, [SEPARATOR]) ++# ------------------------------------------ ++# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. ++# Note that neither SEPARATOR nor STRING are expanded; they are appended ++# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). ++# No SEPARATOR is output if MACRO-NAME was previously undefined (different ++# than defined and empty). ++# ++# This macro is needed until we can rely on Autoconf 2.62, since earlier ++# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. ++m4_define([lt_append], ++[m4_define([$1], ++ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) ++ ++ ++ ++# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) ++# ---------------------------------------------------------- ++# Produce a SEP delimited list of all paired combinations of elements of ++# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list ++# has the form PREFIXmINFIXSUFFIXn. ++# Needed until we can rely on m4_combine added in Autoconf 2.62. ++m4_define([lt_combine], ++[m4_if(m4_eval([$# > 3]), [1], ++ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl ++[[m4_foreach([_Lt_prefix], [$2], ++ [m4_foreach([_Lt_suffix], ++ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, ++ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) ++ ++ ++# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) ++# ----------------------------------------------------------------------- ++# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited ++# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. ++m4_define([lt_if_append_uniq], ++[m4_ifdef([$1], ++ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], ++ [lt_append([$1], [$2], [$3])$4], ++ [$5])], ++ [lt_append([$1], [$2], [$3])$4])]) ++ ++ ++# lt_dict_add(DICT, KEY, VALUE) ++# ----------------------------- ++m4_define([lt_dict_add], ++[m4_define([$1($2)], [$3])]) ++ ++ ++# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) ++# -------------------------------------------- ++m4_define([lt_dict_add_subkey], ++[m4_define([$1($2:$3)], [$4])]) ++ ++ ++# lt_dict_fetch(DICT, KEY, [SUBKEY]) ++# ---------------------------------- ++m4_define([lt_dict_fetch], ++[m4_ifval([$3], ++ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), ++ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) ++ ++ ++# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) ++# ----------------------------------------------------------------- ++m4_define([lt_if_dict_fetch], ++[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], ++ [$5], ++ [$6])]) ++ ++ ++# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) ++# -------------------------------------------------------------- ++m4_define([lt_dict_filter], ++[m4_if([$5], [], [], ++ [lt_join(m4_quote(m4_default([$4], [[, ]])), ++ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), ++ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ++]) ++ ++# ltversion.m4 -- version numbers -*- Autoconf -*- ++# ++# Copyright (C) 2004 Free Software Foundation, Inc. ++# Written by Scott James Remnant, 2004 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++# Generated from ltversion.in. ++ ++# serial 3017 ltversion.m4 ++# This file is part of GNU Libtool ++ ++m4_define([LT_PACKAGE_VERSION], [2.2.6b]) ++m4_define([LT_PACKAGE_REVISION], [1.3017]) ++ ++AC_DEFUN([LTVERSION_VERSION], ++[macro_version='2.2.6b' ++macro_revision='1.3017' ++_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) ++_LT_DECL(, macro_revision, 0) ++]) ++ ++# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- ++# ++# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. ++# Written by Scott James Remnant, 2004. ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++# serial 4 lt~obsolete.m4 ++ ++# These exist entirely to fool aclocal when bootstrapping libtool. ++# ++# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) ++# which have later been changed to m4_define as they aren't part of the ++# exported API, or moved to Autoconf or Automake where they belong. ++# ++# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN ++# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us ++# using a macro with the same name in our local m4/libtool.m4 it'll ++# pull the old libtool.m4 in (it doesn't see our shiny new m4_define ++# and doesn't know about Autoconf macros at all.) ++# ++# So we provide this file, which has a silly filename so it's always ++# included after everything else. This provides aclocal with the ++# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything ++# because those macros already exist, or will be overwritten later. ++# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. ++# ++# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. ++# Yes, that means every name once taken will need to remain here until ++# we give up compatibility with versions before 1.7, at which point ++# we need to keep only those names which we still refer to. ++ ++# This is to help aclocal find these macros, as it can't see m4_define. ++AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) ++ ++m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) ++m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) ++m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) ++m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) ++m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) ++m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) ++m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) ++m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) ++m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) ++m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) ++m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) ++m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) ++m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) ++m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) ++m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) ++m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) ++m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) ++m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) ++m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) ++m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) ++m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) ++m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) ++m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) ++m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) ++m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) ++m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) ++m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) ++m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) ++m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) ++m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) ++m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) ++m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) ++m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) ++m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) ++m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) ++m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) ++m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) ++m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) ++m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) ++m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) ++m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) ++m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) ++m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) ++m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) ++m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) ++m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) ++m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) ++m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) ++m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) ++m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) ++m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) ++m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) ++m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) ++m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) ++m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) ++ + # nls.m4 serial 3 (gettext-0.15) + dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation +@@ -597,14 +8814,16 @@ + # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) + # --------------------------------------------- + m4_define([_PKG_CONFIG], +-[if test -n "$$1"; then +- pkg_cv_[]$1="$$1" +- elif test -n "$PKG_CONFIG"; then +- PKG_CHECK_EXISTS([$3], +- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], +- [pkg_failed=yes]) +- else +- pkg_failed=untried ++[if test -n "$PKG_CONFIG"; then ++ if test -n "$$1"; then ++ pkg_cv_[]$1="$$1" ++ else ++ PKG_CHECK_EXISTS([$3], ++ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], ++ [pkg_failed=yes]) ++ fi ++else ++ pkg_failed=untried + fi[]dnl + ])# _PKG_CONFIG + +@@ -648,9 +8867,9 @@ + if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then +- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` ++ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else +- $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` ++ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD +@@ -700,7 +8919,7 @@ + [am__api_version='1.11' + dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to + dnl require some minimum version. Point them to the right macro. +-m4_if([$1], [1.11.1], [], ++m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl + ]) + +@@ -716,7 +8935,7 @@ + # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. + # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. + AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +-[AM_AUTOMAKE_VERSION([1.11.1])dnl ++[AM_AUTOMAKE_VERSION([1.11])dnl + m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl + _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +@@ -1729,11 +9948,4 @@ + AC_SUBST([am__untar]) + ]) # _AM_PROG_TAR + +-m4_include([m4/gnome-doc-utils.m4]) +-m4_include([m4/intltool.m4]) +-m4_include([m4/libtool.m4]) +-m4_include([m4/ltoptions.m4]) +-m4_include([m4/ltsugar.m4]) +-m4_include([m4/ltversion.m4]) +-m4_include([m4/lt~obsolete.m4]) + m4_include([acinclude.m4]) +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/common/Makefile.in gdm-2.29.4.new/common/Makefile.in +--- gdm-2.29.4/common/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/common/Makefile.in 2010-01-07 17:29:00.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -43,11 +43,8 @@ + subdir = common + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -236,6 +233,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -320,6 +319,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -371,6 +372,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/configure gdm-2.29.4.new/configure +--- gdm-2.29.4/configure 2010-01-07 17:28:48.000000000 +0100 ++++ gdm-2.29.4.new/configure 2010-01-07 17:28:59.000000000 +0100 +@@ -787,6 +787,7 @@ + GDM_CUSTOM_CONF + GDM_DEFAULTS_CONF + AT_BINDIR ++cachedir + logdir + pixmapdir + gdmlocaledir +@@ -839,6 +840,10 @@ + LIBXKLAVIER_CFLAGS + SIMPLE_GREETER_LIBS + SIMPLE_GREETER_CFLAGS ++SET_SESSION_LIBS ++SET_SESSION_CFLAGS ++GDMSETUP_LIBS ++GDMSETUP_CFLAGS + HAVE_DEVICEKIT_POWER + DEVKIT_POWER_LIBS + DEVKIT_POWER_CFLAGS +@@ -1073,6 +1078,7 @@ + with_dbus_services + enable_rbac_shutdown + with_log_dir ++with_cache_dir + with_at_bindir + with_defaults_conf + with_custom_conf +@@ -1117,6 +1123,10 @@ + GCONF_LIBS + DEVKIT_POWER_CFLAGS + DEVKIT_POWER_LIBS ++GDMSETUP_CFLAGS ++GDMSETUP_LIBS ++SET_SESSION_CFLAGS ++SET_SESSION_LIBS + SIMPLE_GREETER_CFLAGS + SIMPLE_GREETER_LIBS + LIBXKLAVIER_CFLAGS +@@ -1818,6 +1828,7 @@ + --with-dbus-services= + where D-BUS services directory is + --with-log-dir= log dir ++ --with-cache-dir= cache dir + --with-at-bindir= + PATH to Accessible Technology programs [default=BINDIR] + +@@ -1875,6 +1886,14 @@ + C compiler flags for DEVKIT_POWER, overriding pkg-config + DEVKIT_POWER_LIBS + linker flags for DEVKIT_POWER, overriding pkg-config ++ GDMSETUP_CFLAGS ++ C compiler flags for GDMSETUP, overriding pkg-config ++ GDMSETUP_LIBS ++ linker flags for GDMSETUP, overriding pkg-config ++ SET_SESSION_CFLAGS ++ C compiler flags for SET_SESSION, overriding pkg-config ++ SET_SESSION_LIBS ++ linker flags for SET_SESSION, overriding pkg-config + SIMPLE_GREETER_CFLAGS + C compiler flags for SIMPLE_GREETER, overriding pkg-config + SIMPLE_GREETER_LIBS +@@ -6008,13 +6027,13 @@ + else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext +- (eval echo "\"\$as_me:6011: $ac_compile\"" >&5) ++ (eval echo "\"\$as_me:6030: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 +- (eval echo "\"\$as_me:6014: $NM \\\"conftest.$ac_objext\\\"\"" >&5) ++ (eval echo "\"\$as_me:6033: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 +- (eval echo "\"\$as_me:6017: output\"" >&5) ++ (eval echo "\"\$as_me:6036: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" +@@ -6480,11 +6499,11 @@ + ;; + + # This must be Linux ELF. +-linux* | k*bsd*-gnu) ++linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +-netbsd*) ++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 +@@ -7219,7 +7238,7 @@ + ;; + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 7222 "configure"' > conftest.$ac_ext ++ echo '#line 7241 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -8979,10 +8998,6 @@ + $RM -r conftest* + + +-## 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... + if test -n "$compiler"; then + + lt_prog_compiler_no_builtin_flag= +@@ -9008,11 +9023,11 @@ + -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:9011: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:9026: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:9015: \$? = $ac_status" >&5 ++ echo "$as_me:9030: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -9177,7 +9192,7 @@ + lt_prog_compiler_static='-non_shared' + ;; + +- linux* | k*bsd*-gnu) ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) +@@ -9347,11 +9362,11 @@ + -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:9350: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:9365: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:9354: \$? = $ac_status" >&5 ++ echo "$as_me:9369: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -9452,11 +9467,11 @@ + -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:9455: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:9470: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:9459: \$? = $ac_status" >&5 ++ echo "$as_me:9474: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -9507,11 +9522,11 @@ + -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:9510: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:9525: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:9514: \$? = $ac_status" >&5 ++ echo "$as_me:9529: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -9626,6 +9641,9 @@ + openbsd*) + with_gnu_ld=no + ;; ++ linux* | k*bsd*-gnu) ++ link_all_deplibs=no ++ ;; + esac + + ld_shlibs=yes +@@ -9647,6 +9665,7 @@ + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in ++ *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [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 ... +@@ -9738,7 +9757,7 @@ + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + +- gnu* | linux* | tpf* | k*bsd*-gnu) ++ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in +@@ -9808,7 +9827,7 @@ + fi + ;; + +- netbsd*) ++ netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= +@@ -9983,6 +10002,7 @@ + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi ++ link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then +@@ -10309,7 +10329,7 @@ + link_all_deplibs=yes + ;; + +- netbsd*) ++ netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else +@@ -11199,7 +11219,7 @@ + ;; + + # This must be Linux ELF. +-linux* | k*bsd*-gnu) ++linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no +@@ -11239,13 +11259,10 @@ + # before this can be enabled. + hardcode_into_libs=yes + +- # Add ABI-specific directories to the system library path. +- sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" +- + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" ++ 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 +@@ -11257,6 +11274,18 @@ + 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 +@@ -11877,7 +11906,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11880 "configure" ++#line 11909 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -11973,7 +12002,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 11976 "configure" ++#line 12005 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -12913,7 +12942,7 @@ + inherit_rpath_CXX=yes + ;; + +- linux* | k*bsd*-gnu) ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler +@@ -13741,7 +13770,7 @@ + ;; + esac + ;; +- linux* | k*bsd*-gnu) ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler +@@ -13805,7 +13834,7 @@ + ;; + esac + ;; +- netbsd*) ++ netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise +@@ -13929,11 +13958,11 @@ + -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:13932: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:13961: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:13936: \$? = $ac_status" >&5 ++ echo "$as_me:13965: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -14028,11 +14057,11 @@ + -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:14031: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:14060: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:14035: \$? = $ac_status" >&5 ++ echo "$as_me:14064: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -14080,11 +14109,11 @@ + -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:14083: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:14112: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:14087: \$? = $ac_status" >&5 ++ echo "$as_me:14116: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -14156,6 +14185,9 @@ + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$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) ++ link_all_deplibs_CXX=no ++ ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; +@@ -14655,7 +14687,7 @@ + ;; + + # This must be Linux ELF. +-linux* | k*bsd*-gnu) ++linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no +@@ -14695,13 +14727,10 @@ + # before this can be enabled. + hardcode_into_libs=yes + +- # Add ABI-specific directories to the system library path. +- sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" +- + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" ++ 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 +@@ -14713,6 +14742,18 @@ + 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 +@@ -16635,6 +16676,7 @@ + + + DBUS_GLIB_REQUIRED_VERSION=0.74 ++POLKIT_GOBJECT_REQUIRED_VERSION=0.92 + GLIB_REQUIRED_VERSION=2.22.0 + GTK_REQUIRED_VERSION=2.10.0 + PANGO_REQUIRED_VERSION=1.3.0 +@@ -16760,10 +16802,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTHREAD" >&5 + $as_echo_n "checking for GTHREAD... " >&6; } + +-if test -n "$GTHREAD_CFLAGS"; then +- pkg_cv_GTHREAD_CFLAGS="$GTHREAD_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GTHREAD_CFLAGS"; then ++ pkg_cv_GTHREAD_CFLAGS="$GTHREAD_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gthread-2.0") 2>&5 + ac_status=$? +@@ -16773,13 +16816,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$GTHREAD_LIBS"; then +- pkg_cv_GTHREAD_LIBS="$GTHREAD_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GTHREAD_LIBS"; then ++ pkg_cv_GTHREAD_LIBS="$GTHREAD_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gthread-2.0") 2>&5 + ac_status=$? +@@ -16789,8 +16834,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -16803,9 +16849,9 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- GTHREAD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gthread-2.0" 2>&1` ++ GTHREAD_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gthread-2.0"` + else +- GTHREAD_PKG_ERRORS=`$PKG_CONFIG --print-errors "gthread-2.0" 2>&1` ++ GTHREAD_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gthread-2.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTHREAD_PKG_ERRORS" >&5 +@@ -16849,55 +16895,71 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for COMMON" >&5 + $as_echo_n "checking for COMMON... " >&6; } + +-if test -n "$COMMON_CFLAGS"; then +- pkg_cv_COMMON_CFLAGS="$COMMON_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$COMMON_CFLAGS"; then ++ pkg_cv_COMMON_CFLAGS="$COMMON_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= \$POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION + gio-2.0 >= \$GLIB_REQUIRED_VERSION ++ gconf-2.0 >= \$GCONF_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION + ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_COMMON_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION + " 2>/dev/null` + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$COMMON_LIBS"; then +- pkg_cv_COMMON_LIBS="$COMMON_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$COMMON_LIBS"; then ++ pkg_cv_COMMON_LIBS="$COMMON_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= \$POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION + gio-2.0 >= \$GLIB_REQUIRED_VERSION ++ gconf-2.0 >= \$GCONF_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION + ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_COMMON_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION + " 2>/dev/null` + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -16910,22 +16972,28 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- COMMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ COMMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION +-" 2>&1` ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION ++"` + else +- COMMON_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ COMMON_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION +-" 2>&1` ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$COMMON_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION ++ gconf-2.0 >= $GCONF_REQUIRED_VERSION + ) were not met: + + $COMMON_PKG_ERRORS +@@ -16965,15 +17033,18 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DAEMON" >&5 + $as_echo_n "checking for DAEMON... " >&6; } + +-if test -n "$DAEMON_CFLAGS"; then +- pkg_cv_DAEMON_CFLAGS="$DAEMON_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$DAEMON_CFLAGS"; then ++ pkg_cv_DAEMON_CFLAGS="$DAEMON_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= \$POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION + gio-2.0 >= \$GLIB_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + ") 2>&5 +@@ -16981,24 +17052,29 @@ + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DAEMON_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + " 2>/dev/null` + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$DAEMON_LIBS"; then +- pkg_cv_DAEMON_LIBS="$DAEMON_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$DAEMON_LIBS"; then ++ pkg_cv_DAEMON_LIBS="$DAEMON_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= \$POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION + gio-2.0 >= \$GLIB_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + ") 2>&5 +@@ -17006,14 +17082,16 @@ + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DAEMON_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + " 2>/dev/null` + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -17026,20 +17104,23 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION +-" 2>&1` ++"` + else +- DAEMON_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ DAEMON_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION +-" 2>&1` ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$DAEMON_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ polkit-gobject-1 >= $POLKIT_GOBJECT_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GLIB_REQUIRED_VERSION + ) were not met: +@@ -17274,10 +17355,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XLIB" >&5 + $as_echo_n "checking for XLIB... " >&6; } + +-if test -n "$XLIB_CFLAGS"; then +- pkg_cv_XLIB_CFLAGS="$XLIB_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$XLIB_CFLAGS"; then ++ pkg_cv_XLIB_CFLAGS="$XLIB_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11 xau\""; } >&5 + ($PKG_CONFIG --exists --print-errors "x11 xau") 2>&5 + ac_status=$? +@@ -17287,13 +17369,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$XLIB_LIBS"; then +- pkg_cv_XLIB_LIBS="$XLIB_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$XLIB_LIBS"; then ++ pkg_cv_XLIB_LIBS="$XLIB_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11 xau\""; } >&5 + ($PKG_CONFIG --exists --print-errors "x11 xau") 2>&5 + ac_status=$? +@@ -17303,8 +17387,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -17317,9 +17402,9 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- XLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "x11 xau" 2>&1` ++ XLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "x11 xau"` + else +- XLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "x11 xau" 2>&1` ++ XLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "x11 xau"` + fi + # Put the nasty error message in config.log where it belongs + echo "$XLIB_PKG_ERRORS" >&5 +@@ -18334,10 +18419,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 + $as_echo_n "checking for GTK... " >&6; } + +-if test -n "$GTK_CFLAGS"; then +- pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GTK_CFLAGS"; then ++ pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION +@@ -18350,13 +18436,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$GTK_LIBS"; then +- pkg_cv_GTK_LIBS="$GTK_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GTK_LIBS"; then ++ pkg_cv_GTK_LIBS="$GTK_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION +@@ -18369,8 +18457,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18383,11 +18472,11 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION +-" 2>&1` ++ GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION ++"` + else +- GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION +-" 2>&1` ++ GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTK_PKG_ERRORS" >&5 +@@ -18432,10 +18521,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CANBERRA_GTK" >&5 + $as_echo_n "checking for CANBERRA_GTK... " >&6; } + +-if test -n "$CANBERRA_GTK_CFLAGS"; then +- pkg_cv_CANBERRA_GTK_CFLAGS="$CANBERRA_GTK_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$CANBERRA_GTK_CFLAGS"; then ++ pkg_cv_CANBERRA_GTK_CFLAGS="$CANBERRA_GTK_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcanberra-gtk >= \$LIBCANBERRA_GTK_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED_VERSION +@@ -18448,13 +18538,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$CANBERRA_GTK_LIBS"; then +- pkg_cv_CANBERRA_GTK_LIBS="$CANBERRA_GTK_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$CANBERRA_GTK_LIBS"; then ++ pkg_cv_CANBERRA_GTK_LIBS="$CANBERRA_GTK_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcanberra-gtk >= \$LIBCANBERRA_GTK_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED_VERSION +@@ -18467,8 +18559,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18481,11 +18574,11 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- CANBERRA_GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED_VERSION +-" 2>&1` ++ CANBERRA_GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED_VERSION ++"` + else +- CANBERRA_GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors "libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED_VERSION +-" 2>&1` ++ CANBERRA_GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED_VERSION ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$CANBERRA_GTK_PKG_ERRORS" >&5 +@@ -18530,10 +18623,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCONF" >&5 + $as_echo_n "checking for GCONF... " >&6; } + +-if test -n "$GCONF_CFLAGS"; then +- pkg_cv_GCONF_CFLAGS="$GCONF_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GCONF_CFLAGS"; then ++ pkg_cv_GCONF_CFLAGS="$GCONF_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gconf-2.0 >= \$GCONF_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "gconf-2.0 >= $GCONF_REQUIRED_VERSION +@@ -18546,13 +18640,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$GCONF_LIBS"; then +- pkg_cv_GCONF_LIBS="$GCONF_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GCONF_LIBS"; then ++ pkg_cv_GCONF_LIBS="$GCONF_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gconf-2.0 >= \$GCONF_REQUIRED_VERSION + \""; } >&5 + ($PKG_CONFIG --exists --print-errors "gconf-2.0 >= $GCONF_REQUIRED_VERSION +@@ -18565,8 +18661,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18579,11 +18676,11 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- GCONF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gconf-2.0 >= $GCONF_REQUIRED_VERSION +-" 2>&1` ++ GCONF_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gconf-2.0 >= $GCONF_REQUIRED_VERSION ++"` + else +- GCONF_PKG_ERRORS=`$PKG_CONFIG --print-errors "gconf-2.0 >= $GCONF_REQUIRED_VERSION +-" 2>&1` ++ GCONF_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gconf-2.0 >= $GCONF_REQUIRED_VERSION ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GCONF_PKG_ERRORS" >&5 +@@ -18628,10 +18725,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEVKIT_POWER" >&5 + $as_echo_n "checking for DEVKIT_POWER... " >&6; } + +-if test -n "$DEVKIT_POWER_CFLAGS"; then +- pkg_cv_DEVKIT_POWER_CFLAGS="$DEVKIT_POWER_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$DEVKIT_POWER_CFLAGS"; then ++ pkg_cv_DEVKIT_POWER_CFLAGS="$DEVKIT_POWER_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devkit-power-gobject >= \$DEVKIT_POWER_REQUIRED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devkit-power-gobject >= $DEVKIT_POWER_REQUIRED_VERSION") 2>&5 + ac_status=$? +@@ -18641,13 +18739,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$DEVKIT_POWER_LIBS"; then +- pkg_cv_DEVKIT_POWER_LIBS="$DEVKIT_POWER_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$DEVKIT_POWER_LIBS"; then ++ pkg_cv_DEVKIT_POWER_LIBS="$DEVKIT_POWER_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devkit-power-gobject >= \$DEVKIT_POWER_REQUIRED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devkit-power-gobject >= $DEVKIT_POWER_REQUIRED_VERSION") 2>&5 + ac_status=$? +@@ -18657,8 +18757,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18671,9 +18772,9 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- DEVKIT_POWER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "devkit-power-gobject >= $DEVKIT_POWER_REQUIRED_VERSION" 2>&1` ++ DEVKIT_POWER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "devkit-power-gobject >= $DEVKIT_POWER_REQUIRED_VERSION"` + else +- DEVKIT_POWER_PKG_ERRORS=`$PKG_CONFIG --print-errors "devkit-power-gobject >= $DEVKIT_POWER_REQUIRED_VERSION" 2>&1` ++ DEVKIT_POWER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "devkit-power-gobject >= $DEVKIT_POWER_REQUIRED_VERSION"` + fi + # Put the nasty error message in config.log where it belongs + echo "$DEVKIT_POWER_PKG_ERRORS" >&5 +@@ -18703,13 +18804,245 @@ + + + pkg_failed=no ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDMSETUP" >&5 ++$as_echo_n "checking for GDMSETUP... " >&6; } ++ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GDMSETUP_CFLAGS"; then ++ pkg_cv_GDMSETUP_CFLAGS="$GDMSETUP_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= \$GTK_REQUIRED_VERSION ++ gmodule-2.0 ++\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_GDMSETUP_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++" 2>/dev/null` ++else ++ pkg_failed=yes ++fi ++ fi ++else ++ pkg_failed=untried ++fi ++if test -n "$PKG_CONFIG"; then ++ if test -n "$GDMSETUP_LIBS"; then ++ pkg_cv_GDMSETUP_LIBS="$GDMSETUP_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= \$GTK_REQUIRED_VERSION ++ gmodule-2.0 ++\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_GDMSETUP_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++" 2>/dev/null` ++else ++ pkg_failed=yes ++fi ++ fi ++else ++ pkg_failed=untried ++fi ++ ++ ++ ++if test $pkg_failed = yes; then ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi ++ if test $_pkg_short_errors_supported = yes; then ++ GDMSETUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++"` ++ else ++ GDMSETUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++"` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$GDMSETUP_PKG_ERRORS" >&5 ++ ++ as_fn_error "Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ gmodule-2.0 ++) were not met: ++ ++$GDMSETUP_PKG_ERRORS ++ ++Consider adjusting the PKG_CONFIG_PATH environment variable if you ++installed software in a non-standard prefix. ++ ++Alternatively, you may set the environment variables GDMSETUP_CFLAGS ++and GDMSETUP_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details. ++" "$LINENO" 5 ++elif test $pkg_failed = untried; then ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error "The pkg-config script could not be found or is too old. Make sure it ++is in your PATH or set the PKG_CONFIG environment variable to the full ++path to pkg-config. ++ ++Alternatively, you may set the environment variables GDMSETUP_CFLAGS ++and GDMSETUP_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details. ++ ++To get pkg-config, see . ++See \`config.log' for more details." "$LINENO" 5; } ++else ++ GDMSETUP_CFLAGS=$pkg_cv_GDMSETUP_CFLAGS ++ GDMSETUP_LIBS=$pkg_cv_GDMSETUP_LIBS ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ : ++fi ++ ++ ++ ++ ++pkg_failed=no ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SET_SESSION" >&5 ++$as_echo_n "checking for SET_SESSION... " >&6; } ++ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$SET_SESSION_CFLAGS"; then ++ pkg_cv_SET_SESSION_CFLAGS="$SET_SESSION_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= \$GLIB_REQUIRED_VERSION ++\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_SET_SESSION_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++" 2>/dev/null` ++else ++ pkg_failed=yes ++fi ++ fi ++else ++ pkg_failed=untried ++fi ++if test -n "$PKG_CONFIG"; then ++ if test -n "$SET_SESSION_LIBS"; then ++ pkg_cv_SET_SESSION_LIBS="$SET_SESSION_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= \$GLIB_REQUIRED_VERSION ++\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_SET_SESSION_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++" 2>/dev/null` ++else ++ pkg_failed=yes ++fi ++ fi ++else ++ pkg_failed=untried ++fi ++ ++ ++ ++if test $pkg_failed = yes; then ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi ++ if test $_pkg_short_errors_supported = yes; then ++ SET_SESSION_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++"` ++ else ++ SET_SESSION_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++"` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$SET_SESSION_PKG_ERRORS" >&5 ++ ++ as_fn_error "Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ gobject-2.0 >= $GLIB_REQUIRED_VERSION ++) were not met: ++ ++$SET_SESSION_PKG_ERRORS ++ ++Consider adjusting the PKG_CONFIG_PATH environment variable if you ++installed software in a non-standard prefix. ++ ++Alternatively, you may set the environment variables SET_SESSION_CFLAGS ++and SET_SESSION_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details. ++" "$LINENO" 5 ++elif test $pkg_failed = untried; then ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error "The pkg-config script could not be found or is too old. Make sure it ++is in your PATH or set the PKG_CONFIG environment variable to the full ++path to pkg-config. ++ ++Alternatively, you may set the environment variables SET_SESSION_CFLAGS ++and SET_SESSION_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details. ++ ++To get pkg-config, see . ++See \`config.log' for more details." "$LINENO" 5; } ++else ++ SET_SESSION_CFLAGS=$pkg_cv_SET_SESSION_CFLAGS ++ SET_SESSION_LIBS=$pkg_cv_SET_SESSION_LIBS ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ : ++fi ++ ++ ++ ++ ++pkg_failed=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIMPLE_GREETER" >&5 + $as_echo_n "checking for SIMPLE_GREETER... " >&6; } + +-if test -n "$SIMPLE_GREETER_CFLAGS"; then +- pkg_cv_SIMPLE_GREETER_CFLAGS="$SIMPLE_GREETER_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$SIMPLE_GREETER_CFLAGS"; then ++ pkg_cv_SIMPLE_GREETER_CFLAGS="$SIMPLE_GREETER_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= \$GTK_REQUIRED_VERSION + libglade-2.0 >= \$LIBGLADE_REQUIRED_VERSION +@@ -18734,13 +19067,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$SIMPLE_GREETER_LIBS"; then +- pkg_cv_SIMPLE_GREETER_LIBS="$SIMPLE_GREETER_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$SIMPLE_GREETER_LIBS"; then ++ pkg_cv_SIMPLE_GREETER_LIBS="$SIMPLE_GREETER_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= \$GTK_REQUIRED_VERSION + libglade-2.0 >= \$LIBGLADE_REQUIRED_VERSION +@@ -18765,8 +19100,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18779,19 +19115,19 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- SIMPLE_GREETER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ SIMPLE_GREETER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= $GTK_REQUIRED_VERSION + libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION + gconf-2.0 >= $GCONF_REQUIRED_VERSION + fontconfig >= $FONTCONFIG_REQUIRED_VERSION +-" 2>&1` ++"` + else +- SIMPLE_GREETER_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ SIMPLE_GREETER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= $GTK_REQUIRED_VERSION + libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION + gconf-2.0 >= $GCONF_REQUIRED_VERSION + fontconfig >= $FONTCONFIG_REQUIRED_VERSION +-" 2>&1` ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SIMPLE_GREETER_PKG_ERRORS" >&5 +@@ -18840,10 +19176,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBXKLAVIER" >&5 + $as_echo_n "checking for LIBXKLAVIER... " >&6; } + +-if test -n "$LIBXKLAVIER_CFLAGS"; then +- pkg_cv_LIBXKLAVIER_CFLAGS="$LIBXKLAVIER_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$LIBXKLAVIER_CFLAGS"; then ++ pkg_cv_LIBXKLAVIER_CFLAGS="$LIBXKLAVIER_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxklavier >= \$LIBXKLAVIER_REQUIRED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION") 2>&5 + ac_status=$? +@@ -18853,13 +19190,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$LIBXKLAVIER_LIBS"; then +- pkg_cv_LIBXKLAVIER_LIBS="$LIBXKLAVIER_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$LIBXKLAVIER_LIBS"; then ++ pkg_cv_LIBXKLAVIER_LIBS="$LIBXKLAVIER_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxklavier >= \$LIBXKLAVIER_REQUIRED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION") 2>&5 + ac_status=$? +@@ -18869,8 +19208,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18883,9 +19223,9 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- LIBXKLAVIER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION" 2>&1` ++ LIBXKLAVIER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION"` + else +- LIBXKLAVIER_PKG_ERRORS=`$PKG_CONFIG --print-errors "libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION" 2>&1` ++ LIBXKLAVIER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxklavier >= $LIBXKLAVIER_REQUIRED_VERSION"` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBXKLAVIER_PKG_ERRORS" >&5 +@@ -18924,10 +19264,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIMPLE_CHOOSER" >&5 + $as_echo_n "checking for SIMPLE_CHOOSER... " >&6; } + +-if test -n "$SIMPLE_CHOOSER_CFLAGS"; then +- pkg_cv_SIMPLE_CHOOSER_CFLAGS="$SIMPLE_CHOOSER_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$SIMPLE_CHOOSER_CFLAGS"; then ++ pkg_cv_SIMPLE_CHOOSER_CFLAGS="$SIMPLE_CHOOSER_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= \$GTK_REQUIRED_VERSION + libglade-2.0 >= \$LIBGLADE_REQUIRED_VERSION +@@ -18949,13 +19290,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$SIMPLE_CHOOSER_LIBS"; then +- pkg_cv_SIMPLE_CHOOSER_LIBS="$SIMPLE_CHOOSER_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$SIMPLE_CHOOSER_LIBS"; then ++ pkg_cv_SIMPLE_CHOOSER_LIBS="$SIMPLE_CHOOSER_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= \$GTK_REQUIRED_VERSION + libglade-2.0 >= \$LIBGLADE_REQUIRED_VERSION +@@ -18977,8 +19320,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -18991,17 +19335,17 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- SIMPLE_CHOOSER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ SIMPLE_CHOOSER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= $GTK_REQUIRED_VERSION + libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION + gconf-2.0 >= $GCONF_REQUIRED_VERSION +-" 2>&1` ++"` + else +- SIMPLE_CHOOSER_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION ++ SIMPLE_CHOOSER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gtk+-2.0 >= $GTK_REQUIRED_VERSION + libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION + gconf-2.0 >= $GCONF_REQUIRED_VERSION +-" 2>&1` ++"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SIMPLE_CHOOSER_PKG_ERRORS" >&5 +@@ -19049,10 +19393,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for APPLET" >&5 + $as_echo_n "checking for APPLET... " >&6; } + +-if test -n "$APPLET_CFLAGS"; then +- pkg_cv_APPLET_CFLAGS="$APPLET_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$APPLET_CFLAGS"; then ++ pkg_cv_APPLET_CFLAGS="$APPLET_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_REQUIRED_VERSION + libpanelapplet-2.0 >= \$GNOME_PANEL_REQUIRED_VERSION + libglade-2.0 >= \$LIBGLADE_REQUIRED_VERSION\""; } >&5 +@@ -19068,13 +19413,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$APPLET_LIBS"; then +- pkg_cv_APPLET_LIBS="$APPLET_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$APPLET_LIBS"; then ++ pkg_cv_APPLET_LIBS="$APPLET_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_REQUIRED_VERSION + libpanelapplet-2.0 >= \$GNOME_PANEL_REQUIRED_VERSION + libglade-2.0 >= \$LIBGLADE_REQUIRED_VERSION\""; } >&5 +@@ -19090,8 +19437,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -19104,13 +19452,13 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- APPLET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ APPLET_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION + libpanelapplet-2.0 >= $GNOME_PANEL_REQUIRED_VERSION +- libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION" 2>&1` ++ libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION"` + else +- APPLET_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION ++ APPLET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION + libpanelapplet-2.0 >= $GNOME_PANEL_REQUIRED_VERSION +- libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION" 2>&1` ++ libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION"` + fi + # Put the nasty error message in config.log where it belongs + echo "$APPLET_PKG_ERRORS" >&5 +@@ -19691,10 +20039,11 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CHECK" >&5 + $as_echo_n "checking for CHECK... " >&6; } + +-if test -n "$CHECK_CFLAGS"; then +- pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$CHECK_CFLAGS"; then ++ pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check >= 0.9.4\""; } >&5 + ($PKG_CONFIG --exists --print-errors "check >= 0.9.4") 2>&5 + ac_status=$? +@@ -19704,13 +20053,15 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi +-if test -n "$CHECK_LIBS"; then +- pkg_cv_CHECK_LIBS="$CHECK_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ ++if test -n "$PKG_CONFIG"; then ++ if test -n "$CHECK_LIBS"; then ++ pkg_cv_CHECK_LIBS="$CHECK_LIBS" ++ else ++ if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check >= 0.9.4\""; } >&5 + ($PKG_CONFIG --exists --print-errors "check >= 0.9.4") 2>&5 + ac_status=$? +@@ -19720,8 +20071,9 @@ + else + pkg_failed=yes + fi +- else +- pkg_failed=untried ++ fi ++else ++ pkg_failed=untried + fi + + +@@ -19734,9 +20086,9 @@ + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "check >= 0.9.4" 2>&1` ++ CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "check >= 0.9.4"` + else +- CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors "check >= 0.9.4" 2>&1` ++ CHECK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "check >= 0.9.4"` + fi + # Put the nasty error message in config.log where it belongs + echo "$CHECK_PKG_ERRORS" >&5 +@@ -22535,6 +22887,21 @@ + logdir=$GDM_LOG_DIR + + ++ ++# Check whether --with-cache-dir was given. ++if test "${with_cache_dir+set}" = set; then : ++ withval=$with_cache_dir; ++fi ++ ++ ++if ! test -z "$with_cache_dir"; then ++ GDM_CACHE_DIR=$with_cache_dir ++else ++ GDM_CACHE_DIR=/var/cache/gdm ++fi ++cachedir=$GDM_CACHE_DIR ++ ++ + withval="" + + # Check whether --with-at-bindir was given. +@@ -23328,7 +23695,7 @@ + #AC_SUBST(DEBIAN_DATESTAMP) + #AC_SUBST(DEBIAN_DATE) + +-ac_config_files="$ac_config_files Makefile daemon/Makefile docs/Makefile gui/Makefile gui/simple-greeter/Makefile gui/simple-greeter/libnotificationarea/Makefile gui/simple-chooser/Makefile gui/user-switch-applet/Makefile utils/Makefile data/gdm.conf data/Makefile data/faces/Makefile data/greeter-autostart/Makefile data/pixmaps/Makefile data/pixmaps/16x16/Makefile data/pixmaps/32x32/Makefile data/pixmaps/48x48/Makefile common/Makefile po/Makefile.in tests/Makefile" ++ac_config_files="$ac_config_files Makefile daemon/Makefile docs/Makefile gui/Makefile gui/gdmsetup/Makefile gui/simple-greeter/Makefile gui/simple-greeter/libnotificationarea/Makefile gui/simple-chooser/Makefile gui/user-switch-applet/Makefile utils/Makefile data/gdm.conf data/gdm.policy data/Makefile data/faces/Makefile data/greeter-autostart/Makefile data/pixmaps/Makefile data/pixmaps/16x16/Makefile data/pixmaps/32x32/Makefile data/pixmaps/48x48/Makefile common/Makefile po/Makefile.in tests/Makefile" + + + cat >confcache <<\_ACEOF +@@ -24465,12 +24832,14 @@ + "daemon/Makefile") CONFIG_FILES="$CONFIG_FILES daemon/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "gui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/Makefile" ;; ++ "gui/gdmsetup/Makefile") CONFIG_FILES="$CONFIG_FILES gui/gdmsetup/Makefile" ;; + "gui/simple-greeter/Makefile") CONFIG_FILES="$CONFIG_FILES gui/simple-greeter/Makefile" ;; + "gui/simple-greeter/libnotificationarea/Makefile") CONFIG_FILES="$CONFIG_FILES gui/simple-greeter/libnotificationarea/Makefile" ;; + "gui/simple-chooser/Makefile") CONFIG_FILES="$CONFIG_FILES gui/simple-chooser/Makefile" ;; + "gui/user-switch-applet/Makefile") CONFIG_FILES="$CONFIG_FILES gui/user-switch-applet/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "data/gdm.conf") CONFIG_FILES="$CONFIG_FILES data/gdm.conf" ;; ++ "data/gdm.policy") CONFIG_FILES="$CONFIG_FILES data/gdm.policy" ;; + "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; + "data/faces/Makefile") CONFIG_FILES="$CONFIG_FILES data/faces/Makefile" ;; + "data/greeter-autostart/Makefile") CONFIG_FILES="$CONFIG_FILES data/greeter-autostart/Makefile" ;; +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/daemon/Makefile.in gdm-2.29.4.new/daemon/Makefile.in +--- gdm-2.29.4/daemon/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/daemon/Makefile.in 2010-01-07 17:29:00.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -53,11 +53,8 @@ + subdir = daemon + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -80,8 +77,10 @@ + gdm-transient-display.c gdm-transient-display.h \ + gdm-static-factory-display.c gdm-static-factory-display.h \ + gdm-product-display.c gdm-product-display.h gdm-manager.c \ +- gdm-manager.h gdm-slave-proxy.c gdm-slave-proxy.h \ +- gdm-xdmcp-display-factory.c gdm-xdmcp-display-factory.h ++ gdm-manager.h gdm-user.c gdm-user.h gdm-user-private.h \ ++ gdm-user-manager.c gdm-user-manager.h gdm-slave-proxy.c \ ++ gdm-slave-proxy.h gdm-xdmcp-display-factory.c \ ++ gdm-xdmcp-display-factory.h + am__objects_1 = + am__objects_2 = gdm-xdmcp-display-factory.$(OBJEXT) $(am__objects_1) + @XDMCP_SUPPORT_TRUE@am__objects_3 = $(am__objects_2) +@@ -97,6 +96,7 @@ + gdm-static-display.$(OBJEXT) gdm-transient-display.$(OBJEXT) \ + gdm-static-factory-display.$(OBJEXT) \ + gdm-product-display.$(OBJEXT) gdm-manager.$(OBJEXT) \ ++ gdm-user.$(OBJEXT) gdm-user-manager.$(OBJEXT) \ + gdm-slave-proxy.$(OBJEXT) $(am__objects_1) $(am__objects_3) \ + $(am__objects_5) + gdm_binary_OBJECTS = $(am_gdm_binary_OBJECTS) +@@ -134,7 +134,7 @@ + gdm_product_slave_DEPENDENCIES = \ + $(top_builddir)/common/libgdmcommon.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + gdm_product_slave_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(gdm_product_slave_LDFLAGS) $(LDFLAGS) \ +@@ -172,7 +172,7 @@ + gdm_simple_slave_DEPENDENCIES = \ + $(top_builddir)/common/libgdmcommon.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + gdm_simple_slave_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(gdm_simple_slave_LDFLAGS) $(LDFLAGS) \ +@@ -199,7 +199,7 @@ + test_session_DEPENDENCIES = $(top_builddir)/common/libgdmcommon.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; + am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +@@ -329,6 +329,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -413,6 +415,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -464,6 +468,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -514,6 +519,7 @@ + -DDATADIR=\"$(datadir)\" \ + -DDMCONFDIR=\"$(dmconfdir)\" \ + -DGDMCONFDIR=\"$(gdmconfdir)\" \ ++ -DCACHEDIR=\"$(cachedir)\" \ + -DLIBDIR=\"$(libdir)\" \ + -DLIBEXECDIR=\"$(libexecdir)\" \ + -DLOGDIR=\"$(logdir)\" \ +@@ -540,6 +546,7 @@ + gdm-session-direct-glue.h \ + gdm-manager-glue.h \ + gdm-display-glue.h \ ++ gdm-user-manager-glue.h \ + gdm-xdmcp-greeter-display-glue.h \ + gdm-xdmcp-chooser-display-glue.h \ + gdm-static-display-glue.h \ +@@ -575,6 +582,7 @@ + $(EXTRA_DAEMON_LIBS) \ + $(DAEMON_LIBS) \ + $(PAM_LIBS) \ ++ $(LIBXKLAVIER_LIBS) \ + $(NULL) + + gdm_simple_slave_SOURCES = \ +@@ -613,6 +621,7 @@ + $(XLIB_LIBS) \ + $(DAEMON_LIBS) \ + $(EXTRA_DAEMON_LIBS) \ ++ $(LIBXKLAVIER_LIBS) \ + $(NULL) + + gdm_factory_slave_SOURCES = \ +@@ -676,6 +685,7 @@ + $(XLIB_LIBS) \ + $(DAEMON_LIBS) \ + $(EXTRA_DAEMON_LIBS) \ ++ $(LIBXKLAVIER_LIBS) \ + $(NULL) + + gdm_xdmcp_chooser_slave_SOURCES = \ +@@ -728,8 +738,9 @@ + gdm-transient-display.c gdm-transient-display.h \ + gdm-static-factory-display.c gdm-static-factory-display.h \ + gdm-product-display.c gdm-product-display.h gdm-manager.c \ +- gdm-manager.h gdm-slave-proxy.c gdm-slave-proxy.h $(NULL) \ +- $(am__append_3) $(am__append_4) ++ gdm-manager.h gdm-user.c gdm-user.h gdm-user-private.h \ ++ gdm-user-manager.c gdm-user-manager.h gdm-slave-proxy.c \ ++ gdm-slave-proxy.h $(NULL) $(am__append_3) $(am__append_4) + XDMCP_SOURCES = \ + gdm-xdmcp-display-factory.c \ + gdm-xdmcp-display-factory.h \ +@@ -774,6 +785,7 @@ + gdm-session-direct.xml \ + gdm-manager.xml \ + gdm-display.xml \ ++ gdm-user-manager.xml \ + gdm-xdmcp-greeter-display.xml \ + gdm-xdmcp-chooser-display.xml \ + gdm-static-display.xml \ +@@ -1010,6 +1022,8 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-static-display.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-static-factory-display.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-transient-display.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-user-manager.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-user.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-welcome-session.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-xdmcp-chooser-display.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-xdmcp-chooser-slave.Po@am__quote@ +@@ -1267,6 +1281,8 @@ + + gdm-manager-glue.h: gdm-manager.xml Makefile.am + dbus-binding-tool --prefix=gdm_manager --mode=glib-server --output=gdm-manager-glue.h $(srcdir)/gdm-manager.xml ++gdm-user-manager-glue.h: gdm-user-manager.xml Makefile.am ++ dbus-binding-tool --prefix=gdm_user_manager --mode=glib-server --output=gdm-user-manager-glue.h $(srcdir)/gdm-user-manager.xml + gdm-slave-glue.h: gdm-slave.xml Makefile.am + dbus-binding-tool --prefix=gdm_slave --mode=glib-server --output=gdm-slave-glue.h $(srcdir)/gdm-slave.xml + gdm-simple-slave-glue.h: gdm-simple-slave.xml Makefile.am +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/faces/Makefile.in gdm-2.29.4.new/data/faces/Makefile.in +--- gdm-2.29.4/data/faces/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/faces/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -37,11 +37,8 @@ + subdir = data/faces + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -147,6 +144,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -231,6 +230,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -282,6 +283,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/greeter-autostart/Makefile.in gdm-2.29.4.new/data/greeter-autostart/Makefile.in +--- gdm-2.29.4/data/greeter-autostart/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/greeter-autostart/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -37,11 +37,8 @@ + subdir = data/greeter-autostart + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -147,6 +144,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -231,6 +230,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -282,6 +283,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/Makefile.in gdm-2.29.4.new/data/Makefile.in +--- gdm-2.29.4/data/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/Makefile.in 2010-01-07 17:29:00.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -36,18 +36,15 @@ + host_triplet = @host@ + subdir = data + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ +- $(srcdir)/gdm.conf.in ++ $(srcdir)/gdm.conf.in $(srcdir)/gdm.policy.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = gdm.conf ++CONFIG_CLEAN_FILES = gdm.conf gdm.policy + CONFIG_CLEAN_VPATH_FILES = + AM_V_GEN = $(am__v_GEN_$(V)) + am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +@@ -85,8 +82,9 @@ + am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +-am__installdirs = "$(DESTDIR)$(dbusconfdir)" "$(DESTDIR)$(schemasdir)" +-DATA = $(dbusconf_DATA) $(schemas_DATA) ++am__installdirs = "$(DESTDIR)$(dbusconfdir)" "$(DESTDIR)$(polkitdir)" \ ++ "$(DESTDIR)$(schemasdir)" ++DATA = $(dbusconf_DATA) $(polkit_DATA) $(schemas_DATA) + RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive + AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ +@@ -188,6 +186,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -272,6 +272,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -323,6 +325,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = $(localstatedir)/cache/gdm + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -377,17 +380,20 @@ + workingdir = $(GDM_WORKING_DIR) + xauthdir = $(GDM_XAUTH_DIR) + screenshotdir = $(GDM_SCREENSHOT_DIR) +-cachedir = $(localstatedir)/cache/gdm + dbusconfdir = $(DBUS_SYS_DIR) + dbusconf_in_files = gdm.conf.in + dbusconf_DATA = $(dbusconf_in_files:.conf.in=.conf) + schemasdir = $(gdmconfdir) + schemas_in_files = gdm.schemas.in + schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) ++polkitdir = $(datadir)/polkit-1/actions ++polkit_in_files = gdm.policy.in ++polkit_DATA = $(polkit_in_files:.policy.in=.policy) + EXTRA_DIST = \ + $(schemas_in_files) \ + $(schemas_DATA) \ + $(dbusconf_in_files) \ ++ $(polkit_in_files) \ + gdm.schemas.in.in \ + gdm.conf-custom.in \ + Xsession.in \ +@@ -410,7 +416,8 @@ + $(NULL) + + DISTCLEANFILES = \ +- $(dbusconf_DATA) \ ++ $(dbusconf_DATA) \ ++ $(polkit_DATA) \ + gdm.schemas \ + $(NULL) + +@@ -453,6 +460,8 @@ + $(am__aclocal_m4_deps): + gdm.conf: $(top_builddir)/config.status $(srcdir)/gdm.conf.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ++gdm.policy: $(top_builddir)/config.status $(srcdir)/gdm.policy.in ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + + mostlyclean-libtool: + -rm -f *.lo +@@ -479,6 +488,26 @@ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(dbusconfdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(dbusconfdir)" && rm -f $$files ++install-polkitDATA: $(polkit_DATA) ++ @$(NORMAL_INSTALL) ++ test -z "$(polkitdir)" || $(MKDIR_P) "$(DESTDIR)$(polkitdir)" ++ @list='$(polkit_DATA)'; test -n "$(polkitdir)" || list=; \ ++ for p in $$list; do \ ++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ ++ echo "$$d$$p"; \ ++ done | $(am__base_list) | \ ++ while read files; do \ ++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(polkitdir)'"; \ ++ $(INSTALL_DATA) $$files "$(DESTDIR)$(polkitdir)" || exit $$?; \ ++ done ++ ++uninstall-polkitDATA: ++ @$(NORMAL_UNINSTALL) ++ @list='$(polkit_DATA)'; test -n "$(polkitdir)" || list=; \ ++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ ++ test -n "$$files" || exit 0; \ ++ echo " ( cd '$(DESTDIR)$(polkitdir)' && rm -f" $$files ")"; \ ++ cd "$(DESTDIR)$(polkitdir)" && rm -f $$files + install-schemasDATA: $(schemas_DATA) + @$(NORMAL_INSTALL) + test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)" +@@ -507,7 +536,7 @@ + # (which will cause the Makefiles to be regenerated when you run `make'); + # (2) otherwise, pass the desired values on the `make' command line. + $(RECURSIVE_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -532,7 +561,7 @@ + fi; test -z "$$fail" + + $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -698,7 +727,7 @@ + all-am: Makefile $(DATA) + installdirs: installdirs-recursive + installdirs-am: +- for dir in "$(DESTDIR)$(dbusconfdir)" "$(DESTDIR)$(schemasdir)"; do \ ++ for dir in "$(DESTDIR)$(dbusconfdir)" "$(DESTDIR)$(polkitdir)" "$(DESTDIR)$(schemasdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done + install: install-recursive +@@ -749,7 +778,8 @@ + + info-am: + +-install-data-am: install-dbusconfDATA install-schemasDATA ++install-data-am: install-dbusconfDATA install-polkitDATA \ ++ install-schemasDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + install-dvi: install-dvi-recursive +@@ -794,7 +824,8 @@ + + ps-am: + +-uninstall-am: uninstall-dbusconfDATA uninstall-schemasDATA ++uninstall-am: uninstall-dbusconfDATA uninstall-polkitDATA \ ++ uninstall-schemasDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook + .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ +@@ -809,12 +840,13 @@ + install-data-am install-data-hook install-dbusconfDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ +- install-man install-pdf install-pdf-am install-ps \ +- install-ps-am install-schemasDATA install-strip installcheck \ +- installcheck-am installdirs installdirs-am maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-generic \ +- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ +- uninstall uninstall-am uninstall-dbusconfDATA uninstall-hook \ ++ install-man install-pdf install-pdf-am install-polkitDATA \ ++ install-ps install-ps-am install-schemasDATA install-strip \ ++ installcheck installcheck-am installdirs installdirs-am \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ ++ tags tags-recursive uninstall uninstall-am \ ++ uninstall-dbusconfDATA uninstall-hook uninstall-polkitDATA \ + uninstall-schemasDATA + + +@@ -840,6 +872,8 @@ + + @INTLTOOL_SCHEMAS_RULE@ + ++@INTLTOOL_POLICY_RULE@ ++ + gdm.schemas.in: $(srcdir)/gdm.schemas.in.in + sed -e 's,[@]GDMPREFETCHCMD[@],$(GDMPREFETCHCMD),g' \ + -e 's,[@]GDM_CUSTOM_CONF[@],$(GDM_CUSTOM_CONF),g' \ +@@ -868,6 +902,8 @@ + -e 's,[@]pixmapdir[@],$(pixmapdir),g' \ + -e 's,[@]sbindir[@],$(sbindir),g' \ + <$(srcdir)/gdm.schemas.in.in >gdm.schemas.in ++check: ++ $(POLKIT_POLICY_FILE_VALIDATE) $(polkit_DATA) + + uninstall-hook: + rm -f \ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/pixmaps/16x16/Makefile.in gdm-2.29.4.new/data/pixmaps/16x16/Makefile.in +--- gdm-2.29.4/data/pixmaps/16x16/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/pixmaps/16x16/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = data/pixmaps/16x16 + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -149,6 +146,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -233,6 +232,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -284,6 +285,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/pixmaps/32x32/Makefile.in gdm-2.29.4.new/data/pixmaps/32x32/Makefile.in +--- gdm-2.29.4/data/pixmaps/32x32/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/pixmaps/32x32/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = data/pixmaps/32x32 + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -149,6 +146,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -233,6 +232,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -284,6 +285,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/pixmaps/48x48/Makefile.in gdm-2.29.4.new/data/pixmaps/48x48/Makefile.in +--- gdm-2.29.4/data/pixmaps/48x48/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/pixmaps/48x48/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = data/pixmaps/48x48 + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -149,6 +146,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -233,6 +232,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -284,6 +285,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/data/pixmaps/Makefile.in gdm-2.29.4.new/data/pixmaps/Makefile.in +--- gdm-2.29.4/data/pixmaps/Makefile.in 2009-12-21 23:30:43.000000000 +0100 ++++ gdm-2.29.4.new/data/pixmaps/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -37,11 +37,8 @@ + subdir = data/pixmaps + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -187,6 +184,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -271,6 +270,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -322,6 +323,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -435,7 +437,7 @@ + # (which will cause the Makefiles to be regenerated when you run `make'); + # (2) otherwise, pass the desired values on the `make' command line. + $(RECURSIVE_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -460,7 +462,7 @@ + fi; test -z "$$fail" + + $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/docs/Makefile.in gdm-2.29.4.new/docs/Makefile.in +--- gdm-2.29.4/docs/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/docs/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -61,11 +61,8 @@ + $(top_srcdir)/gnome-doc-utils.make + subdir = docs + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -148,6 +145,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -232,6 +231,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -283,6 +284,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/gdmsetup/Makefile.in gdm-2.29.4.new/gui/gdmsetup/Makefile.in +--- gdm-2.29.4/gui/gdmsetup/Makefile.in 1970-01-01 01:00:00.000000000 +0100 ++++ gdm-2.29.4.new/gui/gdmsetup/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -0,0 +1,762 @@ ++# Makefile.in generated by automake 1.11 from Makefile.am. ++# @configure_input@ ++ ++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, ++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, ++# Inc. ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++@SET_MAKE@ ++ ++ ++VPATH = @srcdir@ ++pkgdatadir = $(datadir)/@PACKAGE@ ++pkgincludedir = $(includedir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkglibexecdir = $(libexecdir)/@PACKAGE@ ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = @build@ ++host_triplet = @host@ ++bin_PROGRAMS = gdmsetup$(EXEEXT) $(am__EXEEXT_1) ++subdir = gui/gdmsetup ++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++am__EXEEXT_1 = ++am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(Utilitiesdir)" \ ++ "$(DESTDIR)$(uidir)" ++PROGRAMS = $(bin_PROGRAMS) ++am__objects_1 = ++am_gdmsetup_OBJECTS = gdmsetup.$(OBJEXT) gdm-user.$(OBJEXT) \ ++ gdm-user-manager.$(OBJEXT) $(am__objects_1) ++gdmsetup_OBJECTS = $(am_gdmsetup_OBJECTS) ++am__DEPENDENCIES_1 = ++gdmsetup_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) ++AM_V_lt = $(am__v_lt_$(V)) ++am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) ++am__v_lt_0 = --silent ++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) ++depcomp = $(SHELL) $(top_srcdir)/depcomp ++am__depfiles_maybe = depfiles ++am__mv = mv -f ++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ ++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ ++ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ ++ $(AM_CFLAGS) $(CFLAGS) ++AM_V_CC = $(am__v_CC_$(V)) ++am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) ++am__v_CC_0 = @echo " CC " $@; ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++CCLD = $(CC) ++LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ ++ $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++AM_V_CCLD = $(am__v_CCLD_$(V)) ++am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) ++am__v_CCLD_0 = @echo " CCLD " $@; ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++SOURCES = $(gdmsetup_SOURCES) ++DIST_SOURCES = $(gdmsetup_SOURCES) ++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; ++am__vpath_adj = case $$p in \ ++ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ ++ *) f=$$p;; \ ++ esac; ++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; ++am__install_max = 40 ++am__nobase_strip_setup = \ ++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` ++am__nobase_strip = \ ++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" ++am__nobase_list = $(am__nobase_strip_setup); \ ++ for p in $$list; do echo "$$p $$p"; done | \ ++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ ++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ ++ if (++n[$$2] == $(am__install_max)) \ ++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ ++ END { for (dir in files) print dir, files[dir] }' ++am__base_list = \ ++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ ++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' ++DATA = $(Utilities_DATA) $(ui_DATA) ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = @ACLOCAL@ ++ALL_LINGUAS = @ALL_LINGUAS@ ++AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ++APPLET_CFLAGS = @APPLET_CFLAGS@ ++APPLET_LIBS = @APPLET_LIBS@ ++AR = @AR@ ++AT_BINDIR = @AT_BINDIR@ ++AT_SPI_REGISTRYD_DIR = @AT_SPI_REGISTRYD_DIR@ ++AUTOCONF = @AUTOCONF@ ++AUTOHEADER = @AUTOHEADER@ ++AUTOMAKE = @AUTOMAKE@ ++AWK = @AWK@ ++BINDIR = @BINDIR@ ++CANBERRA_GTK_CFLAGS = @CANBERRA_GTK_CFLAGS@ ++CANBERRA_GTK_LIBS = @CANBERRA_GTK_LIBS@ ++CATALOGS = @CATALOGS@ ++CATOBJEXT = @CATOBJEXT@ ++CC = @CC@ ++CCDEPMODE = @CCDEPMODE@ ++CFLAGS = @CFLAGS@ ++CHECK_CFLAGS = @CHECK_CFLAGS@ ++CHECK_LIBS = @CHECK_LIBS@ ++COMMON_CFLAGS = @COMMON_CFLAGS@ ++COMMON_LIBS = @COMMON_LIBS@ ++CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++CXX = @CXX@ ++CXXCPP = @CXXCPP@ ++CXXDEPMODE = @CXXDEPMODE@ ++CXXFLAGS = @CXXFLAGS@ ++CYGPATH_W = @CYGPATH_W@ ++DAEMON_CFLAGS = @DAEMON_CFLAGS@ ++DAEMON_LIBS = @DAEMON_LIBS@ ++DATADIR = @DATADIR@ ++DATADIRNAME = @DATADIRNAME@ ++DBUS_SYS_DIR = @DBUS_SYS_DIR@ ++DEBUG_CFLAGS = @DEBUG_CFLAGS@ ++DEFS = @DEFS@ ++DEPDIR = @DEPDIR@ ++DEVKIT_POWER_CFLAGS = @DEVKIT_POWER_CFLAGS@ ++DEVKIT_POWER_LIBS = @DEVKIT_POWER_LIBS@ ++DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ ++DOC_USER_FORMATS = @DOC_USER_FORMATS@ ++DSYMUTIL = @DSYMUTIL@ ++DUMPBIN = @DUMPBIN@ ++ECHO_C = @ECHO_C@ ++ECHO_N = @ECHO_N@ ++ECHO_T = @ECHO_T@ ++EGREP = @EGREP@ ++EXEEXT = @EXEEXT@ ++EXTRA_CHOOSER_LIBS = @EXTRA_CHOOSER_LIBS@ ++EXTRA_DAEMON_LIBS = @EXTRA_DAEMON_LIBS@ ++EXTRA_DYNAMIC_LIBS = @EXTRA_DYNAMIC_LIBS@ ++EXTRA_FLEXI_LIBS = @EXTRA_FLEXI_LIBS@ ++EXTRA_GREETER_LIBS = @EXTRA_GREETER_LIBS@ ++EXTRA_SETUP_LIBS = @EXTRA_SETUP_LIBS@ ++EXTRA_SLAVE_LIBS = @EXTRA_SLAVE_LIBS@ ++EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@ ++EXTRA_XNEST_LIBS = @EXTRA_XNEST_LIBS@ ++FGREP = @FGREP@ ++GCONFTOOL = @GCONFTOOL@ ++GCONF_CFLAGS = @GCONF_CFLAGS@ ++GCONF_LIBS = @GCONF_LIBS@ ++GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ ++GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ ++GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ ++GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ ++GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ ++GDM_GROUPNAME = @GDM_GROUPNAME@ ++GDM_OLD_CONF = @GDM_OLD_CONF@ ++GDM_PID_FILE = @GDM_PID_FILE@ ++GDM_SCREENSHOT_DIR = @GDM_SCREENSHOT_DIR@ ++GDM_SESSION_DEFAULT_PATH = @GDM_SESSION_DEFAULT_PATH@ ++GDM_USERNAME = @GDM_USERNAME@ ++GDM_WORKING_DIR = @GDM_WORKING_DIR@ ++GDM_XAUTH_DIR = @GDM_XAUTH_DIR@ ++GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ ++GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ ++GMOFILES = @GMOFILES@ ++GMSGFMT = @GMSGFMT@ ++GREP = @GREP@ ++GTHREAD_CFLAGS = @GTHREAD_CFLAGS@ ++GTHREAD_LIBS = @GTHREAD_LIBS@ ++GTK_CFLAGS = @GTK_CFLAGS@ ++GTK_LIBS = @GTK_LIBS@ ++HAVE_DEVICEKIT_POWER = @HAVE_DEVICEKIT_POWER@ ++HAVE_LIBXKLAVIER = @HAVE_LIBXKLAVIER@ ++HAVE_PAM = @HAVE_PAM@ ++HELP_DIR = @HELP_DIR@ ++INSTALL = @INSTALL@ ++INSTALL_DATA = @INSTALL_DATA@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_SCRIPT = @INSTALL_SCRIPT@ ++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ++INSTOBJEXT = @INSTOBJEXT@ ++INTLLIBS = @INTLLIBS@ ++INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ ++INTLTOOL_MERGE = @INTLTOOL_MERGE@ ++INTLTOOL_PERL = @INTLTOOL_PERL@ ++INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ ++LANG_CONFIG_FILE = @LANG_CONFIG_FILE@ ++LD = @LD@ ++LDFLAGS = @LDFLAGS@ ++LIBDIR = @LIBDIR@ ++LIBEXECDIR = @LIBEXECDIR@ ++LIBOBJS = @LIBOBJS@ ++LIBS = @LIBS@ ++LIBTOOL = @LIBTOOL@ ++LIBWRAP_LIBS = @LIBWRAP_LIBS@ ++LIBXKLAVIER_CFLAGS = @LIBXKLAVIER_CFLAGS@ ++LIBXKLAVIER_LIBS = @LIBXKLAVIER_LIBS@ ++LIPO = @LIPO@ ++LN_S = @LN_S@ ++LOCALSTATEDIR = @LOCALSTATEDIR@ ++LTLIBOBJS = @LTLIBOBJS@ ++MAINT = @MAINT@ ++MAKEINFO = @MAKEINFO@ ++MKDIR_P = @MKDIR_P@ ++MKINSTALLDIRS = @MKINSTALLDIRS@ ++MSGFMT = @MSGFMT@ ++MSGFMT_OPTS = @MSGFMT_OPTS@ ++MSGMERGE = @MSGMERGE@ ++NM = @NM@ ++NMEDIT = @NMEDIT@ ++OBJDUMP = @OBJDUMP@ ++OBJEXT = @OBJEXT@ ++OMF_DIR = @OMF_DIR@ ++OTOOL = @OTOOL@ ++OTOOL64 = @OTOOL64@ ++PACKAGE = @PACKAGE@ ++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ ++PACKAGE_NAME = @PACKAGE_NAME@ ++PACKAGE_STRING = @PACKAGE_STRING@ ++PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_URL = @PACKAGE_URL@ ++PACKAGE_VERSION = @PACKAGE_VERSION@ ++PAM_LIBS = @PAM_LIBS@ ++PAM_PREFIX = @PAM_PREFIX@ ++PATH_SEPARATOR = @PATH_SEPARATOR@ ++PKG_CONFIG = @PKG_CONFIG@ ++PLUGIN_LIBTOOL_FLAGS = @PLUGIN_LIBTOOL_FLAGS@ ++POFILES = @POFILES@ ++POSUB = @POSUB@ ++PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ ++PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ ++RANLIB = @RANLIB@ ++RBAC_LIBS = @RBAC_LIBS@ ++SBINDIR = @SBINDIR@ ++SED = @SED@ ++SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ ++SHELL = @SHELL@ ++SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ ++SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ ++SIMPLE_GREETER_CFLAGS = @SIMPLE_GREETER_CFLAGS@ ++SIMPLE_GREETER_LIBS = @SIMPLE_GREETER_LIBS@ ++SOUND_PROGRAM = @SOUND_PROGRAM@ ++STRIP = @STRIP@ ++SYSCONFDIR = @SYSCONFDIR@ ++USE_NLS = @USE_NLS@ ++VERSION = @VERSION@ ++WARN_CFLAGS = @WARN_CFLAGS@ ++WITH_CONSOLE_KIT = @WITH_CONSOLE_KIT@ ++XDMCP_LIBS = @XDMCP_LIBS@ ++XEVIE_OPTION = @XEVIE_OPTION@ ++XGETTEXT = @XGETTEXT@ ++XINERAMA_LIBS = @XINERAMA_LIBS@ ++XLIB_CFLAGS = @XLIB_CFLAGS@ ++XLIB_LIBS = @XLIB_LIBS@ ++XMKMF = @XMKMF@ ++XSESSION_SHELL = @XSESSION_SHELL@ ++X_CFLAGS = @X_CFLAGS@ ++X_CONFIG_OPTIONS = @X_CONFIG_OPTIONS@ ++X_EXTRA_LIBS = @X_EXTRA_LIBS@ ++X_LIBS = @X_LIBS@ ++X_PATH = @X_PATH@ ++X_PRE_LIBS = @X_PRE_LIBS@ ++X_SERVER = @X_SERVER@ ++X_SERVER_PATH = @X_SERVER_PATH@ ++X_XNEST_CMD = @X_XNEST_CMD@ ++X_XNEST_CONFIG_OPTIONS = @X_XNEST_CONFIG_OPTIONS@ ++X_XNEST_UNSCALED_FONTPATH = @X_XNEST_UNSCALED_FONTPATH@ ++abs_builddir = @abs_builddir@ ++abs_srcdir = @abs_srcdir@ ++abs_top_builddir = @abs_top_builddir@ ++abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_CC = @ac_ct_CC@ ++ac_ct_CXX = @ac_ct_CXX@ ++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ++am__include = @am__include@ ++am__leading_dot = @am__leading_dot@ ++am__quote = @am__quote@ ++am__tar = @am__tar@ ++am__untar = @am__untar@ ++authdir = @authdir@ ++bindir = @bindir@ ++build = @build@ ++build_alias = @build_alias@ ++build_cpu = @build_cpu@ ++build_os = @build_os@ ++build_vendor = @build_vendor@ ++builddir = @builddir@ ++cachedir = @cachedir@ ++datadir = @datadir@ ++datarootdir = @datarootdir@ ++dmconfdir = @dmconfdir@ ++docdir = @docdir@ ++dvidir = @dvidir@ ++exec_prefix = @exec_prefix@ ++gdmconfdir = @gdmconfdir@ ++gdmlocaledir = @gdmlocaledir@ ++host = @host@ ++host_alias = @host_alias@ ++host_cpu = @host_cpu@ ++host_os = @host_os@ ++host_vendor = @host_vendor@ ++htmldir = @htmldir@ ++includedir = @includedir@ ++infodir = @infodir@ ++install_sh = @install_sh@ ++libdir = @libdir@ ++libexecdir = @libexecdir@ ++localedir = @localedir@ ++localstatedir = @localstatedir@ ++logdir = @logdir@ ++lt_ECHO = @lt_ECHO@ ++mandir = @mandir@ ++mkdir_p = @mkdir_p@ ++oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ ++pixmapdir = @pixmapdir@ ++prefix = @prefix@ ++program_transform_name = @program_transform_name@ ++psdir = @psdir@ ++sbindir = @sbindir@ ++sharedstatedir = @sharedstatedir@ ++srcdir = @srcdir@ ++sysconfdir = @sysconfdir@ ++sysconfsubdir = @sysconfsubdir@ ++target_alias = @target_alias@ ++top_build_prefix = @top_build_prefix@ ++top_builddir = @top_builddir@ ++top_srcdir = @top_srcdir@ ++NULL = ++AM_CPPFLAGS = \ ++ -I$(top_srcdir)/common \ ++ -DDATADIR=\""$(datadir)"\" \ ++ -DUIDIR=\""$(uidir)"\" \ ++ -DGNOMELOCALEDIR=\""$(gdmlocaledir)"\" \ ++ $(GDMSETUP_CFLAGS) \ ++ $(NULL) ++ ++gdmsetup_SOURCES = \ ++ gdmsetup.c \ ++ gdm-user.c \ ++ gdm-user-manager.c \ ++ $(NULL) ++ ++gdmsetup_LDADD = \ ++ $(GDMSETUP_LIBS) \ ++ $(NULL) ++ ++uidir = $(pkgdatadir) ++ui_DATA = \ ++ gdmsetup.ui \ ++ $(NULL) ++ ++Utilitiesdir = $(datadir)/applications ++Utilities_in_files = gdmsetup.desktop.in ++Utilities_DATA = $(Utilities_in_files:.desktop.in=.desktop) ++EXTRA_DIST = \ ++ $(ui_DATA) \ ++ $(Utilities_in_files) \ ++ $(NULL) ++ ++all: all-am ++ ++.SUFFIXES: ++.SUFFIXES: .c .lo .o .obj ++$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gui/gdmsetup/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu gui/gdmsetup/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++install-binPROGRAMS: $(bin_PROGRAMS) ++ @$(NORMAL_INSTALL) ++ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" ++ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ ++ for p in $$list; do echo "$$p $$p"; done | \ ++ sed 's/$(EXEEXT)$$//' | \ ++ while read p p1; do if test -f $$p || test -f $$p1; \ ++ then echo "$$p"; echo "$$p"; else :; fi; \ ++ done | \ ++ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ ++ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ ++ sed 'N;N;N;s,\n, ,g' | \ ++ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ ++ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ ++ if ($$2 == $$4) files[d] = files[d] " " $$1; \ ++ else { print "f", $$3 "/" $$4, $$1; } } \ ++ END { for (d in files) print "f", d, files[d] }' | \ ++ while read type dir files; do \ ++ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ ++ test -z "$$files" || { \ ++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ ++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ ++ } \ ++ ; done ++ ++uninstall-binPROGRAMS: ++ @$(NORMAL_UNINSTALL) ++ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ ++ files=`for p in $$list; do echo "$$p"; done | \ ++ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ ++ -e 's/$$/$(EXEEXT)/' `; \ ++ test -n "$$list" || exit 0; \ ++ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ ++ cd "$(DESTDIR)$(bindir)" && rm -f $$files ++ ++clean-binPROGRAMS: ++ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ ++ echo " rm -f" $$list; \ ++ rm -f $$list || exit $$?; \ ++ test -n "$(EXEEXT)" || exit 0; \ ++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ ++ echo " rm -f" $$list; \ ++ rm -f $$list ++gdmsetup$(EXEEXT): $(gdmsetup_OBJECTS) $(gdmsetup_DEPENDENCIES) ++ @rm -f gdmsetup$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(gdmsetup_OBJECTS) $(gdmsetup_LDADD) $(LIBS) ++ ++mostlyclean-compile: ++ -rm -f *.$(OBJEXT) ++ ++distclean-compile: ++ -rm -f *.tab.c ++ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-user-manager.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-user.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdmsetup.Po@am__quote@ ++ ++.c.o: ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(COMPILE) -c $< ++ ++.c.obj: ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ++ ++.c.lo: ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo ++@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++install-UtilitiesDATA: $(Utilities_DATA) ++ @$(NORMAL_INSTALL) ++ test -z "$(Utilitiesdir)" || $(MKDIR_P) "$(DESTDIR)$(Utilitiesdir)" ++ @list='$(Utilities_DATA)'; test -n "$(Utilitiesdir)" || list=; \ ++ for p in $$list; do \ ++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ ++ echo "$$d$$p"; \ ++ done | $(am__base_list) | \ ++ while read files; do \ ++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(Utilitiesdir)'"; \ ++ $(INSTALL_DATA) $$files "$(DESTDIR)$(Utilitiesdir)" || exit $$?; \ ++ done ++ ++uninstall-UtilitiesDATA: ++ @$(NORMAL_UNINSTALL) ++ @list='$(Utilities_DATA)'; test -n "$(Utilitiesdir)" || list=; \ ++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ ++ test -n "$$files" || exit 0; \ ++ echo " ( cd '$(DESTDIR)$(Utilitiesdir)' && rm -f" $$files ")"; \ ++ cd "$(DESTDIR)$(Utilitiesdir)" && rm -f $$files ++install-uiDATA: $(ui_DATA) ++ @$(NORMAL_INSTALL) ++ test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)" ++ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ ++ for p in $$list; do \ ++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ ++ echo "$$d$$p"; \ ++ done | $(am__base_list) | \ ++ while read files; do \ ++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \ ++ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \ ++ done ++ ++uninstall-uiDATA: ++ @$(NORMAL_UNINSTALL) ++ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ ++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ ++ test -n "$$files" || exit 0; \ ++ echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \ ++ cd "$(DESTDIR)$(uidir)" && rm -f $$files ++ ++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ mkid -fID $$unique ++tags: TAGS ++ ++TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ ++ $(TAGS_FILES) $(LISP) ++ set x; \ ++ here=`pwd`; \ ++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: CTAGS ++CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ ++ $(TAGS_FILES) $(LISP) ++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-am ++all-am: Makefile $(PROGRAMS) $(DATA) ++installdirs: ++ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(Utilitiesdir)" "$(DESTDIR)$(uidir)"; do \ ++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ ++ done ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ `test -z '$(STRIP)' || \ ++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-am ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++distclean-am: clean-am distclean-compile distclean-generic \ ++ distclean-tags ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: install-UtilitiesDATA install-uiDATA ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: install-binPROGRAMS ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-compile mostlyclean-generic \ ++ mostlyclean-libtool ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: uninstall-UtilitiesDATA uninstall-binPROGRAMS \ ++ uninstall-uiDATA ++ ++.MAKE: install-am install-strip ++ ++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ ++ clean-generic clean-libtool ctags distclean distclean-compile \ ++ distclean-generic distclean-libtool distclean-tags distdir dvi \ ++ dvi-am html html-am info info-am install install-UtilitiesDATA \ ++ install-am install-binPROGRAMS install-data install-data-am \ ++ install-dvi install-dvi-am install-exec install-exec-am \ ++ install-html install-html-am install-info install-info-am \ ++ install-man install-pdf install-pdf-am install-ps \ ++ install-ps-am install-strip install-uiDATA installcheck \ ++ installcheck-am installdirs maintainer-clean \ ++ maintainer-clean-generic mostlyclean mostlyclean-compile \ ++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ ++ tags uninstall uninstall-UtilitiesDATA uninstall-am \ ++ uninstall-binPROGRAMS uninstall-uiDATA ++ ++@INTLTOOL_DESKTOP_RULE@ ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/Makefile.in gdm-2.29.4.new/gui/Makefile.in +--- gdm-2.29.4/gui/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/gui/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -36,11 +36,8 @@ + subdir = gui + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -163,6 +160,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -247,6 +246,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -298,6 +299,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -340,6 +342,7 @@ + top_srcdir = @top_srcdir@ + NULL = + SUBDIRS = \ ++ gdmsetup \ + simple-chooser \ + simple-greeter \ + user-switch-applet \ +@@ -392,7 +395,7 @@ + # (which will cause the Makefiles to be regenerated when you run `make'); + # (2) otherwise, pass the desired values on the `make' command line. + $(RECURSIVE_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -417,7 +420,7 @@ + fi; test -z "$$fail" + + $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/simple-chooser/Makefile.in gdm-2.29.4.new/gui/simple-chooser/Makefile.in +--- gdm-2.29.4/gui/simple-chooser/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/gui/simple-chooser/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = gui/simple-chooser + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -174,6 +171,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -258,6 +257,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -309,6 +310,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/simple-greeter/libnotificationarea/Makefile.in gdm-2.29.4.new/gui/simple-greeter/libnotificationarea/Makefile.in +--- gdm-2.29.4/gui/simple-greeter/libnotificationarea/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/gui/simple-greeter/libnotificationarea/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = gui/simple-greeter/libnotificationarea + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -168,6 +165,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -252,6 +251,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -303,6 +304,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/simple-greeter/Makefile.in gdm-2.29.4.new/gui/simple-greeter/Makefile.in +--- gdm-2.29.4/gui/simple-greeter/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/gui/simple-greeter/Makefile.in 2010-01-07 17:29:01.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -46,11 +46,8 @@ + subdir = gui/simple-greeter + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -355,6 +352,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -439,6 +438,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -490,6 +491,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -541,6 +543,7 @@ + -DDMCONFDIR=\""$(dmconfdir)"\" \ + -DGDMCONFDIR=\"$(gdmconfdir)\" \ + -DDATADIR=\""$(datadir)"\" \ ++ -DCACHEDIR=\""$(GDM_WORKING_DIR)/.cache"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DLIBLOCALEDIR=\""$(prefix)/lib/locale"\" \ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ +@@ -1130,7 +1133,7 @@ + # (which will cause the Makefiles to be regenerated when you run `make'); + # (2) otherwise, pass the desired values on the `make' command line. + $(RECURSIVE_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -1155,7 +1158,7 @@ + fi; test -z "$$fail" + + $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/gui/user-switch-applet/Makefile.in gdm-2.29.4.new/gui/user-switch-applet/Makefile.in +--- gdm-2.29.4/gui/user-switch-applet/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/gui/user-switch-applet/Makefile.in 2010-01-07 17:29:02.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = gui/user-switch-applet + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -186,6 +183,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -270,6 +269,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -321,6 +322,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/Makefile.in gdm-2.29.4.new/Makefile.in +--- gdm-2.29.4/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/Makefile.in 2010-01-07 17:29:02.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -40,11 +40,8 @@ + TODO acconfig.h compile config.guess config.sub depcomp \ + install-sh ltmain.sh missing mkinstalldirs + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ +@@ -178,6 +175,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -262,6 +261,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -313,6 +314,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -454,7 +456,7 @@ + # (which will cause the Makefiles to be regenerated when you run `make'); + # (2) otherwise, pass the desired values on the `make' command line. + $(RECURSIVE_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -479,7 +481,7 @@ + fi; test -z "$$fail" + + $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ ++ @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ +@@ -643,8 +645,7 @@ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ +- || find "$(distdir)" -type d ! -perm -755 \ +- -exec chmod u+rwx,go+rx {} \; -o \ ++ || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ +@@ -687,17 +688,17 @@ + distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ +- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ ++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ +- bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ ++ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ +- lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ ++ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ +- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ ++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/tests/Makefile.in gdm-2.29.4.new/tests/Makefile.in +--- gdm-2.29.4/tests/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/tests/Makefile.in 2010-01-07 17:29:02.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -39,11 +39,8 @@ + subdir = tests + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -168,6 +165,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -252,6 +251,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -303,6 +304,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +diff -Nur -x '*.orig' -x '*~' gdm-2.29.4/utils/Makefile.in gdm-2.29.4.new/utils/Makefile.in +--- gdm-2.29.4/utils/Makefile.in 2009-12-21 23:30:44.000000000 +0100 ++++ gdm-2.29.4.new/utils/Makefile.in 2010-01-07 17:29:02.000000000 +0100 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. ++# Makefile.in generated by automake 1.11 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -37,14 +37,12 @@ + host_triplet = @host@ + bin_PROGRAMS = gdmflexiserver$(EXEEXT) gdm-screenshot$(EXEEXT) \ + $(am__EXEEXT_1) ++libexec_PROGRAMS = gdm-set-default-session$(EXEEXT) $(am__EXEEXT_1) + subdir = utils + DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/m4/gnome-doc-utils.m4 \ +- $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \ +- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ +- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ +- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac ++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ ++ $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +@@ -52,8 +50,9 @@ + CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + am__EXEEXT_1 = +-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" +-PROGRAMS = $(bin_PROGRAMS) ++am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \ ++ "$(DESTDIR)$(sbindir)" ++PROGRAMS = $(bin_PROGRAMS) $(libexec_PROGRAMS) + am__objects_1 = + am_gdm_screenshot_OBJECTS = gdm-screenshot.$(OBJEXT) $(am__objects_1) + gdm_screenshot_OBJECTS = $(am_gdm_screenshot_OBJECTS) +@@ -64,6 +63,12 @@ + AM_V_lt = $(am__v_lt_$(V)) + am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) + am__v_lt_0 = --silent ++am_gdm_set_default_session_OBJECTS = \ ++ gdm-set-default-session.$(OBJEXT) $(am__objects_1) ++gdm_set_default_session_OBJECTS = \ ++ $(am_gdm_set_default_session_OBJECTS) ++gdm_set_default_session_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + am_gdmflexiserver_OBJECTS = gdmflexiserver.$(OBJEXT) $(am__objects_1) + gdmflexiserver_OBJECTS = $(am_gdmflexiserver_OBJECTS) + gdmflexiserver_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@@ -116,8 +121,10 @@ + AM_V_GEN = $(am__v_GEN_$(V)) + am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) + am__v_GEN_0 = @echo " GEN " $@; +-SOURCES = $(gdm_screenshot_SOURCES) $(gdmflexiserver_SOURCES) +-DIST_SOURCES = $(gdm_screenshot_SOURCES) $(gdmflexiserver_SOURCES) ++SOURCES = $(gdm_screenshot_SOURCES) $(gdm_set_default_session_SOURCES) \ ++ $(gdmflexiserver_SOURCES) ++DIST_SOURCES = $(gdm_screenshot_SOURCES) \ ++ $(gdm_set_default_session_SOURCES) $(gdmflexiserver_SOURCES) + ETAGS = etags + CTAGS = ctags + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +@@ -188,6 +195,8 @@ + GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ + GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ + GDMCHOOSER = @GDMCHOOSER@ ++GDMSETUP_CFLAGS = @GDMSETUP_CFLAGS@ ++GDMSETUP_LIBS = @GDMSETUP_LIBS@ + GDM_CUSTOM_CONF = @GDM_CUSTOM_CONF@ + GDM_DEFAULTS_CONF = @GDM_DEFAULTS_CONF@ + GDM_GROUPNAME = @GDM_GROUPNAME@ +@@ -272,6 +281,8 @@ + SBINDIR = @SBINDIR@ + SED = @SED@ + SET_MAKE = @SET_MAKE@ ++SET_SESSION_CFLAGS = @SET_SESSION_CFLAGS@ ++SET_SESSION_LIBS = @SET_SESSION_LIBS@ + SHELL = @SHELL@ + SIMPLE_CHOOSER_CFLAGS = @SIMPLE_CHOOSER_CFLAGS@ + SIMPLE_CHOOSER_LIBS = @SIMPLE_CHOOSER_LIBS@ +@@ -323,6 +334,7 @@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++cachedir = @cachedir@ + datadir = @datadir@ + datarootdir = @datarootdir@ + dmconfdir = @dmconfdir@ +@@ -370,10 +382,12 @@ + -DLOCALSTATEDIR=\""$(localstatedir)"\" \ + -DGDM_SCREENSHOT_DIR=\""$(GDM_SCREENSHOT_DIR)"\"\ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ ++ -DGDMCONFDIR=\"$(gdmconfdir)\" \ + $(UTILS_CFLAGS) \ + $(CANBERRA_GTK_CFLAGS) \ + $(GTK_CFLAGS) \ + $(COMMON_CFLAGS) \ ++ $(SET_SESSION_CFLAGS) \ + $(NULL) + + edit = sed \ +@@ -407,6 +421,15 @@ + $(COMMON_LIBS) \ + $(NULL) + ++gdm_set_default_session_SOURCES = \ ++ gdm-set-default-session.c \ ++ $(NULL) ++ ++gdm_set_default_session_LDADD = \ ++ $(SET_SESSION_LIBS) \ ++ $(COMMON_LIBS) \ ++ $(NULL) ++ + EXTRA_DIST = \ + gdm-stop.in \ + gdm-restart.in \ +@@ -499,9 +522,55 @@ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list ++install-libexecPROGRAMS: $(libexec_PROGRAMS) ++ @$(NORMAL_INSTALL) ++ test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)" ++ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ ++ for p in $$list; do echo "$$p $$p"; done | \ ++ sed 's/$(EXEEXT)$$//' | \ ++ while read p p1; do if test -f $$p || test -f $$p1; \ ++ then echo "$$p"; echo "$$p"; else :; fi; \ ++ done | \ ++ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ ++ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ ++ sed 'N;N;N;s,\n, ,g' | \ ++ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ ++ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ ++ if ($$2 == $$4) files[d] = files[d] " " $$1; \ ++ else { print "f", $$3 "/" $$4, $$1; } } \ ++ END { for (d in files) print "f", d, files[d] }' | \ ++ while read type dir files; do \ ++ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ ++ test -z "$$files" || { \ ++ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \ ++ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \ ++ } \ ++ ; done ++ ++uninstall-libexecPROGRAMS: ++ @$(NORMAL_UNINSTALL) ++ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ ++ files=`for p in $$list; do echo "$$p"; done | \ ++ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ ++ -e 's/$$/$(EXEEXT)/' `; \ ++ test -n "$$list" || exit 0; \ ++ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ ++ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files ++ ++clean-libexecPROGRAMS: ++ @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \ ++ echo " rm -f" $$list; \ ++ rm -f $$list || exit $$?; \ ++ test -n "$(EXEEXT)" || exit 0; \ ++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ ++ echo " rm -f" $$list; \ ++ rm -f $$list + gdm-screenshot$(EXEEXT): $(gdm_screenshot_OBJECTS) $(gdm_screenshot_DEPENDENCIES) + @rm -f gdm-screenshot$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gdm_screenshot_OBJECTS) $(gdm_screenshot_LDADD) $(LIBS) ++gdm-set-default-session$(EXEEXT): $(gdm_set_default_session_OBJECTS) $(gdm_set_default_session_DEPENDENCIES) ++ @rm -f gdm-set-default-session$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(gdm_set_default_session_OBJECTS) $(gdm_set_default_session_LDADD) $(LIBS) + gdmflexiserver$(EXEEXT): $(gdmflexiserver_OBJECTS) $(gdmflexiserver_DEPENDENCIES) + @rm -f gdmflexiserver$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gdmflexiserver_OBJECTS) $(gdmflexiserver_LDADD) $(LIBS) +@@ -547,6 +616,7 @@ + -rm -f *.tab.c + + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-screenshot.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdm-set-default-session.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdmflexiserver.Po@am__quote@ + + .c.o: +@@ -665,7 +735,7 @@ + check: check-am + all-am: Makefile $(PROGRAMS) $(SCRIPTS) + installdirs: +- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \ ++ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(sbindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done + install: install-am +@@ -697,7 +767,8 @@ + @echo "it deletes files that may require special tools to rebuild." + clean: clean-am + +-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am ++clean-am: clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \ ++ clean-libtool mostlyclean-am + + distclean: distclean-am + -rm -rf ./$(DEPDIR) +@@ -723,7 +794,8 @@ + + install-dvi-am: + +-install-exec-am: install-binPROGRAMS install-sbinSCRIPTS ++install-exec-am: install-binPROGRAMS install-libexecPROGRAMS \ ++ install-sbinSCRIPTS + + install-html: install-html-am + +@@ -763,23 +835,26 @@ + + ps-am: + +-uninstall-am: uninstall-binPROGRAMS uninstall-sbinSCRIPTS ++uninstall-am: uninstall-binPROGRAMS uninstall-libexecPROGRAMS \ ++ uninstall-sbinSCRIPTS + + .MAKE: install-am install-strip + + .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ +- clean-generic clean-libtool ctags distclean distclean-compile \ +- distclean-generic distclean-libtool distclean-tags distdir dvi \ +- dvi-am html html-am info info-am install install-am \ +- install-binPROGRAMS install-data install-data-am install-dvi \ +- install-dvi-am install-exec install-exec-am install-html \ +- install-html-am install-info install-info-am install-man \ +- install-pdf install-pdf-am install-ps install-ps-am \ +- install-sbinSCRIPTS install-strip installcheck installcheck-am \ +- installdirs maintainer-clean maintainer-clean-generic \ +- mostlyclean mostlyclean-compile mostlyclean-generic \ +- mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ +- uninstall-am uninstall-binPROGRAMS uninstall-sbinSCRIPTS ++ clean-generic clean-libexecPROGRAMS clean-libtool ctags \ ++ distclean distclean-compile distclean-generic \ ++ distclean-libtool distclean-tags distdir dvi dvi-am html \ ++ html-am info info-am install install-am install-binPROGRAMS \ ++ install-data install-data-am install-dvi install-dvi-am \ ++ install-exec install-exec-am install-html install-html-am \ ++ install-info install-info-am install-libexecPROGRAMS \ ++ install-man install-pdf install-pdf-am install-ps \ ++ install-ps-am install-sbinSCRIPTS install-strip installcheck \ ++ installcheck-am installdirs maintainer-clean \ ++ maintainer-clean-generic mostlyclean mostlyclean-compile \ ++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ ++ tags uninstall uninstall-am uninstall-binPROGRAMS \ ++ uninstall-libexecPROGRAMS uninstall-sbinSCRIPTS + + + gdm-stop: gdm-stop.in Makefile --- gdm-2.29.4.orig/debian/patches/12_fusa_name_change.patch +++ gdm-2.29.4/debian/patches/12_fusa_name_change.patch @@ -0,0 +1,46 @@ +# +# Description: Change Bonobo activation server name to avoid conflict with indicator-session +# Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gdm/+bug/410498 +# +diff -ur gdm-2.27.4/gui/user-switch-applet/applet.c gdm-ted/gui/user-switch-applet/applet.c +--- gdm-2.27.4/gui/user-switch-applet/applet.c 2009-07-20 02:09:09.000000000 +0100 ++++ gdm-ted/gui/user-switch-applet/applet.c 2009-08-07 22:29:45.000000000 +0100 +@@ -101,7 +101,7 @@ + const char *iid, + gpointer data); + +-PANEL_APPLET_BONOBO_FACTORY ("OAFIID:GNOME_FastUserSwitchApplet_Factory", ++PANEL_APPLET_BONOBO_FACTORY ("OAFIID:GNOME_FastUserSwitchAppletGdm_Factory", + PANEL_TYPE_APPLET, + "gdm-user-switch-applet", "0", + (PanelAppletFactoryCallback)applet_factory, +@@ -1619,7 +1619,7 @@ + { + gboolean ret; + ret = FALSE; +- if (strcmp (iid, "OAFIID:GNOME_FastUserSwitchApplet") == 0) { ++ if (strcmp (iid, "OAFIID:GNOME_FastUserSwitchAppletGdm") == 0) { + ret = fill_applet (applet); + } + return ret; +diff -ur gdm-2.27.4/gui/user-switch-applet/GNOME_FastUserSwitchApplet.server.in.in gdm-ted/gui/user-switch-applet/GNOME_FastUserSwitchApplet.server.in.in +--- gdm-2.27.4/gui/user-switch-applet/GNOME_FastUserSwitchApplet.server.in.in 2009-05-19 16:18:12.000000000 +0100 ++++ gdm-ted/gui/user-switch-applet/GNOME_FastUserSwitchApplet.server.in.in 2009-08-07 22:28:29.000000000 +0100 +@@ -1,5 +1,5 @@ + +- + + +@@ -18,8 +18,8 @@ + + + +- ++ + + + --- gdm-2.29.4.orig/debian/patches/05_initial_server_on_vt7.patch +++ gdm-2.29.4/debian/patches/05_initial_server_on_vt7.patch @@ -0,0 +1,25 @@ +# +# Description: Force initial X server to go to tty7 instead of tty1. This is an Ugly Hack until we have a cleaner solution for getty not to tramp over a running X server on vt1. +# Ubuntu: https://launchpad.net/bugs/396226 +# +diff -Nur -x '*.orig' -x '*~' gdm-2.26.1/daemon/gdm-server.c gdm-2.26.1.new/daemon/gdm-server.c +--- gdm-2.26.1/daemon/gdm-server.c 2009-07-09 15:33:58.281094408 +0200 ++++ gdm-2.26.1.new/daemon/gdm-server.c 2009-07-09 15:37:40.697075106 +0200 +@@ -674,9 +674,16 @@ + gdm_server_start (GdmServer *server) + { + gboolean res; ++ int f; ++ ++ /* HACK: force initial server to go on vt7, since 1 to 6 usually get ++ * gettys after gdm startup, which interfere with X */ ++ f = open ("/var/run/gdm/firstserver.stamp", O_CREAT|O_WRONLY|O_EXCL, 0666); ++ if (f >= 0) ++ close (f); + + /* fork X server process */ +- res = gdm_server_spawn (server, NULL); ++ res = gdm_server_spawn (server, (f >= 0) ? "vt7" : NULL); + + return res; + }