Files
shairport-sync/xml_plist_codegen.sh
Kel Modderman 214eba2e7a Read the plist from stdin without an explicit -
xxd reads standard input when given no file operand, so the - is
redundant. It also breaks builds that provide xxd through a partial
reimplementation such as OpenWrt's scripts/xxdi.pl, which treats - as a
file name and exits with

  xxdi.pl: Unable to open -: No such file or directory

xml_plist_codegen.sh does not check for that failure, so the generated
plists/get_info_response.c ends up with an empty byte array and AirPlay 2
answers GET /info with nothing.
2026-08-09 18:27:20 +10:00

29 lines
1.4 KiB
Bash

# args: first is the source (XML) file, second is the destination directory
# converts the xml file to a plist file and converts that into a byte
# array defined in a .h and .c file
# for compilation
INPUT_FILE_NAME=`basename $1`
BASE_FILENAME=`echo ${INPUT_FILE_NAME%.*}`
LABEL=`echo _${BASE_FILENAME}_PLIST | tr '[:lower:]' '[:upper:]' | tr '.' '_'`
mkdir -p $2
printf "// Please do not edit this file!\n" > $2/$BASE_FILENAME.h
printf "// This file was automatically generated from $INPUT_FILE_NAME.\n\n" >> $2/$BASE_FILENAME.h
printf "#ifndef $LABEL\n" >> $2/$BASE_FILENAME.h
printf "#define $LABEL\n\n" >> $2/$BASE_FILENAME.h
printf "#include <stddef.h>\n\n" >> $2/$BASE_FILENAME.h
printf "extern unsigned char ${BASE_FILENAME}_plist[];\n" >> $2/$BASE_FILENAME.h
printf "extern size_t ${BASE_FILENAME}_plist_len;\n\n" >> $2/$BASE_FILENAME.h
printf "#endif // $LABEL\n" >> $2/$BASE_FILENAME.h
printf "// Please do not edit this file!\n" > $2/$BASE_FILENAME.c
printf "// This file was automatically generated from $INPUT_FILE_NAME.\n\n" >> $2/$BASE_FILENAME.c
printf "#include \"$BASE_FILENAME.h\"\n\n" >> $2/$BASE_FILENAME.c
printf "unsigned char ${BASE_FILENAME}_plist[] = {\n" >> $2/$BASE_FILENAME.c
plistutil -i $1 | xxd -i >> $2/$BASE_FILENAME.c
printf " };\n\n" >> $2/$BASE_FILENAME.c
printf "size_t ${BASE_FILENAME}_plist_len = sizeof(${BASE_FILENAME}_plist);\n" >> $2/$BASE_FILENAME.c