| 
Commits:
12 changed files:
Changes:
projects/browser/build
 
| ... | ... | @@ -374,12 +374,12 @@ cd $distdir |  
| 374 | 374 |    [% END -%]
 |  
| 375 | 375 |    [% c('tar', {
 |  
| 376 | 376 |          tar_src => [ '$PKG_DIR' ],
 |  
| 377 |  | -        tar_args => '-cJf $OUTDIR/' _ c("var/project-name") _ '-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '_${PKG_LOCALE}.tar.xz',
 |  
|  | 377 | +        tar_args => '-cJf $OUTDIR/' _ c("var/project-name") _ '-' _ c("var/osname") _ '-' _ c("var/torbrowser_version") _ '.tar.xz',
 |  
| 378 | 378 |      }) %]
 |  
| 379 | 379 |  [% ELSIF c("var/macos") %]
 |  
| 380 | 380 |    [% c('var/ddmg', {
 |  
| 381 | 381 |          dmg_src => '"$PKG_DIR"',
 |  
| 382 |  | -        dmg_out => '$OUTDIR/' _ c('var/ProjectName') _ '-' _ c("var/torbrowser_version") _ '-' _ c("var/mar_osname") _ '_${PKG_LOCALE}.dmg',
 |  
|  | 382 | +        dmg_out => '$OUTDIR/' _ c('var/project-name') _ '-' _ c("var/mar_osname") _ '-' _ c("var/torbrowser_version") _ '.dmg',
 |  
| 383 | 383 |      }) %]
 |  
| 384 | 384 |  [% ELSIF c("var/windows") %]
 |  
| 385 | 385 |    find "$PKG_DIR" -exec [% c("touch") %] {} \;
 |  
| ... | ... | @@ -387,11 +387,11 @@ cd $distdir |  
| 387 | 387 |    makensis browser-portable.nsi
 |  
| 388 | 388 |    # Working around NSIS braindamage
 |  
| 389 | 389 |    python3 $rootdir/pe_checksum_fix.py browser-install.exe
 |  
| 390 |  | -  mv browser-install.exe $OUTDIR/[% c("var/projectname") %]-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
 |  
|  | 390 | +  mv browser-install.exe $OUTDIR/[% c("var/project-name") %]-portable-[% c("var/osname") %]-[% c("var/torbrowser_version") %].exe
 |  
| 391 | 391 |    [% IF c('var/mullvad-browser') -%]
 |  
| 392 | 392 |      makensis browser-system.nsi
 |  
| 393 | 393 |      python3 $rootdir/pe_checksum_fix.py browser-install.exe
 |  
| 394 |  | -    mv browser-install.exe $OUTDIR/[% c("var/projectname") %]-systeminstall[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
 |  
|  | 394 | +    mv browser-install.exe $OUTDIR/[% c("var/project-name") %]-install-[% c("var/osname") %]-[% c("var/torbrowser_version") %].exe
 |  
| 395 | 395 |    [% END -%]
 |  
| 396 | 396 |    popd
 |  
| 397 | 397 |  [% END %]
 |  
| ... | ... | @@ -402,12 +402,12 @@ SCRIPT_EOF |  
| 402 | 402 |    cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
 |  
| 403 | 403 |  [% END -%]
 |  
| 404 | 404 |  [% IF c("var/linux") -%]
 |  
| 405 |  | -  cp $rootdir/[% c('input_files_by_name/firefox') %]/browser-debug.tar.xz "$OUTDIR/[% c('var/project-name') %]-[% c('var/mar_osname') %]-debug.tar.xz"
 |  
|  | 405 | +  cp $rootdir/[% c('input_files_by_name/firefox') %]/browser-debug-symbols.tar.xz "$OUTDIR/[% c('var/project-name') %]-debug-symbols-[% c('var/mar_osname') %]-[% c('var/torbrowser_version') %].tar.xz"
 |  
| 406 | 406 |    [% IF c("var/linux-x86_64") && !c("var/asan") -%]
 |  
| 407 |  | -    cp $rootdir/[% c('input_files_by_name/firefox') %]/geckodriver.tar.xz "$OUTDIR/geckodriver-[% c('var/mar_osname') %].tar.xz"
 |  
|  | 407 | +    cp $rootdir/[% c('input_files_by_name/firefox') %]/geckodriver.tar.xz "$OUTDIR/geckodriver-[% c('var/mar_osname') %]-[% c('var/torbrowser_version') %].tar.xz"
 |  
| 408 | 408 |    [% END -%]
 |  
| 409 | 409 |  [% ELSIF c("var/windows") -%]
 |  
| 410 |  | -  cp $rootdir/[% c('input_files_by_name/firefox') %]/browser-debug.zip "$OUTDIR/[% c('var/project-name') %]-[% c('var/mar_osname') %]-debug.zip"
 |  
|  | 410 | +  cp $rootdir/[% c('input_files_by_name/firefox') %]/browser-debug-symbols.zip "$OUTDIR/[% c('var/project-name') %]-debug-symbols-[% c('var/mar_osname') %]-[% c('var/torbrowser_version') %].zip"
 |  
| 411 | 411 |  [% END -%]
 |  
| 412 | 412 |  [%IF c("var/tor-browser") -%]
 |  
| 413 | 413 |    tor_expert_bundle_src="[% c("input_files_by_name/tor-expert-bundle") %]"
 |  projects/browser/build.android
 
 
| ... | ... | @@ -6,7 +6,7 @@ tar -xf $rootdir/[% c('input_files_by_name/firefox-android') %] |  
| 6 | 6 |  
 |  
| 7 | 7 |  assets_dir=assets
 |  
| 8 | 8 |  ext_dir=$assets_dir/extensions
 |  
| 9 |  | -qa_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-[% c("version") %]-[% c("var/osname") %]-multi-qa.apk
 |  
|  | 9 | +qa_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-qa-[% c("var/osname") %]-[% c("version") %].apk
 |  
| 10 | 10 |  apk=$rootdir/firefox-android/*-[% c("var/abi") %]-*.apk
 |  
| 11 | 11 |  
 |  
| 12 | 12 |  # tor-browser-build#40920
 |  projects/browser/config
 
 
| ... | ... | @@ -11,6 +11,7 @@ var: |  
| 11 | 11 |      - libparallel-forkmanager-perl
 |  
| 12 | 12 |      - libfile-slurp-perl
 |  
| 13 | 13 |      - bzip2
 |  
|  | 14 | +  mar_osname: '[% c("var/osname") %]'
 |  
| 14 | 15 |  
 |  
| 15 | 16 |  targets:
 |  
| 16 | 17 |    linux:
 |  
| ... | ... | @@ -20,12 +21,6 @@ targets: |  
| 20 | 21 |          # builds (bug 29812). We don't need it in x86_64 builds, but we
 |  
| 21 | 22 |          # share the container to reduce space used.
 |  
| 22 | 23 |          - libc6-i386
 |  
| 23 |  | -  linux-i686:
 |  
| 24 |  | -    var:
 |  
| 25 |  | -      mar_osname: linux32
 |  
| 26 |  | -  linux-x86_64:
 |  
| 27 |  | -    var:
 |  
| 28 |  | -      mar_osname: linux64
 |  
| 29 | 24 |    macos:
 |  
| 30 | 25 |      var:
 |  
| 31 | 26 |        arch_deps:
 |  
| ... | ... | @@ -37,22 +32,10 @@ targets: |  
| 37 | 32 |    macos-universal:
 |  
| 38 | 33 |      var:
 |  
| 39 | 34 |        mar_osname: macos
 |  
| 40 |  | -  macos-aarch64:
 |  
| 41 |  | -    var:
 |  
| 42 |  | -      mar_osname: macos-aarch64
 |  
| 43 |  | -  macos-x86_64:
 |  
| 44 |  | -    var:
 |  
| 45 |  | -      mar_osname: macos-x86_64
 |  
| 46 | 35 |    windows:
 |  
| 47 | 36 |      var:
 |  
| 48 | 37 |        arch_deps:
 |  
| 49 | 38 |          - python3-pefile
 |  
| 50 |  | -  windows-i686:
 |  
| 51 |  | -    var:
 |  
| 52 |  | -      mar_osname: win32
 |  
| 53 |  | -  windows-x86_64:
 |  
| 54 |  | -    var:
 |  
| 55 |  | -      mar_osname: win64
 |  
| 56 | 39 |    android:
 |  
| 57 | 40 |      build: '[% INCLUDE build.android %]'
 |  
| 58 | 41 |      var:
 |  projects/firefox/build
 
 
| ... | ... | @@ -331,7 +331,7 @@ END; |  
| 331 | 331 |  [% IF c("var/linux") -%]
 |  
| 332 | 332 |    [% c('tar', {
 |  
| 333 | 333 |        tar_src => [ 'Debug' ],
 |  
| 334 |  | -      tar_args => '-cJf ' _ dest_dir _ '/' _ c('filename') _ '/browser-debug.tar.xz',
 |  
|  | 334 | +      tar_args => '-cJf ' _ dest_dir _ '/' _ c('filename') _ '/browser-debug-symbols.tar.xz',
 |  
| 335 | 335 |      }) %]
 |  
| 336 | 336 |    [% IF c("var/linux-x86_64") && !c("var/asan") -%]
 |  
| 337 | 337 |      [% c('tar', {
 |  
| ... | ... | @@ -342,14 +342,14 @@ END; |  
| 342 | 342 |  [% ELSIF c("var/windows") -%]
 |  
| 343 | 343 |    [% c('zip', {
 |  
| 344 | 344 |        zip_src => [ 'Debug' ],
 |  
| 345 |  | -      zip_args => dest_dir _ '/' _ c('filename') _ '/browser-debug.zip',
 |  
|  | 345 | +      zip_args => dest_dir _ '/' _ c('filename') _ '/browser-debug-symbols.zip',
 |  
| 346 | 346 |      }) %]
 |  
| 347 | 347 |  [% END -%]
 |  
| 348 | 348 |  
 |  
| 349 | 349 |  [% IF c("var/updater_enabled") -%]
 |  
| 350 | 350 |    [% c('zip', {
 |  
| 351 | 351 |        zip_src => [ 'mar-tools' ],
 |  
| 352 |  | -      zip_args => dest_dir _ '/' _ c('filename') _ '/' _ c('var/martools_filename'),
 |  
|  | 352 | +      zip_args => dest_dir _ '/' _ c('filename') _ '/' _ 'mar-tools-' _ c("var/osname") _ '-' _ c("var/torbrowser_version") _ '.zip',
 |  
| 353 | 353 |      }) %]
 |  
| 354 | 354 |  [% END -%]
 |  
| 355 | 355 |  
 |  projects/firefox/config
 
 
| ... | ... | @@ -90,7 +90,6 @@ targets: |  
| 90 | 90 |  
 |  
| 91 | 91 |    linux-x86_64:
 |  
| 92 | 92 |      var:
 |  
| 93 |  | -      martools_filename: mar-tools-linux64.zip
 |  
| 94 | 93 |        arch_deps:
 |  
| 95 | 94 |          - libgtk2.0-dev
 |  
| 96 | 95 |          - libgtk-3-dev
 |  
| ... | ... | @@ -108,7 +107,6 @@ targets: |  
| 108 | 107 |  
 |  
| 109 | 108 |    linux-i686:
 |  
| 110 | 109 |      var:
 |  
| 111 |  | -      martools_filename: mar-tools-linux32.zip
 |  
| 112 | 110 |        sort_deps: 0
 |  
| 113 | 111 |        arch_deps:
 |  
| 114 | 112 |          - libgtk2.0-dev:i386
 |  
| ... | ... | @@ -127,7 +125,6 @@ targets: |  
| 127 | 125 |  
 |  
| 128 | 126 |    macos:
 |  
| 129 | 127 |      var:
 |  
| 130 |  | -      martools_filename: 'mar-tools-macos-[% c("var/macos_arch") %].zip'
 |  
| 131 | 128 |        nightly_updates_publish_dir: '[% c("var/nightly_updates_publish_dir_prefix") %]nightly-macos'
 |  
| 132 | 129 |        arch_deps:
 |  
| 133 | 130 |          - python3
 |  
| ... | ... | @@ -141,14 +138,6 @@ targets: |  
| 141 | 138 |          - python3-distutils
 |  
| 142 | 139 |          - wine
 |  
| 143 | 140 |  
 |  
| 144 |  | -  windows-i686:
 |  
| 145 |  | -    var:
 |  
| 146 |  | -      martools_filename: mar-tools-win32.zip
 |  
| 147 |  | -
 |  
| 148 |  | -  windows-x86_64:
 |  
| 149 |  | -    var:
 |  
| 150 |  | -      martools_filename: mar-tools-win64.zip
 |  
| 151 |  | -
 |  
| 152 | 141 |  input_files:
 |  
| 153 | 142 |    - project: container-image
 |  
| 154 | 143 |    - name: '[% c("var/compiler") %]'
 |  projects/release/dmg2mar
 
 
| ... | ... | @@ -3,6 +3,6 @@ |  
| 3 | 3 |  cd [% shell_quote(path(dest_dir)) %]/[% c("var/signed_status") %]/[%  c("version") %]
 |  
| 4 | 4 |  
 |  
| 5 | 5 |  export TOR_APPNAME_BUNDLE_OSX='[% c("var/Project_Name") -%]'
 |  
| 6 |  | -export TOR_APPNAME_DMGFILE='[% c("var/ProjectName") -%]'
 |  
|  | 6 | +export TOR_APPNAME_DMGFILE='[% c("var/project-name") -%]'
 |  
| 7 | 7 |  export TOR_APPNAME_MARFILE='[% c("var/project-name") -%]'
 |  
| 8 | 8 |  [% shell_quote(c("basedir")) %]/tools/dmg2mar [% c("var/mar_channel_id") %] |  projects/release/update_responses_config.yml
 
 
| ... | ... | @@ -2,6 +2,7 @@ |  
| 2 | 2 |  tmp_dir: '[% c("tmp_dir") %]'
 |  
| 3 | 3 |  create_downloads_json: 1
 |  
| 4 | 4 |  appname_marfile: '[% c("var/project-name") %]'
 |  
|  | 5 | +appname_bundle: '[% c("var/project-name") %]'
 |  
| 5 | 6 |  appname_bundle_android: '[% c("var/project-name") %]'
 |  
| 6 | 7 |  appname_bundle_macos: '[% c("var/ProjectName") %]'
 |  
| 7 | 8 |  appname_bundle_linux: '[% c("var/project-name") %]'
 |  
| ... | ... | @@ -20,13 +21,13 @@ download: |  
| 20 | 21 |      mars_url: 'https://cdn.mullvad.net/browser'
 |  
| 21 | 22 |  [% END -%]
 |  
| 22 | 23 |  build_targets:
 |  
| 23 |  | -    linux32: Linux_x86-gcc3
 |  
| 24 |  | -    linux64: Linux_x86_64-gcc3
 |  
| 25 |  | -    win32:
 |  
|  | 24 | +    linux-i686: Linux_x86-gcc3
 |  
|  | 25 | +    linux-x86_64: Linux_x86_64-gcc3
 |  
|  | 26 | +    windows-i686:
 |  
| 26 | 27 |          - WINNT_x86-gcc3
 |  
| 27 | 28 |          - WINNT_x86-gcc3-x86
 |  
| 28 | 29 |          - WINNT_x86-gcc3-x64
 |  
| 29 |  | -    win64: WINNT_x86_64-gcc3-x64
 |  
|  | 30 | +    windows-x86_64: WINNT_x86_64-gcc3-x64
 |  
| 30 | 31 |      macos:
 |  
| 31 | 32 |        - Darwin_x86_64-gcc3
 |  
| 32 | 33 |        - Darwin_aarch64-gcc3
 |  
| ... | ... | @@ -59,17 +60,17 @@ versions: |  
| 59 | 60 |              # macOS v10.12.0
 |  
| 60 | 61 |              minSupportedOSVersion: 16.0.0
 |  
| 61 | 62 |          # minSupportedOsVersion on Windows corresponds to the operating system version ( https://docs.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version )
 |  
| 62 |  | -        win32:
 |  
|  | 63 | +        windows-i686:
 |  
| 63 | 64 |              # Windows 7
 |  
| 64 | 65 |              minSupportedOSVersion: 6.1
 |  
| 65 | 66 |              minSupportedInstructionSet: SSE2
 |  
| 66 |  | -        win64:
 |  
|  | 67 | +        windows-x86_64:
 |  
| 67 | 68 |              # Windows 7
 |  
| 68 | 69 |              minSupportedOSVersion: 6.1
 |  
| 69 | 70 |              minSupportedInstructionSet: SSE2
 |  
| 70 |  | -        linux32:
 |  
|  | 71 | +        linux-i686:
 |  
| 71 | 72 |              minSupportedInstructionSet: SSE2
 |  
| 72 |  | -        linux64:
 |  
|  | 73 | +        linux-x86_64:
 |  
| 73 | 74 |              minSupportedInstructionSet: SSE2
 |  
| 74 | 75 |  mar_compression: xz
 |  
| 75 | 76 |  tag: 'tbb-[% c("var/torbrowser_version") %]-[% c("var/torbrowser_build") %]'
 |  projects/tor-expert-bundle/config
 
 
| 1 | 1 |  # vim: filetype=yaml sw=2
 |  
| 2 |  | -filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
 |  
|  | 2 | +filename: '[% project %]-[% c("var/osname") %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
 |  
| 3 | 3 |  version: '[% c("var/torbrowser_version") %]'
 |  
| 4 | 4 |  
 |  
| 5 | 5 |  container:
 |  tools/dmg2mar
 
 
| ... | ... | @@ -39,7 +39,7 @@ use Cwd; |  
| 39 | 39 |  # set the application name in the TOR_APPNAME_BUNDLE_OSX,
 |  
| 40 | 40 |  # TOR_APPNAME_DMGFILE and TOR_APPNAME_MARFILE environment variables
 |  
| 41 | 41 |  my $appname = $ENV{TOR_APPNAME_BUNDLE_OSX} // 'Tor Browser';
 |  
| 42 |  | -my $appname_dmg = $ENV{TOR_APPNAME_DMGFILE} // 'TorBrowser';
 |  
|  | 42 | +my $appname_dmg = $ENV{TOR_APPNAME_DMGFILE} // 'tor-browser';
 |  
| 43 | 43 |  my $appname_mar = $ENV{TOR_APPNAME_MARFILE} // 'tor-browser';
 |  
| 44 | 44 |  
 |  
| 45 | 45 |  sub exit_error {
 |  
| ... | ... | @@ -53,10 +53,10 @@ sub osname { |  
| 53 | 53 |      my ($arch) = capture_exec('uname', '-m');
 |  
| 54 | 54 |      chomp($osname, $arch);
 |  
| 55 | 55 |      if ($osname eq 'Linux' && $arch eq 'x86_64') {
 |  
| 56 |  | -        return 'linux64';
 |  
|  | 56 | +        return 'linux-x86_64';
 |  
| 57 | 57 |      }
 |  
| 58 | 58 |      if ($osname eq 'Linux' && $arch =~ m/^i.86$/) {
 |  
| 59 |  | -        return 'linux32';
 |  
|  | 59 | +        return 'linux-i686';
 |  
| 60 | 60 |      }
 |  
| 61 | 61 |      exit_error 'Unknown OS';
 |  
| 62 | 62 |  }
 |  
| ... | ... | @@ -64,7 +64,8 @@ sub osname { |  
| 64 | 64 |  my $martools_tmpdir;
 |  
| 65 | 65 |  sub extract_martools {
 |  
| 66 | 66 |      my $osname = osname;
 |  
| 67 |  | -    my $marzip = getcwd . "/mar-tools-$osname.zip";
 |  
|  | 67 | +    my $marzip = glob(getcwd . "/mar-tools-$osname-*.zip");
 |  
|  | 68 | +    exit_error "Could not find mar-tools zip" unless $marzip;
 |  
| 68 | 69 |      $martools_tmpdir = File::Temp->newdir();
 |  
| 69 | 70 |      my $old_cwd = getcwd;
 |  
| 70 | 71 |      chdir $martools_tmpdir;
 |  
| ... | ... | @@ -97,7 +98,7 @@ sub get_dmg_files_from_sha256sums { |  
| 97 | 98 |          my (undef, $filename) = split '  ', $line;
 |  
| 98 | 99 |          next unless $filename;
 |  
| 99 | 100 |          chomp $filename;
 |  
| 100 |  | -        next unless $filename =~ m/^$appname_dmg-(.+)-macos_(.+)\.dmg$/;
 |  
|  | 101 | +        next unless $filename =~ m/^$appname_dmg-(.+)-macos\.dmg$/;
 |  
| 101 | 102 |          push @files, { filename => $filename, version => $1, lang => $2 };
 |  
| 102 | 103 |      }
 |  
| 103 | 104 |      return @files;
 |  tools/signing/linux-signer-sign-android-apks
 
 
| ... | ... | @@ -73,8 +73,8 @@ cd ~/"$SIGNING_PROJECTNAME-$tbb_version-apks" |  
| 73 | 73 |  
 |  
| 74 | 74 |  # Sign all packages
 |  
| 75 | 75 |  for arch in ${ARCHS}; do
 |  
| 76 |  | -  qa_apk=${projname}-${tbb_version}-android-${arch}-multi-qa.apk
 |  
| 77 |  | -  signed_apk=${projname}-${tbb_version}-android-${arch}-multi.apk
 |  
|  | 76 | +  qa_apk=${projname}-qa-android-${arch}-${tbb_version}.apk
 |  
|  | 77 | +  signed_apk=${projname}-android-${arch}-${tbb_version}.apk
 |  
| 78 | 78 |    sign_apk "$qa_apk" "$signed_apk"
 |  
| 79 | 79 |    verify_apk "$signed_apk"
 |  
| 80 | 80 |    cp -f "$signed_apk" ~/"$SIGNING_PROJECTNAME-$tbb_version"
 |  tools/signing/nightly/sign-nightly
 
 
| ... | ... | @@ -192,11 +192,12 @@ sub fetch_version { |  
| 192 | 192 |  }
 |  
| 193 | 193 |  
 |  
| 194 | 194 |  sub setup_martools {
 |  
| 195 |  | -    my $martools_dir = "$FindBin::Bin/mar-tools-" . get_config('martools_version');
 |  
|  | 195 | +    my $martools_version = get_config('martools_version');
 |  
|  | 196 | +    my $martools_dir = "$FindBin::Bin/mar-tools-" . $martools_version;
 |  
| 196 | 197 |      if (! -d $martools_dir) {
 |  
| 197 |  | -        my $file = "mar-tools-linux64.zip";
 |  
| 198 |  | -        my $url = join('/', get_config('martools_url'),
 |  
| 199 |  | -                            get_config('martools_version'), $file);
 |  
|  | 198 | +        my $martools_url = get_config('martools_url');
 |  
|  | 199 | +        my $file = "mar-tools-linux-x86_64-$martools_version.zip";
 |  
|  | 200 | +        my $url = "$martools_url/$martools_version/$file";
 |  
| 200 | 201 |          my $tmpdir = get_tmpdir();
 |  
| 201 | 202 |          exit_error "Error downloading $url"
 |  
| 202 | 203 |                  unless getstore($url, "$tmpdir/$file") == 200;
 |  tools/update-responses/update_responses
 
 
| ... | ... | @@ -132,19 +132,19 @@ sub get_version_downloads { |  
| 132 | 132 |      opendir(my $d, $vdir) or exit_error "Error opening directory $vdir";
 |  
| 133 | 133 |      foreach my $file (readdir $d) {
 |  
| 134 | 134 |          next unless -f "$vdir/$file";
 |  
| 135 |  | -        my ($os, $lang);
 |  
| 136 |  | -        if ($file =~ m/^$config->{appname_bundle_macos}-$version-macos_(.+).dmg$/) {
 |  
| 137 |  | -            ($os, $lang) = ('macos', $1);
 |  
| 138 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_linux}-(linux32|linux64)-${version}_(.+).tar.xz$/) {
 |  
| 139 |  | -            ($os, $lang) = ($1, $2);
 |  
| 140 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_win64}-${version}_(.+).exe$/) {
 |  
| 141 |  | -            ($os, $lang) = ('win64', $1);
 |  
| 142 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_win32}-${version}_(.+).exe$/) {
 |  
| 143 |  | -            ($os, $lang) = ('win32', $1);
 |  
|  | 135 | +        my $os;
 |  
|  | 136 | +        if ($file =~ m/^$config->{appname_bundle}-macos-$version.dmg$/) {
 |  
|  | 137 | +            $os = 'macos';
 |  
|  | 138 | +        } elsif ($file =~ m/^$config->{appname_bundle}-(linux-i686|linux-x86_64)-${version}.tar.xz$/) {
 |  
|  | 139 | +            $os = $1;
 |  
|  | 140 | +        } elsif ($file =~ m/^$config->{appname_bundle}-windows-x86_64-${version}.exe$/) {
 |  
|  | 141 | +            $os = 'win64';
 |  
|  | 142 | +        } elsif ($file =~ m/^$config->{appname_bundle}-windows-i686-${version}.exe$/) {
 |  
|  | 143 | +            $os = 'win32';
 |  
| 144 | 144 |          } else {
 |  
| 145 | 145 |              next;
 |  
| 146 | 146 |          }
 |  
| 147 |  | -        $downloads->{$os}{$lang} = {
 |  
|  | 147 | +        $downloads->{$os}{ALL} = {
 |  
| 148 | 148 |              binary => "$download_url/$file",
 |  
| 149 | 149 |              sig => "$download_url/$file.asc",
 |  
| 150 | 150 |          };
 |  
| ... | ... | @@ -162,15 +162,13 @@ sub get_perplatform_downloads { |  
| 162 | 162 |      foreach my $file (readdir $d) {
 |  
| 163 | 163 |          next unless -f "$vdir/$file";
 |  
| 164 | 164 |          my $os;
 |  
| 165 |  | -        if ($file =~ m/^$config->{appname_bundle_macos}-$version-macos_(.+).dmg$/) {
 |  
|  | 165 | +        if ($file =~ m/^$config->{appname_bundle}-macos-$version.dmg$/) {
 |  
| 166 | 166 |            $os = 'macos';
 |  
| 167 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_linux}-(linux32|linux64)-${version}_(.+).tar.xz$/) {
 |  
| 168 |  | -          $os = $1 eq 'linux64' ? 'linux-x86_64' : 'linux-i686';
 |  
| 169 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_win64}-${version}_(.+).exe$/) {
 |  
| 170 |  | -          $os = 'windows-x86_64';
 |  
| 171 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_win32}-${version}_(.+).exe$/) {
 |  
| 172 |  | -          $os = 'windows-i686';
 |  
| 173 |  | -        } elsif ($file =~ m/^$config->{appname_bundle_android}-${version}-(android-armv7|android-x86|android-x86_64|android-aarch64)-multi.apk$/) {
 |  
|  | 167 | +        } elsif ($file =~ m/^$config->{appname_bundle}-(linux-i686|linux-86_64)-${version}.tar.xz$/) {
 |  
|  | 168 | +          $os = $1;
 |  
|  | 169 | +        } elsif ($file =~ m/^$config->{appname_bundle}-(windows-i686|windows-86_64)-${version}.exe$/) {
 |  
|  | 170 | +          $os = $1;
 |  
|  | 171 | +        } elsif ($file =~ m/^$config->{appname_bundle}-(android-armv7|android-x86|android-x86_64|android-aarch64)-${version}.apk$/) {
 |  
| 174 | 172 |            $os = $1;
 |  
| 175 | 173 |          } else {
 |  
| 176 | 174 |              next;
 |  
| ... | ... | @@ -475,9 +473,11 @@ sub write_downloads_json { |  
| 475 | 473 |  
 |  
| 476 | 474 |  sub marzip_path {
 |  
| 477 | 475 |      my ($config, $version) = @_;
 |  
| 478 |  | -    for my $osname (qw/linux64 linux32 macos-x86_64 win64 win32/) {
 |  
| 479 |  | -        my $marzip = version_dir($config, $version) . "/mar-tools-$osname.zip";
 |  
| 480 |  | -        return $marzip if -f $marzip;
 |  
|  | 476 | +    for my $osname (qw/linux-x86_64 linux-i686 macos-x86_64 windows-x86_64 windows-i686/) {
 |  
|  | 477 | +        my $marzip = glob(version_dir($config, $version) . "/mar-tools-$osname-*.zip");
 |  
|  | 478 | +        if ($marzip && -f $marzip) {
 |  
|  | 479 | +          return $marzip;
 |  
|  | 480 | +        }
 |  
| 481 | 481 |      }
 |  
| 482 | 482 |      exit_error 'Could not find mar-tools';
 |  
| 483 | 483 |  }
 |  
 |