# Copyright (c) 1998-2001 Robert Woodcock <rcw@debian.org>
# Copyright (c) 2003-2006 Jesus Climent <jesus.climent@hispalinux.es>
# Copyright (c) 2009-2012 Colin Tuckley <colint@debian.org>
-# Copyright (c) 2012- Steve McIntyre <93sam@@debian.org>
-# Copyright (c) 2015-2016 Andrew Strong <andrew.david.strong@gmail.com>
+# Copyright (c) 2012-2018 Steve McIntyre <93sam@@debian.org>
+# Copyright (c) 2015-2017 Andrew Strong <andrew.david.strong@gmail.com>
# This code is hereby licensed for public consumption under either the
# GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice.
#
log info "Define the full path to the executable if it exists on your system." >&2
if [ -e /etc/debian_version ] ; then
case $X in
- oggenc) MISSING_PACKAGE=vorbis-tools ;;
- lame|flac) MISSING_PACKAGE=$X ;;
+ oggenc)
+ MISSING_PACKAGE=vorbis-tools
+ ;;
+ lame|flac|cd-discid|eject|mkcue|icedax|glyrc)
+ MISSING_PACKAGE=$X
+ ;;
esac
log info "Hint: sudo apt-get install $MISSING_PACKAGE" >&2
fi
*musicbrainz*)
# FIXME: don't assume the first track is 1
MBDISCID=$($MUSICBRAINZ --command calcid --discinfo 1 $TRACKS $LEADIN $(($PREGAP + $LEADOUT)) $OFFSETS)
+ error=$?
+ if [ $error != 0 ]; then
+ log error "$MUSICBRAINZ failed to run; ABORT"
+ exit $error
+ fi
MBTRACKINFO="${MBDISCID} $((TRACKS)) ${COOKEDOFFSETS} $((($LEADOUT + $LEADIN + $IDMAGICNUM) / $CDFRAMES))"
;;
esac
if [ -n "$DISCNUMBER" ]; then
echo DISCNUMBER="$DISCNUMBER"
fi
- echo CDDB=$CDDBDISCID
+ echo CDDB="${CDDBDISCID}"
if [ "$(eval echo ${COMMENT})" != "" ]; then
case "$COMMENTOUTPUT" in
*=*) echo "$COMMENTOUTPUT";;
if [ -n "$DISCNUMBER" ]; then
echo DISCNUMBER="$DISCNUMBER"
fi
- echo CDDB="$CDDBDISCID"
+ echo CDDB="${CDDBDISCID}"
if [ "$(eval echo ${COMMENT})" != "" ]; then
case "$COMMENTOUTPUT" in
*=*) echo "$COMMENTOUTPUT";;
LENGTH=$(( $LEADOUT/75 - $TRACK1/75 ))
CDDBDISCID=$(( ( $N % 255 ) * 2**24 | $LENGTH * 2**8 | $TRACKS ))
- printf "%08x %i" $CDDBDISCID $TRACKS
+ printf "%08x %i" ${CDDBDISCID} $TRACKS
j=1
while [ $j -le $TRACKS ] ; do
# This is essentially the start of things
do_discid ()
{
- if [ -z "$CDDBDISCID" ]; then
+ if [ -z "${CDDBDISCID}" ]; then
vecho -n "Getting CD track info... "
# In OSX, unmount the disc before a query
if [ "$OSFLAVOUR" = "OSX" ]; then
# consistency. Also calculate the
# musicbrainz discid if we need it.
CDDBTRACKINFO=$($CDDISCID "$CDROM")
+ if [ "$CDDISCID_NEEDS_PAUSE"x = "y"x ]; then
+ sleep 6
+ fi
CDDBDISCID=$(echo $CDDBTRACKINFO | cut -d' ' -f1)
case $CDDBMETHOD in
*musicbrainz*)
MBTRACKINFO=$($MUSICBRAINZ --command id --device "$CDROM")
+ error=$?
+ if [ $error != 0 ]; then
+ log error "$MUSICBRAINZ failed to run; ABORT"
+ exit $error
+ fi
MBDISCID=$(echo $MBTRACKINFO | cut -d' ' -f1)
;;
esac
WEHAVEACD=y
CDDBDISCID=$(echo $CDDBTRACKINFO | cut -f1 -d' ')
else
- CDDBTRACKINFO=$(cat "$WAVOUTPUTDIR/abcde.$CDDBDISCID/cddbdiscid")
+ CDDBTRACKINFO=$(cat "$WAVOUTPUTDIR/abcde.${CDDBDISCID}/cddbdiscid")
fi
# Get a full enumeration of tracks, sort it, and put it in the TRACKQUEUE.
diskutil unmount ${CDROM#/dev/}
# Also, in OSX the cdrom device for cdda2wav/icedax changes...
CDDA2WAVCDROM="IODVDServices"
- elif [ "$OSFLAVOUR" = "FBSD" ] ; then
+ elif [ "$OSFLAVOUR" = "FBSD" ] || [ "$OSFLAVOUR" = "IRIX" ]; then
CDDA2WAVCDROM="$CDROMID"
else
if [ "$CDROMID" = "" ]; then
CDDBDISCID=$(echo $CDDBTRACKINFO | cut -d' ' -f1)
ATITLE=$(grep -a -e '^DTITLE=' "${SOURCE_WORKDIR}/cddbread.${NUM_CDDB_MATCHES}" | cut -c8- | tr -d \\r\\n)
echo "CD-Text" > ${SOURCE_WORKDIR}/datasource.${NUM_CDDB_MATCHES}
- echo "none $CDDBDISCID ${ATITLE}" >> "${SOURCE_WORKDIR}/cddbquery.${NUM_CDDB_MATCHES}"
+ echo "none ${CDDBDISCID} ${ATITLE}" >> "${SOURCE_WORKDIR}/cddbquery.${NUM_CDDB_MATCHES}"
( cd "${SOURCE_WORKDIR}" && rm -f audio_* audio.* )
for file in ${SOURCE_WORKDIR}/cddbread.* ${SOURCE_WORKDIR}/cddbquery.* ${SOURCE_WORKDIR}/datasource.*; do
MBDISCID=$(echo $MBTRACKINFO | cut -d' ' -f1)
local SOURCE_WORKDIR="${ABCDETEMPDIR}/data-musicbrainz"
mkdir -p "${SOURCE_WORKDIR}"
- ${MUSICBRAINZ} --command data --discid "$MBDISCID" --workdir "${SOURCE_WORKDIR}" --start ${NUM_CDDB_MATCHES}
+ ${MUSICBRAINZ} --command data --discid "${MBDISCID}" --workdir "${SOURCE_WORKDIR}" --start ${NUM_CDDB_MATCHES}
+ # To have got this far, must have been able to run
+ # $MUSICBRAINZ earlier to calculate the ID. Errors here are
+ # non-fatal, maybe a lookup failure? Log and continue.
+ error=$?
+ if [ $error != 0 ]; then
+ log error "$MUSICBRAINZ failed to run"
+ fi
# Check for no matches.
# The helper script will write disc matches out to
i=$(($i + 1))
echo cddb-read-${NUM_CDDB_MATCHES}-complete >> "${ABCDETEMPDIR}/status"
ATITLE=$(grep -a -e '^DTITLE=' "${SOURCE_WORKDIR}/cddbread.${NUM_CDDB_MATCHES}" | cut -c8- | tr -d \\r\\n)
- echo "none $CDDBDISCID ${ATITLE}" >> "${SOURCE_WORKDIR}/cddbquery.${NUM_CDDB_MATCHES}"
+ echo "none ${CDDBDISCID} ${ATITLE}" >> "${SOURCE_WORKDIR}/cddbquery.${NUM_CDDB_MATCHES}"
echo "Musicbrainz" > "${SOURCE_WORKDIR}/datasource.${NUM_CDDB_MATCHES}"
cp -f "${SOURCE_WORKDIR}/"*."${NUM_CDDB_MATCHES}" "${ABCDETEMPDIR}"
done
diskutil unmount ${CDROM#/dev/}
# Also, in OSX the cdrom device for cdda2wav/icedax changes...
CDDA2WAVCDROM="IODVDServices"
- elif [ "$OSFLAVOUR" = "FBSD" ] ; then
+ elif [ "$OSFLAVOUR" = "FBSD" ] || [ "$OSFLAVOUR" = "IRIX" ]; then
CDDA2WAVCDROM="$CDROMID"
else
if [ "$CDROMID" = "" ]; then
HTTPGET=""
MD5SUM=md5
OSFLAVOUR=SunOS
+elif [ X$(uname) = X"IRIX64" ] ; then
+ HTTPGET="wget"
+ OSFLAVOUR=IRIX
+ NEEDCDROMID=y
+ # Apparently necessary - see
+ # https://abcde.einval.com/bugzilla/show_bug.cgi?id=29
+ CDDISCID_NEEDS_PAUSE=y
else
HTTPGET=wget
fi
fi
# If the user provided a CDDBDISCID, disable eject
-if [ -n "$CDDBDISCID" ] || [ "$CDROMREADERSYNTAX" = "flac" ]; then EJECTCD=n ; fi
+if [ -n "${CDDBDISCID}" ] || [ "$CDROMREADERSYNTAX" = "flac" ]; then EJECTCD=n ; fi
# Check the available cd rippers in the system, from the ones we know.
if [ "$CDROMREADERSYNTAX" = "" ]; then
# At this point a CDROM has to be defined, so we check it exists.
if [ X"$CDROM" != "X" ] ; then
- if ( [ "$CDROMREADERSYNTAX" = "cdda2wav" ] || [ "$CDROMREADERSYNTAX" = "icedax" ] ) && [ "$NEEDCDROMID" = "y" ] ; then
- if [ "$OSFLAVOUR" = "FBSD" ]; then
- if echo "$CDROMID" | grep "^[0-9],[0-9],[0-9]$" >/dev/null 2>&1 ; then :; else
+ if [ "$NEEDCDROMID" = "y" ] ; then
+ if [ "$CDROMREADERSYNTAX" = "cdda2wav" ] || [ "$CDROMREADERSYNTAX" = "icedax" ]; then
+ if [ "$OSFLAVOUR" = "IRIX" ]; then
+ if [ -z "$CDROMID" ]; then
+ CDROMID="`echo "$CDROM" | sed -e 's;/dev/scsi/sc\([0-9]*\)d\([0-9]*\)l\([0-9]*\)$;\1,\2,\3;'`"
+ fi
+ fi
+ if ! echo "$CDROMID" | grep "^[0-9],[0-9],[0-9]$" >/dev/null 2>&1 ; then
log error "CDROMID not in the right format for $CDROMREADERSYNTAX"
log error "Use \"cdrecord -scanbus\" to obtain an adequate ID and set CDROMID accordingly"
exit 1
log warning "The encoded formats does not match with the moved ones"
log warning "Formats encoded: $( echo $ENCODED_FORMATS | tr "|" " " )"
log warning "Formats moved: $( echo $MOVED_FORMATS | tr "|" " " )"
- log warning "Use \"abcde -a clean -f -C $CDDBDISCID\" to force the removal of the remaining data."
+ log warning "Use \"abcde -a clean -f -C ${CDDBDISCID}\" to force the removal of the remaining data."
DOCLEAN=n
fi
fi