Commit Graph

70 Commits

Author SHA1 Message Date
Johannes Altmanninger
5ece9bec6c __fish_print_help: use man as-is
Since 0fea1dae8c (__fish_print_help: Make formatting more man-like,
2024-10-03), there is barely any difference left between "man abbr"
and "abbr -h".

The main difference is that it looks almost like man but is actually
nroff/mandoc and less.  This means it doesn't support environment
variables like MANWIDTH and possibly others.

Let's use full "man" for now.
This matches what "git foo --help" does so it's widely accepted.

Keep around a fallback for a while, in case users/packagers fail to
install the new "man" dependency.

In future, "abbr -h" (as opposed to "abbr --help") could show a more
concise version, not sure.

Closes #11786
2025-09-20 13:56:23 +02:00
Daniel Rainer
ad323d03b6 Switch to builtin gettext implementation
This completely removes our runtime dependency on gettext. As a
replacement, we have our own code for runtime localization in
`src/wutil/gettext.rs`. It considers the relevant locale variables to
decide which message catalogs to take localizations from. The use of
locale variables is mostly the same as in gettext, with the notable
exception that we do not support "default dialects". If `LANGUAGE=ll` is
set and we don't have a `ll` catalog but a `ll_CC` catalog, we will use
the catalog with the country code suffix. If multiple such catalogs
exist, we use an arbitrary one. (At the moment we have at most one
catalog per language, so this is not particularly relevant.)

By using an `EnvStack` to pass variables to gettext at runtime, we now
respect locale variables which are not exported.
For early output, we don't have an `EnvStack` to pass, so we add an
initialization function which constructs an `EnvStack` containing the
relevant locale variables from the corresponding Environment variables.
Treat `LANGUAGE` as path variable. This add automatic colon-splitting.

The sourcing of catalogs is completely reworked. Instead of looking for
MO files at runtime, we create catalogs as Rust maps at build time, by
converting PO files into MO data, which is not stored, but immediately
parsed to extract the mappings. From the mappings, we create Rust source
code as a build artifact, which is then macro-included in the crate's
library, i.e. `crates/gettext-maps/src/lib.rs`. The code in
`src/wutil/gettext.rs` includes the message catalogs from this library,
resulting in the message catalogs being built into the executable.

The `localize-messages` feature can now be used to control whether to
build with gettext support. By default, it is enabled. If `msgfmt` is
not available at build time, and `gettext` is enabled, a warning will be
emitted and fish is built with gettext support, but without any message
catalogs, so localization will not work then.

As a performance optimization, for each language we cache a separate
Rust source file containing its catalog as a map. This allows us to
reuse parsing results if the corresponding PO files have not changed
since we cached the parsing result.

Note that this approach does not eliminate our build-time dependency on
gettext. The process for generating PO files (which uses `msguniq` and
`msgmerge`) is unchanged, and we still need `msgfmt` to translate from
PO to MO. We could parse PO files directly, but these are significantly
more complex to parse, so we use `msgfmt` to do it for us and parse the
resulting MO data.

Advantages of the new approach:
- We have no runtime dependency on gettext anymore.
- The implementation has the same behavior everywhere.
- Our implementation is significantly simpler than GNU gettext.
- We can have localization in cargo-only builds by embedding
  localizations into the code.
  Previously, localization in such builds could only work reliably as
  long as the binary was not moved from the build directory.
- We no longer have to take care of building and installing MO files in
  build systems; everything we need for localization to work happens
  automatically when building fish.
- Reduced overhead when disabling localization, both in compilation time
  and binary size.

Disadvantages of this approach:
- Our own runtime implementation of gettext needs to be maintained.
- The implementation has a more limited feature set (but I don't think
  it lacks any features which have been in use by fish).

Part of #11726
Closes #11583
Closes #11725
Closes #11683
2025-09-20 13:56:23 +02:00
David Adam
67e8657109 debian packaging: don't remove Cargo.toml.orig files
Newer versions of cargo include the Cargo.toml.orig file when vendoring,
but dh_clean removes those by default. Try to disable this to fix the
package builds again.
2025-08-23 19:40:53 +08:00
David Adam
df591a2e0f fish.spec/Debian packaging: drop man dependency in favour of groff 2025-05-08 22:16:33 +08:00
David Adam
5e2ddaace9 debian packaging: use the correct test target 2025-02-27 22:46:23 +08:00
Fabian Boehm
494bdfa013 Revert accidentally pushed fork
Revert "README for this fork"

This reverts commit 97db461e7f.

Revert "Allow foo=bar global variable assignments"

This reverts commit 45a2017580.

Revert "Interpret () in command position as subshell"

This reverts commit 0199583435.

Revert "Allow special variables $?,$$,$@,$#"

This reverts commit 4a71ee1288.

Revert "Allow $() in command position"

This reverts commit 4b99fe2288.

Revert "Turn off full LTO"

This reverts commit b1213f1385.

Revert "Back out "bind: Remove "c-" and "a-" shortcut notation""

This reverts commit f43abc42f9.

Revert "Un-hide documentation of non-fish shell builtins"

This reverts commit 485201ba2e.
2025-01-19 18:34:59 +01:00
Johannes Altmanninger
97db461e7f README for this fork 2025-01-19 18:29:07 +01:00
David Adam
54fef433e9 Debian packaging: update dependencies
Ubuntu Focal calls the package with col "bsdmainutils", which is a
transitional package on newer version of both Debian and Ubuntu.

Closes #11037.
2025-01-12 21:19:59 +08:00
David Adam
ccbbae95ef update copyright years to be unbounded
There is no legal need to have the year written here and it's a chore to
keep it up to date.
2025-01-08 20:38:43 +08:00
David Adam
6515862095 Debian packaging: move comments to their own lines 2024-12-26 14:53:04 +08:00
David Adam
0b52b72ebc Debian packaging: comment on reason for runtime dependencies 2024-12-26 13:22:30 +08:00
David Adam
eade6a5672 Debian packaging: add some missing runtime dependencies 2024-12-26 13:21:33 +08:00
David Adam
044cea1bf3 update CMake requirement
find_rust uses LIST(POP_BACK), which was added in 3.15.
2024-12-26 13:20:00 +08:00
David Adam
74b1247461 Debian packaging: reformat dependencies 2024-12-26 13:19:41 +08:00
David Adam
7c2a379674 RPM/Debian packaging: add find dependency
Closes #10913
2024-12-18 11:04:41 +08:00
David Adam
a23cd62ec7 RPM/Debian packaging: update dependencies to match reality 2024-12-15 23:53:55 +08:00
David Adam
8b028c37e5 Bring licensing information up to date and synchronise across files 2024-08-03 00:14:48 +08:00
David Adam
f4a79cc138 debian packaging: disable LTO build profile
Fixes the build on Ubuntu distributions with aggressive enabling of LTO
for all builds.

This build profile sets CFLAGS and CXXFLAGS in a way that prevents cargo
tests from linking. This manifests as errors like:

= note: make[5]: *** read jobs pipe: Bad file descriptor.  Stop.
        make[5]: *** Waiting for unfinished jobs....
        lto-wrapper: fatal error: make returned 2 exit status
        compilation terminated.
        /usr/bin/ld: error: lto-wrapper failed
        collect2: error: ld returned 1 exit status
2024-05-17 23:41:54 +08:00
David Adam
5871deeee5 Debian packaging: drop Xenial support and bump debhelper compat
Discussed in https://github.com/fish-shell/fish-shell/issues/10453
2024-04-30 23:36:56 +08:00
David Adam
572aece169 RPM/Debian packaging: Rust build support 2024-04-30 23:36:56 +08:00
Fabian Boehm
16fcc5de7c Increase MSRV to 1.70
It appears we can't find a system that ships rustc >= 1.67 and < 1.70,
so keeping it at 1.67 gains nothing.

1.70 is used in Debian 13, so that will be able to build fish out of
the box (12 was on 1.63 which was already too low).
2024-04-29 22:00:59 +02:00
Johannes Altmanninger
cad63263d2 debian/copyright: update for renamed and removed files 2024-04-18 11:24:56 +02:00
Fabian Boehm
f62f1aaf99 Remove remaining mentions of curses 2024-02-23 16:36:10 +01:00
Johannes Altmanninger
3ae20bdba0 Move fish-rust to project root 2024-01-13 03:58:33 +01:00
Johannes Altmanninger
ab98566c67 Remove fish_tests
The remaining tests are all obsolete or already ported.
2024-01-07 12:12:09 +01:00
David Adam
094f10874b bump copyright year to 2024 2024-01-06 22:24:55 +08:00
ridiculousfish
98018753e5 Replace references to angular with alpine
Updates our license references.
2023-10-08 12:25:43 -07:00
David Adam
2cb608358d fish.spec/Debian packaging: update licensing details 2023-05-25 22:23:18 +08:00
David Adam
2fbee01e17 Licensing: update the OpenBSD license details
The strlcpy/wcslcpy function is long gone.
2023-05-25 21:06:48 +08:00
David Adam
7c059b1112 Licensing: drop the LGPL reference and text
The wcstok function is long gone.
2023-05-25 20:50:36 +08:00
David Adam
733b981983 fish.spec/Debian packaging: add cargo dependency 2023-04-07 12:45:24 +08:00
David Adam
ad5b3a5b17 debian packaging: use correct name for rust package 2023-02-21 09:10:45 +08:00
David Adam
340db7f7d3 fish.spec/debian packaging: add initial Rust dependencies 2023-02-12 22:53:14 +08:00
David Adam
2a24295e50 debian packaging: add dependency on procps
See https://bugs.debian.org/1029940
2023-01-29 21:21:47 +08:00
David Adam
2debc68ee9 Debian packaging: drop debug package
The build hosts generate -dbgsym packages automatically with newer
versions of debhelper.
2021-09-17 21:03:24 +08:00
David Adam
64311b279d Debian packaging: drop blank postrm script 2021-09-17 21:03:24 +08:00
David Adam
e2aa254722 Debian packaging: update debhelper compat level 2021-09-17 21:03:24 +08:00
David Adam
f35b343852 Debian packaging: drop fish-common package
Splitting fish into multiple packages was what the downstream Debian
packaging does, but it provides minimal benefit to end-users installing
from the fish repositories and in some cases made it harder. The only
benefit was a slightly reduced size on disk for download repositories.

Closes #7845.

Reverts 45ae726d4f and solves #3053
through a Conflict with fish-common.
2021-09-17 21:03:24 +08:00
David Adam
e21a5034bc debian packaging: manually build test infrastructure
CMake 3.5 (shipped in Ubuntu Xenial) doesn't generate the test target
with appropriate dependencies. Build them in dh_auto_build; it's too
hard to convince any of the other steps to do it.

See #7851.
2021-09-14 22:05:09 +08:00
David Adam
58124ad5d6 debian packaging: fixup missing comma 2021-09-14 21:53:59 +08:00
David Adam
08f55343d9 debian packaging: depend on libpcre2-dev
This is now available on all supported platforms.
2021-09-14 21:48:58 +08:00
David Adam
f396a43280 debian packaging: drop recommendation for distutils
No longer required since 9de809ee98
2020-11-29 20:05:41 +08:00
David Adam
2c6e95ccf6 debian packaging: change README.md to README.rst 2020-05-31 17:11:12 +08:00
David Adam
3bb374319a debian packaging: recommend python3-distutils for web config
Reported downstream as
https://bugs.launchpad.net/ubuntu/+source/fish/+bug/1867615
2020-04-11 22:18:31 +08:00
David Adam
57c93f155b debian packaging: make fish-common multi-arch foreign
This means you can install multiple architectures of fish (eg x86 and
x86_64) alongside each other, using the same fish-common package.

Idea from the Debian fish package (version 3.1.0-1.1) by Punit Agrawal
<punit@debian.org>.
2020-03-09 20:02:25 +08:00
David Adam
7e6baab153 debian packaging: explain need for buildsystem argument to dh 2020-02-16 20:58:27 +08:00
David Adam
a85ffb40f9 debian packaging: drop some obsolete requirements 2020-02-16 20:57:30 +08:00
David Adam
5a8685b26c debian packaging: bump Python requirement to 3.5+
Work on #6537.
2020-02-06 12:46:00 +08:00
David Adam
0e75bcc61f fish.spec/debian packaging: add build dependency on Python
For littlecheck etc.
2020-01-28 16:55:05 +08:00
David Adam
567aa1f4e3 debian packaging: bump in Debian standards versioning
Previous commits bring current packaging into line with version 4.1.5.
2020-01-25 21:10:01 +08:00