Test on macOS 12.2.1 against the master branch. #24397 doesn't fix it.

```
brew info boost
boost: stable 1.78.0 (bottled), HEAD
...
./configure --enable-external-signer
...
checking for boostlib >= 1.64.0 (106400)... yes
checking whether Boost.Process can be used... no
configure: error: External signing is not supported for this Boost version
```

It does work with boost 1.76 (there was no 1.77 release in home-brew):

```
brew install boost@1.76
...
LDFLAGS="-L/usr/local/opt/boost@1.76/lib" CPPFLAGS="-I/usr/local/opt/boost@1.76/include" ./configure --enable-external-signer
...
checking for boostlib >= 1.64.0 (106400)... yes
checking whether Boost.Process can be used... yes
...
Options used to compile and link:
  external signer = yes
```

There's nothing in the release notes about Boost.Process for either [1.77](https://www.boost.org/users/history/version_1_77_0.html) or [1.78](https://www.boost.org/users/history/version_1_78_0.html).

The Homebrew [formula changes](https://github.com/Homebrew/homebrew-core/commits/master/Formula/boost.rb) are nothing but a trivial version and hash bump.
const std::string section = str.substr(1, str.size() - 2);
                sections.emplace_back(SectionInfo{section, filepath, linenr});
                prefix = section + '.';
            } else if (*str.begin() == '-') {
                error = strprintf("parse error on line %i: %s, options in configuration file must be specified without leading -", linenr, str);
                return false;
            } else if ((pos = str.find('=')) != std::string::npos) {
                std::string name = prefix + TrimString(str.substr(0, pos), pattern);
                std::string value = TrimString(str.substr(pos + 1), pattern);
                if (used_hash && name.find("rpcpassword") != std::string::npos) {
                    error = strprintf("parse error on line %i, using # in rpcpassword can be ambiguous and should be avoided", linenr);
                    return false;
                }
                options.emplace_back(name, value);
                if ((pos = name.rfind('.')) != std::string::npos && prefix.length() <= pos) {
                    sections.emplace_back(SectionInfo{name.substr(0, pos), filepath, linenr});
                }
            } else {
                error = strprintf("parse error on line %i: %s", linenr, str);
                if (str.size() >= 2 && str.substr(0, 2) == "no") {
                    error += strprintf(", if you intended to specify a negated option, use %s=1 instead", str);
                }
                return false;
            }
        }
        ++linenr;
    }
    return true;
}
bool ArgsManager::ReadConfigStream(std::istream& stream, const std::string& filepath, std::string& error, bool ignore_invalid_keys)