31 lines
2.0 KiB
Markdown
Executable File
31 lines
2.0 KiB
Markdown
Executable File
# Report: mawk vs gawk in OpenWRT SDK Context
|
|
|
|
## Introduction
|
|
This report details the technical differences between `mawk` and `gawk` that led to the build failure of the Mosh package within the OpenWRT SDK environment.
|
|
|
|
## The failure
|
|
The OpenWRT SDK build process failed with the following error:
|
|
```
|
|
awk: include/scan.awk: line 21: function asort never defined
|
|
```
|
|
This error occurred during the package scanning phase (`include/scan.mk`), which uses `awk` scripts to parse package definitions.
|
|
|
|
## mawk (Mike's AWK)
|
|
- **Design Philosophy**: Built for speed and strict POSIX compliance. It is significantly faster than `gawk` for simple text processing tasks, which is why it is the default `awk` provider on many Debian-based minimal installations.
|
|
- **Limitation**: It generally implements only the features defined in the POSIX standard for AWK. It lacks many GNU-specific extensions.
|
|
- **Missing Feature**: complex sorting functions like `asort` and `asorti` are NOT part of the POSIX standard, and thus are absent in `mawk`.
|
|
|
|
## gawk (GNU AWK)
|
|
- **design Philosophy**: The GNU implementation of AWK. It includes all POSIX features plus a vast array of extensions.
|
|
- **Key Features**:
|
|
- `asort()` / `asorti()`: Built-in functions for sorting arrays.
|
|
- Network capabilities (`/inet/tcp/...`).
|
|
- Bitwise operations (`and`, `or`, `xor`).
|
|
- Time functions (`mktime`, `strftime`).
|
|
- **OpenWRT Requirement**: The OpenWRT build system (scripts in `include/` and `scripts/`) relies heavily on these GNU extensions for dependency resolution and menu construction. Specifically, `asort` is used to deterministically order package lists.
|
|
|
|
## Conclusion
|
|
The task was blocked because the system's `/usr/bin/awk` pointed to `mawk`. The OpenWRT SDK assumes a full-featured `gawk` environment. Although `mawk` is faster, it is functionally insufficient for the complex logic contained in OpenWRT's build scripts.
|
|
|
|
Now that `gawk` is installed, the SDK scripts will be able to execute the `asort` function and proceed with the build.
|