diff --git a/998.midipix_sh.build b/998.midipix_sh.build index a44b7c9..f6a9c22 100644 --- a/998.midipix_sh.build +++ b/998.midipix_sh.build @@ -4,7 +4,7 @@ if ! is_build_script_done install; then (cd ${MIDIPIX_BUILD_PWD}; - tar -cpf - midipix.sh README \ + tar -cpf - midipix_check.sh midipix.sh README \ 'Create `Midipix mintty shell'\'' shortcut.vbs' |\ tar -C ${PREFIX} -xpf -); chmod +x ${PREFIX}/midipix.sh; diff --git a/midipix.sh b/midipix.sh index f40f2c5..65913c4 100755 --- a/midipix.sh +++ b/midipix.sh @@ -1,114 +1,40 @@ #!/bin/sh -# -prepend_path() { - local _pname _pname_prepend="${1}" IFS=":"; - for _pname in ${PATH}; do - if [ "${_pname}" = "${_pname_prepend}" ]; then - return; - fi; - done; export PATH="${_pname_prepend}${PATH:+:${PATH}}"; -}; - -convert_links_ask() { - local _ _link_name _link_target; - echo "Warning: ${MIDIPIX_PATH}/native/lib contains shared objects (library" - echo "images) that are symbolic links. This is not supported by Midipix at" - echo "present and commonly occurs if the binary distribution tarball was" - echo "extracted by an application that does not support symbolic links" - echo "correctly. This also occurs when a binary distribution was built locally." - printf "Convert all shared object symbolic links to hard links? (y|N) "; - read __; - case "${__}" in - [yY]) break; ;; - *) echo "Exiting."; exit 6; ;; - esac; - for _link_name in $(find ${MIDIPIX_PATH}/native/lib \ - -maxdepth 1 -name \*.so -type l); do - _link_target="$(readlink -- "${_link_name}")"; - if [ -f "${MIDIPIX_PATH}/native/lib/${_link_target}" ]; then - echo rm -f -- "${_link_name}"; - rm -f -- "${_link_name}"; - echo ln -f -- "${_link_target}" "${_link_name}"; - ln -f -- "${_link_target}" "${_link_name}"; - fi; - done; -}; - -check_prereq_files() { - local _fname; - for _fname in ${MIDIPIX_DNAME_ROOT}/bin/ntctty.exe \ - ${MIDIPIX_DNAME_ROOT}/bin/chroot \ - ${MIDIPIX_DNAME_ROOT}/bin/env \ - ${MIDIPIX_DNAME_ROOT}/bin/bash; do - if [ ! -e ${MIDIPIX_PATH}/${_fname} ]; then - return 1; - fi; - done; -}; - -prepend_path /bin; -while [ ${#} -gt 0 ]; do - if [ "${1}" = -h ]; then - echo "usage: $0 [-h] [-l] [-m] [Cygwin pathname to Midipix root]"; - echo " -l: tail(1) -f libpsxscl.log"; - echo " -m: use Minipix root"; - exit 0; - elif [ "${1}" = -l ]; then - ARG_TAILF_LOG=1; shift; - elif [ "${1}" = -m ]; then - ARG_MINIPIX=1; shift; - MIDIPIX_DNAME_ROOT=minipix; - elif [ "${1#-}" = "${1}" ]; then - MIDIPIX_PATH="${1}"; - fi; -done; -if [ -z "${MIDIPIX_PATH}" ]; then - MIDIPIX_PATH="$(cygpath -am .)" || exit 1; -fi; -UNAME_OS="$(uname -o)" || exit 2; -if [ "${MIDIPIX_PATH#*[ ]*}" != "${MIDIPIX_PATH}" ]; then - echo "Error: drive_letter/dirname must not contain SP (\` ') or VT (\`\\\t') characters."; - exit 3; -elif [ ! -d ${MIDIPIX_PATH} ]; then - echo "Error: Midipix path non-existent or invalid (\`${MIDIPIX_PATH}'.)"; - exit 4; -elif [ -z "${MIDIPIX_DNAME_ROOT}" ]; then - if [ -e ${MIDIPIX_PATH}/native ]; then - MIDIPIX_DNAME_ROOT=native; - elif [ -e ${MIDIPIX_PATH}/minipix ]; then - MIDIPIX_DNAME_ROOT=minipix; - else - echo "Error: neither \`${MIDIPIX_PATH}/native' nor \`${MIDIPIX_PATH}/minipix' exist."; - exit 5; - fi; +set -o noglob; +if [ -z "${PATH##/bin:*}" \ +-a -z "${PATH##*:/bin:*}" \ +-a -z "${PATH##*:/bin}" ]; then + export PATH="/bin${PATH:+:${PATH}}"; fi; -if [ \( "${ARG_MINIPIX:-0}" -eq 0 \) -a \ - \( -n "${NATIVE_LIB_LINKS:=$(find ${MIDIPIX_PATH}/native/lib -maxdepth 1 -name \*.so -type l -print -quit)}" \) ]; then - convert_links_ask || exit 7; +while getopts m __; do +case ${__} in +m) MIDIPIX_DNAME_DIST=minipix; ;; +*) echo "usage: $0 [-m] [Cygwin pathname to Midipix root]"; + echo " -m: use Minipix distribution"; exit 0; +esac; done; +if [ -n "${1}" ]; then + MIDIPIX_PATH:=$(cygpath -am "${1}"); cd ${MIDIPIX_PATH} || exit 1; else - check_prereq_files || exit 8; - if [ -f ${MIDIPIX_PATH}/libpsxscl.log ]; then - echo Found libpsxscl.log, copying to ${MIDIPIX_PATH}/libpsxscl.last. - cp -p -- ${MIDIPIX_PATH}/libpsxscl.log \ - ${MIDIPIX_PATH}/libpsxscl.last || exit 9; - fi; - echo "Absolute Midipix pathname: ${MIDIPIX_PATH}"; - if [ "${UNAME_OS}" = "Msys" ]; then - export MSYS2_ARG_CONV_EXCL="*"; - fi; - mintty -h always -s 120,80 -e /bin/sh -c " - set -o errexit; stty raw -echo; - cd ${MIDIPIX_PATH}; \ - env PATH=${MIDIPIX_PATH}/${MIDIPIX_DNAME_ROOT}/lib \ - ${MIDIPIX_DNAME_ROOT}/bin/ntctty.exe -e \ - chroot ${MIDIPIX_DNAME_ROOT} \ - /bin/env PATH=/bin:/lib \ - bash" & - sleep 0.25; - NTCTTY_PID="$(ps -W | awk '$NF ~ /ntctty\.exe$/{print $1}')"; - echo "ntctty PID : ${NTCTTY_PID}"; - if [ ${ARG_TAILF_LOG:-0} -eq 1 ]; then - tail -f ${MIDIPIX_PATH}/${MIDIPIX_DNAME_ROOT}/bin/libpsxscl.log; + MIDIPIX_PATH:=$(cygpath -am .); +fi; +printf "%-35s: %s\n" "Absolute Midipix pathname" "${MIDIPIX_PATH}"; +printf "%-35s: %s\n" "Distribution name" "${MIDIPIX_DNAME_DIST:=native}"; +if [ -f libpsxscl.log ]; then + echo Found libpsxscl.log, copying to libpsxscl.last. + if ! cp -p -- libpsxscl.log libpsxscl.last; then + echo "(cp(1) returned ${?}, ignored.)"; fi; fi; +if [ "$(uname -o)" = "Msys" ]; then + export MSYS2_ARG_CONV_EXCL="*"; +fi; +mintty -h always -s 120,80 -e /bin/sh -c " + set -o errexit; + env PATH=${MIDIPIX_PATH}/${MIDIPIX_DNAME_DIST}/lib \ + ${MIDIPIX_DNAME_DIST}/bin/ntctty.exe -e \ + ${MIDIPIX_DNAME_DIST}/bin/chroot ${MIDIPIX_DNAME_DIST} \ + /bin/env PATH=/bin:/lib bash" & +sleep ${SLEEP_DELAY:=0.25}; +printf "%-35s: %s\n" "ntctty PID" "$(ps -W | awk '$NF ~ /ntctty\.exe$/{print $1}')"; + +# vim:filetype=sh diff --git a/midipix_check.sh b/midipix_check.sh new file mode 100755 index 0000000..f669de4 --- /dev/null +++ b/midipix_check.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +set -o errexit -o noglob; +if [ "${1}" = "-m" ]; then + MIDIPIX_DNAME_DIST=minipix; shift; +fi; +if [ -n "${1}" ]; then + MIDIPIX_PATH=$(cygpath -am "${1}"); +else + MIDIPIX_PATH=$(cygpath -am .); +fi; +: ${MIDIPIX_DNAME_DIST:=native}; +echo "Absolute Midipix pathname: ${MIDIPIX_PATH}"; +echo "Distribution name : ${MIDIPIX_DNAME_DIST}"; +printf "%-85s" "Checking if all binaries are present..."; +for __ in chroot env ntctty.exe; do + if [ ! -e ${MIDIPIX_PATH}/${MIDIPIX_DNAME_DIST}/bin/${__} ]; then + printf "\nerror: missing file ${MIDIPIX_PATH}/${MIDIPIX_DNAME_DIST}/bin/${__}\n"; + exit 2; + fi; +done; +printf "\033[97m[ \033[92mOK \033[97m]\033[0m\n"; +printf "%-85s" "Checking ${MIDIPIX_PATH}/${MIDIPIX_DNAME_DIST}/lib for symbolic links..."; +if [ -n "$(find ${MIDIPIX_DNAME_DIST}/lib \ + -maxdepth 1 -name \*.so -type l -print -quit)" ]; then + echo; + echo "Warning: ${MIDIPIX_PATH}/${MIDIPIX_DNAME_DIST}/lib contains shared objects (library" + echo "images) that are symbolic links. This is not supported by Midipix at" + echo "present and commonly occurs if the binary distribution tarball was" + echo "extracted by an application that does not support symbolic links" + echo "correctly. This also occurs when a binary distribution was built locally." + printf "Convert all shared object symbolic links to hard links? (y|N) "; + read __; + case "${__}" in + [yY]) break; ;; + *) echo "Exiting."; exit 3; ;; + esac; + for LINK_NAME in $(find ${MIDIPIX_PATH}/${MIDIPIX_DNAME_DIST}/lib \ + -maxdepth 1 -name \*.so -type l); do + LINK_TARGET="$(readlink -- "${LINK_NAME}")"; + if [ -f "${MIDIPIX_PATH}/native/lib/${LINK_TARGET}" ]; then + echo rm -f -- "${LINK_NAME}"; + rm -f -- "${LINK_NAME}"; + echo ln -f -- "${LINK_TARGET}" "${LINK_NAME}"; + ln -f -- "${LINK_TARGET}" "${LINK_NAME}"; + fi; + done; +fi; +printf "\033[97m[ \033[92mOK \033[97m]\033[0m\n"; + +# vim:filetype=sh