#1029825 emacs: reduce libgccjit0 related dependencies to optional?

#1029825#5
Date:
2023-01-28 10:46:28 UTC
From:
To:
Package: emacs
Version: 1:28.2+1-10
Severity: normal
X-Debbugs-Cc: yy.y.ja.jp@gmail.com

Dear Maintainer,

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).

Thanks in advance,

#1029825#10
Date:
2023-01-28 11:44:45 UTC
From:
To:
YOSHINO Yoshihito <yy.y.ja.jp@gmail.com> writes:

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.

#1029825#17
Date:
2023-01-28 11:44:45 UTC
From:
To:
YOSHINO Yoshihito <yy.y.ja.jp@gmail.com> writes:

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.

#1029825#22
Date:
2023-01-28 14:53:23 UTC
From:
To:
(Cc-ing libgccjit0 maintainers)

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,

#1029825#29
Date:
2023-01-28 16:44:28 UTC
From:
To:
YOSHINO Yoshihito <yy.y.ja.jp@gmail.com> writes:

OK, but two weeks before the soft freeze is IMHO not a good time for
this kind of experiment.  We just went through literally months of
debugging to get native compilation mostly working in emacs and hundreds
of associated packages. I suspect your proposed change will yield a
whole bunch of new bugs from people who don't install recommends, and
then don't understand what is broken.

With that said, I'm not the emacs maintainer, so I will bow out of the
discussion.

#1029825#34
Date:
2023-01-31 02:00:28 UTC
From:
To:
David Bremner <david@tethera.net> writes:

I think you're right.  Even if we decide we want to, there's no time
left for this release, and some of the work might not even be wrt the
emacs packages, proper.

That said, and as you mentioned, we could also consider other/additional
flavors of emacs, but of course those have their own costs.

In any case, happy to discuss adjustments for unstable after the
release.

Thanks

#1029825#39
Date:
2023-02-02 16:32:55 UTC
From:
To:
control: severity -1 wishlist

Hello,

I agree that it is unfortunate that all this now gets pulled in.

I doubt that we will want to support both native-comp and
non-native-comp anytime soon, however, even without the freeze.

#1029825#46
Date:
2023-02-02 21:59:37 UTC
From:
To:
Please consider building emacs-nox (or emacs-tiny?) without
native-compilation so that we can use emacs on a small storage.

Thanks,
--
Tatsuya Kinoshita