From 3924d2847d39e69224713d1938e330eb5a835836 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Thu, 20 Apr 2017 12:58:04 +0100 Subject: [PATCH] [misc] add build data for Windows Apps Store * Rather useless, since elevated apps are neither accepted by Microsoft nor will they run by default when sideloaded. But, hey, I can has apps! * Also update sign and sed scripts --- _chver.sh | 15 +++++----- _pre-commit.sh | 12 +++----- _release.sh | 9 ++++++ _sign.cmd | 8 ++---- res/appstore/AppxManifest.xml | 51 ++++++++++++++++++++++++++++++++++ res/appstore/README.txt | 9 ++++++ res/appstore/packme.cmd | 15 ++++++++++ res/icon-set/rufus-150.png | Bin 0 -> 5947 bytes res/icon-set/rufus-44.png | Bin 0 -> 2714 bytes src/rufus.rc | 10 +++---- 10 files changed, 103 insertions(+), 26 deletions(-) create mode 100644 res/appstore/AppxManifest.xml create mode 100644 res/appstore/README.txt create mode 100644 res/appstore/packme.cmd create mode 100644 res/icon-set/rufus-150.png create mode 100644 res/icon-set/rufus-44.png diff --git a/_chver.sh b/_chver.sh index c97a9d65..db472d80 100755 --- a/_chver.sh +++ b/_chver.sh @@ -22,16 +22,17 @@ esac echo "changing version to $MAJOR.$MINOR" sed -i -e "s/^AC_INIT(\[\([^ ]*\)\], \[[^ ]*\]\(.*\)/AC_INIT([\1], [$MAJOR.$MINOR]\2/" configure.ac cat > cmd.sed <<\_EOF -s/^[ \t]*FILEVERSION[ \t]*.*,.*,\(.*\),\(.*\)/ FILEVERSION @@MAJOR@@,@@MINOR@@,\1,\2/ -s/^[ \t]*PRODUCTVERSION[ \t]*.*,.*,\(.*\),\(.*\)/ PRODUCTVERSION @@MAJOR@@,@@MINOR@@,\1,\2/ -s/^\([ \t]*\)VALUE[ \t]*"FileVersion",[ \t]*".*\..*\.\(.*\)"/\1VALUE "FileVersion", "@@MAJOR@@.@@MINOR@@.\2"/ -s/^\([ \t]*\)VALUE[ \t]*"ProductVersion",[ \t]*".*\..*\.\(.*\)"/\1VALUE "ProductVersion", "@@MAJOR@@.@@MINOR@@.\2"/ -s/^\(.*\)"Rufus .*\..*\.\(.*\)"\(.*\)/\1"Rufus @@MAJOR@@.@@MINOR@@.\2"\3/ +s/^\([ \t]*\)\(FILE\|PRODUCT\)VERSION\([ \t]*\)[0-9]*,[0-9]*\(.*\)/\1\2VERSION\3@@MAJOR@@,@@MINOR@@\4/ +s/^\([ \t]*\)VALUE\([ \t]*\)"\(File\|Product\)Version",\([ \t]*\)"[0-9]*\.[0-9]*\.\(.*\)/\1VALUE\2"\3Version",\4"@@MAJOR@@.@@MINOR@@.\5/ +s/^\(.*\)"Rufus [0-9]*\.[0-9]*\.\(.*\)"\(.*\)/\1"Rufus @@MAJOR@@.@@MINOR@@.\2"\3/ +s/^\([ \t]*\)Version="[0-9]*\.[0-9]*\.\(.*\)"\(.*\)/\1Version="@@MAJOR@@.@@MINOR@@.\2"\3/ +s/^set VERSION=[0-9]*\.[0-9]*/set VERSION=@@MAJOR@@.@@MINOR@@/ _EOF # First run sed to substitute our variable in the sed command file sed -i -e "s/@@MAJOR@@/$MAJOR/g" -e "s/@@MINOR@@/$MINOR/g" cmd.sed -sed -i -f cmd.sed src/rufus.rc -sed -i 's/$/\r/' src/rufus.rc +sed -b -i -f cmd.sed src/rufus.rc +sed -b -i -f cmd.sed res/appstore/AppxManifest.xml +sed -b -i -f cmd.sed res/appstore/packme.cmd rm cmd.sed source ./bootstrap.sh diff --git a/_pre-commit.sh b/_pre-commit.sh index bc9c401b..cc4fb9e2 100755 --- a/_pre-commit.sh +++ b/_pre-commit.sh @@ -26,20 +26,16 @@ echo "setting micro to $TAGVER" echo $TAGVER > .tag cat > cmd.sed <<\_EOF -s/^[ \t]*FILEVERSION[ \t]*\(.*\),\(.*\),.*,\(.*\)/ FILEVERSION \1,\2,@@TAGVER@@,\3/ -s/^[ \t]*PRODUCTVERSION[ \t]*\(.*\),\(.*\),.*,\(.*\)/ PRODUCTVERSION \1,\2,@@TAGVER@@,\3/ -s/^\([ \t]*\)VALUE[ \t]*"FileVersion",[ \t]*"\(.*\)\..*"/\1VALUE "FileVersion", "\2.@@TAGVER@@"/ -s/^\([ \t]*\)VALUE[ \t]*"ProductVersion",[ \t]*"\(.*\)\..*"/\1VALUE "ProductVersion", "\2.@@TAGVER@@"/ +s/^\([ \t]*\)*\(FILE\|PRODUCT\)VERSION\([ \t]*\)\([0-9]*\),\([0-9]*\),[0-9]*,\(.*\)/\1\2VERSION\3\4,\5,@@TAGVER@@,\6/ +s/^\([ \t]*\)VALUE\([ \t]*\)"\(File\|Product\)Version",\([ \t]*\)"\(.*\)\..*"[ \t]*/\1VALUE\2"\3Version",\4"\5.@@TAGVER@@"/ s/^\(.*\)"Rufus \(.*\)\..*"\(.*\)/\1"Rufus \2.@@TAGVER@@"\3/ +s/^\([ \t]*\)Version="\([0-9]*\)\.\([0-9]*\)\.[0-9]*\.\([0-9]*\)"\(.*\)/\1Version="\2.\3.@@TAGVER@@.\4"\5/ _EOF # First run sed to substitute our variable in the sed command file sed -i -e "s/@@TAGVER@@/$TAGVER/g" cmd.sed - # Run sed to update the nano version -sed -i -f cmd.sed src/rufus.rc -# MinGW's sed has the bad habit of eating CRLFs - make sure we keep 'em -sed -i 's/$/\r/' src/rufus.rc +sed -b -i -f cmd.sed src/rufus.rc # NB: we need to run git add else the modified files may be ignored git add src/rufus.rc diff --git a/_release.sh b/_release.sh index 32b3716e..8cec6838 100755 --- a/_release.sh +++ b/_release.sh @@ -3,3 +3,12 @@ rm -f rufus*.exe ./configure --disable-debug "$@" make -j12 clean make -j12 release + +# Update AppxManifest.xml with the build number +TAGVER=`git log --oneline | wc -l` +cat > cmd.sed <<\_EOF +s/^\([ \t]*\)Version="\([0-9]*\)\.\([0-9]*\)\.[0-9]*\.\([0-9]*\)"\(.*\)/\1Version="\2.\3.@@TAGVER@@.\4"\5/ +_EOF +sed -i -e "s/@@TAGVER@@/$TAGVER/g" cmd.sed +sed -b -i -f cmd.sed res/appstore/AppxManifest.xml +rm cmd.sed diff --git a/_sign.cmd b/_sign.cmd index bd5df53d..ca087231 100644 --- a/_sign.cmd +++ b/_sign.cmd @@ -1,8 +1,4 @@ @echo off -:retry_sha1 -"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool" sign /v /sha1 655f6413a8f721e3286ace95025c9e0ea132a984 /fd SHA1 /tr http://timestamp.comodoca.com/rfc3161 /td SHA1 %1 -if ERRORLEVEL 1 goto retry_sha1 -:retry_sha256 -"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool" sign /as /v /sha1 5759b23dc8f45e9120a7317f306e5b6890b612f0 /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 %1 -if ERRORLEVEL 1 goto retry_sha256 +"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool" sign /v /sha1 655f6413a8f721e3286ace95025c9e0ea132a984 /fd SHA1 /tr http://timestamp.comodoca.com/rfc3161 /td SHA1 %1 +"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool" sign /as /v /sha1 5759b23dc8f45e9120a7317f306e5b6890b612f0 /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 %1 exit diff --git a/res/appstore/AppxManifest.xml b/res/appstore/AppxManifest.xml new file mode 100644 index 00000000..cceb5b0a --- /dev/null +++ b/res/appstore/AppxManifest.xml @@ -0,0 +1,51 @@ + + + + + + Rufus + Akeo Consulting + Rufus + Assets\Rufus-48.png + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/appstore/README.txt b/res/appstore/README.txt new file mode 100644 index 00000000..20209c28 --- /dev/null +++ b/res/appstore/README.txt @@ -0,0 +1,9 @@ +This directory contains the resources to create a Windows Store package. + +However, since Microsoft doesn't allow elevated applications into the Windows +Store, and, even if you install it manually, Windows 10 will also refuse to +elevate it (so you have to explicitly select to run it as admin *every time*), +this is rather pointless. + +Still, you can find the latest signed application package at: +https://rufus.akeo.ie/testing/ diff --git a/res/appstore/packme.cmd b/res/appstore/packme.cmd new file mode 100644 index 00000000..65055dd2 --- /dev/null +++ b/res/appstore/packme.cmd @@ -0,0 +1,15 @@ +@echo off +set VERSION=2.15 +echo [Files]>mappings.lst +echo "..\icon-set\rufus-44.png" "Assets\Rufus-44.png">>mappings.lst +echo "..\icon-set\rufus-48.png" "Assets\Rufus-48.png">>mappings.lst +echo "..\icon-set\rufus-150.png" "Assets\Rufus-150.png">>mappings.lst +echo "..\..\rufus-%VERSION%.exe" "rufus.exe">>mappings.lst +echo "AppxManifest.xml" "AppxManifest.xml">>mappings.lst +"C:\Program Files (x86)\Windows Kits\10\bin\x64\MakeAppx" pack /o /f mappings.lst /p Rufus-%VERSION%.appx +if ERRORLEVEL 1 goto out +"C:\Program Files (x86)\Windows Kits\10\bin\x64\SignTool" sign /v /sha1 5759b23dc8f45e9120a7317f306e5b6890b612f0 /fd SHA256 /tr http://timestamp.comodoca.com/rfc3161 /td SHA256 Rufus-%VERSION%.appx +:out +del mappings.lst +pause +exit diff --git a/res/icon-set/rufus-150.png b/res/icon-set/rufus-150.png new file mode 100644 index 0000000000000000000000000000000000000000..733e3ce5f9ac6712048c5d70617151beb1824e00 GIT binary patch literal 5947 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