| 1 | As we cannot install outside the Store, and those games do not create the
|
| 2 | needed writable files on their own, we need a wrapper script.
|
| 3 |
|
| 4 | diff -Naur bsd-games-2.17/atc/Makefrag bsd-games-patch/atc/Makefrag
|
| 5 | |
| 6 | |
| 7 | @@ -47,7 +47,8 @@
|
| 8 | mv atc/lex.yy.c $@
|
| 9 |
|
| 10 | atc_install: atc_all
|
| 11 | - $(INSTALL_SCORE_GAME) atc/atc $(INSTALL_PREFIX)$(GAMESDIR)/atc
|
| 12 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/atc
|
| 13 | + $(INSTALL_SCORE_GAME) atc/atc $(INSTALL_PREFIX)$(GAMESDIR)/.atc-real
|
| 14 | $(HIDE_GAME) atc
|
| 15 | $(INSTALL_SCORE_FILE) $(ATC_SCOREFILE)
|
| 16 | $(INSTALL_MANUAL) atc/atc.6
|
| 17 | diff -Naur bsd-games-2.17/battlestar/Makefrag bsd-games-patch/battlestar/Makefrag
|
| 18 | |
| 19 | |
| 20 | @@ -32,7 +32,8 @@
|
| 21 | battlestar_all: battlestar/battlestar battlestar/battlestar.6
|
| 22 |
|
| 23 | battlestar_install: battlestar_all
|
| 24 | - $(INSTALL_SCORE_GAME) battlestar/battlestar $(INSTALL_PREFIX)$(GAMESDIR)/battlestar
|
| 25 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/battlestar
|
| 26 | + $(INSTALL_SCORE_GAME) battlestar/battlestar $(INSTALL_PREFIX)$(GAMESDIR)/.battlestar-real
|
| 27 | $(HIDE_GAME) battlestar
|
| 28 | $(INSTALL_MANUAL) battlestar/battlestar.6
|
| 29 | $(INSTALL_SCORE_FILE) $(BATTLESTAR_SCOREFILE)
|
| 30 | diff -Naur bsd-games-2.17/canfield/canfield/Makefrag bsd-games-patch/canfield/canfield/Makefrag
|
| 31 | |
| 32 | |
| 33 | @@ -31,7 +31,8 @@
|
| 34 | canfield_canfield_all: canfield/canfield/canfield canfield/canfield/canfield.6
|
| 35 |
|
| 36 | canfield_canfield_install: canfield_canfield_all
|
| 37 | - $(INSTALL_SCORE_GAME) canfield/canfield/canfield $(INSTALL_PREFIX)$(GAMESDIR)/canfield
|
| 38 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/canfield
|
| 39 | + $(INSTALL_SCORE_GAME) canfield/canfield/canfield $(INSTALL_PREFIX)$(GAMESDIR)/.canfield-real
|
| 40 | $(HIDE_GAME) canfield
|
| 41 | $(INSTALL_MANUAL) canfield/canfield/canfield.6
|
| 42 | $(INSTALL_SCORE_FILE) $(CANFIELD_SCOREFILE)
|
| 43 | diff -ur bsd-games-2.17.orig/canfield/cfscores/Makefrag bsd-games-2.17/canfield/cfscores/Makefrag
|
| 44 | |
| 45 | |
| 46 | @@ -32,6 +32,7 @@
|
| 47 | canfield_cfscores_all: canfield/cfscores/cfscores
|
| 48 |
|
| 49 | canfield_cfscores_install: canfield_cfscores_all
|
| 50 | - $(INSTALL_BINARY) canfield/cfscores/cfscores $(INSTALL_PREFIX)$(GAMESDIR)/cfscores
|
| 51 | + $(INSTALL_BINARY) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/cfscores
|
| 52 | + $(INSTALL_BINARY) canfield/cfscores/cfscores $(INSTALL_PREFIX)$(GAMESDIR)/.cfscores-real
|
| 53 | $(HIDE_GAME) cfscores
|
| 54 | $(INSTALL_MANUAL) canfield.6 cfscores.6
|
| 55 | diff -Naur bsd-games-2.17/cribbage/Makefrag bsd-games-patch/cribbage/Makefrag
|
| 56 | |
| 57 | |
| 58 | @@ -31,7 +31,8 @@
|
| 59 | cribbage_all: cribbage/cribbage cribbage/cribbage.n cribbage/cribbage.6
|
| 60 |
|
| 61 | cribbage_install: cribbage_all
|
| 62 | - $(INSTALL_SCORE_GAME) cribbage/cribbage $(INSTALL_PREFIX)$(GAMESDIR)/cribbage
|
| 63 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/cribbage
|
| 64 | + $(INSTALL_SCORE_GAME) cribbage/cribbage $(INSTALL_PREFIX)$(GAMESDIR)/.cribbage-real
|
| 65 | $(HIDE_GAME) cribbage
|
| 66 | $(INSTALL_DATA) cribbage/cribbage.n $(INSTALL_PREFIX)$(CRIBBAGE_INSTRFILE)
|
| 67 | $(INSTALL_SCORE_FILE) $(CRIBBAGE_SCOREFILE)
|
| 68 | diff -Naur bsd-games-2.17/hack/Makefrag bsd-games-patch/hack/Makefrag
|
| 69 | |
| 70 | |
| 71 | @@ -53,7 +53,8 @@
|
| 72 | hack/hack.zap.d hack/rnd.d: hack/hack.onames.h
|
| 73 |
|
| 74 | hack_install: hack_all
|
| 75 | - $(INSTALL_SCORE_GAME) hack/hack $(INSTALL_PREFIX)$(GAMESDIR)/hack
|
| 76 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/hack
|
| 77 | + $(INSTALL_SCORE_GAME) hack/hack $(INSTALL_PREFIX)$(GAMESDIR)/.hack-real
|
| 78 | $(HIDE_GAME) hack
|
| 79 | $(INSTALL_HACK_DIR) $(INSTALL_PREFIX)$(HACK_DIR)
|
| 80 | set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)$(HACK_DIR)/$$f; done
|
| 81 | diff -Naur bsd-games-2.17/phantasia/Makefrag bsd-games-patch/phantasia/Makefrag
|
| 82 | |
| 83 | |
| 84 | @@ -38,7 +38,8 @@
|
| 85 | touch phantasia/scorefiles.stamp
|
| 86 |
|
| 87 | phantasia_install: phantasia_all
|
| 88 | - $(INSTALL_SCORE_GAME) phantasia/phantasia $(INSTALL_PREFIX)$(GAMESDIR)/phantasia
|
| 89 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/phantasia
|
| 90 | + $(INSTALL_SCORE_GAME) phantasia/phantasia $(INSTALL_PREFIX)$(GAMESDIR)/.phantasia-real
|
| 91 | $(HIDE_GAME) phantasia
|
| 92 | (set -e; for f in $(phantasia_VFILES1); do \
|
| 93 | cp phantasia/$$f $(INSTALL_PREFIX)$(PHANTASIA_DIR)/$$f; \
|
| 94 | diff -Naur bsd-games-2.17/robots/Makefrag bsd-games-patch/robots/Makefrag
|
| 95 | |
| 96 | |
| 97 | @@ -32,7 +32,8 @@
|
| 98 | robots_all: robots/robots robots/robots.6
|
| 99 |
|
| 100 | robots_install: robots_all
|
| 101 | - $(INSTALL_SCORE_GAME) robots/robots $(INSTALL_PREFIX)$(GAMESDIR)/robots
|
| 102 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/robots
|
| 103 | + $(INSTALL_SCORE_GAME) robots/robots $(INSTALL_PREFIX)$(GAMESDIR)/.robots-real
|
| 104 | $(HIDE_GAME) robots
|
| 105 | $(INSTALL_SCORE_FILE) $(ROBOTS_SCOREFILE)
|
| 106 | $(INSTALL_MANUAL) robots/robots.6
|
| 107 | diff -Naur bsd-games-2.17/sail/Makefrag bsd-games-patch/sail/Makefrag
|
| 108 | |
| 109 | |
| 110 | @@ -31,7 +31,8 @@
|
| 111 | sail_all: sail/sail sail/sail.6
|
| 112 |
|
| 113 | sail_install: sail_all
|
| 114 | - $(INSTALL_SCORE_GAME) sail/sail $(INSTALL_PREFIX)$(GAMESDIR)/sail
|
| 115 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/sail
|
| 116 | + $(INSTALL_SCORE_GAME) sail/sail $(INSTALL_PREFIX)$(GAMESDIR)/.sail-real
|
| 117 | $(HIDE_GAME) sail
|
| 118 | $(INSTALL_SCORE_FILE) $(SAIL_SCOREFILE)
|
| 119 | $(INSTALL_SAIL_DIR) $(INSTALL_PREFIX)$(SAIL_DIR)
|
| 120 | diff -Naur bsd-games-2.17/snake/snake/Makefrag bsd-games-patch/snake/snake/Makefrag
|
| 121 | |
| 122 | |
| 123 | @@ -31,7 +31,8 @@
|
| 124 | snake_snake_all: snake/snake/snake snake/snake/snake.6
|
| 125 |
|
| 126 | snake_snake_install: snake_snake_all
|
| 127 | - $(INSTALL_SCORE_GAME) snake/snake/snake $(INSTALL_PREFIX)$(GAMESDIR)/snake
|
| 128 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/snake
|
| 129 | + $(INSTALL_SCORE_GAME) snake/snake/snake $(INSTALL_PREFIX)$(GAMESDIR)/.snake-real
|
| 130 | $(HIDE_GAME) snake
|
| 131 | $(INSTALL_SCORE_FILE) $(SNAKE_SCOREFILE)
|
| 132 | $(INSTALL_SCORE_FILE) $(SNAKE_RAWSCOREFILE)
|
| 133 | |
| 134 | |
| 135 | @@ -32,6 +32,7 @@
|
| 136 | snake_snscore_all: snake/snscore/snscore
|
| 137 |
|
| 138 | snake_snscore_install: snake_snscore_all
|
| 139 | - $(INSTALL_BINARY) snake/snscore/snscore $(INSTALL_PREFIX)$(GAMESDIR)/snscore
|
| 140 | + $(INSTALL_BINARY) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/snscore
|
| 141 | + $(INSTALL_BINARY) snake/snscore/snscore $(INSTALL_PREFIX)$(GAMESDIR)/.snscore-real
|
| 142 | $(HIDE_GAME) snscore
|
| 143 | $(INSTALL_MANUAL) snake.6 snscore.6
|
| 144 | diff -Naur bsd-games-2.17/tetris/Makefrag bsd-games-patch/tetris/Makefrag
|
| 145 | |
| 146 | |
| 147 | @@ -32,7 +32,8 @@
|
| 148 | tetris_all: tetris/tetris tetris/tetris.6
|
| 149 |
|
| 150 | tetris_install: tetris_all
|
| 151 | - $(INSTALL_SCORE_GAME) tetris/tetris $(INSTALL_PREFIX)$(GAMESDIR)/tetris-bsd
|
| 152 | + $(INSTALL_SCORE_GAME) wrapper $(INSTALL_PREFIX)$(GAMESDIR)/tetris-bsd
|
| 153 | + $(INSTALL_SCORE_GAME) tetris/tetris $(INSTALL_PREFIX)$(GAMESDIR)/.tetris-bsd-real
|
| 154 | $(HIDE_GAME) tetris-bsd
|
| 155 | $(INSTALL_SCORE_FILE) $(TETRIS_SCOREFILE)
|
| 156 | ln -f tetris/tetris.6 tetris/tetris-bsd.6
|
| 157 | diff -Naur bsd-games-2.17/wrapper bsd-games-patch/wrapper
|
| 158 | |
| 159 | |
| 160 | @@ -0,0 +1,91 @@
|
| 161 | +#!/bin/sh
|
| 162 | +# This file works around limitations of our read-only Store.
|
| 163 | +
|
| 164 | +set -e
|
| 165 | +
|
| 166 | +check_empty_files () {
|
| 167 | + # those start empty
|
| 168 | + for f in ${@}
|
| 169 | + do
|
| 170 | + if [[ ! -f ${f} ]]
|
| 171 | + then
|
| 172 | + touch ${f}
|
| 173 | + echo "$(pwd)/${f} RESTORED"
|
| 174 | + fi
|
| 175 | + done
|
| 176 | +}
|
| 177 | +check_data_files () {
|
| 178 | + # those start with some initial data
|
| 179 | + for f in ${@}
|
| 180 | + do
|
| 181 | + if [[ ! -f ${f} ]]
|
| 182 | + then
|
| 183 | + cp STATIC_DATA/${game}/${f} ${f}
|
| 184 | + chmod u+w ${f}
|
| 185 | + echo "$(pwd)/${f} RESTORED"
|
| 186 | + fi
|
| 187 | + done
|
| 188 | +}
|
| 189 | +visit_dir () {
|
| 190 | + mkdir -p ${1}
|
| 191 | + cd ${1}
|
| 192 | +}
|
| 193 | +exit_with_variable_error () {
|
| 194 | + variables="${1}${2:+ or ${2}}"
|
| 195 | + echo "Guix: Please set up the ${variables} variable."
|
| 196 | + echo "Examples:"
|
| 197 | + echo " export ${1}=/var/multiplayer"
|
| 198 | + echo " export ${2:-${1}}=~/.local/share/bsd-games"
|
| 199 | + echo "You can place this in ~/.bashrc or a similar file for Your shell."
|
| 200 | + echo "For multiplayer this directory should be writable for all players."
|
| 201 | + exit 1
|
| 202 | +}
|
| 203 | +
|
| 204 | +game=$(basename $0)
|
| 205 | +if [[ ${game} == "hack" ]]
|
| 206 | +then
|
| 207 | + if [[ -n ${HACKDIR} ]]; then visit_dir "${HACKDIR}"
|
| 208 | + elif [[ -n ${BSD_GAMES_DIR} ]]; then visit_dir "${BSD_GAMES_DIR}/hack"
|
| 209 | + else exit_with_variable_error "HACKDIR" "BSD_GAMES_DIR"
|
| 210 | + fi
|
| 211 | +else
|
| 212 | + if [[ -n ${BSD_GAMES_DIR} ]]; then visit_dir "${BSD_GAMES_DIR}"
|
| 213 | + else exit_with_variable_error "BSD_GAMES_DIR"
|
| 214 | + fi
|
| 215 | +fi
|
| 216 | +
|
| 217 | +case ${game} in
|
| 218 | + ### Games with score-files
|
| 219 | + atc)
|
| 220 | + check_empty_files "atc_score";;
|
| 221 | + battlestar)
|
| 222 | + check_empty_files "battlestar.log";;
|
| 223 | + canfield)
|
| 224 | + check_empty_files "cfscores";;
|
| 225 | + cribbage)
|
| 226 | + check_empty_files "criblog";;
|
| 227 | + robots)
|
| 228 | + check_empty_files "robots_roll";;
|
| 229 | + snake)
|
| 230 | + check_empty_files "snakerawscores" "snake.log";;
|
| 231 | + tetris)
|
| 232 | + check_empty_files "tetris-bsd.scores";;
|
| 233 | + ### Games with saved state
|
| 234 | + hack)
|
| 235 | + check_empty_files "record" "perm"
|
| 236 | + check_data_files "data" "help" "hh" "rumors"
|
| 237 | + visit_dir "save"
|
| 238 | + cd ../../;;
|
| 239 | + phantasia)
|
| 240 | + visit_dir "phantasia"
|
| 241 | + check_empty_files "characs" "gold" "lastdead"\
|
| 242 | + "mess" "motd" "scoreboard" "void"
|
| 243 | + check_data_files "monsters"
|
| 244 | + cd ../;;
|
| 245 | + sail)
|
| 246 | + visit_dir "sail"
|
| 247 | + check_empty_files "log" "syncfile"
|
| 248 | + cd ../;;
|
| 249 | +esac
|
| 250 | +
|
| 251 | +exec .${game}-real ${@}
|