* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
@ 2023-08-10 12:40 Corwin Brust
2023-08-10 13:29 ` Eli Zaretskii
0 siblings, 1 reply; 14+ messages in thread
From: Corwin Brust @ 2023-08-10 12:40 UTC (permalink / raw)
To: 65206
[-- Attachment #1: Type: text/plain, Size: 4286 bytes --]
The script nt/admin/dist-build/build-deps-zips.py needs help. This is
the script that I use to collect and package dependencies and sources
for dependencies on Microsoft Windows, as part of releasing Emacs
binaries for Windows. It is a python script that runs under MSYS2
MSYS console (not MinGW).
Neither the version currently in the emacs-29 nor in the master
branches will work for the given Emacs version without changes. The
attached patch would make emacs-29 match what I am using locally.
In addition to other changes, the patch reflects my current "transformation map"
approach to deal with MSYS source package paths change, which seems to
be happening quite a bit upstream.
In case it may not be clear, my process is to run the script
after updating local MSYS packages that are dependencies (optional or
no), or edit and run it when Emacs' dependencies have changed.
The patch reflects the script as I have been using it during the Emacs
29 release process. I'm sure there's general room for improvement
(editing this script is literally my only python coding credit), I'm
opening this bug report because bug#65188 (a packaging error preventing
WEBP from working for people using the Windows binaries) has called
attention to the importance of having additional eyes on build tooling
(especially when it so far contains hard-coded lists of upstream deps).
In GNU Emacs 29.1 (build 2, x86_64-w64-mingw32) of 2023-08-02 built on
AVALON
Windowing system distributor 'Microsoft Corp.', version 10.0.19045
System Description: Microsoft Windows 10 Home (v10.0.2009.19045.3324)
Configured using:
'configure --with-modules --without-dbus --with-native-compilation=aot
--without-compress-install --with-tree-sitter CFLAGS=-O2'
Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB
Important settings:
value of $LANG: ENU
locale-coding-system: cp1252
Major mode: Lisp Interaction
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
comp comp-cstr warnings icons subr-x rx cl-seq cl-macs gv cl-extra
help-mode bytecomp byte-compile cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel dos-w32 ls-lisp disp-table term/w32-win w32-win
w32-vars term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads w32notify w32 lcms2 multi-tty make-network-process
native-compile emacs)
Memory information:
((conses 16 80415 13861)
(symbols 48 7175 0)
(strings 32 21269 1764)
(string-bytes 1 617449)
(vectors 16 16398)
(vector-slots 8 334731 15794)
(floats 8 29 46)
(intervals 56 238 0)
(buffers 984 10))
[-- Attachment #2: 0001-Fix-Windows-build-dependancy-packaging-for-Emacs-29-.patch --]
[-- Type: application/octet-stream, Size: 5790 bytes --]
From 932320cda4d7633cb48bb89163fb9cf62c5e208d Mon Sep 17 00:00:00 2001
From: Corwin Brust <corwin@bru.st>
Date: Thu, 10 Aug 2023 07:19:41 -0500
Subject: [PATCH] ; Fix Windows build dependancy packaging for Emacs 29 and 30
* nt/admin/dist-build/build-deps-zips.py (script): add webp,
Xpm, Xpm-noX4, treesitter, and sqlite4, bump EMACS_MAJOR_VERSION,
remove unneeded imports, change vendor slug from msys64 to mingw64,
skip some ancient certificates, add SRC_EXT to map transformation
source package name transformations vs historical convention.
---
admin/nt/dist-build/build-dep-zips.py | 84 ++++++++++++++++++---------
1 file changed, 57 insertions(+), 27 deletions(-)
diff --git a/admin/nt/dist-build/build-dep-zips.py b/admin/nt/dist-build/build-dep-zips.py
index 71105a071ec..a7c116d9b41 100755
--- a/admin/nt/dist-build/build-dep-zips.py
+++ b/admin/nt/dist-build/build-dep-zips.py
@@ -20,13 +20,11 @@
import os
import shutil
import re
-import functools
-import operator
from subprocess import check_output
## Constants
-EMACS_MAJOR_VERSION="28"
+EMACS_MAJOR_VERSION="29"
# This list derives from the features we want Emacs to compile with.
PKG_REQ='''mingw-w64-x86_64-giflib
@@ -37,9 +35,13 @@
mingw-w64-x86_64-libjpeg-turbo
mingw-w64-x86_64-libpng
mingw-w64-x86_64-librsvg
+mingw-w64-x86_64-libwebp
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-libxml2
-mingw-w64-x86_64-xpm-nox'''.split()
+mingw-w64-x86_64-gmp
+mingw-w64-x86_64-xpm-nox
+mingw-w64-x86_64-tree-sitter
+mingw-w64-x86_64-sqlite3'''.split()
DLL_REQ='''libgif
libgnutls
@@ -49,9 +51,14 @@
libturbojpeg
libpng
librsvg
+libwebp
libtiff
libxml
-libXpm'''.split()
+libgmp
+libXpm
+libXpm-noX4
+libtree-sitter
+libsqlite3-0'''.split()
## Options
@@ -103,7 +110,7 @@ def ntldd_munge(out):
## if it's the former, we want it, if its the later we don't
splt = dep.split()
- if len(splt) > 2 and "msys64" in splt[2]:
+ if len(splt) > 2 and "mingw64" in splt[2]:
print("Adding dep", splt[0])
rtn.append(splt[0].split(".")[0])
@@ -114,26 +121,45 @@ def ntldd_munge(out):
## Packages to fiddle with
## Source for gcc-libs is part of gcc
SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
-SKIP_DEP_PKGS=frozenset(["mingw-w64-x86_64-glib2"])
+SKIP_DEP_PKGS=["mingw-w64-glib2" "mingw-w64-ca-certificates-20211016-3"]
MUNGE_SRC_PKGS={"mingw-w64-libwinpthread-git":"mingw-w64-winpthreads-git"}
MUNGE_DEP_PKGS={
"mingw-w64-x86_64-libwinpthread":"mingw-w64-x86_64-libwinpthread-git",
"mingw-w64-x86_64-libtre": "mingw-w64-x86_64-libtre-git",
}
+SRC_EXT={
+ "mingw-w64-freetype": ".src.tar.zst",
+ "mingw-w64-fribidi": ".src.tar.zst",
+ "mingw-w64-glib2": ".src.tar.zst",
+ "mingw-w64-harfbuzz": ".src.tar.zst",
+ "mingw-w64-libunistring": ".src.tar.zst",
+ "mingw-w64-winpthreads-git": ".src.tar.zst",
+ "mingw-w64-ca-certificates": ".src.tar.zst",
+ "mingw-w64-libxml2": ".src.tar.zst",
+ "mingw-w64-ncurses": ".src.tar.zst",
+ "mingw-w64-openssl": ".src.tar.zst",
+ "mingw-w64-pango": ".src.tar.zst",
+ "mingw-w64-python": ".src.tar.zst",
+ "mingw-w64-sqlite3": ".src.tar.zst",
+ "mingw-w64-xpm-nox": ".src.tar.zst",
+ "mingw-w64-xz": ".src.tar.zst",
+}
## Currently no packages seem to require this!
ARCH_PKGS=[]
SRC_REPO="https://repo.msys2.org/mingw/sources"
-def immediate_deps(pkgs):
- package_info = check_output(["pacman", "-Si"] + pkgs).decode("utf-8").splitlines()
+def immediate_deps(pkg):
+ package_info = check_output(["pacman", "-Si", pkg]).decode("utf-8").split("\n")
+
+ ## Extract the "Depends On" line
+ depends_on = [x for x in package_info if x.startswith("Depends On")][0]
+ ## Remove "Depends On" prefix
+ dependencies = depends_on.split(":")[1]
- ## Extract the packages listed for "Depends On:" lines.
- dependencies = [line.split(":")[1].split() for line in package_info
- if line.startswith("Depends On")]
- ## Flatten dependency lists from multiple packages into one list.
- dependencies = functools.reduce(operator.iconcat, dependencies, [])
+ ## Split into dependencies
+ dependencies = dependencies.strip().split(" ")
## Remove > signs TODO can we get any other punctuation here?
dependencies = [d.split(">")[0] for d in dependencies if d]
@@ -149,18 +175,16 @@ def extract_deps():
print( "Extracting deps" )
# Get a list of all dependencies needed for packages mentioned above.
- pkgs = set(PKG_REQ)
- newdeps = pkgs
- print("adding...")
- while True:
- subdeps = frozenset(immediate_deps(list(newdeps)))
- newdeps = subdeps - SKIP_DEP_PKGS - pkgs
- if not newdeps:
- break
- print('\n'.join(newdeps))
- pkgs |= newdeps
+ pkgs = PKG_REQ[:]
+ n = 0
+ while n < len(pkgs):
+ subdeps = immediate_deps(pkgs[n])
+ for p in subdeps:
+ if not (p in pkgs or p in SKIP_DEP_PKGS):
+ pkgs.append(p)
+ n = n + 1
- return list(pkgs)
+ return sorted(pkgs)
def download_source(tarball):
@@ -208,7 +232,13 @@ def gather_source(deps):
## Switch names if necessary
pkg_name = MUNGE_SRC_PKGS.get(pkg_name,pkg_name)
- tarball = "{}-{}.src.tar.gz".format(pkg_name,pkg_version)
+ ## src archive is usually a .tar.gz
+ if pkg_name in SRC_EXT.keys():
+ src_ext = SRC_EXT[pkg_name]
+ else:
+ src_ext = ".src.tar.gz"
+
+ tarball = "{}-{}{}".format(pkg_name,pkg_version,src_ext)
download_source(tarball)
@@ -257,7 +287,7 @@ def clean():
if( args.l ):
print("List of dependencies")
- print( deps )
+ print( extract_deps() )
exit(0)
if args.s:
--
2.41.0.windows.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-10 12:40 bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain Corwin Brust
@ 2023-08-10 13:29 ` Eli Zaretskii
2023-08-10 21:09 ` Corwin Brust
2023-08-15 7:39 ` Corwin Brust
0 siblings, 2 replies; 14+ messages in thread
From: Eli Zaretskii @ 2023-08-10 13:29 UTC (permalink / raw)
To: Corwin Brust; +Cc: 65206
> From: Corwin Brust <corwin@bru.st>
> Date: Thu, 10 Aug 2023 07:40:48 -0500
>
> The script nt/admin/dist-build/build-deps-zips.py needs help. This is
> the script that I use to collect and package dependencies and sources
> for dependencies on Microsoft Windows, as part of releasing Emacs
> binaries for Windows. It is a python script that runs under MSYS2
> MSYS console (not MinGW).
>
> Neither the version currently in the emacs-29 nor in the master
> branches will work for the given Emacs version without changes. The
> attached patch would make emacs-29 match what I am using locally.
>
> In addition to other changes, the patch reflects my current "transformation map"
> approach to deal with MSYS source package paths change, which seems to
> be happening quite a bit upstream.
>
> In case it may not be clear, my process is to run the script
> after updating local MSYS packages that are dependencies (optional or
> no), or edit and run it when Emacs' dependencies have changed.
>
> The patch reflects the script as I have been using it during the Emacs
> 29 release process. I'm sure there's general room for improvement
> (editing this script is literally my only python coding credit), I'm
> opening this bug report because bug#65188 (a packaging error preventing
> WEBP from working for people using the Windows binaries) has called
> attention to the importance of having additional eyes on build tooling
> (especially when it so far contains hard-coded lists of upstream deps).
Would you mind providing an overview of the process by which the
script (and maybe some additional measures) collect(s) the list of the
dependency packages for the binary distro, including the main ideas
and information sources? It is hard to glean all that from just a
patch, or even by reading the script, and I think that, given the
pains this gives, perhaps some new ideas are in order.
Thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-10 13:29 ` Eli Zaretskii
@ 2023-08-10 21:09 ` Corwin Brust
2023-08-15 7:39 ` Corwin Brust
1 sibling, 0 replies; 14+ messages in thread
From: Corwin Brust @ 2023-08-10 21:09 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
On Thu, Aug 10, 2023 at 8:29 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
>
> Would you mind providing an overview of the process by which the
> script (and maybe some additional measures) collect(s) the list of the
> dependency packages for the binary distro, including the main ideas
> and information sources? It is hard to glean all that from just a
> patch, or even by reading the script, and I think that, given the
> pains this gives, perhaps some new ideas are in order.
I will happily try my best; sorry that it cannot be immediately/today.
In any case, I completely agree with you.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-10 13:29 ` Eli Zaretskii
2023-08-10 21:09 ` Corwin Brust
@ 2023-08-15 7:39 ` Corwin Brust
2023-08-15 15:43 ` Eli Zaretskii
1 sibling, 1 reply; 14+ messages in thread
From: Corwin Brust @ 2023-08-15 7:39 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
On Thu, Aug 10, 2023 at 8:29 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> [Provide] an overview of the process by which
nt/admin/dist-build/build-dep-zips.py - it's really just that, as far
as how I collect the deps presently
To be clear, by "deps", I'm referring to DLLs that are not built with
Emacs but which we should (optionally) include when distributing
binary versions of Emacs for Windows.
Similarly pedantically, here are the files I (might) include for a
given release of Windows binaries for Emacs:
FULL ZIP: emacs-${VER}.zip - the "full zip", includes the deps DLLs
this script packages
NO DEPS ZIP: emacs-${VER}-no-deps.zip - specifically without the deps
DLLs this script packages
INSTALLER EXE: emacs-${VERION}-installer.exe - a self-installer
including the deps DLLs (and it compresses stuff even more than zip
-9. nice)
DEPS ZIP: emacs-${MAJOR_VERSION}-${DEPS_CREATE_DATE_IF_NOT_FIRST_AND_ONLY_FOR_MAJOR_VERSION}.zip
- contains only the deps DLLs. Created when changes are needed, more
to come on this.
DEPS SOURCES ZIP: the MSYS2/MINGW64 source code for all DLLs in DEPS
ZIP. Created only when a new DEPS ZIP is created
Finally (I swear, I'm going to answer your actual question), to place
the script in context of my present "use-case" (release and
release-similar builds specifically, here):
0. PREREQ: I have various folders setup, a working MSYS/MINGW64 that
has recently built me a working Emacs, I've been watching mailing
lists, I have ACLs going for me, etc.
1. A (pre)release tarball is pushed to GNU (alpha) FTP.
2. Skip this step if a "last good" deps and deps source file exist and
it is current (i.e. when there are not known new or updated
--including optional-- dependendencies for Emacs to include for the
first time), Otherwise, update and run the script (more on this
below, obviously) in question to create (new) deps and deps source
archives containing, respectively, a bunch of DLLs we plan to
distribute (nominally) with Emacs (this is the deps archive), and the
MSYS2/MINGW64 sources for these DLLs and their compile time
dependencies (the deps sources archive).
3. Download and unpack the tarball manually
4. Configure && make install to ${PREFIX}. Note, I have a tedious
pipeline command I like for this; I'm not currently using
"build-zips.sh" from the same folder as the build-dep-zips.sh script
in question.
5. Create a no-deps archive, essentially:
zip -r9 ${PREFIX} emacs-${TARGET_VERSION_NAME}-no-deps.zip
6. Unpack the deps archive created in step #2 (or the "last good", if
that step was skipped), something like:
unzip -d ${PREFIX}/bin ${LAST_GOOD_DEPS_ZIP_FOR_EMACS_MAJOR_VERSION}
7. Create a "full" zip of Emacs (now including those "extra" DLLs),
essentially repeating step #5 with a different archive file name (in
fact, I copy no-deps and re-add bin to it)
8. Create the installer
9. Perform certain rights and incantations to cause files to appear on
GNU (alpha) FTP servers. Notably, include new deps files ONLY when
they have been newly created along with the release being published.
These files have historically changed only rarely within a given Emacs
major version.
> collect(s) the list of the dependency packages for the binary distro,
Ignoring my patch for the moment, the script contains two hard-coded
lists that represent our first likely source of breakage:
DLL_REQ lists specific DLLs that should be copied into ${PREFIX}/bin,
after make install, to get a "complete" Emacs installation. During
the Emacs 29 pre-release cycle I added sqlite3 and tree-sitter to this
list, enabling those features to work "out of the box". In some
cases, such as these two in fact, Emacs would likely function
correctly under Windows if we chose not to distribute a particular
DLL; however, I believe this is not the case for all of DLLs included
and, moreover (in my opinion) would tend to make Emacs to less viable
as a means of drawing Windows users closer to Free Software by virtue
of Just Being Better, which would be a bit sad.
PKG_REQ lists the mingw-w64-x86_64 source package name for each item
in the first list.
These two variables are coordinated lists and so obviously could be
refactored (e.g. into an associative array) that I suspect historical
raisins (meaning, perhaps once these lists were not so coordinated; I
didn't research this so far).
In addition to these "main lists" there are a few other vars/lines to
study (now taking from my patched version):
SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
SKIP_DEP_PKGS=["mingw-w64-glib2" "mingw-w64-ca-certificates-20211016-3"]
We'll come to the logic -where all of these are used-- next.
> including the main ideas and information sources[. ...]
Ignoring as much complexity as possible by focusing on the
release(like) use-case, we can ignore the arguments and conditions
and, finally, we can reduce the the script to:
2.1 evaluate above mentioned vars
2.2 collect all DLLs mentioned in DLL_REQ
2.3 collect the DLLs that are unique dependencies the DLLs collected
in 2.2 skipping any which appear in SKIP_DEP_PKGS
2.4 collect the source for all DLLs from 2.2 and 2.3 unless the source
package is listed in SKIP_SRC_PKGS
I hope I did cover information sources well enough, but to put a fine
point on it: I watch Emacs devel, bug reports, IRC, reddit, ..., for
information leading to updates to this script. Developers and others
using Emacs on Windows are the main "information sources", at least
speaking from developing that patch :)
>
> Thanks.
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-15 7:39 ` Corwin Brust
@ 2023-08-15 15:43 ` Eli Zaretskii
2023-08-15 15:53 ` Corwin Brust
0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2023-08-15 15:43 UTC (permalink / raw)
To: Corwin Brust; +Cc: 65206
> From: Corwin Brust <corwin@bru.st>
> Date: Tue, 15 Aug 2023 02:39:45 -0500
> Cc: 65206@debbugs.gnu.org
>
> 5. Create a no-deps archive, essentially:
>
> zip -r9 ${PREFIX} emacs-${TARGET_VERSION_NAME}-no-deps.zip
>
> 6. Unpack the deps archive created in step #2 (or the "last good", if
> that step was skipped), something like:
>
> unzip -d ${PREFIX}/bin ${LAST_GOOD_DEPS_ZIP_FOR_EMACS_MAJOR_VERSION}
>
> 7. Create a "full" zip of Emacs (now including those "extra" DLLs),
> essentially repeating step #5 with a different archive file name (in
> fact, I copy no-deps and re-add bin to it)
>
> 8. Create the installer
>
> 9. Perform certain rights and incantations to cause files to appear on
> GNU (alpha) FTP servers. Notably, include new deps files ONLY when
> they have been newly created along with the release being published.
> These files have historically changed only rarely within a given Emacs
> major version.
>
> > collect(s) the list of the dependency packages for the binary distro,
>
> Ignoring my patch for the moment, the script contains two hard-coded
> lists that represent our first likely source of breakage:
>
> DLL_REQ lists specific DLLs that should be copied into ${PREFIX}/bin,
> after make install, to get a "complete" Emacs installation. During
> the Emacs 29 pre-release cycle I added sqlite3 and tree-sitter to this
> list, enabling those features to work "out of the box". In some
> cases, such as these two in fact, Emacs would likely function
> correctly under Windows if we chose not to distribute a particular
> DLL; however, I believe this is not the case for all of DLLs included
> and, moreover (in my opinion) would tend to make Emacs to less viable
> as a means of drawing Windows users closer to Free Software by virtue
> of Just Being Better, which would be a bit sad.
>
> PKG_REQ lists the mingw-w64-x86_64 source package name for each item
> in the first list.
>
> These two variables are coordinated lists and so obviously could be
> refactored (e.g. into an associative array) that I suspect historical
> raisins (meaning, perhaps once these lists were not so coordinated; I
> didn't research this so far).
>
> In addition to these "main lists" there are a few other vars/lines to
> study (now taking from my patched version):
>
> SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
> SKIP_DEP_PKGS=["mingw-w64-glib2" "mingw-w64-ca-certificates-20211016-3"]
>
> We'll come to the logic -where all of these are used-- next.
>
> > including the main ideas and information sources[. ...]
>
> Ignoring as much complexity as possible by focusing on the
> release(like) use-case, we can ignore the arguments and conditions
> and, finally, we can reduce the the script to:
>
> 2.1 evaluate above mentioned vars
> 2.2 collect all DLLs mentioned in DLL_REQ
> 2.3 collect the DLLs that are unique dependencies the DLLs collected
> in 2.2 skipping any which appear in SKIP_DEP_PKGS
> 2.4 collect the source for all DLLs from 2.2 and 2.3 unless the source
> package is listed in SKIP_SRC_PKGS
>
> I hope I did cover information sources well enough, but to put a fine
> point on it: I watch Emacs devel, bug reports, IRC, reddit, ..., for
> information leading to updates to this script. Developers and others
> using Emacs on Windows are the main "information sources", at least
> speaking from developing that patch :)
Thanks. What I still don't think I understand is how do you make sure
you have a full list of first-order dependencies? I understand that
you mostly build on the "last good" list from previous release, but
since the list grows from time to time, what is the procedure for
finding the new dependencies, adding them to the list, and making sure
they all are there?
I'm asking because this is exactly where the procedure broke down when
we added WebP image support in Emacs 29.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-15 15:43 ` Eli Zaretskii
@ 2023-08-15 15:53 ` Corwin Brust
2023-08-15 16:01 ` Eli Zaretskii
0 siblings, 1 reply; 14+ messages in thread
From: Corwin Brust @ 2023-08-15 15:53 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
On Tue, Aug 15, 2023 at 10:43 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Corwin Brust <corwin@bru.st>
> >
> > I hope I did cover information sources well enough, but to put a fine
> > point on it: I watch Emacs devel, bug reports, IRC, reddit, ..., for
> > information leading to updates to this script. Developers and others
> > using Emacs on Windows are the main "information sources", at least
> > speaking from developing that patch :)
>
> Thanks. What I still don't think I understand is how do you make sure
> you have a full list of first-order dependencies? I understand that
> you mostly build on the "last good" list from previous release, but
> since the list grows from time to time, what is the procedure for
> finding the new dependencies, adding them to the list, and making sure
> they all are there?
>
> I'm asking because this is exactly where the procedure broke down when
> we added WebP image support in Emacs 29.
The above quote from myself I retained is my best/only answer:
I update the script as issues are reported or when I somehow otherwise
learn that changes are needed. I have no real process for this, and
nothing in the tooling is helping me with it, so far.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-15 15:53 ` Corwin Brust
@ 2023-08-15 16:01 ` Eli Zaretskii
2023-08-16 1:23 ` Corwin Brust
0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2023-08-15 16:01 UTC (permalink / raw)
To: Corwin Brust; +Cc: 65206
> From: Corwin Brust <corwin@bru.st>
> Date: Tue, 15 Aug 2023 10:53:55 -0500
> Cc: 65206@debbugs.gnu.org
>
> > Thanks. What I still don't think I understand is how do you make sure
> > you have a full list of first-order dependencies? I understand that
> > you mostly build on the "last good" list from previous release, but
> > since the list grows from time to time, what is the procedure for
> > finding the new dependencies, adding them to the list, and making sure
> > they all are there?
> >
> > I'm asking because this is exactly where the procedure broke down when
> > we added WebP image support in Emacs 29.
>
> The above quote from myself I retained is my best/only answer:
>
> I update the script as issues are reported or when I somehow otherwise
> learn that changes are needed. I have no real process for this, and
> nothing in the tooling is helping me with it, so far.
OK, so here's a suggestion which might improve that crucial part: scan
the list in dynamic-library-alist, on lisp/term/w32-win.el. Every
dependency that is loaded dynamically (i.e., Emacs is not linked
against it when it is built) must be in that list. So when we add
dependencies, we add them there.
I believe that given a full and complete lest of first-order
dependencies, those which Emacs actually loads, all the higher-order
dependencies can be found by following the MSYS2 pacman etc., is that
right?
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-15 16:01 ` Eli Zaretskii
@ 2023-08-16 1:23 ` Corwin Brust
2023-08-16 12:08 ` Eli Zaretskii
0 siblings, 1 reply; 14+ messages in thread
From: Corwin Brust @ 2023-08-16 1:23 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
On Tue, Aug 15, 2023 at 11:01 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> >
> > I update the script as issues are reported or when I somehow otherwise
> > learn that changes are needed. I have no real process for this, and
> > nothing in the tooling is helping me with it, so far.
>
> OK, so here's a suggestion which might improve that crucial part: scan
> the list in dynamic-library-alist, on lisp/term/w32-win.el. Every
> dependency that is loaded dynamically (i.e., Emacs is not linked
> against it when it is built) must be in that list. So when we add
> dependencies, we add them there.
I looked at the variable. OT1H, it serves a very different use-case
("what are valid DLL names for a given library?" in the run-time, vs
"what DLLs should be sent along with Emacs?" in the build-time).
This means that meaningful hackery would likely be needed to
contemplate removing the hard-coded list completely, or even that we
would not be able to device any means of parsing this and choosing the
correct sent among DLLs present on the build system, to include.
OTOH, and more directly to the point of this bug report:
>
> I believe that given a full and complete lest of first-order
> dependencies, those which Emacs actually loads, all the higher-order
> dependencies can be found by following the MSYS2 pacman etc., is that
> right?
>
Right, that is how the script presently works:
package_info = check_output(["pacman", "-Si",
pkg]).decode("utf-8").split("\n")
Thus, if we are content to have the script detect, and error demanding
correction when out of sync wrt `dynamic-library-alist', I believe it
can be done. Moreover, IMO this will definitely help.
One process note is that I would likely switch to (maybe) generating
new DEPS right after creating NO DEPS, so the script can count on
invoking the freshly compiled and locally installed Emacs. This also
seems much easier and also more proper vs anything to parse it "the
hard way". (Especially so, considering complexities such as format
strings and the libpng version comment on the source setting up the
default value of dynamic-module-alist.)
Does a "invokes Emacs now and errors out if stuff is missing" approach
sound right/good?
Is it too soon for me to try making a new patch that explores this idea further?
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-16 1:23 ` Corwin Brust
@ 2023-08-16 12:08 ` Eli Zaretskii
2023-08-16 13:41 ` Corwin Brust
0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2023-08-16 12:08 UTC (permalink / raw)
To: Corwin Brust; +Cc: 65206
> From: Corwin Brust <corwin@bru.st>
> Date: Tue, 15 Aug 2023 20:23:44 -0500
> Cc: 65206@debbugs.gnu.org
>
> On Tue, Aug 15, 2023 at 11:01 AM Eli Zaretskii <eliz@gnu.org> wrote:
> >
> > OK, so here's a suggestion which might improve that crucial part: scan
> > the list in dynamic-library-alist, on lisp/term/w32-win.el. Every
> > dependency that is loaded dynamically (i.e., Emacs is not linked
> > against it when it is built) must be in that list. So when we add
> > dependencies, we add them there.
>
> I looked at the variable. OT1H, it serves a very different use-case
> ("what are valid DLL names for a given library?" in the run-time, vs
> "what DLLs should be sent along with Emacs?" in the build-time).
> This means that meaningful hackery would likely be needed to
> contemplate removing the hard-coded list completely, or even that we
> would not be able to device any means of parsing this and choosing the
> correct sent among DLLs present on the build system, to include.
I'm not sure I understand the reservation. That list mentions every
single DLL that we know can be used for each optional feature. If a
feature has more than one DLL listed, the first one is usually the
most popular, and should be tried first. Given this, what problems do
you envision with using that list?
> Thus, if we are content to have the script detect, and error demanding
> correction when out of sync wrt `dynamic-library-alist', I believe it
> can be done. Moreover, IMO this will definitely help.
Great, that's what I hoped to achieve: a way of verifying that your
list of first-order dependencies is complete.
> Does a "invokes Emacs now and errors out if stuff is missing" approach
> sound right/good?
I'm not sure I understand how would you force Emacs to "error out"
when we are talking about optional dependencies. They are optional so
that Emacs could run even if they are not present.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-16 12:08 ` Eli Zaretskii
@ 2023-08-16 13:41 ` Corwin Brust
2023-08-16 14:49 ` Eli Zaretskii
0 siblings, 1 reply; 14+ messages in thread
From: Corwin Brust @ 2023-08-16 13:41 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
On Wed, Aug 16, 2023 at 7:08 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Corwin Brust <corwin@bru.st>
> > Date: Tue, 15 Aug 2023 20:23:44 -0500
> > Cc: 65206@debbugs.gnu.org
> >
> > On Tue, Aug 15, 2023 at 11:01 AM Eli Zaretskii <eliz@gnu.org> wrote:
> > >
> > > the list in dynamic-library-alist, on lisp/term/w32-win.el.
>
> I'm not sure I understand the reservation. That list mentions every
> single DLL that we know can be used for each optional feature. If a
> feature has more than one DLL listed, the first one is usually the
> most popular, and should be tried first.
This solves my worry completely, or nearly so.
To confirm: when walking the list, I will want to take the first DLL
mentioned that actually exists for each entry. Is that right?
> Given this, what problems do you envision with using that list?
There might not be a problem (except the one we are trying to fix).
The alist contains 22 entries, while var DLL_REQ contains 14 entries.
The five on the alist but on mentioned in the script (so far) are:
gdiplus
shlwapi
gobject
gio
webpdemux - this is pretty obviously a miss in the script; it does get
however because it's required by webp which is listed in DLL_REQ
Are all of these errors with the script (so, the corresponding DLLs
should be included)? If not, I think we will need a way for the
script to know which alist entries to skip/ignore.
> > Does a "invokes Emacs now and errors out if stuff is missing" approach
> > sound right/good?
>
> I'm not sure I understand how would you force Emacs to "error out"
> when we are talking about optional dependencies. They are optional so
> that Emacs could run even if they are not present.
>
Oops, badly said: I mean that my build and packaging process should
stop and report an error if it cannot create a "complete" DEPS ZIP.
Nothing affecting the Emacs run-time.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-16 13:41 ` Corwin Brust
@ 2023-08-16 14:49 ` Eli Zaretskii
2023-08-17 7:25 ` Corwin Brust
0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2023-08-16 14:49 UTC (permalink / raw)
To: Corwin Brust; +Cc: 65206
> From: Corwin Brust <corwin@bru.st>
> Date: Wed, 16 Aug 2023 08:41:25 -0500
> Cc: 65206@debbugs.gnu.org
>
> On Wed, Aug 16, 2023 at 7:08 AM Eli Zaretskii <eliz@gnu.org> wrote:
> >
> > I'm not sure I understand the reservation. That list mentions every
> > single DLL that we know can be used for each optional feature. If a
> > feature has more than one DLL listed, the first one is usually the
> > most popular, and should be tried first.
>
> This solves my worry completely, or nearly so.
>
> To confirm: when walking the list, I will want to take the first DLL
> mentioned that actually exists for each entry. Is that right?
Yes.
> There might not be a problem (except the one we are trying to fix).
> The alist contains 22 entries, while var DLL_REQ contains 14 entries.
> The five on the alist but on mentioned in the script (so far) are:
>
> gdiplus
> shlwapi
You can ignore those: they are for Windows 9X, and they are system
DLLs.
> gobject
> gio
These are needed for librsvg. You might get away with them because
librsvg pulls them in as second-order dependencies.
> webpdemux - this is pretty obviously a miss in the script; it does get
> however because it's required by webp which is listed in DLL_REQ
Yes, this is required by libwebp, since some of the library functions
are in lobwebpdemux.
> Are all of these errors with the script (so, the corresponding DLLs
> should be included)? If not, I think we will need a way for the
> script to know which alist entries to skip/ignore.
You should only skip the first two, which are Windows system DLLs.
> > > Does a "invokes Emacs now and errors out if stuff is missing" approach
> > > sound right/good?
> >
> > I'm not sure I understand how would you force Emacs to "error out"
> > when we are talking about optional dependencies. They are optional so
> > that Emacs could run even if they are not present.
> >
>
> Oops, badly said: I mean that my build and packaging process should
> stop and report an error if it cannot create a "complete" DEPS ZIP.
> Nothing affecting the Emacs run-time.
OK.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-16 14:49 ` Eli Zaretskii
@ 2023-08-17 7:25 ` Corwin Brust
2023-08-17 9:55 ` Eli Zaretskii
0 siblings, 1 reply; 14+ messages in thread
From: Corwin Brust @ 2023-08-17 7:25 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
[-- Attachment #1: Type: text/plain, Size: 2456 bytes --]
On Wed, Aug 16, 2023 at 9:49 AM Eli Zaretskii <eliz@gnu.org> wrote:
> >
> > To confirm: when walking the list, I will want to take the first DLL
> > mentioned that actually exists for each entry. Is that right?
>
> Yes.
>
The attached patch replaces DLL_REQ (the var holding the "starting"
list of DLLs) with an invocation of emacs batch, as described above.
Once this patch is installed, the script will require the (path to
the) nominally newly created Emacs binary as an argument.
I'm still looking at the differences between outputs from this and
from the script as from my prior patch; however, this runs without
error which will improve the situation if it is applied. (The patch
is for emacs-29 because I expect Emacs 29.2 will be the next release
packaged.)
>
> You should only skip the first two, which are Windows system DLLs.
>
> > > > Does a "invokes Emacs now and errors out if stuff is missing" approach
> > > > sound right/good?
> > >
> > > I'm not sure I understand how would you force Emacs to "error out"
> > > when we are talking about optional dependencies. They are optional so
> > > that Emacs could run even if they are not present.
> > >
> >
> > Oops, badly said: I mean that my build and packaging process should
> > stop and report an error if it cannot create a "complete" DEPS ZIP.
> > Nothing affecting the Emacs run-time.
>
> OK.
>
The patch does not attempt this: I simply remove nil from the "first
present DLL" sweep.
I did verify, currently, only gdiplus and shlwapi return nil, thus the
rest mentioned here are being included (except libgccjig which the
script --still-- expressly omits).
(mapcar (lambda(lib)
(list (car lib)
(seq-find
(lambda(file)
(file-exists-p
(file-name-concat "c:/msys2/mingw64/bin"
file)))
(cdr lib))))
dynamic-library-alist)
((gdiplus nil) (shlwapi nil) (xpm "libXpm-nox4.dll")
(png "libpng16-16.dll") (tiff "libtiff-5.dll") (jpeg "libjpeg-8.dll")
(gif "libgif-7.dll") (svg "librsvg-2-2.dll") (webp "libwebp-7.dll")
(webpdemux "libwebpdemux-2.dll") (sqlite3 "libsqlite3-0.dll")
(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll") (glib "libglib-2.0-0.dll")
(gio "libgio-2.0-0.dll") (gobject "libgobject-2.0-0.dll")
(gnutls "libgnutls-30.dll") (libxml2 "libxml2-2.dll")
(zlib "zlib1.dll") (lcms2 "liblcms2-2.dll") (json "libjansson-4.dll")
(gccjit "libgccjit-0.dll") (tree-sitter "libtree-sitter.dll"))
[-- Attachment #2: 0001-Replace-hard-coded-DLL-list-with-emacs-batch-for-nt.patch --]
[-- Type: application/octet-stream, Size: 8834 bytes --]
From a44f06900efa33635e1e9e4bfcbf54c9045e0abf Mon Sep 17 00:00:00 2001
From: Corwin Brust <corwin@bru.st>
Date: Thu, 17 Aug 2023 01:28:19 -0500
Subject: [PATCH] Replace DLL list with emacs --batch for nt packaging
The script now requires the path to (the newly built) Emacs as a
command line argument. Run the script with -h for additional options.
Emacs is invoked to print a list containing the first DLL found to
exist while walking the CDR of each item in `dynamic-library-alist',
and other critical maintenance. (Bug#65206)
* nt/admin/dist-build/build-deps-zips.py(script): remove DLL_REQ
in favor of calling emacs, change vendor slug from msys64 to mingw64,
skip some ancient certificates, add SRC_EXT to map transformation
source package name transformations vs historical convention.
---
admin/nt/dist-build/build-dep-zips.py | 151 +++++++++++++++++---------
1 file changed, 98 insertions(+), 53 deletions(-)
diff --git a/admin/nt/dist-build/build-dep-zips.py b/admin/nt/dist-build/build-dep-zips.py
index 71105a071ec..fdd74a60e2b 100755
--- a/admin/nt/dist-build/build-dep-zips.py
+++ b/admin/nt/dist-build/build-dep-zips.py
@@ -20,15 +20,17 @@
import os
import shutil
import re
-import functools
-import operator
+import subprocess
from subprocess import check_output
## Constants
-EMACS_MAJOR_VERSION="28"
+EMACS_MAJOR_VERSION="29"
-# This list derives from the features we want Emacs to compile with.
+# Base URI for the package sources mapped in PKG_REQ
+SRC_REPO="https://repo.msys2.org/mingw/sources"
+
+# Map items in `dynamic-library-alist' to source pakages
PKG_REQ='''mingw-w64-x86_64-giflib
mingw-w64-x86_64-gnutls
mingw-w64-x86_64-harfbuzz
@@ -37,26 +39,34 @@
mingw-w64-x86_64-libjpeg-turbo
mingw-w64-x86_64-libpng
mingw-w64-x86_64-librsvg
+mingw-w64-x86_64-libwebp
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-libxml2
-mingw-w64-x86_64-xpm-nox'''.split()
-
-DLL_REQ='''libgif
-libgnutls
-libharfbuzz
-libjansson
-liblcms2
-libturbojpeg
-libpng
-librsvg
-libtiff
-libxml
-libXpm'''.split()
-
+mingw-w64-x86_64-gmp
+mingw-w64-x86_64-xpm-nox
+mingw-w64-x86_64-tree-sitter
+mingw-w64-x86_64-sqlite3'''.split()
+
+# Emacs style path to dependancy DLLs on build system
+DLL_SRC="c:/msys2/mingw64/bin"
+
+# Report first existing file for entries in dynamic-library-alist
+ELISP_PROG="""
+(message "%s" (mapconcat 'identity (remove nil
+ (mapcar (lambda(lib)
+ (seq-find
+ (lambda(file)
+ (file-exists-p
+ (file-name-concat "{}"
+ file)))
+ (cdr lib)))
+ dynamic-library-alist)
+ ) "\\n"))
+""".format(DLL_SRC)
## Options
DRY_RUN=False
-
+NEW_EMACS="bin/emacs.exe"
def check_output_maybe(*args,**kwargs):
if(DRY_RUN):
@@ -64,15 +74,17 @@ def check_output_maybe(*args,**kwargs):
else:
return check_output(*args,**kwargs)
+####################
## DLL Capture
+
+# entry point
def gather_deps():
os.mkdir("x86_64")
os.chdir("x86_64")
- for dep in full_dll_dependency():
- check_output_maybe(["cp /mingw64/bin/{}*.dll .".format(dep)],
- shell=True)
+ for dep in full_dll_dependency(init_deps()):
+ check_output_maybe(["cp /mingw64/bin/{} .".format(dep)], shell=True)
print("Zipping")
check_output_maybe("zip -9r ../emacs-{}-{}deps.zip *"
@@ -80,15 +92,23 @@ def gather_deps():
shell=True)
os.chdir("../")
-## Return all Emacs dependencies
-def full_dll_dependency():
- deps = [dll_dependency(dep) for dep in DLL_REQ]
- return set(sum(deps, []) + DLL_REQ)
+# Return dependancies listed in Emacs
+def init_deps():
+ job_args=[NEW_EMACS, "--batch", "--eval", ELISP_PROG]
+ print("args: ", job_args)
+ return subprocess.check_output(job_args, stderr=subprocess.STDOUT
+ ).decode('utf-8').splitlines()
+
+# Return all second order dependencies
+def full_dll_dependency(dlls):
+ deps = [dll_dependency(dep) for dep in dlls]
+ return set(sum(deps, []) + dlls)
-## Dependencies for a given DLL
+# Dependencies for a given DLL
def dll_dependency(dll):
output = check_output(["/mingw64/bin/ntldd", "--recursive",
- "/mingw64/bin/{}*.dll".format(dll)]).decode("utf-8")
+ "/mingw64/bin/{}".format(dll)]
+ ).decode("utf-8")
## munge output
return ntldd_munge(output)
@@ -103,9 +123,9 @@ def ntldd_munge(out):
## if it's the former, we want it, if its the later we don't
splt = dep.split()
- if len(splt) > 2 and "msys64" in splt[2]:
+ if len(splt) > 2 and "mingw64" in splt[2]:
print("Adding dep", splt[0])
- rtn.append(splt[0].split(".")[0])
+ rtn.append(splt[0])
return rtn
@@ -114,26 +134,43 @@ def ntldd_munge(out):
## Packages to fiddle with
## Source for gcc-libs is part of gcc
SKIP_SRC_PKGS=["mingw-w64-gcc-libs"]
-SKIP_DEP_PKGS=frozenset(["mingw-w64-x86_64-glib2"])
+SKIP_DEP_PKGS=["mingw-w64-glib2", "mingw-w64-ca-certificates-20211016-3"]
MUNGE_SRC_PKGS={"mingw-w64-libwinpthread-git":"mingw-w64-winpthreads-git"}
MUNGE_DEP_PKGS={
"mingw-w64-x86_64-libwinpthread":"mingw-w64-x86_64-libwinpthread-git",
"mingw-w64-x86_64-libtre": "mingw-w64-x86_64-libtre-git",
}
+SRC_EXT={
+ "mingw-w64-freetype": ".src.tar.zst",
+ "mingw-w64-fribidi": ".src.tar.zst",
+ "mingw-w64-glib2": ".src.tar.zst",
+ "mingw-w64-harfbuzz": ".src.tar.zst",
+ "mingw-w64-libunistring": ".src.tar.zst",
+ "mingw-w64-winpthreads-git": ".src.tar.zst",
+ "mingw-w64-ca-certificates": ".src.tar.zst",
+ "mingw-w64-libxml2": ".src.tar.zst",
+ "mingw-w64-ncurses": ".src.tar.zst",
+ "mingw-w64-openssl": ".src.tar.zst",
+ "mingw-w64-pango": ".src.tar.zst",
+ "mingw-w64-python": ".src.tar.zst",
+ "mingw-w64-sqlite3": ".src.tar.zst",
+ "mingw-w64-xpm-nox": ".src.tar.zst",
+ "mingw-w64-xz": ".src.tar.zst",
+}
## Currently no packages seem to require this!
ARCH_PKGS=[]
-SRC_REPO="https://repo.msys2.org/mingw/sources"
+def immediate_deps(pkg):
+ package_info = check_output(["pacman", "-Si", pkg]).decode("utf-8").split("\n")
-def immediate_deps(pkgs):
- package_info = check_output(["pacman", "-Si"] + pkgs).decode("utf-8").splitlines()
+ ## Extract the "Depends On" line
+ depends_on = [x for x in package_info if x.startswith("Depends On")][0]
+ ## Remove "Depends On" prefix
+ dependencies = depends_on.split(":")[1]
- ## Extract the packages listed for "Depends On:" lines.
- dependencies = [line.split(":")[1].split() for line in package_info
- if line.startswith("Depends On")]
- ## Flatten dependency lists from multiple packages into one list.
- dependencies = functools.reduce(operator.iconcat, dependencies, [])
+ ## Split into dependencies
+ dependencies = dependencies.strip().split(" ")
## Remove > signs TODO can we get any other punctuation here?
dependencies = [d.split(">")[0] for d in dependencies if d]
@@ -149,18 +186,16 @@ def extract_deps():
print( "Extracting deps" )
# Get a list of all dependencies needed for packages mentioned above.
- pkgs = set(PKG_REQ)
- newdeps = pkgs
- print("adding...")
- while True:
- subdeps = frozenset(immediate_deps(list(newdeps)))
- newdeps = subdeps - SKIP_DEP_PKGS - pkgs
- if not newdeps:
- break
- print('\n'.join(newdeps))
- pkgs |= newdeps
+ pkgs = PKG_REQ[:]
+ n = 0
+ while n < len(pkgs):
+ subdeps = immediate_deps(pkgs[n])
+ for p in subdeps:
+ if not (p in pkgs or p in SKIP_DEP_PKGS):
+ pkgs.append(p)
+ n = n + 1
- return list(pkgs)
+ return sorted(pkgs)
def download_source(tarball):
@@ -208,7 +243,13 @@ def gather_source(deps):
## Switch names if necessary
pkg_name = MUNGE_SRC_PKGS.get(pkg_name,pkg_name)
- tarball = "{}-{}.src.tar.gz".format(pkg_name,pkg_version)
+ ## src archive is usually a .tar.gz
+ if pkg_name in SRC_EXT.keys():
+ src_ext = SRC_EXT[pkg_name]
+ else:
+ src_ext = ".src.tar.gz"
+
+ tarball = "{}-{}{}".format(pkg_name,pkg_version,src_ext)
download_source(tarball)
@@ -233,6 +274,9 @@ def clean():
parser = argparse.ArgumentParser()
+
+parser.add_argument("emacs", help="emacs executable")
+
parser.add_argument("-s", help="snapshot build",
action="store_true")
@@ -251,13 +295,14 @@ def clean():
args = parser.parse_args()
do_all=not (args.c or args.r)
-
+NEW_EMACS=args.emacs
DRY_RUN=args.d
if( args.l ):
print("List of dependencies")
- print( deps )
+ init_deps()
+ print( extract_deps() )
exit(0)
if args.s:
--
2.36.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-17 7:25 ` Corwin Brust
@ 2023-08-17 9:55 ` Eli Zaretskii
2023-08-17 13:31 ` Corwin Brust
0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2023-08-17 9:55 UTC (permalink / raw)
To: Corwin Brust; +Cc: 65206
> From: Corwin Brust <corwin@bru.st>
> Date: Thu, 17 Aug 2023 02:25:27 -0500
> Cc: 65206@debbugs.gnu.org
>
> The attached patch replaces DLL_REQ (the var holding the "starting"
> list of DLLs) with an invocation of emacs batch, as described above.
> Once this patch is installed, the script will require the (path to
> the) nominally newly created Emacs binary as an argument.
>
> I'm still looking at the differences between outputs from this and
> from the script as from my prior patch; however, this runs without
> error which will improve the situation if it is applied. (The patch
> is for emacs-29 because I expect Emacs 29.2 will be the next release
> packaged.)
Hmm... what is the value of libjpeg-version? It's 90 here, so the
library for JPEG is libjpeg-9.dll, not libjpeg-8.dll.
Otherwise, LGTM, thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain
2023-08-17 9:55 ` Eli Zaretskii
@ 2023-08-17 13:31 ` Corwin Brust
0 siblings, 0 replies; 14+ messages in thread
From: Corwin Brust @ 2023-08-17 13:31 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 65206
On Thu, Aug 17, 2023 at 4:55 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
>
> Hmm... what is the value of libjpeg-version? It's 90 here, so the
> library for JPEG is libjpeg-9.dll, not libjpeg-8.dll.
I have 80
>
> Otherwise, LGTM, thanks.
>
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-08-17 13:31 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-10 12:40 bug#65206: 29.1; [windows][patch] build-deps-zips.py is broken and hard to maintain Corwin Brust
2023-08-10 13:29 ` Eli Zaretskii
2023-08-10 21:09 ` Corwin Brust
2023-08-15 7:39 ` Corwin Brust
2023-08-15 15:43 ` Eli Zaretskii
2023-08-15 15:53 ` Corwin Brust
2023-08-15 16:01 ` Eli Zaretskii
2023-08-16 1:23 ` Corwin Brust
2023-08-16 12:08 ` Eli Zaretskii
2023-08-16 13:41 ` Corwin Brust
2023-08-16 14:49 ` Eli Zaretskii
2023-08-17 7:25 ` Corwin Brust
2023-08-17 9:55 ` Eli Zaretskii
2023-08-17 13:31 ` Corwin Brust
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.