Name:             gdm
Epoch:            1
Version:          3.30.1
Release:          3
Summary:          A graphical display manager
License:          GPLv2+
URL:              https://wiki.gnome.org/Projects/GDM
Source0:          http://download.gnome.org/sources/gdm/3.30/gdm-%{version}.tar.xz
Source1:          org.gnome.login-screen.gschema.override
Source2:          default.pa-for-gdm
Patch0001:        0001-Honor-initial-setup-being-disabled-by-distro-install.patch
Patch0002:        0001-manager-correct-display-confusion.patch
Patch0003:        0001-local-display-factory-defer-initialization-for-CanGr.patch
Patch0004:        0001-manager-do-initial-setup-post-work-in-manager-code.patch
Patch0005:        system-dconf.patch

BuildRequires:    pam-devel >= 0:0.99.8.1-11 desktop-file-utils >= 0.2.90
BuildRequires:    libtool automake autoconf libattr-devel gettext-devel libdmx-devel
BuildRequires:    audit-libs-devel >= 1.0.6 xorg-x11-server-Xorg nss-devel >= 3.11.1
BuildRequires:    pkgconfig(accountsservice) >= 0.6.3 pkgconfig(check)
BuildRequires:    pkgconfig(gobject-introspection-1.0) pkgconfig(gtk+-3.0) >= 2.99.2
BuildRequires:    pkgconfig(iso-codes) pkgconfig(libcanberra-gtk3) pkgconfig(libselinux)
BuildRequires:    pkgconfig(libsystemd) pkgconfig(ply-boot-client) pkgconfig(systemd)
BuildRequires:    pkgconfig(x11) pkgconfig(xau) pkgconfig(xorg-server) libXdmcp-devel
BuildRequires:    systemd keyutils-libs-devel dconf

Requires(pre):    shadow-utils
Requires(post):   systemd
Requires(preun):  systemd
Requires(postun): systemd

Requires:         accountsservice audit-libs >= 1.0.6 dconf gnome-keyring-pam gnome-session
Requires:         gnome-session-wayland-session gnome-settings-daemon >= 3.27.90 gnome-shell iso-codes
Requires:         libXau >= 1.0.4-4 pam >= 0:0.99.8.1-11 util-linux setxkbmap systemd >= 186
Requires:         system-logos xorg-x11-server-utils xorg-x11-xinit

Provides:         service(graphical-login) = %{name}
Provides:         gdm-libs%{?_isa} = %{epoch}:%{version}-%{release}
Provides:         gdm-plugin-smartcard = %{epoch}:%{version}-%{release}
Provides:         gdm-plugin-fingerprint = %{epoch}:%{version}-%{release}
Provides:         pulseaudio-gdm-hooks = 1:%{version}-%{release}
Obsoletes:        gdm-libs < 1:3.12.0-3 gdm-plugin-smartcard < 1:3.2.1
Obsoletes:        gdm-plugin-fingerprint < 1:3.2.1 pulseaudio-gdm-hooks < 1:11.1-17

%description
The GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays,
and if the session doesn't provide a display server, GDM will start
the display server. It also provides initiate functionality for
user-switching, so multiple users can be logged in at the same time.

%package          devel
Summary:          Development files for gdm
Requires:         %{name} = %{epoch}:%{version}-%{release}
Provides:         gdm-pam-extensions-devel = %{epoch}:%{version}-%{release}
Provides:         gdm-pam-extensions-devel%{?_isa} = %{epoch}:%{version}-%{release}
Obsoletes:        gdm-pam-extensions-devel < 1:3.30.1-3
Obsoletes:        gdm-pam-extensions-devel%{?_isa} < 1:3.30.1-3

%description      devel
The gdm-devel package contains header files and others for building
applications that use GDM.

%prep
%autosetup -n %{name}-%{version} -p1
autoreconf -if

%build
%configure --with-pam-prefix=%{_sysconfdir} --with-run-dir=/run/gdm \
           --with-default-path=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin \
           --enable-split-authentication --enable-profiling --enable-console-helper \
           --with-selinux --with-default-pam-config=arch

sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' libtool
sed -i -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool

%make_build

%install
install -d %{buildroot}%{_sysconfdir}/gdm/Init
install -d %{buildroot}%{_sysconfdir}/gdm/PreSession
install -d %{buildroot}%{_sysconfdir}/gdm/PostSession
install -d %{buildroot}/var/log/gdm
install -d %{buildroot}%{_datadir}/gdm/autostart/LoginWindow
install -d %{buildroot}/run/gdm

%make_install

install -D %{SOURCE1} %{buildroot}%{_datadir}/glib-2.0/schemas
install -p -m644 -D %{SOURCE2} %{buildroot}%{_localstatedir}/lib/gdm/.config/pulse/default.pa
(cd %{buildroot}%{_sysconfdir}/gdm; ln -sf ../X11/xinit/Xsession .)

%delete_la_and_a

%find_lang gdm --with-gnome

%pre
/usr/sbin/useradd -M -u 42 -d /var/lib/gdm -s /sbin/nologin -r gdm > /dev/null 2>&1
/usr/sbin/usermod -d /var/lib/gdm -s /sbin/nologin gdm >/dev/null 2>&1
exit 0

%post
newconffile=/etc/gdm/custom.conf

if [ $1 -ge 2 ] ; then
    if [ -f /usr/share/gdm/config/gdm.conf-custom ]; then
        oldconffile=/usr/share/gdm/config/gdm.conf-custom
    elif [ -f /etc/X11/gdm/gdm.conf ]; then
        oldconffile=/etc/X11/gdm/gdm.conf
    fi

    if [ -n "$oldconffile" ]; then
        sed -e 's@^Greeter=/usr/bin/gdmlogin@Greeter=/usr/libexec/gdmlogin@' $oldconffile > $newconffile
        sed -e 's@^RemoteGreeter=/usr/bin/gdmgreeter@RemoteGreeter=/usr/libexec/gdmgreeter@' $oldconffile >> $newconffile
    fi
fi

%systemd_post gdm.service

%preun
%systemd_preun gdm.service

%postun
%systemd_postun gdm.service

%files -f gdm.lang
%doc AUTHORS NEWS README.md COPYING
%config(noreplace) %{_sysconfdir}/gdm/custom.conf
%config %{_sysconfdir}/gdm/Init/*
%config %{_sysconfdir}/gdm/PostLogin/*
%config %{_sysconfdir}/gdm/PreSession/*
%config %{_sysconfdir}/gdm/PostSession/*
%{_sysconfdir}/gdm/Xsession
%config %{_sysconfdir}/pam.d/gdm-autologin
%config %{_sysconfdir}/pam.d/gdm-password
%config %{_sysconfdir}/pam.d/gdm-pin
%config %{_sysconfdir}/pam.d/gdm-smartcard
%config %{_sysconfdir}/pam.d/gdm-fingerprint
%exclude %{_sysconfdir}/pam.d/gdm
%{_sysconfdir}/pam.d/gdm-launch-environment
%{_sysconfdir}/dbus-1/system.d/gdm.conf
%{_datadir}/gdm/gdm.schemas
%{_datadir}/gdm/greeter-dconf-defaults
%{_datadir}/gdm/locale.alias
%{_datadir}/gdm/gdb-cmd
%{_datadir}/gdm/greeter/applications/*
%{_datadir}/gdm/greeter/autostart/*
%{_datadir}/pixmaps/*.png
%{_datadir}/glib-2.0/schemas/*
%{_datadir}/dconf/profile/gdm
%{_datadir}/gnome-session/sessions/gnome-login.session
%{_datadir}/icons/hicolor/*/*/*.png
%{_libexecdir}/*
%{_sbindir}/gdm
%{_bindir}/*
%{_libdir}/girepository-1.0/Gdm-1.0.typelib
%{_libdir}/security/pam_gdm.so
%{_libdir}/libgdm*.so*
%dir %{_localstatedir}/log/gdm
%attr(1770, gdm, gdm) %dir %{_localstatedir}/lib/gdm
%attr(0700, gdm, gdm) %dir %{_localstatedir}/lib/gdm/.config
%attr(0700, gdm, gdm) %dir %{_localstatedir}/lib/gdm/.config/pulse
%attr(0600, gdm, gdm) %{_localstatedir}/lib/gdm/.config/pulse/default.pa
%attr(0711, root, gdm) %dir /run/gdm
%attr(1755, root, gdm) %dir %{_localstatedir}/cache/gdm
%{_udevrulesdir}/61-gdm.rules
%{_unitdir}/gdm.service

%files            devel
%{_includedir}/gdm/*.h
%{_datadir}/gir-1.0/Gdm-1.0.gir
%{_libdir}/pkgconfig/*.pc

%changelog
* Wed Nov 23 2019 Jiangping Hu <hujiangping@huawei.com> - 1:3.30.1-3
- Package init
