1
0
mirror of https://github.com/skeeto/w64devkit.git synced 2026-10-24 17:39:18 +03:00
Commit Graph

384 Commits

Author SHA1 Message Date
Christopher Wellons
9ad03683db Strip makensis
NSIS links makensis with -s only if a test program so linked runs,
which a cross build cannot do, so makensis.exe shipped with its
symbol table and DWARF from its libraries. Strip it after install,
as with vimrun.exe. Nothing else NSIS installs carried symbols, and
the stubs and plugins are unchanged. makensis.exe shrinks from
1,536,466 to 835,072 bytes in the x64 kit, and from 1,414,912 to
889,856 bytes in the x86 kit. Its loaded sections are unchanged, and
it produces byte-identical installers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 11:39:56 -04:00
Christopher Wellons
dde20aa10a Ship manual pages
Keep the pages that GCC, Binutils and others install, add GDB's, Make's
and zstd's from their sources, and generate ctags, CMake and Ccache
pages from their documentation in a new stage with docutils, Sphinx and
asciidoctor. Aliases such as cc, g++ and vi get one-line .so stubs
instead of copies. The build fails if any installed page is not roff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:27 -04:00
Christopher Wellons
9bf19c91d0 Enable BusyBox man, and colors in less -R
man now looks in MANPATH and then the kit's share/man, formats pages
with the kit's nroff, finds target-prefixed names such as
x86_64-w64-mingw32-gcc under their base name, and pages through less -R.
less -R previously stripped SGR escapes. It now passes them through with
correct line widths and searching, so pages show bold and underline, and
so does colored output such as ls --color=always.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:27 -04:00
Christopher Wellons
25891bd5ce Add nroff, a formatter for manual pages
A small, self-contained roff formatter for BusyBox man to run in place
of groff. It covers what manual pages use: man(7), mdoc(7) and tbl, laid
out like groff and mandoc respectively. Over 98% of the lines in a
295,000-line corpus of real pages render identically to those tools. -w
lints a page, and it also formats pages that are not installed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:27 -04:00
Christopher Wellons
0f7921c495 Upgrade to aas-sign 1.1.1
Also install its new manual page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:27 -04:00
Christopher Wellons
607c4099a4 Upgrade to dcmake 1.7.2
Also install its new manual page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:26 -04:00
Christopher Wellons
c63edeff8f Upgrade to u-config 0.35.0
Download the release instead of vendoring the amalgamated pkg-config.c,
and generate the amalgamation with its makefile. Also install its
manual page, and point make2compdb.c's credits at u-config itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:26 -04:00
Christopher Wellons
b5d325d774 Upgrade to Quilt.cpp 0.69.4
Also install its new manual page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:26 -04:00
Christopher Wellons
23e000b656 Upgrade to tugz 1.3.0
Build from the release's source tarball rather than its amalgams, which
are generated with tugz's own CMake script, since only the tarball has
the new gzip, unzip and zip manual pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:26 -04:00
Christopher Wellons
be339a9847 Make select x86 programs large address aware
On 64-bit Windows a 32-bit process flagged large address aware gets 4GiB
of address space instead of 2GiB. Apply the flag in the x86 kit to the
memory-hungry programs that are safe above 2GiB: binutils, the shipped
GCC, gdb, zstd, and tugz's gzip, unzip, and zip. The flag goes on GCC's
host LDFLAGS, so programs built with the kit are unaffected. It is empty
in the x64 kit, where PE32+ images are already large address aware and
the linker rejects the option.

Tested with all free address space below 2GiB reserved before startup,
forcing allocations high, and smoke tested on Windows XP, which ignores
the flag without /3GB.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 20:29:36 -04:00
Christopher Wellons
a3a24b2509 Raise zstd's default decompression window to 2GiB on x64
Without -M or --long, the zstd CLI refuses frames with windows over
128MiB, and some files in the wild now require --long=30. A new patch
adds a ZSTDCLI_DECOMPRESS_WINDOWLOG build option for the decompression
default, set to 31 in the x64 kit only. Compression defaults, and so
compatibility of produced files with other zstd builds, are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:45:10 -04:00
Christopher Wellons
457bd8071d Upgrade to tugz 1.1.0 and add zipinfo
tugz 1.1.0 adds Info-ZIP's ZipInfo mode to unzip, selected by program
name, so zipinfo is an alias.c alias of unzip, as gunzip and zcat are
of gzip. The release also speeds up deflate and inflate, including
x86-64 SIMD paths chosen at run time; it still runs on Windows XP.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:48:33 -04:00
Christopher Wellons
d38e1f384e Bump to 2.10.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:25:26 -04:00
Christopher Wellons
db5cdb3d37 Upgrade to NSIS 3.13
Fixes an nsExec::ExecToLog crash. makensis's default target now comes
from the build's TARGET_ARCH rather than its own pointer size, which
gives the same defaults here: amd64 in the x64 kit, x86 in the x86 kit.
Patches refreshed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:34:25 -04:00
Christopher Wellons
c4d8914b04 Upgrade to CMake 4.4.4
Patch refreshed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:34:25 -04:00
Christopher Wellons
20c48a573a Upgrade to Ccache 4.14.1
Bug fixes, including cleanup of temporary response files on Windows,
storage helper lock compatibility with versions before 4.14, and GCC
profile data lookup for objects in subdirectories. Patches refreshed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:34:24 -04:00
Christopher Wellons
933357f232 Upgrade to Expat 2.9.0
Fixes two vulnerabilities: CVE-2026-102633, an integer overflow in
expat_realloc on 32-bit platforms, and CVE-2026-77214, a missing check
of XML_ParseBuffer's len against the available buffer. Also adds new
property and 64-bit location APIs, and drops the attribute info and
minimum size features, which were disabled by default and unused here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:34:24 -04:00
Christopher Wellons
b573126546 Upgrade to Quilt.cpp 0.69.3 and drop the NSIS CRLF workaround
Quilt.cpp now honors --strip-trailing-cr in QUILT_DIFF_OPTS, set in
src/quiltrc, so a refresh against a CRLF file produces an LF-only
patch, and push still applies it with the file's CRLF line endings.
NSIS's Source/build.cpp no longer needs its carriage returns stripped
before patching. The NSIS patches are refreshed accordingly.

This release also makes push --refresh honor QUILT_REFRESH_ARGS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 11:19:27 -04:00
Christopher Wellons
ce5576c416 Build Quilt.cpp from its release instead of vendoring the amalgamation
Quilt.cpp is now an ordinary external dependency, fetched as a release
tarball. A POSIX build replaces Debian's quilt for applying every patch
queue in the image, and the same build generates the amalgamation that
is compiled into quilt.exe and shipped as src/quilt.cpp, as before.

Before switching, every queue was pushed with both Debian's quilt and
Quilt.cpp against its pinned source, producing identical trees and
output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:20:43 -04:00
Christopher Wellons
13688517ff Fold the gendef patch queue into mingw
gendef's one patch was a second queue pushed onto the mingw tree in the
gendef build stage. It now sits at the end of the mingw queue, so the
tree is patched once like every other component.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 09:28:38 -04:00
Christopher Wellons
22e4d0c6c2 Replace BusyBox gzip, gunzip, zcat, and unzip with tugz 1.0.0
tugz provides gzip, unzip, and a new Info-ZIP compatible zip. Built from
the release amalgamations; gunzip and zcat are alias.c aliases of gzip,
which selects its mode by program name. It runs on Windows XP, looking
up Vista-era functions at run time.

With those applets disabled, BusyBox tar runs the external gzip/gunzip
for .gz, as it already does for zstd. A new patch swaps the internal
inflater, now unused, for a stub that execs gunzip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 22:54:12 -04:00
Christopher Wellons
8aa7cfcb96 Build PDCurses with PDC_FORCE_UTF8
Without it, PDCurses decodes narrow strings with the CRT's mbtowc(),
which follows LC_CTYPE. When GDB 18.1 selects a UTF-8 host charset it
calls setlocale(LC_CTYPE, "C"), so in the TUI each byte of a UTF-8
sequence became its own character: π (CF 80) displayed as Ï.

PDC_FORCE_UTF8 makes PDCurses decode UTF-8 itself, independent of the
locale. Its decoder covers only the BMP. ccmake links the same library
and gets the same behavior.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:38:11 -04:00
Christopher Wellons
fa8f34ae76 Upgrade to GDB 18.1
Windows-relevant changes: the native target gains scheduler-locking,
non-stop mode (Windows 10+), and native TLS variable support; Windows
Terminal consoles get UTF-8 output handling; and backslashes in paths
are now normalized to forward slashes.

Support for stabs, mdebug, dbx, and CTF was removed. None affect this
toolchain, which emits DWARF. All three local patches still apply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:56:26 -04:00
Christopher Wellons
cc2b5c8b0b Upgrade to xxHash 0.8.4
Maintenance release with no API changes; it is only a ccache
dependency here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 07:31:05 -04:00
Christopher Wellons
4f12cb0d25 Upgrade to Expat 2.8.5
Security release fixing CVE-2026-93990.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 07:30:53 -04:00
Christopher Wellons
956d28aa0e busybox: Replace config sed edits with an overrides file
The sed chain grew with each tweak and fails silently: a pattern that
misses leaves the default in place, a wildcard like CONFIG_FTP\w* may
catch symbols added by a future upstream, and kconfig quietly discards
values it rejects. List the overrides in src/busybox.config instead.

Kconfig keeps the first assignment of each symbol and ignores later
ones, so prepending the overrides to the stock defconfig makes them
win. After configuring, every override must appear verbatim in .config,
or the build fails and prints the ones that did not take (unknown
symbol, out-of-range value, unmet dependency).

The resulting .config is identical to the sed chain's for both x64 and
x86.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-22 16:08:01 -04:00
Christopher Wellons
4bcc7c0d6d busybox: Raise shell history limit to 16k, default to 1k
The busybox-w32 defconfig caps HISTSIZE at 1023 and defaults to 384,
which is cramped for desktop use. Nothing in the history code is worse
than linear. The one cost that scales with history is fork emulation:
each forkshell child of an interactive shell (command substitution,
subshell, pipeline stage) receives a copy of the in-memory history. At
10k entries that adds roughly 0.3 ms to a ~5 ms spawn. The cap itself
only sizes a fixed pointer array, so raising it is nearly free, and
the 1024 default stays well under 1% per fork.

Upstream Kconfig limits FEATURE_EDITING_HISTORY to 2000, and kconfig
treats out-of-range values as unset, so patch the range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-22 16:08:01 -04:00
g-berthiaume
16ed33fa2d Add make2compdb, JSON Compilation Database tool
Closes #251.
2026-09-17 08:17:43 -04:00
Christopher Wellons
bfd76abc0c Bump to 2.10.0 2026-09-13 20:56:27 -04:00
Christopher Wellons
3e233990e0 Rename the crossgcc patch queue to gcc-final
"crossgcc" names a property both GCC builds share: /x-gcc is a plain
cross build and /gcc is a Canadian cross, so "cross" does not tell them
apart, and it points at the bootstrap compiler, which is the one queue
it does not apply to.

What separates the queues is reach. Both push onto the same tree, which
is never popped: src/gcc goes on before the bootstrap compiler and is
still applied when the shipped compiler configures, so it reaches both.
The second queue goes on top afterward and reaches only the compiler
that ships. Name it for that.

As a bonus the directories now sort in push order; crossgcc sorted
before gcc while being applied after it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 08:43:31 -04:00
Christopher Wellons
8a587db9a7 Upgrade to CMake 4.4.3
Per the upstream release notes, the only documented change is that Swift
policy CMP0215's NEW behavior now also requires CMP0157 and CMP0195 to
be set to NEW. force-ninja.patch still applies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 18:15:17 -04:00
Christopher Wellons
8be14c351d Upgrade to Expat 2.8.4
Security release fixing 4 vulnerabilities.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 18:14:53 -04:00
Christopher Wellons
5179007b22 Manage patch queues with quilt series files
Move each component's patches from flat, prefixed file names into a
per-component directory with a quilt series file, dropping the number
prefixes: application order is now stated by series rather than
enforced by lexicographic glob expansion. Outside the build, a queue
is managed by our own quilt against an unpacked tarball from source/
with QUILT_PATCHES=/path/to/src/<component>. The shipped kit carries
the same layout under $W64DEVKIT_HOME/src, consumable by the bundled
quilt.exe the same way.

Inside the build, apply queues with Debian's original quilt rather
than a native build of src/quilt.cpp, whose amalgamation is
Windows-only. This keeps battle-tested GNU patch as the engine, and
makes every image build a conformance check: series semantics mean
whatever the reference implementation says, and a queue our clone
manages must be accepted by original quilt. The .pc state is removed
after each push because source trees are never popped, and a stale
.pc from one queue blocks pushing a second queue onto the same tree,
which happens twice: gcc then crossgcc, mingw then gendef.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 17:25:31 -04:00
Christopher Wellons
666c7c1983 Ship x86 NSIS stubs in the multilib kit
makensis is retargetable: the architecture of the installers it emits
is decided by which precompiled stub it attaches, stubs and plugins
are stored under target-suffixed names, and a script selects one with
"Target x86-unicode" (or CPU x86). Its default remains amd64, chosen
by the bitness of makensis itself. Add a second stub-and-plugin pass
so the multilib kit can emit 32-bit installers, which remain the
traditional choice even for 64-bit payloads since they run on every
Windows and can fail politely on 32-bit hosts.

The NSIS build derives each tool from XGCC_W32_PREFIX and never adds
-m32 on its own, so present the multilib compiler through an i686
interface: wrapper scripts that forward with -m32, --32, and
--target=pe-i386, mirroring the aliases the kit itself ships. The
x86-ansi extras come along unconditionally, matching the standalone
x86 kit's layout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 13:13:16 -04:00
Christopher Wellons
7b39d30a7b Namespace the CMake profile flags
CMAKE_C_FLAGS and CMAKE_CXX_FLAGS are real CMake variable names, and
profile values sit in the environment of every RUN, including the other
cmake invocations that do not pass these flags explicitly. CMake does
not read them from the environment today, but it honors a growing list
of CMAKE_* environment variables, so real names are a latent hazard.
Rename them and document the naming discipline alongside the profiles,
which also covers why CRT_LIB32/CRT_LIB64 avoid their obvious names.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 13:13:16 -04:00
Peter0x44
f7ba9d67da Merge multilib support into x64 variant 2026-08-30 13:13:16 -04:00
Peter0x44
e293462e2b Simplify variant profile controls
Use the selected VARIANT directly for multilib-only control flow rather
than maintaining a separate EXTRA_32 boolean. Redeclare the global build
argument in the selected cross stage so each conditional can state the
actual profile requirement explicitly.

Represent GCC multilib and mingw-w64 CRT selections as enable or disable
state instead of storing complete configure options. Form the GCC and CRT
arguments at their call sites, which keeps punctuation out of the profile
data and makes the three configurations easier to compare.

Remove the standalone x86 WINNT_FLAGS override. The
mingw-default-win32-winnt patch already substitutes Windows XP for every
__i386__ compilation, so passing the same header default through configure
was redundant. Keep the separate Windows 7 CMake flags because CMake and
its bundled curl cannot build against the XP target.

Rename the remaining values that intentionally contain complete command
arguments to GCC_ARCH_FLAG, GCC_MANIFEST_FLAG, and ZSTD_THREAD_FLAG. The
component scope and representation are now visible in each name.

Verify the resulting x64, x86, and multilib Dockerfiles with build checks
and complete cross-toolchain builds. Confirm that only the multilib profile
executes the secondary 32-bit runtime and alias blocks and that each GCC and
CRT configure command receives the expected enable or disable options.
2026-08-30 13:13:16 -04:00
Peter0x44
2e424d7941 Replace variant arguments with build profiles
Replace the loosely coordinated collection of x86 build arguments with
a single VARIANT selector. Define x64, x86, and multilib configuration
stages, then select the requested stage as the common cross-compiler
base. This keeps each supported configuration closed and prevents
callers from combining incompatible architecture settings.

Make x64 the default standalone profile. It targets
x86_64-w64-mingw32, disables GCC multilib support, builds only the
64-bit CRT, and omits the secondary 32-bit libraries and aliases.

Keep the standalone x86 behavior in its own profile. It targets
i686-w64-mingw32, retains the Pentium 4 default, enables only the
32-bit CRT, preserves the Windows XP header default and manifest
behavior, selects the 32-bit BusyBox and NSIS configurations, disables
zstd threading, and raises _WIN32_WINNT only while building CMake.
CMake and its bundled curl require at least Windows Vista APIs, so the
C and C++ flags continue to target Windows 7 without changing the
XP-oriented default of the installed toolchain.

Define multilib as an x86_64 compiler with GCC multilib enabled, both
CRT library sets installed, and the existing i686 forwarding aliases.
Use a dedicated EXTRA_32 setting for the secondary lib32 libraries,
winpthreads builds, thread support object, and aliases instead of
inferring that work from the spelling of a GCC configure option.
Expose independent CRT_LIB32 and CRT_LIB64 settings so each profile
selects exactly the runtime libraries it needs.

Pass the profile's CMake C and C++ flags directly rather than building
an optional argument list through shell positional parameters. Keep all
other profile-specific values next to the selected base stage, including
GCC architecture and manifest flags, BusyBox configuration, zstd
options, and NSIS target architecture.

Simplify multibuild.sh to pass only VARIANT to Docker. Add -m for the
multilib flavor, make -a build all three profiles, and remove the old
argument-file and Dockerfile-patch fallback paths. Update unsigned and
signed CI builds to select x64 or x86 directly, remove the obsolete
variant-x86.args bundle, and document the new build interface.

Verify all three profiles with docker build --check and complete cross
toolchain builds. Smoke-test x64 and x86 compilation, plus both the
64-bit compiler and i686 alias in the multilib profile. Also build the
x64 and x86 CMake targets to exercise both the empty and Windows 7
CMake flag configurations.
2026-08-30 13:13:16 -04:00
Christopher Wellons
5daabd5683 Replace the variant patch with Dockerfile build args
Hoist every variant-sensitive value into an ARG at the top of the cross
stage, with defaults producing the x64 kit, and gate the multilib-only
sidecar builds on MULTILIB. The x86 variant becomes a set of NAME=value
overrides in src/variant-x86.args, which multibuild.sh turns into
--build-arg options. A plain "docker build" continues to work untouched,
downloads stay shared between variants, and the patch mechanism remains
available as a fallback for a future variant needing structural changes.

One hazard of this approach: ARGs leak into the environment of every
subsequent RUN in the stage, and configure scripts read arbitrary
environment variables. mingw-w64-crt decides whether to build the Win64
runtime by testing whether a shell variable named LIB64 is merely set,
so an ARG of that name forced lib64 on past an explicit --disable-lib64.
Hence CRT_LIB64. Keep ARG names clear of names configure might consult.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 13:13:16 -04:00
Christopher Wellons
60cfbd242c Remove dllwrap from the distribution
It's been deprecated for 6 years and unmaintained for 20 years.
2026-08-30 13:13:16 -04:00
Peter0x44
47e0092d6d Fix i686 multilib tool aliases 2026-08-30 13:13:16 -04:00
Peter0x44
0f358cbe71 Default x86 Windows target version in headers 2026-08-30 13:13:16 -04:00
Peter0x44
83f3251d4a Add x86 multilib toolchain support
Keep x86_64 as the default output while enabling the GCC and mingw-w64
32-bit multilib under lib32. Build 32-bit support archives, CRT
libraries, and winpthreads for both the bootstrap and final sysroots so
each compiler stage has a complete i686 runtime.

Use pentium4 as the 32-bit architecture baseline. Add a GCC specs rule
that defaults _WIN32_WINNT to 0x0501 only under -m32 and only when the
caller has not supplied a value, preserving the existing x64 default and
explicit overrides.

Retain the x86_64-w64-mingw32-prefixed tools and add a separate build
step for an i686-w64-mingw32 interface. Compiler drivers inject -m32.
Target-sensitive binutils select their 32-bit modes explicitly: as uses
--32, ld uses -m i386pe, dlltool uses -m i386 with --as-flags=--32, and
windres uses --target=pe-i386. Input-driven inspection and archive tools
forward without a target override.

These forwarding executables provide both prefixed interfaces without
duplicating a second binutils installation. They deliberately remain
selectors for the underlying x86_64-configured multilib compiler rather
than spoofing its configured target identity.

Direct, Autoconf, CMake, and Libtool probes using the i686-prefixed
interface all produced PE-i386 output.
2026-08-30 13:13:16 -04:00
Christopher Wellons
90c83d12a6 Swap GNU downloads to a mirror
The main GNU site has been down for a few days.
2026-08-28 06:52:43 -04:00
Christopher Wellons
700c0611fc Fetch sources with ADD --checksum instead of curl
BuildKit keys ADD --checksum on the checksum and the URL basename, not
on the host, so re-pointing a download at another mirror is a cache hit
and does not even resolve the host. Swapping mirrors during an ftp.gnu.org
outage no longer costs a re-download of everything, which is the trap
that made the recent debian:trixie-slim digest bump so expensive.

Stages that fetched several tarballs in one curl now get one ADD each,
so a mirror change re-fetches a single file rather than all of dl-cross.

Names come from ADD's dest where the URL basename differs, replacing
curl --remote-header-name. This matters beyond cosmetics: every stage's
/dl/*.* is copied into /source/, so these names ship in the source
distribution. GitHub archive refs are the four affected downloads.

ADD cannot run a shell, so expat's tag gains an EXPAT_TAG arg rather
than deriving it from EXPAT_VERSION with tr.

Drops curl from base. BuildKit verifies TLS with its own trust store,
so the downloads are now authenticated rather than passing --insecure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 22:46:07 -04:00
Christopher Wellons
c17ba6fb19 Fetch busybox-w32 from GitHub instead of frippery.org
The archives are identical except for .frp_describe, which is gitignored
and absent from GitHub archives. Without it the Makefile finds neither a
git checkout nor a source directory named after the tag, and the version
degrades from 1.38.0.git-6075-g169694ebd to 1.38.0.git. Recreate the
file after extraction.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 21:11:48 -04:00
Christopher Wellons
af35517988 Upgrade to ccache 4.14
- Windows path rewriting is now case-insensitive and Unicode-aware, and
  ignore_headers_in_manifest matches case-insensitively on Windows.
- Detects C23 #embed directives and assembler .incbin directives,
  preventing false cache hits.
- Removed the cpp_extension (CCACHE_EXTENSION) option; preprocessor
  output is now processed in memory instead of via temporary files.
- Fixed a size overflow when allocating very large files on Windows.

Both Windows console output patches were regenerated against 4.14.
2026-08-23 15:29:42 -04:00
Peter0x44
8611d4d242 Fixes for ccache output on Windows consoles
Ccache captures compiler diagnostics and writes them to the terminal
itself. Its Unix-style isatty and TERM checks do not reliably describe
Win32 console capabilities, and its byte-oriented output path cannot
preserve Unicode outside the active code page.

The color bug can be reproduced in a legacy console without virtual
terminal processing:

    printf 'int main(void) { return undeclared; }\n' > error.c
    TERM=cygwin ccache gcc -c error.c

The diagnostic contains literal escape sequences such as ?[01m?[K
instead of colored text.

The Unicode bug can be reproduced with a non-ASCII identifier:

    printf 'float π(void) { return 3; }\nvoid f(void) { float unused = π(); }\n' > unicode.c
    ccache gcc -Wall -Wextra -c unicode.c
    ccache gcc -Wall -Wextra -c unicode.c

The source line emitted by ccache renders π as mojibake on both captured
and cached diagnostic output.

Add two ccache patches. The first detects native console handles with
GetConsoleMode, enables virtual terminal processing when available, and
otherwise translates supported SGR and erase-line sequences with Win32
console APIs. Redirected output remains unchanged.

The second decodes valid UTF-8 and writes non-ASCII text to native
consoles with WriteConsoleW. ASCII, invalid UTF-8, and redirected output
retain the existing byte-oriented path.

Apply both patches when building ccache.

Fixes skeeto/w64devkit#413.
2026-08-16 15:32:43 -05:00
Christopher Wellons
1f5f751172 Upgrade to Expat 2.8.3
Security release fixing CVE-2026-72522.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 14:30:33 -04:00
Christopher Wellons
d0d13ce550 Drop arch-prefixed elfedit and readelf aliases
The actual tools are not included and these aliases point at nothing.
Plucked from #412.
2026-08-11 18:56:58 -04:00