mirror of
https://github.com/espressif/openthread.git
synced 2026-11-08 15:33:21 +00:00
In `socat-1.7.4.4/filan.c`, `printtime()` declares `const char *s`, assigns `asctime(localtime(&time))` (which returns `char *`), and strips the trailing newline in place via `*strchr(s, '\n') = '\0'`. With glibc 2.43 and `-D_GNU_SOURCE` (as on Ubuntu 26.04 with GCC 15.2), `<string.h>` enables ISO C23 qualifier-preserving `_Generic` macros so `strchr(const char *, int)` returns `const char *`, causing `make` in `script/install_socat` to fail with `error: assignment of read-only location` (even if `-std=gnu17` is passed). This commit patches `printtime()` in `filan.c` after archive extraction to declare `char *s;` (matching `asctime()`'s `char *` return type without altering `const char *s;` in `getfiletypestring()` above it), using a POSIX `sed` + `mv` sequence compatible with both Linux and macOS.
86 lines
3.3 KiB
Bash
86 lines
3.3 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2025, The OpenThread Authors.
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# 3. Neither the name of the copyright holder nor the
|
|
# names of its contributors may be used to endorse or promote products
|
|
# derived from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
|
|
set -euxo pipefail
|
|
|
|
TEMP_PATH=$(mktemp -d)
|
|
SOCAT="socat-1.7.4.4"
|
|
SOCAT_TAR="$SOCAT.tar.bz2"
|
|
# Use the Yocto source mirror for HTTPS transport; verify the upstream archive hash below.
|
|
SOCAT_URL="https://downloads.yoctoproject.org/mirror/sources/$SOCAT_TAR"
|
|
SOCAT_SHA256="fbd42bd2f0e54a3af6d01bdf15385384ab82dbc0e4f1a5e153b3e0be1b6380ac"
|
|
|
|
trap 'rm -rf "$TEMP_PATH" || sudo rm -rf "$TEMP_PATH"' EXIT
|
|
|
|
verify_sha256()
|
|
{
|
|
local actual_sha256
|
|
local archive=$1
|
|
|
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
actual_sha256=$(sha256sum "$archive" | awk '{print $1}')
|
|
elif command -v shasum >/dev/null 2>&1; then
|
|
actual_sha256=$(shasum -a 256 "$archive" | awk '{print $1}')
|
|
else
|
|
echo "sha256sum or shasum is required to verify $archive" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $actual_sha256 != "$SOCAT_SHA256" ]]; then
|
|
echo "SHA-256 mismatch for $archive" >&2
|
|
echo "Expected: $SOCAT_SHA256" >&2
|
|
echo "Actual: $actual_sha256" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
INSTALL_PREFIX="--prefix=/usr"
|
|
if command -v brew >/dev/null 2>&1; then
|
|
INSTALL_PREFIX="" # On MacOS, it's not allowed to install to /usr/bin due to System Integrity Protection
|
|
fi
|
|
|
|
cd "$TEMP_PATH"
|
|
[[ -f $SOCAT_TAR ]] || wget \
|
|
--tries 4 \
|
|
--https-only \
|
|
--secure-protocol=TLSv1_2 \
|
|
--max-redirect=0 \
|
|
--output-document="$SOCAT_TAR" \
|
|
"$SOCAT_URL"
|
|
verify_sha256 "$SOCAT_TAR"
|
|
tar -xjf "$SOCAT_TAR"
|
|
cd "$SOCAT"
|
|
# Fix C23 / glibc 2.43 build failure where const-preserving strchr() rejects
|
|
# mutating asctime()'s char * return value through a const char * variable.
|
|
sed '/^static int printtime(/,/^}/s/const char \*s;/char *s;/' filan.c >filan.c.tmp
|
|
mv filan.c.tmp filan.c
|
|
./configure "$INSTALL_PREFIX"
|
|
make
|
|
sudo make install
|