Compare commits
4 Commits
c8b834e36b
...
39f6f9133c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39f6f9133c | ||
|
|
bc7b947d14 | ||
|
|
1ce460d1d5 | ||
|
|
96b5973e1b |
@@ -15,9 +15,22 @@ fi
|
|||||||
set_name=$1
|
set_name=$1
|
||||||
append_name=$2
|
append_name=$2
|
||||||
relative_prefix=${3:-}
|
relative_prefix=${3:-}
|
||||||
|
if ! [[ "$set_name" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
|
||||||
|
echo "CMake source set name must be a CMake variable name: $set_name" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! [[ "$append_name" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
|
||||||
|
echo "CMake append source set name must be a CMake variable name: $append_name" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "$relative_prefix" = /* || "$relative_prefix" == .. || "$relative_prefix" == ../* || "$relative_prefix" == */.. || "$relative_prefix" == */../* ]]; then
|
||||||
|
echo "CMake source relative prefix must stay project-relative: $relative_prefix" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
awk -v set_name="$set_name" -v append_name="$append_name" -v relative_prefix="$relative_prefix" '
|
awk -v set_name="$set_name" -v append_name="$append_name" -v relative_prefix="$relative_prefix" '
|
||||||
$0 ~ "^[[:space:]]*set\\(" set_name "([[:space:]]|$)" {
|
$0 ~ "^[[:space:]]*set\\(" set_name "([[:space:]]|$)" {
|
||||||
|
found_set = 1
|
||||||
in_set = 1
|
in_set = 1
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
@@ -26,6 +39,7 @@ awk -v set_name="$set_name" -v append_name="$append_name" -v relative_prefix="$r
|
|||||||
next
|
next
|
||||||
}
|
}
|
||||||
$0 ~ "^[[:space:]]*list\\(APPEND " append_name "([[:space:]]|$)" {
|
$0 ~ "^[[:space:]]*list\\(APPEND " append_name "([[:space:]]|$)" {
|
||||||
|
found_append = 1
|
||||||
in_append = 1
|
in_append = 1
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
@@ -46,4 +60,14 @@ awk -v set_name="$set_name" -v append_name="$append_name" -v relative_prefix="$r
|
|||||||
}
|
}
|
||||||
print line
|
print line
|
||||||
}
|
}
|
||||||
|
END {
|
||||||
|
if (!found_set) {
|
||||||
|
print "missing CMake source set: " set_name > "/dev/stderr"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
if (!found_append) {
|
||||||
|
print "missing CMake append source set: " append_name > "/dev/stderr"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
' core/CMakeLists.txt
|
' core/CMakeLists.txt
|
||||||
|
|||||||
@@ -14,9 +14,18 @@ fi
|
|||||||
|
|
||||||
set_name=$1
|
set_name=$1
|
||||||
relative_prefix=${2:-}
|
relative_prefix=${2:-}
|
||||||
|
if ! [[ "$set_name" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
|
||||||
|
echo "CMake source set name must be a CMake variable name: $set_name" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "$relative_prefix" = /* || "$relative_prefix" == .. || "$relative_prefix" == ../* || "$relative_prefix" == */.. || "$relative_prefix" == */../* ]]; then
|
||||||
|
echo "CMake source relative prefix must stay project-relative: $relative_prefix" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
awk -v set_name="$set_name" -v relative_prefix="$relative_prefix" '
|
awk -v set_name="$set_name" -v relative_prefix="$relative_prefix" '
|
||||||
$0 ~ "^[[:space:]]*set\\(" set_name "([[:space:]]|$)" {
|
$0 ~ "^[[:space:]]*set\\(" set_name "([[:space:]]|$)" {
|
||||||
|
found_set = 1
|
||||||
in_list = 1
|
in_list = 1
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
@@ -36,4 +45,10 @@ awk -v set_name="$set_name" -v relative_prefix="$relative_prefix" '
|
|||||||
}
|
}
|
||||||
print line
|
print line
|
||||||
}
|
}
|
||||||
|
END {
|
||||||
|
if (!found_set) {
|
||||||
|
print "missing CMake source set: " set_name > "/dev/stderr"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
' core/CMakeLists.txt
|
' core/CMakeLists.txt
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ trap 'rm -f "$source_list"' EXIT
|
|||||||
} > "$source_list"
|
} > "$source_list"
|
||||||
|
|
||||||
./list-filtered-existing-paths.sh \
|
./list-filtered-existing-paths.sh \
|
||||||
|
--project-relative \
|
||||||
"$filter" \
|
"$filter" \
|
||||||
"missing cnc sim core source" \
|
"missing cnc sim core source" \
|
||||||
"missing cnc sim core source in CMake list" < "$source_list"
|
"missing cnc sim core source in CMake list" < "$source_list"
|
||||||
|
|||||||
@@ -6,8 +6,14 @@ cd "$(dirname "$0")"
|
|||||||
# LinuxCNC source basis: source-list filters validate project bridge/shim
|
# LinuxCNC source basis: source-list filters validate project bridge/shim
|
||||||
# paths before native and wasm probes link them with LinuxCNC source objects,
|
# paths before native and wasm probes link them with LinuxCNC source objects,
|
||||||
# keeping missing adapter files from silently dropping LinuxCNC-backed checks.
|
# keeping missing adapter files from silently dropping LinuxCNC-backed checks.
|
||||||
|
project_relative=0
|
||||||
|
if [[ "${1:-}" == "--project-relative" ]]; then
|
||||||
|
project_relative=1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$#" -lt 3 ]]; then
|
if [[ "$#" -lt 3 ]]; then
|
||||||
echo "usage: $0 <filter> <missing-path-message> <missing-filter-message> [missing-path-hint]" >&2
|
echo "usage: $0 [--project-relative] <filter> <missing-path-message> <missing-filter-message> [missing-path-hint]" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -15,10 +21,19 @@ filter=$1
|
|||||||
missing_path_message=$2
|
missing_path_message=$2
|
||||||
missing_filter_message=$3
|
missing_filter_message=$3
|
||||||
missing_path_hint=${4:-}
|
missing_path_hint=${4:-}
|
||||||
|
if [[ -n "$filter" && ( "$filter" == */* || "$filter" == "." || "$filter" == ".." ) ]]; then
|
||||||
|
echo "source filter must be a basename: $filter" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
found=0
|
found=0
|
||||||
while IFS= read -r path; do
|
while IFS= read -r path; do
|
||||||
[[ -z "$path" ]] && continue
|
[[ -z "$path" ]] && continue
|
||||||
|
if [[ "$project_relative" -eq 1 &&
|
||||||
|
( "$path" = /* || "$path" == .. || "$path" == ../* || "$path" == */.. || "$path" == */../* ) ]]; then
|
||||||
|
echo "project source path must stay project-relative: $path" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
if [[ ! -f "$path" ]]; then
|
if [[ ! -f "$path" ]]; then
|
||||||
echo "$missing_path_message: $path" >&2
|
echo "$missing_path_message: $path" >&2
|
||||||
if [[ -n "$missing_path_hint" ]]; then
|
if [[ -n "$missing_path_hint" ]]; then
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ trap 'rm -f "$source_list"' EXIT
|
|||||||
} > "$source_list"
|
} > "$source_list"
|
||||||
|
|
||||||
./list-filtered-existing-paths.sh \
|
./list-filtered-existing-paths.sh \
|
||||||
|
--project-relative \
|
||||||
"$filter" \
|
"$filter" \
|
||||||
"missing LinuxCNC rs274 API project source" \
|
"missing LinuxCNC rs274 API project source" \
|
||||||
"missing LinuxCNC rs274 API project source in CMake list" < "$source_list"
|
"missing LinuxCNC rs274 API project source in CMake list" < "$source_list"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ filter=${1:-}
|
|||||||
./list-cmake-set-sources.sh cnc_sim_core_sources core/
|
./list-cmake-set-sources.sh cnc_sim_core_sources core/
|
||||||
./list-cmake-set-sources.sh cnc_sim_linuxcnc_rs274_backend_sources core/
|
./list-cmake-set-sources.sh cnc_sim_linuxcnc_rs274_backend_sources core/
|
||||||
} | ./list-filtered-existing-paths.sh \
|
} | ./list-filtered-existing-paths.sh \
|
||||||
|
--project-relative \
|
||||||
"$filter" \
|
"$filter" \
|
||||||
"missing wasm-safe project source" \
|
"missing wasm-safe project source" \
|
||||||
"missing wasm-safe project source in CMake list"
|
"missing wasm-safe project source in CMake list"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ cd "$(dirname "$0")"
|
|||||||
filter=${1:-}
|
filter=${1:-}
|
||||||
|
|
||||||
./list-cmake-set-sources.sh linuxcnc_wasm_safe_probe_shims | ./list-filtered-existing-paths.sh \
|
./list-cmake-set-sources.sh linuxcnc_wasm_safe_probe_shims | ./list-filtered-existing-paths.sh \
|
||||||
|
--project-relative \
|
||||||
"$filter" \
|
"$filter" \
|
||||||
"missing wasm-safe shim source" \
|
"missing wasm-safe shim source" \
|
||||||
"missing wasm-safe shim in CMake list"
|
"missing wasm-safe shim in CMake list"
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ case "$source_set" in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
printf '%s\n' "${sources[@]}" | ./list-filtered-existing-paths.sh \
|
printf '%s\n' "${sources[@]}" | ./list-filtered-existing-paths.sh \
|
||||||
|
--project-relative \
|
||||||
"$filter" \
|
"$filter" \
|
||||||
"$missing_source_message" \
|
"$missing_source_message" \
|
||||||
"$missing_filter_message"
|
"$missing_filter_message"
|
||||||
|
|||||||
@@ -28,6 +28,12 @@ missing_dump_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_rs274_dump_pro
|
|||||||
missing_api_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_rs274_api_project_source.XXXXXX.log")
|
missing_api_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_rs274_api_project_source.XXXXXX.log")
|
||||||
missing_core_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_core_source.XXXXXX.log")
|
missing_core_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_core_source.XXXXXX.log")
|
||||||
missing_bridge_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_bridge_smoke_project_source.XXXXXX.log")
|
missing_bridge_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_bridge_smoke_project_source.XXXXXX.log")
|
||||||
|
escaped_project_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_escaped_project_source.XXXXXX.log")
|
||||||
|
invalid_source_filter_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_invalid_source_filter.XXXXXX.log")
|
||||||
|
missing_cmake_set_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_cmake_set.XXXXXX.log")
|
||||||
|
missing_cmake_append_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_cmake_append.XXXXXX.log")
|
||||||
|
invalid_cmake_set_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_invalid_cmake_set.XXXXXX.log")
|
||||||
|
escaped_cmake_prefix_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_escaped_cmake_prefix.XXXXXX.log")
|
||||||
missing_support_object_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_linuxcnc_support_object.XXXXXX.log")
|
missing_support_object_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_linuxcnc_support_object.XXXXXX.log")
|
||||||
missing_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_native_syntax_missing_source_manifest.XXXXXX.txt")
|
missing_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_native_syntax_missing_source_manifest.XXXXXX.txt")
|
||||||
missing_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_native_syntax_missing_source.XXXXXX.log")
|
missing_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_native_syntax_missing_source.XXXXXX.log")
|
||||||
@@ -57,6 +63,12 @@ cleanup_native_test_temps() {
|
|||||||
"$missing_api_source_log" \
|
"$missing_api_source_log" \
|
||||||
"$missing_core_source_log" \
|
"$missing_core_source_log" \
|
||||||
"$missing_bridge_source_log" \
|
"$missing_bridge_source_log" \
|
||||||
|
"$escaped_project_source_log" \
|
||||||
|
"$invalid_source_filter_log" \
|
||||||
|
"$missing_cmake_set_log" \
|
||||||
|
"$missing_cmake_append_log" \
|
||||||
|
"$invalid_cmake_set_log" \
|
||||||
|
"$escaped_cmake_prefix_log" \
|
||||||
"$missing_support_object_log" \
|
"$missing_support_object_log" \
|
||||||
"$missing_source_manifest" \
|
"$missing_source_manifest" \
|
||||||
"$missing_source_log" \
|
"$missing_source_log" \
|
||||||
@@ -171,6 +183,12 @@ for forbidden_manual_cleanup in \
|
|||||||
'rm -f "$missing_api_source_log"' \
|
'rm -f "$missing_api_source_log"' \
|
||||||
'rm -f "$missing_core_source_log"' \
|
'rm -f "$missing_core_source_log"' \
|
||||||
'rm -f "$missing_bridge_source_log"' \
|
'rm -f "$missing_bridge_source_log"' \
|
||||||
|
'rm -f "$escaped_project_source_log"' \
|
||||||
|
'rm -f "$invalid_source_filter_log"' \
|
||||||
|
'rm -f "$missing_cmake_set_log"' \
|
||||||
|
'rm -f "$missing_cmake_append_log"' \
|
||||||
|
'rm -f "$invalid_cmake_set_log"' \
|
||||||
|
'rm -f "$escaped_cmake_prefix_log"' \
|
||||||
'rm -f "$missing_support_object_log"' \
|
'rm -f "$missing_support_object_log"' \
|
||||||
'rm -f "$missing_source_manifest" "$missing_source_log"' \
|
'rm -f "$missing_source_manifest" "$missing_source_log"' \
|
||||||
'rm -f "$kinematics_unknown_filter_log"' \
|
'rm -f "$kinematics_unknown_filter_log"' \
|
||||||
@@ -211,8 +229,89 @@ fi
|
|||||||
grep -F 'exec 9>"${TMPDIR:-/tmp}/cnc_sim_rs274_source_link.lock"' test-linuxcnc-source-link.sh >/dev/null
|
grep -F 'exec 9>"${TMPDIR:-/tmp}/cnc_sim_rs274_source_link.lock"' test-linuxcnc-source-link.sh >/dev/null
|
||||||
grep -F "flock 9" test-linuxcnc-source-link.sh >/dev/null
|
grep -F "flock 9" test-linuxcnc-source-link.sh >/dev/null
|
||||||
grep -F "missing LinuxCNC support object" list-linuxcnc-source-support-objects.sh >/dev/null
|
grep -F "missing LinuxCNC support object" list-linuxcnc-source-support-objects.sh >/dev/null
|
||||||
|
grep -F 'CMake source set name must be a CMake variable name: $set_name' list-cmake-set-sources.sh >/dev/null
|
||||||
|
grep -F 'CMake append source set name must be a CMake variable name: $append_name' list-cmake-set-plus-append-sources.sh >/dev/null
|
||||||
|
grep -F 'CMake source relative prefix must stay project-relative: $relative_prefix' list-cmake-set-sources.sh >/dev/null
|
||||||
|
grep -F 'missing CMake source set: " set_name' list-cmake-set-sources.sh >/dev/null
|
||||||
|
grep -F 'missing CMake append source set: " append_name' list-cmake-set-plus-append-sources.sh >/dev/null
|
||||||
grep -F 'echo "$missing_path_message: $path"' list-filtered-existing-paths.sh >/dev/null
|
grep -F 'echo "$missing_path_message: $path"' list-filtered-existing-paths.sh >/dev/null
|
||||||
|
grep -F 'source filter must be a basename: $filter' list-filtered-existing-paths.sh >/dev/null
|
||||||
|
grep -F 'project source path must stay project-relative: $path' list-filtered-existing-paths.sh >/dev/null
|
||||||
grep -F "build LinuxCNC first or set LINUXCNC_ROOT to a built tree" list-linuxcnc-source-support-objects.sh >/dev/null
|
grep -F "build LinuxCNC first or set LINUXCNC_ROOT to a built tree" list-linuxcnc-source-support-objects.sh >/dev/null
|
||||||
|
if ./list-cmake-set-sources.sh does_not_exist_cmake_set >"$missing_cmake_set_log" 2>&1; then
|
||||||
|
echo "CMake source-set lister accepted a missing set" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "missing CMake source set: does_not_exist_cmake_set" "$missing_cmake_set_log" >/dev/null; then
|
||||||
|
echo "CMake source-set lister did not report missing sets clearly" >&2
|
||||||
|
sed -n '1,20p' "$missing_cmake_set_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ./list-cmake-set-plus-append-sources.sh \
|
||||||
|
cnc_sim_core_sources \
|
||||||
|
does_not_exist_append_set >"$missing_cmake_append_log" 2>&1; then
|
||||||
|
echo "combined CMake source-set lister accepted a missing append set" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "missing CMake append source set: does_not_exist_append_set" "$missing_cmake_append_log" >/dev/null; then
|
||||||
|
echo "combined CMake source-set lister did not report missing append sets clearly" >&2
|
||||||
|
sed -n '1,20p' "$missing_cmake_append_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ./list-cmake-set-sources.sh 'cnc_sim_core_sources.*' >"$invalid_cmake_set_log" 2>&1; then
|
||||||
|
echo "CMake source-set lister accepted a regex-like set name" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "CMake source set name must be a CMake variable name: cnc_sim_core_sources.*" "$invalid_cmake_set_log" >/dev/null; then
|
||||||
|
echo "CMake source-set lister did not report invalid set names clearly" >&2
|
||||||
|
sed -n '1,20p' "$invalid_cmake_set_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ./list-cmake-set-plus-append-sources.sh \
|
||||||
|
cnc_sim_core_sources \
|
||||||
|
'cnc_sim_core_sources.*' >"$invalid_cmake_set_log" 2>&1; then
|
||||||
|
echo "combined CMake source-set lister accepted a regex-like append set name" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "CMake append source set name must be a CMake variable name: cnc_sim_core_sources.*" "$invalid_cmake_set_log" >/dev/null; then
|
||||||
|
echo "combined CMake source-set lister did not report invalid append set names clearly" >&2
|
||||||
|
sed -n '1,20p' "$invalid_cmake_set_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ./list-cmake-set-sources.sh cnc_sim_core_sources ../core/ >"$escaped_cmake_prefix_log" 2>&1; then
|
||||||
|
echo "CMake source-set lister accepted an escaped relative prefix" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "CMake source relative prefix must stay project-relative: ../core/" "$escaped_cmake_prefix_log" >/dev/null; then
|
||||||
|
echo "CMake source-set lister did not report escaped relative prefixes clearly" >&2
|
||||||
|
sed -n '1,20p' "$escaped_cmake_prefix_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if printf 'core/src/canon_event_sink.cpp\n' | ./list-filtered-existing-paths.sh \
|
||||||
|
core/src/canon_event_sink.cpp \
|
||||||
|
"missing project source" \
|
||||||
|
"missing project source in list" >"$invalid_source_filter_log" 2>&1; then
|
||||||
|
echo "source-list filter accepted a path-like filter" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "source filter must be a basename: core/src/canon_event_sink.cpp" "$invalid_source_filter_log" >/dev/null; then
|
||||||
|
echo "source-list filter did not report path-like filters clearly" >&2
|
||||||
|
sed -n '1,20p' "$invalid_source_filter_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if printf '../core/src/canon_event_sink.cpp\n' | ./list-filtered-existing-paths.sh \
|
||||||
|
--project-relative \
|
||||||
|
"" \
|
||||||
|
"missing project source" \
|
||||||
|
"missing project source in list" >"$escaped_project_source_log" 2>&1; then
|
||||||
|
echo "project source filter accepted an escaped project source path" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "project source path must stay project-relative: ../core/src/canon_event_sink.cpp" "$escaped_project_source_log" >/dev/null; then
|
||||||
|
echo "project source filter did not report escaped project paths clearly" >&2
|
||||||
|
sed -n '1,20p' "$escaped_project_source_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
native_link_flags=$(LINUXCNC_ROOT="$linuxcnc_root" ./list-linuxcnc-native-linkflags.sh)
|
native_link_flags=$(LINUXCNC_ROOT="$linuxcnc_root" ./list-linuxcnc-native-linkflags.sh)
|
||||||
grep -Fx -- "-L" <<<"$native_link_flags" >/dev/null
|
grep -Fx -- "-L" <<<"$native_link_flags" >/dev/null
|
||||||
grep -Fx -- "$linuxcnc_root/lib" <<<"$native_link_flags" >/dev/null
|
grep -Fx -- "$linuxcnc_root/lib" <<<"$native_link_flags" >/dev/null
|
||||||
|
|||||||
Reference in New Issue
Block a user