mkvtoolnix/packaging/windows/msix/create_package.sh

97 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
set -e -x
cd "$(dirname "$(readlink -f "$0")")"
if [[ -f certificate.sh ]]; then
source ./certificate.sh
fi
if [[ -z "$1" ]] || [[ ! -f "$1" ]]; then
echo "Error: need path to 7z package as first argument"
exit 1
fi
if [[ ! -f assets/StoreLogo.png ]]; then
echo "Error: the assets don't seem to have been built."
exit 1
fi
makeappx="$(find '/c/Program Files (x86)/Windows Kits/10/bin/' -type f -iname makeappx.exe | grep -i /x64/ | sort | tail -n1)"
makepri="$(find '/c/Program Files (x86)/Windows Kits/10/bin/' -type f -iname makepri.exe | grep -i /x64/ | sort | tail -n1)"
signtool="$(find '/c/Program Files (x86)/Windows Kits/10/bin/' -type f -iname signtool.exe | grep -i /x64/ | sort | tail -n1)"
if [[ -z "$makeappx" ]]; then
echo "Error: makeappx.exe not found"
exit 1
fi
if [[ -z "$makepri" ]]; then
echo "Error: makepri.exe not found"
exit 1
fi
if [[ -z "$signtool" ]]; then
echo "Error: signtool.exe not found"
exit 1
fi
mtxversion="${1%.7z}"
mtxversion="${mtxversion##*-}"
while [[ "$(echo $mtxversion | sed -Ee 's/[0-9]*//g')" != ... ]]; do
mtxversion=${mtxversion}.0
done
case "$1" in
*64-bit*) mtxarch=x64 ;;
*32-bit*) mtxarch=x86 ;;
*)
echo "Error: could not determine architecture from file name."
exit 1
;;
esac
rm -rf package-${mtxarch}
mkdir -p package-${mtxarch}
cd package-${mtxarch}
winpwd="$(echo "$PWD" | sed -Ee 's!^/(.)!\1:!' -e 's!/!\\!g')"
7z x "$1"
rm -f mkvtoolnix/data/portable-app mkvtoolnix/MKVToolNix.url
sed -E \
-e "s/Version=\"\"/Version=\"${mtxversion}\"/" \
-e "s/ProcessorArchitecture=\"\"/ProcessorArchitecture=\"${mtxarch}\"/" \
< ../manifest.xml > manifest.xml
(
echo '[Files]'
echo "\"$PWD/manifest.xml\" \"AppxManifest.xml\""
echo "\"$PWD/resources.pri\" \"Resources.pri\""
find mkvtoolnix -type f | {
while read name ; do
echo "\"$PWD/${name}\" \"${name}\""
done
}
find ../assets -type f | {
while read name ; do
echo "\"$PWD/${name}\" \"Assets${name#../assets}\""
done
}
) | sed -Ee 's!^"/(.)!"\1:!' -e 's!/!\\!g' > mapping.txt
msix_base="mkvtoolnix-${mtxversion}-${mtxarch}"
MSYS2_ARG_CONV_EXCL=\* "${makepri}" new /pr "${winpwd}" /mn "${winpwd}/manifest.xml" /cf "${winpwd}/../priconfig.xml" /o /of "${winpwd}/resources.pri"
MSYS2_ARG_CONV_EXCL=\* "${makeappx}" pack /f "${winpwd}/mapping.txt" /p "${winpwd}/${msix_base}.msix" /o
if [[ "$2" == "--sign" ]]; then
cp "${msix_base}.msix" "${msix_base}-signed.msix"
MSYS2_ARG_CONV_EXCL=\* "${signtool}" sign /f "${CERTIFICATE_PATH}" /p "${CERTIFICATE_PASSWORD}" /fd sha256 "${winpwd}/${msix_base}-signed.msix"
fi