From f4b6a4c187adc72765926a7056d7f4f79524d2df Mon Sep 17 00:00:00 2001 From: argszero Date: Tue, 4 Aug 2026 21:57:08 +0800 Subject: [PATCH] =?UTF-8?q?emrg:=20Phase=204=20=E5=90=AF=E5=8A=A8=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=20bin/emrg=20+=20bin/emrgd=EF=BC=88bash=20+=20Windows?= =?UTF-8?q?=20.cmd=EF=BC=8Crant=20#12=20=C2=A72=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/emrg | 25 +++++++++++++++++++++++++ bin/emrg.cmd | 14 ++++++++++++++ bin/emrgd | 19 +++++++++++++++++++ bin/emrgd.cmd | 11 +++++++++++ 4 files changed, 69 insertions(+) create mode 100755 bin/emrg create mode 100644 bin/emrg.cmd create mode 100755 bin/emrgd create mode 100644 bin/emrgd.cmd diff --git a/bin/emrg b/bin/emrg new file mode 100755 index 00000000..78aaca60 --- /dev/null +++ b/bin/emrg @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# EMRG launcher — installed at ~/.emrg/install/bin/emrg +# +# Phase 4 installer (rant #12) §2: +# - R71/R84: BASH_SOURCE may be a symlink; resolve in a loop, joining each +# relative target against the CURRENT source's dirname (multi-level +# relative chains otherwise resolve wrongly). +# - R13: PYTHONPATH must include $PREFIX/source (parent of the emrg package). +# - R61: source/ is read-only — never write __pycache__ (zero-write acceptance). +# - PATH injection makes bundled python/git/gh visible to child processes +# (session-scoped python scripts key, §7). +SOURCE="${BASH_SOURCE[0]}" +while [ -L "$SOURCE" ]; do + TARGET="$(readlink "$SOURCE")" + case "$TARGET" in + /*) SOURCE="$TARGET" ;; + *) SOURCE="$(dirname "$SOURCE")/$TARGET" ;; + esac +done +DIR="$(cd "$(dirname "$SOURCE")" && pwd)" +PREFIX="$(dirname "$DIR")" +export PATH="$DIR:$PATH" +export PYTHONPATH="$PREFIX/source:$PREFIX/lib:$PYTHONPATH" +export PYTHONDONTWRITEBYTECODE=1 +exec "$DIR/python" -m emrg "$@" diff --git a/bin/emrg.cmd b/bin/emrg.cmd new file mode 100644 index 00000000..ca3941fa --- /dev/null +++ b/bin/emrg.cmd @@ -0,0 +1,14 @@ +@echo off +REM EMRG launcher — installed at %USERPROFILE%\.emrg\install\bin\emrg.cmd +REM Phase 4 installer (rant #12) §2: +REM - R60: Windows git lives in install\git\ — PATH needs git\cmd + git\mingw64\bin. +REM - R35: %~dp0 under a .lnk shortcut resolves to the .cmd's real location. +REM - R13: PYTHONPATH includes source\ (parent of the emrg package). +REM - R61: source\ is read-only — PYTHONDONTWRITEBYTECODE (zero-write acceptance). +set SOURCE=%~dp0 +set DIR=%SOURCE:~0,-1% +set PREFIX=%DIR%\.. +set PATH=%DIR%;%PREFIX%\git\cmd;%PREFIX%\git\mingw64\bin;%PATH% +set PYTHONPATH=%PREFIX%\source;%PREFIX%\lib;%PYTHONPATH% +set PYTHONDONTWRITEBYTECODE=1 +"%DIR%\python.exe" -m emrg %* diff --git a/bin/emrgd b/bin/emrgd new file mode 100755 index 00000000..87497f0b --- /dev/null +++ b/bin/emrgd @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# EMRG daemon launcher — installed at ~/.emrg/install/bin/emrgd +# +# Phase 4 installer (rant #12) §2 — same structure as bin/emrg; entry is the +# server package. See bin/emrg header for R71/R84/R13/R61 rationale. +SOURCE="${BASH_SOURCE[0]}" +while [ -L "$SOURCE" ]; do + TARGET="$(readlink "$SOURCE")" + case "$TARGET" in + /*) SOURCE="$TARGET" ;; + *) SOURCE="$(dirname "$SOURCE")/$TARGET" ;; + esac +done +DIR="$(cd "$(dirname "$SOURCE")" && pwd)" +PREFIX="$(dirname "$DIR")" +export PATH="$DIR:$PATH" +export PYTHONPATH="$PREFIX/source:$PREFIX/lib:$PYTHONPATH" +export PYTHONDONTWRITEBYTECODE=1 +exec "$DIR/python" -m emrg.server "$@" diff --git a/bin/emrgd.cmd b/bin/emrgd.cmd new file mode 100644 index 00000000..eb1644fc --- /dev/null +++ b/bin/emrgd.cmd @@ -0,0 +1,11 @@ +@echo off +REM EMRG daemon launcher — installed at %USERPROFILE%\.emrg\install\bin\emrgd.cmd +REM Phase 4 installer (rant #12) §2 — same structure as bin\emrg.cmd; entry is +REM the server package. GUI main.js spawns this path (R36 shell:true, R66 windowsHide). +set SOURCE=%~dp0 +set DIR=%SOURCE:~0,-1% +set PREFIX=%DIR%\.. +set PATH=%DIR%;%PREFIX%\git\cmd;%PREFIX%\git\mingw64\bin;%PATH% +set PYTHONPATH=%PREFIX%\source;%PREFIX%\lib;%PYTHONPATH% +set PYTHONDONTWRITEBYTECODE=1 +"%DIR%\python.exe" -m emrg.server %*