Files
playdate-kit/Scripts/install-pkgconfig.sh
javierandClaude Fable 5 09760f99b0 Swift bindings to the Playdate C API
Wraps all ten subsystems of the Playdate SDK 3.1.1 C API (system, display,
graphics, sprites, sound, file, JSON, Lua, scoreboards, network) in
idiomatic Swift: namespaced APIs, wrapper types with ownership semantics,
closures for callbacks, and typed throws. Written within the Embedded Swift
subset so the same code can target the device.

The SDK headers are resolved through a "playdate" pkg-config module
(Scripts/install-pkgconfig.sh), so the package works as a normal SwiftPM
dependency without unsafe build flags.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:33:45 +02:00

74 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
#
# Generates a pkg-config file for the Playdate SDK C API so SwiftPM can
# resolve the CPlaydate system library target.
#
# Usage:
# Scripts/install-pkgconfig.sh [destination-directory]
#
# The SDK is located via $PLAYDATE_SDK_PATH, falling back to
# ~/Developer/PlaydateSDK. Without a destination argument, the file is
# installed into the first writable directory that SwiftPM (including
# Xcode's SwiftPM) searches by default.
set -eu
sdk_path="${PLAYDATE_SDK_PATH:-$HOME/Developer/PlaydateSDK}"
if [ ! -f "$sdk_path/C_API/pd_api.h" ]; then
echo "error: pd_api.h not found under '$sdk_path/C_API'." >&2
echo "Install the Playdate SDK or set PLAYDATE_SDK_PATH." >&2
exit 1
fi
version="unknown"
if [ -f "$sdk_path/VERSION.txt" ]; then
version="$(head -1 "$sdk_path/VERSION.txt" | tr -d '[:space:]')"
fi
destination="${1:-}"
if [ -z "$destination" ]; then
# Locations SwiftPM (and Xcode's SwiftPM) searches without
# PKG_CONFIG_PATH. Note: Homebrew's /opt/homebrew/lib/pkgconfig is NOT
# searched by default.
for candidate in /usr/local/lib/pkgconfig /usr/local/share/pkgconfig; do
parent="$(dirname "$candidate")"
if [ -d "$candidate" ] && [ -w "$candidate" ]; then
destination="$candidate"
break
elif [ -d "$parent" ] && [ -w "$parent" ]; then
destination="$candidate"
break
fi
done
fi
if [ -z "$destination" ]; then
echo "error: no writable pkg-config directory found." >&2
echo "Re-run with a destination directory, e.g.:" >&2
echo " sudo Scripts/install-pkgconfig.sh /usr/local/lib/pkgconfig" >&2
echo "or pick your own directory and add it to PKG_CONFIG_PATH." >&2
exit 1
fi
mkdir -p "$destination"
cat > "$destination/playdate.pc" <<EOF
prefix=$sdk_path
Name: playdate
Description: Playdate SDK C API headers
Version: $version
Cflags: -I\${prefix}/C_API
EOF
echo "Wrote $destination/playdate.pc (SDK $version at $sdk_path)"
case "$destination" in
/usr/local/lib/pkgconfig|/usr/local/share/pkgconfig|/usr/lib/pkgconfig|/usr/share/pkgconfig)
;;
*)
echo "note: '$destination' is not on SwiftPM's default search path;"
echo " export PKG_CONFIG_PATH=\"$destination\" when building."
;;
esac