* Process to build standalone Emacs + deps in Windows
@ 2020-03-22 13:03 Juan José García Ripoll
2020-03-22 13:59 ` Eli Zaretskii
2020-03-22 18:32 ` phillip.lord
0 siblings, 2 replies; 37+ messages in thread
From: Juan José García Ripoll @ 2020-03-22 13:03 UTC (permalink / raw)
To: emacs-devel
Hi,
I am trying to debug the process of building a distributable Emacs with
dependencies on Windows 64 bits. I have seen some sketch of
documentation under nt/ but it does not include support for graphics and
image formats, which the official distribution for Windows includes.
What are the steps or the scripts used to create the *.zip files that
are found in the official repository? Is there a simple guide I can use
to reproduce it?
Best,
--
Juan José García Ripoll
Quantum Information and Foundations Group
http://quinfog.hbar.es - http://juanjose.garcia.ripoll
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 13:03 Process to build standalone Emacs + deps in Windows Juan José García Ripoll
@ 2020-03-22 13:59 ` Eli Zaretskii
2020-03-22 14:38 ` Juan José García-Ripoll
2020-03-22 18:32 ` phillip.lord
1 sibling, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-22 13:59 UTC (permalink / raw)
To: Juan José García Ripoll; +Cc: emacs-devel
> From: juanjose.garciaripoll@gmail.com (Juan José García
> Ripoll)
> Date: Sun, 22 Mar 2020 14:03:19 +0100
>
> I am trying to debug the process of building a distributable Emacs with
> dependencies on Windows 64 bits. I have seen some sketch of
> documentation under nt/ but it does not include support for graphics and
> image formats, which the official distribution for Windows includes.
>
> What are the steps or the scripts used to create the *.zip files that
> are found in the official repository? Is there a simple guide I can use
> to reproduce it?
Did you look at the files in admin/nt/ ?
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 13:59 ` Eli Zaretskii
@ 2020-03-22 14:38 ` Juan José García-Ripoll
2020-03-22 17:25 ` Eli Zaretskii
` (2 more replies)
0 siblings, 3 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-22 14:38 UTC (permalink / raw)
To: emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
>> I am trying to debug the process of building a distributable Emacs
>> with dependencies on Windows 64 bits. [...] What are the steps or the
>> scripts used to create the *.zip files that are found in the official
>> repository? Is there a simple guide I can use to reproduce it?
>
> Did you look at the files in admin/nt/ ?
No, I was focused on the 'nt/' folder and did not expect other
locations. Thanks for the hint.
Now, to motivate my intentions a bit better, I have built Emacs from
savannah's git repository following a different set of instructions
(https://gist.github.com/nauhygon/f3b44f51b34e89bc54f8). These
instructions are hacky (cp /mingw64/bin/*.dll $target/bin). However,
this seems to work, which shows that, out of the dependencies that Emacs
tracks down during its build process, many can be dropped. The resulting
directory is also leaner
$ du -smc scoop/apps/emacs/26.3 # standard distribution
758 scoop/apps/emacs/26.3
$ du -smc scoop/apps/emacs/27 # from git
207 scoop/apps/emacs/27
The extra space seems to be:
- Executables that come with the linked in libraries, such as
tiff2bw.exe, minizip.exe, imginfo.exe, etc.
- Dependencies that are needed by the libraries in development mode, but
not in actual use, such as the python library brought in by glib,
together with all their associated directories.
- Secondary dependencies of those other libraries, such as tcl/tk
brought in by python (once more, executables, DLL's and supporting
directories)
On a side note, what kind of solution would be acceptable?
- Do we need to keep all the utilities supplied by the libraries Emacs
links to?
- Is a manual filter of second-level dependencies ok?
- Is there a catalogue of utilities that Emacs expect laying around in
the OS? I see the dependencies file contains bzip2.exe, xz.exe and other
tools which are not coming from first-level dependencies.
Finally, I am cleared by the FSF to contribute patches to AucTeX. Would
I require a validation also to contribute fixes to Emacs?
Cheers,
--
Juan José García Ripoll
Quantum Information and Foundations Group
http://quinfog.hbar.es - http://juanjose.garciaripoll.com
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 14:38 ` Juan José García-Ripoll
@ 2020-03-22 17:25 ` Eli Zaretskii
2020-03-22 18:54 ` Phillip Lord
2020-03-22 18:58 ` Phillip Lord
2 siblings, 0 replies; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-22 17:25 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Sun, 22 Mar 2020 15:38:10 +0100
>
> Now, to motivate my intentions a bit better, I have built Emacs from
> savannah's git repository following a different set of instructions
> (https://gist.github.com/nauhygon/f3b44f51b34e89bc54f8). These
> instructions are hacky (cp /mingw64/bin/*.dll $target/bin). However,
> this seems to work, which shows that, out of the dependencies that Emacs
> tracks down during its build process, many can be dropped. The resulting
> directory is also leaner
What do you mean by "dependencies that Emacs tracks down during its
build process"? I'm not sure how what happens during the build is
relevant to what happens at run time.
> On a side note, what kind of solution would be acceptable?
> - Do we need to keep all the utilities supplied by the libraries Emacs
> links to?
No, only those that are needed. But figuring out which ones are those
is not simple. The basic problem here is exacerbated by the fact that
MSYS2 produces notoriously fat binary distros, where every possible
optional dependency has been included, whether it does or doesn't make
sense on Windows (or at all), and every possible product is included
(which of course enlarges the list of dependencies and, recursively,
their dependencies). Figuring out what's needed requires a lot of
tedious reading of documentation and some research.
> - Is a manual filter of second-level dependencies ok?
It depends on who does the job. Some don't mind manually removing
stuff, others don't have time for that. Since this is work done by
volunteers, and Emacs as a project doesn't provide "official"
MS-Windows binaries, it isn't for me to make the decision here.
> - Is there a catalogue of utilities that Emacs expect laying around in
> the OS? I see the dependencies file contains bzip2.exe, xz.exe and other
> tools which are not coming from first-level dependencies.
That's a separate issue. Various Emacs features use external
programs, and where do you stop is up to you. For example, DocView
will not work 100% without Ghostscript, AFAIK -- do we need to provide
it as part of Emacs? Or what about TeX/LaTeX, used by some features?
Or Groff (required for formatting man pages, something "M-x man" would
like to do). Etc. etc. These are very large packages, and some might
say you will end up with a very large Emacs installation if you
include all of them.
> Finally, I am cleared by the FSF to contribute patches to AucTeX. Would
> I require a validation also to contribute fixes to Emacs?
Your assignment is for Emacs, so you are good there.
Thanks.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 13:03 Process to build standalone Emacs + deps in Windows Juan José García Ripoll
2020-03-22 13:59 ` Eli Zaretskii
@ 2020-03-22 18:32 ` phillip.lord
1 sibling, 0 replies; 37+ messages in thread
From: phillip.lord @ 2020-03-22 18:32 UTC (permalink / raw)
To: juanjose.garciaripoll; +Cc: Emacs-devel, emacs-devel
On 2020-03-22 13:03, juanjose.garciaripoll@gmail.com wrote:
> Hi,
>
> I am trying to debug the process of building a distributable Emacs with
> dependencies on Windows 64 bits. I have seen some sketch of
> documentation under nt/ but it does not include support for graphics
> and
> image formats, which the official distribution for Windows includes.
>
> What are the steps or the scripts used to create the *.zip files that
> are found in the official repository? Is there a simple guide I can use
> to reproduce it?
>
> Best,
The documentation is in admin/nt/dist-build/README-scripts
It's a little long-winded to set up, I am afraid, but once you have the
right directory structure, it's one command.
Let me know if the instructions still work. I mostly run them on a
single machine that I keep for the purpose, so I have not had to run
them through de-novo for quite a while.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 14:38 ` Juan José García-Ripoll
2020-03-22 17:25 ` Eli Zaretskii
@ 2020-03-22 18:54 ` Phillip Lord
2020-03-22 19:35 ` Eli Zaretskii
2020-03-25 12:50 ` Juan José García-Ripoll
2020-03-22 18:58 ` Phillip Lord
2 siblings, 2 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-22 18:54 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Now, to motivate my intentions a bit better, I have built Emacs from
> savannah's git repository following a different set of instructions
> (https://gist.github.com/nauhygon/f3b44f51b34e89bc54f8). These
> instructions are hacky (cp /mingw64/bin/*.dll $target/bin). However,
> this seems to work, which shows that, out of the dependencies that Emacs
> tracks down during its build process, many can be dropped. The resulting
> directory is also leaner
>
> $ du -smc scoop/apps/emacs/26.3 # standard distribution
> 758 scoop/apps/emacs/26.3
> $ du -smc scoop/apps/emacs/27 # from git
> 207 scoop/apps/emacs/27
>
> The extra space seems to be:
> - Executables that come with the linked in libraries, such as
> tiff2bw.exe, minizip.exe, imginfo.exe, etc.
> - Dependencies that are needed by the libraries in development mode, but
> not in actual use, such as the python library brought in by glib,
> together with all their associated directories.
> - Secondary dependencies of those other libraries, such as tcl/tk
> brought in by python (once more, executables, DLL's and supporting
> directories)
Yes, all of this is true. I *mostly* just let MSYS2 decide what goes in,
since it provides the full dependency list. There are a few exceptions
which decrease the install size significantly (such as python). Combined
with executable installer option, the overall download size is now at
50Mb -- this is incidentally, only a tad more than the no-deps zip.
I am inclined to believe that at 50Mb, it's really not something worth
worrying about.
> On a side note, what kind of solution would be acceptable?
> - Do we need to keep all the utilities supplied by the libraries Emacs
> links to?
> - Is a manual filter of second-level dependencies ok?
> - Is there a catalogue of utilities that Emacs expect laying around in
> the OS? I see the dependencies file contains bzip2.exe, xz.exe and other
> tools which are not coming from first-level dependencies.
No, there is no such catalogue. It all comes from MSYS2. The only list I
maintain is in build-deps-zip.py which looks like this:
mingw-w64-x86_64-giflib
mingw-w64-x86_64-gnutls
mingw-w64-x86_64-lcms2
mingw-w64-x86_64-libjpeg-turbo
mingw-w64-x86_64-libpng
mingw-w64-x86_64-librsvg
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-libxml2
mingw-w64-x86_64-xpm-nox
Incidentally, @Eli have I missed up here? Should this not include
Harfbuzz? I have a local branch to which I have added it, but it's not
on Master or Emacs-27.
There has been discussion previously both on decreasing the size of the
download (by removing the full transitive dependency list) and also on
adding new dependencies by adding essential utilities. I even added a
feature branch for the latter
http://git.savannah.gnu.org/cgit/emacs.git/log/?h=feature/windows-with-utils
As you can see, it has not had many contributors.
Still, I am open to new ideas and contributors, but limited in time to
support these contributions.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 14:38 ` Juan José García-Ripoll
2020-03-22 17:25 ` Eli Zaretskii
2020-03-22 18:54 ` Phillip Lord
@ 2020-03-22 18:58 ` Phillip Lord
2 siblings, 0 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-22 18:58 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Now, to motivate my intentions a bit better, I have built Emacs from
> savannah's git repository following a different set of instructions
> (https://gist.github.com/nauhygon/f3b44f51b34e89bc54f8). These
> instructions are hacky (cp /mingw64/bin/*.dll $target/bin).
Incidentally, those instructions are "modified from emacs-w64 Wiki page
by zklhp." It what the Emacs-w64 instructions that I used way back when
as the basis for the build-zips.sh file which makes the 64 bit
build. What goes around, comes around.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 18:54 ` Phillip Lord
@ 2020-03-22 19:35 ` Eli Zaretskii
2020-03-22 21:02 ` Phillip Lord
2020-03-25 12:50 ` Juan José García-Ripoll
1 sibling, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-22 19:35 UTC (permalink / raw)
To: Phillip Lord; +Cc: juanjose.garciaripoll, emacs-devel
> From: Phillip Lord <phillip.lord@russet.org.uk>
> Date: Sun, 22 Mar 2020 18:54:48 +0000
> Cc: emacs-devel@gnu.org
>
> Incidentally, @Eli have I missed up here? Should this not include
> Harfbuzz? I have a local branch to which I have added it, but it's not
> on Master or Emacs-27.
It definitely should. I asked you on at least two occasions why the
Emacs you build doesn't include HarfBuzz, but got no answer. I guess
I have it now ;-)
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 19:35 ` Eli Zaretskii
@ 2020-03-22 21:02 ` Phillip Lord
2020-03-23 3:23 ` Eli Zaretskii
0 siblings, 1 reply; 37+ messages in thread
From: Phillip Lord @ 2020-03-22 21:02 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: juanjose.garciaripoll, emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Phillip Lord <phillip.lord@russet.org.uk>
>> Date: Sun, 22 Mar 2020 18:54:48 +0000
>> Cc: emacs-devel@gnu.org
>>
>> Incidentally, @Eli have I missed up here? Should this not include
>> Harfbuzz? I have a local branch to which I have added it, but it's not
>> on Master or Emacs-27.
>
> It definitely should. I asked you on at least two occasions why the
> Emacs you build doesn't include HarfBuzz, but got no answer. I guess
> I have it now ;-)
Yeah, I added it to the HarfBuzz branch. But then I changed
build-dep-zips to use a different logic so that I could selectively drop
some of the transitive dependencies because of the really large size the
download had. I guess it did not survive the merge of the HarfBuzz branch.
So, what should I do? Clearly it needs to go in. I guess as we are still
pre-release, I should add to Emacs-27; I can rebuild the deps files now,
before I fix it for the Emacs-27 cycle?
Sorry I missed your earlier emails; I struggle to keep up with email am
afraid.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 21:02 ` Phillip Lord
@ 2020-03-23 3:23 ` Eli Zaretskii
2020-03-23 23:36 ` Phillip Lord
0 siblings, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-23 3:23 UTC (permalink / raw)
To: Phillip Lord; +Cc: juanjose.garciaripoll, emacs-devel
> From: Phillip Lord <phillip.lord@russet.org.uk>
> Cc: juanjose.garciaripoll@gmail.com, emacs-devel@gnu.org
> Date: Sun, 22 Mar 2020 21:02:06 +0000
>
> So, what should I do? Clearly it needs to go in. I guess as we are still
> pre-release, I should add to Emacs-27; I can rebuild the deps files now,
> before I fix it for the Emacs-27 cycle?
Yes, please.
> Sorry I missed your earlier emails; I struggle to keep up with email am
> afraid.
No sweat.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-23 3:23 ` Eli Zaretskii
@ 2020-03-23 23:36 ` Phillip Lord
2020-03-24 3:27 ` Eli Zaretskii
0 siblings, 1 reply; 37+ messages in thread
From: Phillip Lord @ 2020-03-23 23:36 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: juanjose.garciaripoll, emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Phillip Lord <phillip.lord@russet.org.uk>
>> Cc: juanjose.garciaripoll@gmail.com, emacs-devel@gnu.org
>> Date: Sun, 22 Mar 2020 21:02:06 +0000
>>
>> So, what should I do? Clearly it needs to go in. I guess as we are still
>> pre-release, I should add to Emacs-27; I can rebuild the deps files now,
>> before I fix it for the Emacs-27 cycle?
>
> Yes, please.
Want me to push these up to alpha with the same name (emacs-27.0.90-) on
top of the existing ones or rename them? (emacs-27.0.90-2-).
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-23 23:36 ` Phillip Lord
@ 2020-03-24 3:27 ` Eli Zaretskii
2020-03-24 18:21 ` Phillip Lord
0 siblings, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-24 3:27 UTC (permalink / raw)
To: Phillip Lord; +Cc: juanjose.garciaripoll, emacs-devel
> From: Phillip Lord <phillip.lord@russet.org.uk>
> Cc: juanjose.garciaripoll@gmail.com, emacs-devel@gnu.org
> Date: Mon, 23 Mar 2020 23:36:36 +0000
>
> Want me to push these up to alpha with the same name (emacs-27.0.90-) on
> top of the existing ones or rename them? (emacs-27.0.90-2-).
A new name would be preferable, thanks.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-24 3:27 ` Eli Zaretskii
@ 2020-03-24 18:21 ` Phillip Lord
0 siblings, 0 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-24 18:21 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: juanjose.garciaripoll, emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Phillip Lord <phillip.lord@russet.org.uk>
>> Cc: juanjose.garciaripoll@gmail.com, emacs-devel@gnu.org
>> Date: Mon, 23 Mar 2020 23:36:36 +0000
>>
>> Want me to push these up to alpha with the same name (emacs-27.0.90-) on
>> top of the existing ones or rename them? (emacs-27.0.90-2-).
>
> A new name would be preferable, thanks.
All done.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-22 18:54 ` Phillip Lord
2020-03-22 19:35 ` Eli Zaretskii
@ 2020-03-25 12:50 ` Juan José García-Ripoll
2020-03-25 14:43 ` Juan José García-Ripoll
1 sibling, 1 reply; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-25 12:50 UTC (permalink / raw)
To: emacs-devel
Phillip Lord <phillip.lord@russet.org.uk> writes:
> Yes, all of this is true. I *mostly* just let MSYS2 decide what goes in,
> since it provides the full dependency list. There are a few exceptions
> which decrease the install size significantly (such as python). Combined
> with executable installer option, the overall download size is now at
> 50Mb -- this is incidentally, only a tad more than the no-deps zip.
You are right. Indeed, I did not realize that you had already shrunk the
size so much!
- I checked the 26.3 release and that one was 758Mb with emacs and
dependencies.
- I just built dependencies with the method in the emacs-27 prerelease and
x86_64 is just 128 Mb. Python is no longer installed and it is not listed as
dependency by glib2.
Nevertheless, we could make further improvements:
- We can save further 37Mb by removing the linking libraries *.a from
mingw64/lib
- Another 26Mb can be removed by eliminating the mingw64/share/doc and
mingw64/share/gtk-doc folders. I would only leave share/doc/licenses for
obvious reasons
- Since we are not shipping libraries, mingw64/include should also probably go.
- Since we are pulling in compression utilities, we may just as well tell the
configuration to compress the *.el files. Windows is the only platform where
this does not happen
- I would remove all utilities (*.exe) that are not strictly needed. I suspect
the *tls*.exe tools are required. We could leave the those, the compressor
and remove the rest.
With all this, except the removal of *.exe files, we go down to 52Mb (60%
reduction) uncompressed data, as reported by unzip. I know that space is not
much of an issue in this world, but I think it is fair to keep just what is
needed, plus it makes Emacs even smaller than most Electron apps around. First
impressions matter.
Cheers,
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 12:50 ` Juan José García-Ripoll
@ 2020-03-25 14:43 ` Juan José García-Ripoll
2020-03-25 14:54 ` Juan José García-Ripoll
2020-03-25 15:25 ` Eli Zaretskii
0 siblings, 2 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-25 14:43 UTC (permalink / raw)
To: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Nevertheless, we could make further improvements: [...]
> With all this, except the removal of *.exe files, we go down to 52Mb (60%
> reduction) uncompressed data, as reported by unzip. I know that space is not
> much of an issue in this world, but I think it is fair to keep just what is
> needed, plus it makes Emacs even smaller than most Electron apps around. First
> impressions matter.
I attach a patch file that changes build-dep-zips.py with the following
fixes
1. It no longer assumes that LANG is en_US. I am in Spain and pacman
defaults to the system's locale, breaking the algorithm that
build-dep-zips.py uses to identify dependencies.
2. Cleaning is a standalone operation. Formerly it would try to build
all dependencies prior to cleaning. Since I have msys only for 64-bits
that would fail in my system.
3. It shows what package pulls what. It has been helpful in
understanding the dependencies.
4. It creates a zip file where many of the superfluous directories and
executables have been removed. I would go for removing even more, since
it seems that Emacs is built with zlib and we could get rid of
b*zip*.exe, xz.exe, etc.
Overall the dependencies are now about 42Mb uncompressed. As I said, it
can be slightly smaller if we get rid of further command line tools, but
I am currently worried that some of the TLS routines may be used.
Some questions:
a) Is there a way to test the resulting standalone distribution to
verify that Emacs is running properly?
b) I realized that Cairo is pulled in as a dependency, but Emacs is
built without support for Cairo. Is this intentional?
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 14:43 ` Juan José García-Ripoll
@ 2020-03-25 14:54 ` Juan José García-Ripoll
2020-03-25 15:33 ` Eli Zaretskii
2020-03-25 22:34 ` Phillip Lord
2020-03-25 15:25 ` Eli Zaretskii
1 sibling, 2 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-25 14:54 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 279 bytes --]
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> I attach a patch file that changes build-dep-zips.py with the following
> fixes
As usual, the missing attachment below.
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: build-dep-zips.diff --]
[-- Type: text/x-patch, Size: 3642 bytes --]
diff --git a/admin/nt/dist-build/build-dep-zips.py b/admin/nt/dist-build/build-dep-zips.py
index 33ed4b6..6390eae 100755
--- a/admin/nt/dist-build/build-dep-zips.py
+++ b/admin/nt/dist-build/build-dep-zips.py
@@ -83,6 +83,11 @@ def immediate_deps(pkg):
dependencies = [d.split(">")[0] for d in dependencies if d]
dependencies = [d for d in dependencies if not d == "None"]
+ if dependencies:
+ print(f"Package {pkg} depends on:")
+ for d in dependencies:
+ print(f" -> {d}")
+
dependencies = [MUNGE_DEP_PKGS.get(d, d) for d in dependencies]
return dependencies
@@ -107,7 +112,8 @@ def extract_deps():
def gather_deps(deps, arch, directory):
- os.mkdir(arch)
+ if not os.path.exists(arch):
+ os.mkdir(arch)
os.chdir(arch)
## Replace the architecture with the correct one
@@ -135,11 +141,56 @@ def gather_deps(deps, arch, directory):
print("Copying dependencies: {}".format(arch))
check_output_maybe(["rsync", "-R"] + deps_files + ["."])
+ ## exclude files
+ excludes=['lib/*.a', # No files to link against
+ 'lib/*/*.exe', # No hidden executables
+ 'libexec/*/*.exe',
+ 'include/*', # No development files
+ 'lib/cmake/*',
+ 'lib/pkgconfig/*',
+ 'lib/python*/*',
+ 'share/aclocal/*',
+ 'share/gettext/*',
+ 'share/doc/*', # No documentation from libraries
+ 'share/gtk-doc/*',
+ 'share/man/*',
+ 'share/info/*',
+ 'bin/*tiff*.exe', # No graphic manipulation tools
+ 'bin/img*.exe',
+ 'bin/*gif*.exe',
+ 'bin/*jpg*.exe',
+ 'bin/*jpeg*.exe',
+ 'bin/*png*.exe',
+ 'bin/*svg*.exe',
+ 'bin/*xpm*.exe',
+ 'bin/*icc.exe',
+ 'bin/fax2*.exe',
+ 'bin/pango-*.exe',
+ 'bin/gdk-*.exe',
+ 'bin/jasper.exe',
+ 'bin/fc-*.exe', # No font configuration tools
+ 'bin/gr2fonttest.exe',
+ 'bin/hb-*.exe',
+ 'bin/msg*.exe', # No tools to manipulate gettext catalogues
+ 'bin/*gettext.exe'
+ ]
+ ## Files that might have been excluded by those rules
+ includes=[]
+ ## Build command line argument for zip
+ if excludes:
+ excludes = '-x '+' '.join(excludes).replace('*','\\*')
+ else:
+ excludes = ''
+ if includes:
+ includes = '-i '+' '.join(includes).replace('*','\\*')
+ else:
+ includes=''
+
## And package them up
os.chdir(directory)
print("Zipping: {}".format(arch))
- check_output_maybe("zip -9r ../../emacs-{}-{}{}-deps.zip *"
- .format(EMACS_MAJOR_VERSION, DATE, arch),
+ check_output_maybe("zip -9r ../../emacs-{}-{}{}-deps.zip * {} {}"
+ .format(EMACS_MAJOR_VERSION, DATE, arch, excludes, includes),
shell=True)
os.chdir("../../")
@@ -255,6 +306,17 @@ def clean():
args = parser.parse_args()
do_all=not (args.c or args.r or args.f or args.t)
+if( args.c ):
+ clean()
+ exit(0)
+
+# The dependency extraction relies on an English version of pacman
+# We need to configure the locale to match the expectations
+if 'LANG' in os.environ:
+ os_lang = os.environ['LANG']
+ if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
+ os.environ['LANG']='en_US'
+
deps=extract_deps()
DRY_RUN=args.d
@@ -277,6 +339,3 @@ def clean():
if( do_all or args.r ):
gather_source(deps)
-
-if( args.c ):
- clean()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 14:43 ` Juan José García-Ripoll
2020-03-25 14:54 ` Juan José García-Ripoll
@ 2020-03-25 15:25 ` Eli Zaretskii
1 sibling, 0 replies; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-25 15:25 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Wed, 25 Mar 2020 15:43:24 +0100
>
> 4. It creates a zip file where many of the superfluous directories and
> executables have been removed. I would go for removing even more, since
> it seems that Emacs is built with zlib and we could get rid of
> b*zip*.exe, xz.exe, etc.
No, zlib doesn't replace bzip2 and xz, you need additional libraries
for that (and Emacs currently cannot use such libraries directly
anyway).
> b) I realized that Cairo is pulled in as a dependency, but Emacs is
> built without support for Cairo. Is this intentional?
It's a side effect of the fact that librsvg needs Cairo. We don't
(yet) have support for drawing with Cairo on MS-Windows directly from
Emacs.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 14:54 ` Juan José García-Ripoll
@ 2020-03-25 15:33 ` Eli Zaretskii
2020-03-25 16:41 ` Juan José García-Ripoll
2020-03-25 22:34 ` Phillip Lord
1 sibling, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-25 15:33 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Wed, 25 Mar 2020 15:54:05 +0100
>
> + 'libexec/*/*.exe',
This is not necessarily wise. It could be TRT with the current
dependencies, but might lose in the long run. E.g., suppose someone
decides to add GNU Findutils to the bundle.
> + 'share/doc/*', # No documentation from libraries
> + 'share/gtk-doc/*',
> + 'share/man/*',
> + 'share/info/*',
Questionable. Why deprive the users from being able to read the docs
of the dependencies? Some of that could be very relevant. E.g., what
about the docs of bzip2.exe, xz.exe, etc.? they might come in handy
for setting up all kinds of *-switches defcustoms.
> + 'bin/fc-*.exe', # No font configuration tools
If some dependency is configured to access fonts via Fontconfig (is it
HarfBuzz?), then this is a mistake, because some of those utilities
are needed to maintain the font cache.
Thanks.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 15:33 ` Eli Zaretskii
@ 2020-03-25 16:41 ` Juan José García-Ripoll
2020-03-25 17:03 ` Eli Zaretskii
0 siblings, 1 reply; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-25 16:41 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1885 bytes --]
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Juan José García-Ripoll
>> <juanjose.garciaripoll@gmail.com>
>> Date: Wed, 25 Mar 2020 15:54:05 +0100
>>
>> + 'libexec/*/*.exe',
>
> This is not necessarily wise. It could be TRT with the current
> dependencies, but might lose in the long run. E.g., suppose someone
> decides to add GNU Findutils to the bundle.
Understood. Can we remove the ones that are not used?
>> + 'share/doc/*', # No documentation from libraries
>> + 'share/gtk-doc/*',
>> + 'share/man/*',
>> + 'share/info/*',
>
> Questionable. Why deprive the users from being able to read the docs
> of the dependencies? Some of that could be very relevant. E.g., what
> about the docs of bzip2.exe, xz.exe, etc.? they might come in handy
> for setting up all kinds of *-switches defcustoms.
Ok. This relates to an earlier email where I asked about what of those
tools one should keep, but not completely.
Many of those directories contain manuals and documentation for
libraries (e.g. C/python interfaces to gettext, libxml, etc), not for
tools (bzip2, bunzip2, etc). Since users do not have exposed access to
those libraries, it makes as much sense to bundle them with emacs as it
would make it to bundle the documentation of the C library.
>> + 'bin/fc-*.exe', # No font configuration tools
>
> If some dependency is configured to access fonts via Fontconfig (is it
> HarfBuzz?), then this is a mistake, because some of those utilities
> are needed to maintain the font cache.
Thanks. So far I have been using emacs-27 w/o them. But maybe it is
because I built emacs before HarfBuzz was added to build-dep*.py? In any
case, I can remove it.
Does the newly attached script look more reasonable?
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: build-dep-zips.diff --]
[-- Type: text/x-patch, Size: 3667 bytes --]
diff --git a/admin/nt/dist-build/build-dep-zips.py b/admin/nt/dist-build/build-dep-zips.py
index 33ed4b6..118fde2 100755
--- a/admin/nt/dist-build/build-dep-zips.py
+++ b/admin/nt/dist-build/build-dep-zips.py
@@ -83,6 +83,11 @@ def immediate_deps(pkg):
dependencies = [d.split(">")[0] for d in dependencies if d]
dependencies = [d for d in dependencies if not d == "None"]
+ if dependencies:
+ print(f"Package {pkg} depends on:")
+ for d in dependencies:
+ print(f" -> {d}")
+
dependencies = [MUNGE_DEP_PKGS.get(d, d) for d in dependencies]
return dependencies
@@ -107,7 +112,8 @@ def extract_deps():
def gather_deps(deps, arch, directory):
- os.mkdir(arch)
+ if not os.path.exists(arch):
+ os.mkdir(arch)
os.chdir(arch)
## Replace the architecture with the correct one
@@ -135,11 +141,56 @@ def gather_deps(deps, arch, directory):
print("Copying dependencies: {}".format(arch))
check_output_maybe(["rsync", "-R"] + deps_files + ["."])
+ ## exclude files
+ excludes=['lib/*.a', # No files to link against
+ 'lib/*/*.exe', # No hidden executables
+ 'libexec/p11-kit/*.exe',
+ 'include/*', # No development files
+ 'lib/cmake/*',
+ 'lib/pkgconfig/*',
+ 'lib/python*/*',
+ 'share/aclocal/*',
+ 'share/gettext/*',
+ 'share/doc/lib*', # No documentation from libraries
+ 'share/doc/gettext/*',
+ 'share/gtk-doc/*',
+ 'share/man/man3/*',
+ 'share/man/man5/*',
+ 'bin/*tiff*.exe', # No graphic manipulation tools
+ 'bin/img*.exe',
+ 'bin/*gif*.exe',
+ 'bin/*jpg*.exe',
+ 'bin/*jpeg*.exe',
+ 'bin/*png*.exe',
+ 'bin/*svg*.exe',
+ 'bin/*xpm*.exe',
+ 'bin/*icc.exe',
+ 'bin/fax2*.exe',
+ 'bin/pango-*.exe',
+ 'bin/gdk-*.exe',
+ 'bin/jasper.exe',
+ 'bin/gr2fonttest.exe', # No font visualization tools
+ 'bin/hb-*.exe',
+ 'bin/msg*.exe', # No tools to manipulate gettext catalogues
+ 'bin/*gettext.exe'
+ ]
+ ## Files that might have been excluded by those rules
+ includes=[]
+ ## Build command line argument for zip
+ if excludes:
+ excludes = '-x '+' '.join(excludes).replace('*','\\*')
+ else:
+ excludes = ''
+ if includes:
+ includes = '-i '+' '.join(includes).replace('*','\\*')
+ else:
+ includes=''
+
## And package them up
os.chdir(directory)
print("Zipping: {}".format(arch))
- check_output_maybe("zip -9r ../../emacs-{}-{}{}-deps.zip *"
- .format(EMACS_MAJOR_VERSION, DATE, arch),
+ check_output_maybe("zip -9r ../../emacs-{}-{}{}-deps.zip * {} {}"
+ .format(EMACS_MAJOR_VERSION, DATE, arch, excludes, includes),
shell=True)
os.chdir("../../")
@@ -255,6 +306,17 @@ def clean():
args = parser.parse_args()
do_all=not (args.c or args.r or args.f or args.t)
+if( args.c ):
+ clean()
+ exit(0)
+
+# The dependency extraction relies on an English version of pacman
+# We need to configure the locale to match the expectations
+if 'LANG' in os.environ:
+ os_lang = os.environ['LANG']
+ if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
+ os.environ['LANG']='en_US'
+
deps=extract_deps()
DRY_RUN=args.d
@@ -277,6 +339,3 @@ def clean():
if( do_all or args.r ):
gather_source(deps)
-
-if( args.c ):
- clean()
^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 16:41 ` Juan José García-Ripoll
@ 2020-03-25 17:03 ` Eli Zaretskii
2020-03-25 17:22 ` Juan José García-Ripoll
0 siblings, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-25 17:03 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Wed, 25 Mar 2020 17:41:35 +0100
>
> >> + 'libexec/*/*.exe',
> >
> > This is not necessarily wise. It could be TRT with the current
> > dependencies, but might lose in the long run. E.g., suppose someone
> > decides to add GNU Findutils to the bundle.
>
> Understood. Can we remove the ones that are not used?
Yes, sure. My comment was about emptying the entire directory.
> Many of those directories contain manuals and documentation for
> libraries (e.g. C/python interfaces to gettext, libxml, etc), not for
> tools (bzip2, bunzip2, etc). Since users do not have exposed access to
> those libraries, it makes as much sense to bundle them with emacs as it
> would make it to bundle the documentation of the C library.
Again, discretion is advisable.
> >> + 'bin/fc-*.exe', # No font configuration tools
> >
> > If some dependency is configured to access fonts via Fontconfig (is it
> > HarfBuzz?), then this is a mistake, because some of those utilities
> > are needed to maintain the font cache.
>
> Thanks. So far I have been using emacs-27 w/o them. But maybe it is
> because I built emacs before HarfBuzz was added to build-dep*.py? In any
> case, I can remove it.
It could be that librsvg uses Fontconfig, I don't know. (In my builds
of optional libraries, I've succeeded to avoid Fontconfig being
compiled in, but MSYS2 generally compile in everything, whether needed
or not.)
> Does the newly attached script look more reasonable?
I think so, yes.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 17:03 ` Eli Zaretskii
@ 2020-03-25 17:22 ` Juan José García-Ripoll
2020-03-25 17:34 ` Eli Zaretskii
2020-03-25 22:40 ` Phillip Lord
0 siblings, 2 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-25 17:22 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1025 bytes --]
Eli Zaretskii <eliz@gnu.org> writes:
>> Thanks. So far I have been using emacs-27 w/o them. But maybe it is
>> because I built emacs before HarfBuzz was added to build-dep*.py? In any
>> case, I can remove it.
>
> It could be that librsvg uses Fontconfig, I don't know. (In my builds
> of optional libraries, I've succeeded to avoid Fontconfig being
> compiled in, but MSYS2 generally compile in everything, whether needed
> or not.)
The new script shows the implicit dependencies
rsvg -> Pango
Pango -> Cairo and Fontconfig
Cairo -> Fontconfig
It seems therefore a very much confined dependency that can be tested. TBH, I
have not had a look at SVG files in a few weeks, so it may well be that I broke
something by removing fc-*.exe locally (not in the python script). I will
check.
Incidentally, here goes a patch to allow build-zips.sh just build zips (with
build-zips.sh -z) and avoid building the installer.
Cheers
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: build-zips.diff --]
[-- Type: text/x-patch, Size: 1331 bytes --]
diff --git a/admin/nt/dist-build/build-zips.sh b/admin/nt/dist-build/build-zips.sh
index 8eaa3a9..1342604 100755
--- a/admin/nt/dist-build/build-zips.sh
+++ b/admin/nt/dist-build/build-zips.sh
@@ -102,6 +102,7 @@
SNAPSHOT=
CACHE=
+INSTALLER=1
BUILD=1
BUILD_32=1
BUILD_64=1
@@ -110,7 +111,7 @@ CONFIG=
CFLAGS="-O2 -static"
INSTALL_TARGET="install-strip"
-while getopts "36gb:hnsiV:" opt; do
+while getopts "36gb:hnsizV:" opt; do
case $opt in
3)
BUILD_32=1
@@ -152,8 +153,12 @@ INSTALL_TARGET=
echo " -6 64 bit build only"
echo " -g git update and worktree only"
echo " -i build installer only"
+ echo " -z only build zip files"
exit 0
;;
+ z)
+ INSTALLER=0
+ ;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
@@ -223,7 +228,10 @@ OF_VERSION=
then
build_zip x86_64 /mingw64/lib/pkgconfig x86_64-w64-mingw32
fi
- build_installer x86_64
+ if (($INSTALLER))
+ then
+ build_installer x86_64
+ fi
fi
## Do the 64 bit build first, because we reset some environment
@@ -234,5 +242,8 @@ OF_VERSION=
then
build_zip i686 /mingw32/lib/pkgconfig i686-w64-mingw32
fi
- build_installer i686
+ if (($INSTALLER))
+ then
+ build_installer i686
+ fi
fi
^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 17:22 ` Juan José García-Ripoll
@ 2020-03-25 17:34 ` Eli Zaretskii
2020-03-25 22:40 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-25 17:34 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Wed, 25 Mar 2020 18:22:47 +0100
>
> > It could be that librsvg uses Fontconfig, I don't know. (In my builds
> > of optional libraries, I've succeeded to avoid Fontconfig being
> > compiled in, but MSYS2 generally compile in everything, whether needed
> > or not.)
>
> The new script shows the implicit dependencies
> rsvg -> Pango
> Pango -> Cairo and Fontconfig
> Cairo -> Fontconfig
Right. My librsvg is built without the Fontconfig dependencies, but
AFAIR it required some investigation and non-default configure
switches.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 14:54 ` Juan José García-Ripoll
2020-03-25 15:33 ` Eli Zaretskii
@ 2020-03-25 22:34 ` Phillip Lord
2020-03-26 3:49 ` Stefan Monnier
2020-03-26 13:24 ` Juan José García-Ripoll
1 sibling, 2 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-25 22:34 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
>> I attach a patch file that changes build-dep-zips.py with the following
>> fixes
>
> As usual, the missing attachment below.
In reply to two of your emails, sorry:
+ if dependencies:
+ print(f"Package {pkg} depends on:")
+ for d in dependencies:
+ print(f" -> {d}")
+
I wouldn't add this. It's only useful some of the time, not in normal
usage, and anyway "pactree" does the same thing better.
def gather_deps(deps, arch, directory):
- os.mkdir(arch)
+ if not os.path.exists(arch):
+ os.mkdir(arch)
os.chdir(arch)
This is wrong, I think. IIRC, my script crashes out at this point if
"arch" exists. This is needed, otherwise I could run build-dep-zips.py
twice at different times and both old and new dependencies would get
added. This forces cleanliness.
+ ## exclude files
+ excludes=['lib/*.a', # No files to link against
+ 'lib/*/*.exe', # No hidden executables
+ 'libexec/*/*.exe',
+ 'include/*', # No development files
+ 'lib/cmake/*',
+ 'lib/pkgconfig/*',
+ 'lib/python*/*',
+ 'share/aclocal/*',
+ 'share/gettext/*',
+ 'share/doc/*', # No documentation from libraries
+ 'share/gtk-doc/*',
+ 'share/man/*',
+ 'share/info/*',
+ 'bin/*tiff*.exe', # No graphic manipulation tools
+ 'bin/img*.exe',
+ 'bin/*gif*.exe',
+ 'bin/*jpg*.exe',
+ 'bin/*jpeg*.exe',
+ 'bin/*png*.exe',
+ 'bin/*svg*.exe',
+ 'bin/*xpm*.exe',
+ 'bin/*icc.exe',
+ 'bin/fax2*.exe',
+ 'bin/pango-*.exe',
+ 'bin/gdk-*.exe',
+ 'bin/jasper.exe',
+ 'bin/fc-*.exe', # No font configuration tools
+ 'bin/gr2fonttest.exe',
+ 'bin/hb-*.exe',
+ 'bin/msg*.exe', # No tools to manipulate gettext catalogues
+ 'bin/*gettext.exe'
+ ]
This list would need to go near the front, so we have a clean
configuration section. It also displays the key problem -- it's really
long and non obvious so a maintenance burden
If we just did a few big top level directories, would that not solve all
the problems.
+# The dependency extraction relies on an English version of pacman
+# We need to configure the locale to match the expectations
+if 'LANG' in os.environ:
+ os_lang = os.environ['LANG']
+ if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
+ os.environ['LANG']='en_US'
+
I am vaguely curious what it looks like in Spanish. I thought the output
was fairly mechanistic.
- Since we are pulling in compression utilities, we may just as well tell the
configuration to compress the *.el files. Windows is the only platform where
this does not happen
No, because I generate the no-deps version first, then add the deps. The
-no-deps version doesn't have the compression utilities. Of course, we
do not need the *.el files at all.
a) Is there a way to test the resulting standalone distribution to
verify that Emacs is running properly?
No. The only testing I do is to start Emacs and see if it starts and
looks okay (literally looks okay -- the icons can get broken). The lack
of a test suite that I can run is what keeps me cautious, especially as
I don't use this build. I wrote a robot testing framework for
org-drill.el; we could do something similar for testing this version of
Emacs.
b) I realized that Cairo is pulled in as a dependency, but Emacs is
built without support for Cairo. Is this intentional?
No, it will be a transitive dependency of something. pactree will
reveal!
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 17:22 ` Juan José García-Ripoll
2020-03-25 17:34 ` Eli Zaretskii
@ 2020-03-25 22:40 ` Phillip Lord
2020-03-26 13:16 ` Juan José García-Ripoll
1 sibling, 1 reply; 37+ messages in thread
From: Phillip Lord @ 2020-03-25 22:40 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Eli Zaretskii <eliz@gnu.org> writes:
>
> Incidentally, here goes a patch to allow build-zips.sh just build zips (with
> build-zips.sh -z) and avoid building the installer.
I'd rather not add that at the moment. I suspect that there are only two
people who have ever run build-zips.sh and one of them (me) doesn't need
it.
The number of options on build-zips.sh is too large anyway, and
documenting it is on my list of things to do. I have a sneaking
suspicion that I have changed it, broken something else, then fixed it
again several times at different points in the Emacs release cycle. With
a gap of years between major releases, it's hard to get right for all
the different stages.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 22:34 ` Phillip Lord
@ 2020-03-26 3:49 ` Stefan Monnier
2020-03-26 13:19 ` Juan José García-Ripoll
2020-03-26 22:16 ` Phillip Lord
2020-03-26 13:24 ` Juan José García-Ripoll
1 sibling, 2 replies; 37+ messages in thread
From: Stefan Monnier @ 2020-03-26 3:49 UTC (permalink / raw)
To: Phillip Lord; +Cc: Juan José García-Ripoll, emacs-devel
> + excludes=['lib/*.a', # No files to link against
[...]
> This list would need to go near the front, so we have a clean
> configuration section. It also displays the key problem -- it's really
> long and non obvious so a maintenance burden
I had a clean and simple solution, but I wrote it in a small margin
and now I can't read it any more, sorry.
> +# The dependency extraction relies on an English version of pacman
> +# We need to configure the locale to match the expectations
> +if 'LANG' in os.environ:
> + os_lang = os.environ['LANG']
> + if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
> + os.environ['LANG']='en_US'
I think the `C` locale is the obvious choice for these kinds of situations.
> Of course, we do not need the *.el files at all.
I really hope we keep them there. Even if many users won't look at
them, the fact that they're so easy to get to is almost a defining
feature of Emacs.
Stefan
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 22:40 ` Phillip Lord
@ 2020-03-26 13:16 ` Juan José García-Ripoll
2020-03-26 14:32 ` Eli Zaretskii
2020-03-26 22:20 ` Phillip Lord
0 siblings, 2 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-26 13:16 UTC (permalink / raw)
To: emacs-devel
Phillip Lord <phillip.lord@russet.org.uk> writes:
> Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
>
>> Eli Zaretskii <eliz@gnu.org> writes:
>>
>> Incidentally, here goes a patch to allow build-zips.sh just build zips (with
>> build-zips.sh -z) and avoid building the installer.
>
> I'd rather not add that at the moment. I suspect that there are only two
> people who have ever run build-zips.sh and one of them (me) doesn't need
> it.
I think that build-zips.sh is actually far more useful than the current
build setup that is by default in the nt/ directory. I personally do not
use the latter, because it forces me to have a full installation of
Msys/Mingw laying around.
So the fact that only two (maybe now three) people use it is not because
it is not useful, but because it is not visible. The consequence of this
is the type of hacky instructions that are out there in the internet,
advising people to build emacs, install it in a directory and copy all
of mingw64's *.dll.
Instead, Emacs on Windows should have, by default, a build process that
allows users to build their own standalone installation, without
imposing them to use makensis.
My 2c.
Juanjo
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 3:49 ` Stefan Monnier
@ 2020-03-26 13:19 ` Juan José García-Ripoll
2020-03-26 22:16 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-26 13:19 UTC (permalink / raw)
To: emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Of course, we do not need the *.el files at all.
>
> I really hope we keep them there. Even if many users won't look at
> them, the fact that they're so easy to get to is almost a defining
> feature of Emacs.
I concur that the *.el files _are_ needed. Right now I am debugging 3
regressions in Emacs-27 and a bug in 26.3. I can do this with the
installed copy of Emacs without needing to install the sources (even
though I have them in other directories) because I can inspect the
code. Moreover, the current information system about variables and
functions is dramatically improved by having them around: I can use C-h
v and name a variable and go to the code and see how it is used,
etc. Without the *.el files Emacs becomes just a black box, like VS
Studio.
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-25 22:34 ` Phillip Lord
2020-03-26 3:49 ` Stefan Monnier
@ 2020-03-26 13:24 ` Juan José García-Ripoll
2020-03-26 14:37 ` Eli Zaretskii
2020-03-26 22:28 ` Phillip Lord
1 sibling, 2 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-26 13:24 UTC (permalink / raw)
To: emacs-devel
Phillip Lord <phillip.lord@russet.org.uk> writes:
> In reply to two of your emails, sorry:
>
> + if dependencies:
> + print(f"Package {pkg} depends on:")
> + for d in dependencies:
> + print(f" -> {d}")
> +
>
> I wouldn't add this. It's only useful some of the time, not in normal
> usage, and anyway "pactree" does the same thing better.
Right now the scripts do not provide this information but do emit a line
"Adding *package name*" I personally find it more informative to at
least instruct why the package is added. If pactree is more useful, it
is not used anywhere in the current code.
> + ## exclude files
> + excludes=['lib/*.a', # No files to link against
> + 'lib/*/*.exe', # No hidden executables
> + 'libexec/*/*.exe',
> [...]
>
> This list would need to go near the front, so we have a clean
> configuration section. It also displays the key problem -- it's really
> long and non obvious so a maintenance burden
Not really. The *.exe can be deduced from the pacman files.
> If we just did a few big top level directories, would that not solve all
> the problems.
I proposed to remove complete directories but it seems it is not an option.
> +# The dependency extraction relies on an English version of pacman
> +# We need to configure the locale to match the expectations
> +if 'LANG' in os.environ:
> + os_lang = os.environ['LANG']
> + if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
> + os.environ['LANG']='en_US'
> I am vaguely curious what it looks like in Spanish. I thought the output
> was fairly mechanistic.
Your filter relies on the English word "depends on"
## Extract the "Depends On" line
depends_on = [x for x in package_info if x.startswith("Depends On")][0]
This is heavily locale-dependent
> - Since we are pulling in compression utilities, we may just as well tell the
> configuration to compress the *.el files. Windows is the only platform where
> this does not happen
>
> No, because I generate the no-deps version first, then add the deps. The
> -no-deps version doesn't have the compression utilities. Of course, we
> do not need the *.el files at all.
The no-deps version does not have the compression utilities but it is
not intended to be used by itself, as it depends on all the *.dll Hence,
one may argue that it can be built to support compression.
> b) I realized that Cairo is pulled in as a dependency, but Emacs is
> built without support for Cairo. Is this intentional?
>
> No, it will be a transitive dependency of something. pactree will
> reveal!
My simple lines instructing what depends on what showed this: it is
pulled in by rsvg. There were some earlier emails about this.
Cheers,
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 13:16 ` Juan José García-Ripoll
@ 2020-03-26 14:32 ` Eli Zaretskii
2020-03-26 22:20 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-26 14:32 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Thu, 26 Mar 2020 14:16:54 +0100
>
> Emacs on Windows should have, by default, a build process that
> allows users to build their own standalone installation, without
> imposing them to use makensis.
It does. It's just that the build process we support doesn't include
building and packaging optional libraries, that is definitely outside
of the scope of the Emacs project. I'm okay with hosting contributed
scripts that do more than what we are supposed to do, but I don't
think it's fair to take that for granted and demand that we provide
some QoS regarding those scripts.
Thanks.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 13:24 ` Juan José García-Ripoll
@ 2020-03-26 14:37 ` Eli Zaretskii
2020-03-28 16:01 ` Juan José García-Ripoll
2020-03-26 22:28 ` Phillip Lord
1 sibling, 1 reply; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-26 14:37 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Thu, 26 Mar 2020 14:24:15 +0100
>
> The no-deps version does not have the compression utilities but it is
> not intended to be used by itself, as it depends on all the *.dll
If this is indeed so, it's a bug in the build procedure. All the
optional DLLs (a.k.a. "dependencies") are loaded dynamically at run
time, and if some DLL is unavailable, the corresponding features will
fail, but Emacs will still run "by itself" and be a useful editor.
That is not what "depends on DLLs" mean on Windows: it means a program
will refuse to start if the DLL cannot be found. For Emacs, this is
only true for a few core DLLs that are available on any Windows system.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 3:49 ` Stefan Monnier
2020-03-26 13:19 ` Juan José García-Ripoll
@ 2020-03-26 22:16 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-26 22:16 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Juan José García-Ripoll, emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> + excludes=['lib/*.a', # No files to link against
> [...]
>> This list would need to go near the front, so we have a clean
>> configuration section. It also displays the key problem -- it's really
>> long and non obvious so a maintenance burden
>
> I had a clean and simple solution, but I wrote it in a small margin
> and now I can't read it any more, sorry.
Move to vim perhaps?
>> +# The dependency extraction relies on an English version of pacman
>> +# We need to configure the locale to match the expectations
>> +if 'LANG' in os.environ:
>> + os_lang = os.environ['LANG']
>> + if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
>> + os.environ['LANG']='en_US'
>
> I think the `C` locale is the obvious choice for these kinds of situations.
>
>> Of course, we do not need the *.el files at all.
>
> I really hope we keep them there. Even if many users won't look at
> them, the fact that they're so easy to get to is almost a defining
> feature of Emacs.
Yeah. I had a vague memory that the default out-of-source build didn't
put the .el files there, and that I'd done that deliberately for the
windows build. But there's nothing in build-zips.sh to suggest that this
is true, so I guess my memory is wrong.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 13:16 ` Juan José García-Ripoll
2020-03-26 14:32 ` Eli Zaretskii
@ 2020-03-26 22:20 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-26 22:20 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Phillip Lord <phillip.lord@russet.org.uk> writes:
>> Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
>>
>>> Eli Zaretskii <eliz@gnu.org> writes:
>>>
>>> Incidentally, here goes a patch to allow build-zips.sh just build zips (with
>>> build-zips.sh -z) and avoid building the installer.
>>
>> I'd rather not add that at the moment. I suspect that there are only two
>> people who have ever run build-zips.sh and one of them (me) doesn't need
>> it.
>
> I think that build-zips.sh is actually far more useful than the current
> build setup that is by default in the nt/ directory. I personally do not
> use the latter, because it forces me to have a full installation of
> Msys/Mingw laying around.
>
> So the fact that only two (maybe now three) people use it is not because
> it is not useful, but because it is not visible. The consequence of this
> is the type of hacky instructions that are out there in the internet,
> advising people to build emacs, install it in a directory and copy all
> of mingw64's *.dll.
>
> Instead, Emacs on Windows should have, by default, a build process that
> allows users to build their own standalone installation, without
> imposing them to use makensis.
build-zips does require a MSYS2 installation and a fairly odd directory
structure. It doesn't hassle me because I only use my windows machine
for building Emacs.
build-zips could do with cleaning up and making more generic, but I lack
the time, especially as it's quite difficult to test.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 13:24 ` Juan José García-Ripoll
2020-03-26 14:37 ` Eli Zaretskii
@ 2020-03-26 22:28 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Phillip Lord @ 2020-03-26 22:28 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Phillip Lord <phillip.lord@russet.org.uk> writes:
>> In reply to two of your emails, sorry:
>>
>> + if dependencies:
>> + print(f"Package {pkg} depends on:")
>> + for d in dependencies:
>> + print(f" -> {d}")
>> +
>>
>> I wouldn't add this. It's only useful some of the time, not in normal
>> usage, and anyway "pactree" does the same thing better.
>
> Right now the scripts do not provide this information but do emit a line
> "Adding *package name*" I personally find it more informative to at
> least instruct why the package is added. If pactree is more useful, it
> is not used anywhere in the current code.
pactree gives a graphical picture of all the dependencies. It's not used
in the current code, since I refactored it to drop a lot of
dependencies. But, as a tool it will still tell you what depends on what.
>> + ## exclude files
>> + excludes=['lib/*.a', # No files to link against
>> + 'lib/*/*.exe', # No hidden executables
>> + 'libexec/*/*.exe',
>> [...]
>>
>> This list would need to go near the front, so we have a clean
>> configuration section. It also displays the key problem -- it's really
>> long and non obvious so a maintenance burden
>
> Not really. The *.exe can be deduced from the pacman files.
Not sure I understand here to be honest.
>> If we just did a few big top level directories, would that not solve all
>> the problems.
>
> I proposed to remove complete directories but it seems it is not an option.
>
>> +# The dependency extraction relies on an English version of pacman
>> +# We need to configure the locale to match the expectations
>> +if 'LANG' in os.environ:
>> + os_lang = os.environ['LANG']
>> + if (len(os_lang) > 2) and (os_lang[0:2] != 'en'):
>> + os.environ['LANG']='en_US'
>> I am vaguely curious what it looks like in Spanish. I thought the output
>> was fairly mechanistic.
>
> Your filter relies on the English word "depends on"
> ## Extract the "Depends On" line
> depends_on = [x for x in package_info if x.startswith("Depends On")][0]
> This is heavily locale-dependent
Oh yeah, that's funny.
>> - Since we are pulling in compression utilities, we may just as well tell the
>> configuration to compress the *.el files. Windows is the only platform where
>> this does not happen
>>
>> No, because I generate the no-deps version first, then add the deps. The
>> -no-deps version doesn't have the compression utilities. Of course, we
>> do not need the *.el files at all.
>
> The no-deps version does not have the compression utilities but it is
> not intended to be used by itself, as it depends on all the *.dll Hence,
> one may argue that it can be built to support compression.
The no-deps version should work fine all by itself. Indeed, this used to
be the only form of Emacs distribution for windows. It just won't do
some things.
>
>> b) I realized that Cairo is pulled in as a dependency, but Emacs is
>> built without support for Cairo. Is this intentional?
>>
>> No, it will be a transitive dependency of something. pactree will
>> reveal!
>
> My simple lines instructing what depends on what showed this: it is
> pulled in by rsvg. There were some earlier emails about this.
Yes, I know.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-26 14:37 ` Eli Zaretskii
@ 2020-03-28 16:01 ` Juan José García-Ripoll
2020-03-28 16:23 ` Eli Zaretskii
2020-03-28 19:36 ` Phillip Lord
0 siblings, 2 replies; 37+ messages in thread
From: Juan José García-Ripoll @ 2020-03-28 16:01 UTC (permalink / raw)
To: emacs-devel
Eli Zaretskii <eliz@gnu.org> writes:
> If this is indeed so, it's a bug in the build procedure. All the
> optional DLLs (a.k.a. "dependencies") are loaded dynamically at run
> time, and if some DLL is unavailable, the corresponding features will
> fail, but Emacs will still run "by itself" and be a useful editor.
Sorry, it seems I misunderstood the *-no-deps concept deeply. I had
always assumed that *-no-deps whas a zip to be installed on top of the
*-deps one.
So, just to clarify, the *-no-deps is a standalone executable that works
(I checked it) but only guarantees that the editor works. Other
components, such as Gnus, the web browser, etc, may fail due to missing
tools (e.g. Gnus fails because gnu-tls is missing).
Cheers,
--
Juan José García Ripoll
http://juanjose.garciaripoll.com
http://quinfog.hbar.es
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-28 16:01 ` Juan José García-Ripoll
@ 2020-03-28 16:23 ` Eli Zaretskii
2020-03-28 19:36 ` Phillip Lord
1 sibling, 0 replies; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-28 16:23 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
> From: Juan José García-Ripoll
> <juanjose.garciaripoll@gmail.com>
> Date: Sat, 28 Mar 2020 17:01:52 +0100
>
> So, just to clarify, the *-no-deps is a standalone executable that works
> (I checked it) but only guarantees that the editor works. Other
> components, such as Gnus, the web browser, etc, may fail due to missing
> tools (e.g. Gnus fails because gnu-tls is missing).
Yes, that's right.
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-28 16:01 ` Juan José García-Ripoll
2020-03-28 16:23 ` Eli Zaretskii
@ 2020-03-28 19:36 ` Phillip Lord
2020-03-28 19:41 ` Eli Zaretskii
1 sibling, 1 reply; 37+ messages in thread
From: Phillip Lord @ 2020-03-28 19:36 UTC (permalink / raw)
To: Juan José García-Ripoll; +Cc: emacs-devel
Juan José García-Ripoll <juanjose.garciaripoll@gmail.com> writes:
> Eli Zaretskii <eliz@gnu.org> writes:
>> If this is indeed so, it's a bug in the build procedure. All the
>> optional DLLs (a.k.a. "dependencies") are loaded dynamically at run
>> time, and if some DLL is unavailable, the corresponding features will
>> fail, but Emacs will still run "by itself" and be a useful editor.
>
> Sorry, it seems I misunderstood the *-no-deps concept deeply. I had
> always assumed that *-no-deps whas a zip to be installed on top of the
> *-deps one.
Other way around. If you unpack the deps zip (emacs-27-x86_64-deps.zip) and
the no-deps emacs (emacs-27.0.90-2-x86_64-no-deps.zip) into the same
structure, you would get the same as emacs-27.0.90-2-x86_64.zip.
For early versions of Emacs, (emacs-25) we had emacs-25.zip and then a
"deps" file that you unpacked. But I wanted the "with-dependencies" to
be the one with the simplest name, because that's what people would
choose most often.
I think -no-deps is probably most useful for people who want to unpack
it over a msys2 installation that they already have. Unfortunately I
don't have information and who and what people are actually using.
Phil
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: Process to build standalone Emacs + deps in Windows
2020-03-28 19:36 ` Phillip Lord
@ 2020-03-28 19:41 ` Eli Zaretskii
0 siblings, 0 replies; 37+ messages in thread
From: Eli Zaretskii @ 2020-03-28 19:41 UTC (permalink / raw)
To: Phillip Lord; +Cc: juanjose.garciaripoll, emacs-devel
> From: Phillip Lord <phillip.lord@russet.org.uk>
> Date: Sat, 28 Mar 2020 19:36:05 +0000
> Cc: emacs-devel@gnu.org
>
> I think -no-deps is probably most useful for people who want to unpack
> it over a msys2 installation that they already have.
It should also be useful for someone who wants to determine by
themselves which optional libraries they install and which they don't.
^ permalink raw reply [flat|nested] 37+ messages in thread
end of thread, other threads:[~2020-03-28 19:41 UTC | newest]
Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-22 13:03 Process to build standalone Emacs + deps in Windows Juan José García Ripoll
2020-03-22 13:59 ` Eli Zaretskii
2020-03-22 14:38 ` Juan José García-Ripoll
2020-03-22 17:25 ` Eli Zaretskii
2020-03-22 18:54 ` Phillip Lord
2020-03-22 19:35 ` Eli Zaretskii
2020-03-22 21:02 ` Phillip Lord
2020-03-23 3:23 ` Eli Zaretskii
2020-03-23 23:36 ` Phillip Lord
2020-03-24 3:27 ` Eli Zaretskii
2020-03-24 18:21 ` Phillip Lord
2020-03-25 12:50 ` Juan José García-Ripoll
2020-03-25 14:43 ` Juan José García-Ripoll
2020-03-25 14:54 ` Juan José García-Ripoll
2020-03-25 15:33 ` Eli Zaretskii
2020-03-25 16:41 ` Juan José García-Ripoll
2020-03-25 17:03 ` Eli Zaretskii
2020-03-25 17:22 ` Juan José García-Ripoll
2020-03-25 17:34 ` Eli Zaretskii
2020-03-25 22:40 ` Phillip Lord
2020-03-26 13:16 ` Juan José García-Ripoll
2020-03-26 14:32 ` Eli Zaretskii
2020-03-26 22:20 ` Phillip Lord
2020-03-25 22:34 ` Phillip Lord
2020-03-26 3:49 ` Stefan Monnier
2020-03-26 13:19 ` Juan José García-Ripoll
2020-03-26 22:16 ` Phillip Lord
2020-03-26 13:24 ` Juan José García-Ripoll
2020-03-26 14:37 ` Eli Zaretskii
2020-03-28 16:01 ` Juan José García-Ripoll
2020-03-28 16:23 ` Eli Zaretskii
2020-03-28 19:36 ` Phillip Lord
2020-03-28 19:41 ` Eli Zaretskii
2020-03-26 22:28 ` Phillip Lord
2020-03-25 15:25 ` Eli Zaretskii
2020-03-22 18:58 ` Phillip Lord
2020-03-22 18:32 ` phillip.lord
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).