#!/bin/sh
set -eu
VERSION=$1
case "$VERSION" in *[!0-9.]*|'') exit 2;; esac
WORK=/var/tmp/monerod-foo
cd "$WORK/source"
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF -DBUILD_GUI_DEPS=OFF -DARCH=default -DOPENSSL_ROOT_DIR=/usr/local -DSTACK_TRACE=OFF
cmake --build build --target daemon --parallel 2
/usr/local/bin/python3.11 /usr/local/sbin/monerod-smoke "$WORK/source/build/bin/monerod"
ROOT="$WORK/package"
rm -rf "$ROOT"
mkdir -p "$ROOT/usr/local/bin" "$ROOT/usr/local/etc/rc.d" "$ROOT/usr/local/etc/monerod-love" "$ROOT/usr/local/share/licenses/monerod-love"
install -m755 build/bin/monerod "$ROOT/usr/local/bin/monerod-love"
strip "$ROOT/usr/local/bin/monerod-love"
install -m644 LICENSE "$ROOT/usr/local/share/licenses/monerod-love/LICENSE"
cat > "$ROOT/usr/local/etc/monerod-love/monerod.conf.sample" <<'CONFIG'
data-dir=/var/db/monerod-love
log-file=/var/log/monerod-love/monerod.log
rpc-bind-ip=127.0.0.1
rpc-bind-port=18081
p2p-bind-port=18080
no-igd=1
no-zmq=1
CONFIG
cat > "$ROOT/usr/local/etc/rc.d/monerod_love" <<'SERVICE'
#!/bin/sh
# PROVIDE: monerod_love
# REQUIRE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name=monerod_love
rcvar=monerod_love_enable
load_rc_config $name
: ${monerod_love_enable:=NO}
: ${monerod_love_user:=monerod-love}
: ${monerod_love_group:=monerod-love}
: ${monerod_love_config:=/usr/local/etc/monerod-love/monerod.conf}
pidfile=/var/run/monerod-love/monerod.pid
command=/usr/local/bin/monerod-love
command_args="--non-interactive --config-file=${monerod_love_config} --detach --pidfile=${pidfile}"
required_files=${monerod_love_config}
start_precmd=monerod_love_prestart
monerod_love_prestart() {
 install -d -o ${monerod_love_user} -g ${monerod_love_group} -m750 /var/db/monerod-love /var/log/monerod-love /var/run/monerod-love
}
sig_stop=INT
run_rc_command "$1"
SERVICE
chmod 755 "$ROOT/usr/local/etc/rc.d/monerod_love"
# Derive package dependencies from the linked libraries.
/usr/local/bin/python3.11 - "$VERSION" "$ROOT" <<'PY'
import sys,subprocess,json,pathlib
version,root=sys.argv[1:]
deps={}
ldd=subprocess.check_output(['ldd',root+'/usr/local/bin/monerod-love'],text=True)
for line in ldd.splitlines():
 if '=>' not in line:continue
 path=line.split('=>',1)[1].strip().split()[0]
 if not path.startswith('/usr/local/'):continue
 owner=subprocess.check_output(['pkg','which','-q',path],text=True).strip()
 info=subprocess.check_output(['pkg','query','%n|%o|%v',owner],text=True).strip().split('|')
 deps[info[0]]={'origin':info[1],'version':info[2]}
files={str(p)[len(root):]:'-' for p in pathlib.Path(root).rglob('*') if p.is_file()}
manifest={'name':'monerod-love','version':version+'_3','origin':'net-p2p/monerod-love','comment':'Official Monero daemon from mirrored stable releases','desc':'Monero daemon with a separate configuration and data directory. Service disabled by default.','maintainer':'packages@monero.love','www':'https://git.hyve.sh/baz/monero','prefix':'/usr/local','licenses':['BSD3CLAUSE'],'licenselogic':'single','deps':deps,'files':files,'scripts':{'post-install':'''pw groupshow monerod-love >/dev/null 2>&1 || pw groupadd monerod-love
pw usershow monerod-love >/dev/null 2>&1 || pw useradd monerod-love -g monerod-love -d /var/db/monerod-love -s /usr/sbin/nologin -c "Monero daemon"
install -d -o monerod-love -g monerod-love -m750 /var/db/monerod-love /var/log/monerod-love
if [ ! -f /usr/local/etc/monerod-love/monerod.conf ]; then cp /usr/local/etc/monerod-love/monerod.conf.sample /usr/local/etc/monerod-love/monerod.conf; fi
sed -i '' '/^[[:space:]]*non-interactive[[:space:]]*=/d' /usr/local/etc/monerod-love/monerod.conf
'''}}
pathlib.Path('/var/tmp/monerod-foo/manifest').write_text(json.dumps(manifest))
print(ldd)
PY
REPO=/var/db/xmrig-foo/repo
pkg create -M "$WORK/manifest" -r "$ROOT" -o "$REPO"
pkg repo "$REPO" rsa:/var/db/xmrig-foo/keys/repo.key
{ git rev-parse HEAD; sha256 "$ROOT/usr/local/bin/monerod-love"; cat "$WORK/manifest"; } > "$REPO/monerod-build-${VERSION}_3.txt"
tar -czf "$REPO/monerod-source-${VERSION}.tar.gz" --exclude=.git --exclude=build -C "$WORK/source" .
cp /usr/local/sbin/monerod-build-freebsd "$REPO/monerod-build-freebsd.sh"
