[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#1029825: emacs: reduce libgccjit0 related dependencies to optional?



Control: severity -1 normal

(Cc-ing libgccjit0 maintainers)

On Sat, 28 Jan 2023 07:44:45 -0400 David Bremner <bremner@debian.org> wrote:
>
> YOSHINO Yoshihito <yy.y.ja.jp@gmail.com> writes:
>
> > When I tried to install emacs-gtk or emacs-nox in bookworm, it pulls
> > many development packages, especially binutils, libgcc-12-dev,
> > libc6-dev and linux-libc-dev, which I would avoid to install if
> > possible. They are pulled through libgccjit0, and probably used with
> > the native compilation feature. It seems automatic native compilation
> > can be inhibited run-time since 1:28.2+1-9. Is it possible to demote
> > those dependencies to Recommends? (Probably I would also have to ask
> > the libgccjit0 maintainer).
>
> I don't think this will be possible for bookworm. libgccjit0 is
> dynamically linked to the emacs binaries, so a completely new flavour of
> emacs (analogous to emacs-nox) would be needed. It is too late in the
> development cycle to introduce such a thing, even if there was concensus
> that doing so was worth the effort.

Yes I know libgccjit0 is dynamically linked to it, so I don't intend to
keep out libgccjit0. Instead I intend to keep out some of the
dependencies of libgccjit0, specifically the following:
- libgcc-12-dev
- binutils
- libc6-dev (>= 2.23-1~)

I have just deliberately broken the dependencies and tested such an
emacs-nox installation. It seems to work as I expected:

$ LANG= sudo apt-get --no-install-recommends -V install
emacs-bin-common emacs-common

 Reading package lists... 0% Reading package lists... 100% Reading
package lists... Done
 Building dependency tree... 0% Building dependency tree... 0%
Building dependency tree... 50% Building dependency tree... 50%
Building dependency tree... Done
 Reading state information... 0%  Reading state information... 0%
Reading state information... Done
The following additional packages will be installed:
   emacs-el (1:28.2+1-10)
   install-info (6.8-6+b1)
Suggested packages:
   emacs-common-non-dfsg
Recommended packages:
   mailutils (1:3.15-3+b2)
The following NEW packages will be installed:
   emacs-bin-common (1:28.2+1-10)
   emacs-common (1:28.2+1-10)
   emacs-el (1:28.2+1-10)
   install-info (6.8-6+b1)
0 upgraded, 4 newly installed, 0 to remove and 58 not upgraded.
Need to get 0 B/31.2 MB of archives.
After this operation, 91.4 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Selecting previously unselected package install-info.
(Reading database ...  (Reading database ... 5% (Reading database ...
10% (Reading database ... 15% (Reading database ... 20% (Reading
database ... 25% (Reading database ... 30% (Reading database ... 35%
(Reading database ... 40% (Reading database ... 45% (Reading database
... 50% (Reading database ... 55% (Reading database ... 60% (Reading
database ... 65% (Reading database ... 70% (Reading database ... 75%
(Reading database ... 80% (Reading database ... 85% (Reading database
... 90% (Reading database ... 95% (Reading database ... 100% (Reading
database ... 160589 files and directories currently installed.)
Preparing to unpack .../install-info_6.8-6+b1_amd64.deb ...
Unpacking install-info (6.8-6+b1) ...
Setting up install-info (6.8-6+b1) ...
Selecting previously unselected package emacs-el.
(Reading database ...  (Reading database ... 5% (Reading database ...
10% (Reading database ... 15% (Reading database ... 20% (Reading
database ... 25% (Reading database ... 30% (Reading database ... 35%
(Reading database ... 40% (Reading database ... 45% (Reading database
... 50% (Reading database ... 55% (Reading database ... 60% (Reading
database ... 65% (Reading database ... 70% (Reading database ... 75%
(Reading database ... 80% (Reading database ... 85% (Reading database
... 90% (Reading database ... 95% (Reading database ... 100% (Reading
database ... 160604 files and directories currently installed.)
Preparing to unpack .../emacs-el_1%3a28.2+1-10_all.deb ...
Unpacking emacs-el (1:28.2+1-10) ...
Selecting previously unselected package emacs-common.
Preparing to unpack .../emacs-common_1%3a28.2+1-10_all.deb ...
Unpacking emacs-common (1:28.2+1-10) ...
Selecting previously unselected package emacs-bin-common.
Preparing to unpack .../emacs-bin-common_1%3a28.2+1-10_amd64.deb ...
Unpacking emacs-bin-common (1:28.2+1-10) ...
Setting up emacs-el (1:28.2+1-10) ...
Setting up emacs-common (1:28.2+1-10) ...
Setting up emacs-bin-common (1:28.2+1-10) ...
update-alternatives: using /usr/bin/ctags.emacs to provide
/usr/bin/ctags (ctags) in auto mode
update-alternatives: using /usr/bin/ebrowse.emacs to provide
/usr/bin/ebrowse (ebrowse) in auto mode
update-alternatives: using /usr/bin/emacsclient.emacs to provide
/usr/bin/emacsclient (emacsclient) in auto mode
update-alternatives: using /usr/bin/etags.emacs to provide
/usr/bin/etags (etags) in auto mode
Processing triggers for install-info (6.8-6+b1) ...
Processing triggers for mailcap (3.70+nmu1) ...
Processing triggers for desktop-file-utils (0.26-1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1.1) ...
Processing triggers for man-db (2.11.2-1) ...
$
$ LANG= sudo dpkg --force-depends -i
/var/cache/apt/archives/libgccjit0_12.2.0-14_amd64.deb

 Selecting previously unselected package libgccjit0:amd64.
(Reading database ...  (Reading database ... 5% (Reading database ...
10% (Reading database ... 15% (Reading database ... 20% (Reading
database ... 25% (Reading database ... 30% (Reading database ... 35%
(Reading database ... 40% (Reading database ... 45% (Reading database
... 50% (Reading database ... 55% (Reading database ... 60% (Reading
database ... 65% (Reading database ... 70% (Reading database ... 75%
(Reading database ... 80% (Reading database ... 85% (Reading database
... 90% (Reading database ... 95% (Reading database ... 100% (Reading
database ... 164696 files and directories currently installed.)
Preparing to unpack .../libgccjit0_12.2.0-14_amd64.deb ...
Unpacking libgccjit0:amd64 (12.2.0-14) ...
dpkg: libgccjit0:amd64: dependency problems, but configuring anyway as
you requested:
 libgccjit0:amd64 depends on libgcc-12-dev; however:
  Package libgcc-12-dev is not installed.
 libgccjit0:amd64 depends on binutils; however:
  Package binutils is not installed.
 libgccjit0:amd64 depends on libc6-dev (>= 2.23-1~); however:
  Package libc6-dev is not installed.

Setting up libgccjit0:amd64 (12.2.0-14) ...
Processing triggers for libc-bin (2.36-8) ...
$
$ LANG= sudo dpkg --force-depends -i
/var/cache/apt/archives/emacs-nox_1%3a28.2+1-10_amd64.deb

 Selecting previously unselected package emacs-nox.
(Reading database ...  (Reading database ... 5% (Reading database ...
10% (Reading database ... 15% (Reading database ... 20% (Reading
database ... 25% (Reading database ... 30% (Reading database ... 35%
(Reading database ... 40% (Reading database ... 45% (Reading database
... 50% (Reading database ... 55% (Reading database ... 60% (Reading
database ... 65% (Reading database ... 70% (Reading database ... 75%
(Reading database ... 80% (Reading database ... 85% (Reading database
... 90% (Reading database ... 95% (Reading database ... 100% (Reading
database ... 164699 files and directories currently installed.)
Preparing to unpack .../emacs-nox_1%3a28.2+1-10_amd64.deb ...
Unpacking emacs-nox (1:28.2+1-10) ...
Setting up emacs-nox (1:28.2+1-10) ...
update-alternatives: using /usr/bin/emacs-nox to provide
/usr/bin/emacs (emacs) in auto mode
Install emacsen-common for emacs
emacsen-common: Handling install of emacsen flavor emacs
Install dictionaries-common for emacs
install/dictionaries-common: Byte-compiling for emacsen flavour emacs
Processing triggers for man-db (2.11.2-1) ...
$
$ LANG= sudo apt-get --no-install-recommends -V install emacs-nox
 Reading package lists... 0% Reading package lists... 100% Reading
package lists... Done
 Building dependency tree... 0% Building dependency tree... 0%
Building dependency tree... 50% Building dependency tree... 50%
Building dependency tree... Done
 Reading state information... 0%  Reading state information... 0%
Reading state information... Done
emacs-nox is already the newest version (1:28.2+1-10).
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 libgccjit0 : Depends: libgcc-12-dev but it is not going to be installed
              Depends: binutils but it is not going to be installed
              Depends: libc6-dev (>= 2.23-1~) but it is not going to
be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages
(or specify a solution).
$

(of course broken, without the dependencies)

$ ldd /usr/bin/emacs
       linux-vdso.so.1 (0x00007ffcc99e2000)
        libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2
(0x00007f50ddc64000)
        libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f50ddc59000)
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3
(0x00007f50dd5aa000)
        libxml2.so.2 => /lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f50dd3fe000)
        libgpm.so.2 => /lib/x86_64-linux-gnu/libgpm.so.2 (0x00007f50ddc51000)
        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6
(0x00007f50dd3cc000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1
(0x00007f50dd39e000)
        libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30
(0x00007f50dd000000)
        liblcms2.so.2 => /lib/x86_64-linux-gnu/liblcms2.so.2
(0x00007f50dd33b000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f50dd25c000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f50ddc30000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0
(0x00007f50dcf31000)
        libjansson.so.4 => /lib/x86_64-linux-gnu/libjansson.so.4
(0x00007f50dd24c000)
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f50dceb0000)
        libgccjit.so.0 => /lib/x86_64-linux-gnu/libgccjit.so.0
(0x00007f50dac00000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f50dcccf000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f50ddd81000)
        libicuuc.so.72 => /lib/x86_64-linux-gnu/libicuuc.so.72
(0x00007f50daa02000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f50dd21d000)
        libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0
(0x00007f50da968000)
        libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0
(0x00007f50da834000)
        libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f50da803000)
        libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2
(0x00007f50da64d000)
        libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6
(0x00007f50dccba000)
        libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8
(0x00007f50da5ff000)
        libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6
(0x00007f50da5b6000)
        libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f50da5aa000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20
(0x00007f50da463000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f50da3aa000)
        liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f50da384000)
        libisl.so.23 => /lib/x86_64-linux-gnu/libisl.so.23 (0x00007f50da000000)
        libmpc.so.3 => /lib/x86_64-linux-gnu/libmpc.so.3 (0x00007f50da362000)
        libmpfr.so.6 => /lib/x86_64-linux-gnu/libmpfr.so.6 (0x00007f50da2a8000)
        libicudata.so.72 => /lib/x86_64-linux-gnu/libicudata.so.72
(0x00007f50d8200000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6
(0x00007f50d7e00000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
(0x00007f50da288000)
        libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f50da27c000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0
(0x00007f50da254000)
$
$ ldd /usr/lib/x86_64-linux-gnu/libgccjit.so.0
       linux-vdso.so.1 (0x00007ffffc9d5000)
        libisl.so.23 => /lib/x86_64-linux-gnu/libisl.so.23 (0x00007f9222600000)
        libmpc.so.3 => /lib/x86_64-linux-gnu/libmpc.so.3 (0x00007f9224b86000)
        libmpfr.so.6 => /lib/x86_64-linux-gnu/libmpfr.so.6 (0x00007f9224acc000)
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f922297f000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9222960000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f92228a7000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9222521000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9222340000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9224bbc000)
$

(all dynamic linking looks good)

$ EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION=t emacs -nw
Loading /etc/emacs/site-start.d/00debian.el (source)...done
50dictionaries-common.el (source)...
debian-ispell...
/var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
done
debian-ispell...done
/var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
done
etc/emacs/site-start.d/50dictionaries-common

(looks fine)

(typed C-x C-c)

$ find .emacs.d/
 .emacs.d/
$

(the native compilation is inhibited)

$ LANG= emacs -nw
Loading /etc/emacs/site-start.d/00debian.el (source)...done
50dictionaries-common.el (source)...
debian-ispell...
/var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
done
debian-ispell...done
/var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
done
etc/emacs/site-start.d/50dictionaries-common

Warning (comp): x86_64-linux-gnu-gcc-12: fatal error: cannot execute
'as': execvp: No such file or \
directory Disable showing  Disable logging
Warning (comp): x86_64-linux-gnu-gcc-12: fatal error: cannot execute
'as': execvp: No such file or \
directory Disable showing  Disable logging
Warning (comp): x86_64-linux-gnu-gcc-12: fatal error: cannot execute
'as': execvp: No such file or \
directory Disable showing  Disable logging
Warning (comp): x86_64-linux-gnu-gcc-12: fatal error: cannot execute
'as': execvp: No such file or \
directory Disable showing  Disable logging
Warning (comp): x86_64-linux-gnu-gcc-12: fatal error: cannot execute
'as': execvp: No such file or \
directory Disable showing  Disable logging

(of course, the native compilation fails)

(typed C-x C-c)

$ find .emacs.d/
 .emacs.d/
.emacs.d/eln-cache
.emacs.d/eln-cache/28.2-32ce8482
.emacs.d/eln-cache/28.2-32ce8482/debian-ispell-6348c193-269a3cf8neDIBP.eln.tmp
.emacs.d/eln-cache/28.2-32ce8482/debian-startup-709b84bb-734d0b9fuGKogD.eln.tmp
.emacs.d/eln-cache/28.2-32ce8482/cus-edit-3cd01345-f51dbe7aKbMyqp.eln.tmp
.emacs.d/eln-cache/28.2-32ce8482/wid-edit-5b92861a-140a8fecS0s6P6.eln.tmp
.emacs.d/eln-cache/28.2-32ce8482/t-mouse-b934bcc3-71477f26TRCVSv.eln.tmp
.emacs.d/eln-cache/28.2-32ce8482/pp-5d47c1cc-de730a1a4ENBvO.eln.tmp
$
 $ LANG= ls -l .emacs.d/eln-cache/28.2-32ce8482/
 total 0
-rw------- 1 user user 0 Jan 28 23:25 cus-edit-3cd01345-f51dbe7aKbMyqp.eln.tmp
-rw------- 1 user user 0 Jan 28 23:24
debian-ispell-6348c193-269a3cf8neDIBP.eln.tmp
-rw------- 1 user user 0 Jan 28 23:24
debian-startup-709b84bb-734d0b9fuGKogD.eln.tmp
-rw------- 1 user user 0 Jan 28 23:25 pp-5d47c1cc-de730a1a4ENBvO.eln.tmp
-rw------- 1 user user 0 Jan 28 23:25 t-mouse-b934bcc3-71477f26TRCVSv.eln.tmp
-rw------- 1 user user 0 Jan 28 23:24 wid-edit-5b92861a-140a8fecS0s6P6.eln.tmp
$

(of course, result of the native compilation is broken)


So IMO in libgccjit0 demoting those Depends: to Recommends: should work.

Thanks in advance,
-- 
YOSHINO Yoshihito <yy.y.ja.jp@gmail.com>


Reply to: