[tor-commits] [tor-browser-bundle/master] Bug 12967: Add support for a multi-lingual Tor Browser.

gk at torproject.org gk at torproject.org
Tue Oct 20 20:12:35 UTC 2015


commit 10a8f2badf8294d8a69d9898fee805750789da86
Author: Kathy Brade <brade at pearlcrescent.com>
Date:   Tue Oct 20 11:30:19 2015 -0400

    Bug 12967: Add support for a multi-lingual Tor Browser.
    
    Include all locales (language packs) in one installable package.
    The downloadable file names use "ALL" instead of a locale name, e.g.,
      tor-browser-linux64-5.5a3_ALL.tar.xz
    "ALL" is also used as the locale within the update check URLs.
    Multi-lingual packaging may be disabled by setting MULTI_LINGUAL=0
    inside the versions files (or by removing that variable entirely).
    
    Also, simplify the code that creates the per-locale packages.
---
 gitian/descriptors/linux/gitian-bundle.yml   |  159 +++++++++++++++-----------
 gitian/descriptors/mac/gitian-bundle.yml     |   98 ++++++++++------
 gitian/descriptors/windows/gitian-bundle.yml |  110 ++++++++++--------
 gitian/versions.nightly                      |    4 +
 4 files changed, 224 insertions(+), 147 deletions(-)

diff --git a/gitian/descriptors/linux/gitian-bundle.yml b/gitian/descriptors/linux/gitian-bundle.yml
index 1a6776d..f1d99e9 100644
--- a/gitian/descriptors/linux/gitian-bundle.yml
+++ b/gitian/descriptors/linux/gitian-bundle.yml
@@ -75,10 +75,14 @@ script: |
   cd ..
 
   mkdir -p $OUTDIR/
-  mkdir -p tor-browser/Browser/TorBrowser/Data/Browser/profile.default/extensions/https-everywhere-eff at eff.org
-  mkdir -p tor-browser/Browser/TorBrowser/Data/Browser/profile.meek-http-helper/extensions
-  mkdir -p tor-browser/Browser/TorBrowser/Data/Browser/Caches
-  mkdir -p tor-browser/Browser/TorBrowser/Docs/sources/
+  # When we build with MULTI_LINGUAL=1, the browser will be packaged inside a
+  # directory named tor-browser (instead of tor-browser_en-US). Therefore we
+  # stage everything under tor-browser-stage to avoid a conflict.
+  TB_STAGE_DIR=tor-browser-stage
+  mkdir -p ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions/https-everywhere-eff at eff.org
+  mkdir -p ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.meek-http-helper/extensions
+  mkdir -p ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/Caches
+  mkdir -p ${TB_STAGE_DIR}/Browser/TorBrowser/Docs/sources/
   # Preparing Python for HTTPS-Everywhere.
   unzip -d $INSTDIR python-linux$GBUILD_BITS-utils.zip
   export PATH=$INSTDIR/python/bin:$PATH
@@ -95,7 +99,7 @@ script: |
   mkdir pkg/tmp
   cd pkg/tmp
   unzip ../*.xpi
-  ~/build/dzip.sh ../../../tor-browser/Browser/TorBrowser/Data/Browser/profile.default/extensions/tor-launcher at torproject.org.xpi .
+  ~/build/dzip.sh ../../../${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions/tor-launcher at torproject.org.xpi .
   cd ../../../
   #
   cd torbutton
@@ -105,7 +109,7 @@ script: |
   mkdir pkg/tmp
   cd pkg/tmp
   unzip ../*.xpi
-  ~/build/dzip.sh ../../../tor-browser/Browser/TorBrowser/Data/Browser/profile.default/extensions/torbutton at torproject.org.xpi .
+  ~/build/dzip.sh ../../../${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions/torbutton at torproject.org.xpi .
   cd ../../../
   #
   cd https-everywhere
@@ -124,11 +128,11 @@ script: |
   fi
   # Since 5.0.2 a .xpi for AMO is built, too. We don't need it.
   rm ./pkg/*-amo.xpi
-  cp pkg/*.xpi ../tor-browser/Browser/TorBrowser/Data/Browser/profile.default/extensions/https-everywhere at eff.org.xpi
+  cp pkg/*.xpi ../${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions/https-everywhere at eff.org.xpi
   cd ..
   #
-  cp *.xpi tor-browser/Browser/TorBrowser/Data/Browser/profile.default/extensions/
-  cd tor-browser/Browser/TorBrowser/Data/Browser/profile.default/extensions
+  cp *.xpi ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions/
+  cd ${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions
   mv noscript at noscript.net.xpi {73a6fe31-595d-460b-a920-fcc0f8843232}.xpi
   cd https-everywhere-eff at eff.org/
   unzip ../https-everywhere at eff.org.xpi
@@ -136,27 +140,27 @@ script: |
   cd ~/build
   #
   cd meek/firefox
-  ~/build/dzip.sh ../../tor-browser/Browser/TorBrowser/Data/Browser/profile.meek-http-helper/extensions/meek-http-helper at bamsoftware.com.xpi .
+  ~/build/dzip.sh ../../${TB_STAGE_DIR}/Browser/TorBrowser/Data/Browser/profile.meek-http-helper/extensions/meek-http-helper at bamsoftware.com.xpi .
   cd ~/build/
   #
   # Install fonts.
-  mkdir -p tor-browser/Browser/fonts
+  mkdir -p ${TB_STAGE_DIR}/Browser/fonts
   NOTO_FONTS_HINTED="Arimo-Regular.ttf Arimo-Bold.ttf Arimo-Italic.ttf Arimo-BoldItalic.ttf Cousine-Regular.ttf Tinos-Regular.ttf Tinos-Bold.ttf Tinos-Italic.ttf Tinos-BoldItalic.ttf NotoNaskhArabic-Regular.ttf NotoSansArmenian-Regular.ttf NotoSansBengali-Regular.ttf NotoSansDevanagari-Regular.ttf NotoSansEthiopic-Regular.ttf NotoSansGeorgian-Regular.ttf NotoSansGujarati-Regular.ttf NotoSansGurmukhi-Regular.ttf NotoSansHebrew-Regular.ttf NotoSansKannada-Regular.ttf NotoSansKhmer-Regular.ttf NotoSansLao-Regular.ttf NotoSansMalayalam-Regular.ttf NotoSansMyanmar-Regular.ttf NotoSansOriya-Regular.ttf NotoSansSinhala-Regular.ttf NotoSansTamil-Regular.ttf NotoSansTelugu-Regular.ttf NotoSansThaana-Regular.ttf NotoSansThai-Regular.ttf NotoSansTibetan-Regular.ttf NotoSerifArmenian-Regular.ttf NotoSerifKhmer-Regular.ttf NotoSerifLao-Regular.ttf NotoSerifThai-Regular.ttf"
   for fontfile in $NOTO_FONTS_HINTED; do
-    cp "noto-fonts/hinted/$fontfile" tor-browser/Browser/fonts/
+    cp "noto-fonts/hinted/$fontfile" ${TB_STAGE_DIR}/Browser/fonts/
   done
   NOTO_FONTS_UNHINTED="NotoSansCanadianAboriginal-Regular.ttf NotoSansBuginese-Regular.ttf NotoSansCherokee-Regular.ttf NotoSansMongolian-Regular.ttf NotoSansYi-Regular.ttf"
   for fontfile in $NOTO_FONTS_UNHINTED; do
-    cp "noto-fonts/unhinted/$fontfile" tor-browser/Browser/fonts/
+    cp "noto-fonts/unhinted/$fontfile" ${TB_STAGE_DIR}/Browser/fonts/
   done
-  cp NotoSansCJKsc-Regular.otf tor-browser/Browser/fonts/
+  cp NotoSansCJKsc-Regular.otf ${TB_STAGE_DIR}/Browser/fonts/
   unzip -o STIXv1.1.1-latex.zip -d STIX
-  cp "STIX/Fonts/fonts/opentype/public/stix/STIXMath-Regular.otf" tor-browser/Browser/fonts/
+  cp "STIX/Fonts/fonts/opentype/public/stix/STIXMath-Regular.otf" ${TB_STAGE_DIR}/Browser/fonts/
   #
   unzip relativelink-src.zip
-  cp RelativeLink/* tor-browser/Browser/
+  cp RelativeLink/* ${TB_STAGE_DIR}/Browser/
   #
-  cd tor-browser
+  cd ${TB_STAGE_DIR}
   cp Browser/start-tor-browser.desktop ./
   unzip ~/build/tor-browser-linux$GBUILD_BITS-gbuilt.zip
   cd Browser/TorBrowser
@@ -174,12 +178,23 @@ script: |
   cd ../../..
   #
   # Copy reproducibility info
-  cp versions tor-browser/Browser/TorBrowser/Docs/sources/
-  cp bundle.inputs tor-browser/Browser/TorBrowser/Docs/sources/
-  #
-  cp -a tor-browser tor-browser_en-US
+  cp versions ${TB_STAGE_DIR}/Browser/TorBrowser/Docs/sources/
+  cp bundle.inputs ${TB_STAGE_DIR}/Browser/TorBrowser/Docs/sources/
+
+  # Create en-US or multi-lingual package.
+  PKG_LOCALE="en-US"
+  PKG_DIR="tor-browser_${PKG_LOCALE}"
+  # If we are building a multi-lingual package, use "ALL" in the package name
+  # and as the locale for update purposes. We do not include "ALL" in the name
+  # of the directory that is inside the package (in other words, users will
+  # not see tor-browser_ALL after they install Tor Browser).
+  if [ "z$MULTI_LINGUAL" = "z1" ]; then
+    PKG_LOCALE="ALL"
+    PKG_DIR="tor-browser"
+  fi
+  cp -a ${TB_STAGE_DIR} ${PKG_DIR}
   #
-  pushd tor-browser_en-US/Browser/browser/
+  pushd ${PKG_DIR}/Browser/browser/
   unzip omni.ja defaults/preferences/000-tor-browser.js
   cp defaults/preferences/000-tor-browser.js ~/build/
   # Set the locale of the bundle.
@@ -188,56 +203,72 @@ script: |
   rm -rf defaults
   popd
   #
+  unzip linux-langpacks.zip
+  LINUX_LOCALES="$BUNDLE_LOCALES $BUNDLE_LOCALES_LINUX"
+  # If we are building a multi-lingual package, add all of the language packs.
+  if [ "z$MULTI_LINGUAL" = "z1" ]; then
+    pushd linux-langpacks
+    for LANG in $LINUX_LOCALES
+    do
+      xpi=$LANG.xpi
+      cp $xpi ../${PKG_DIR}/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
+    done
+    popd
+
+    # Set the update.locale (it is used to replace %LOCALE% within
+    # app.update.url).
+    pushd ${PKG_DIR}/Browser/
+    echo ${PKG_LOCALE} > update.locale
+    zip -Xm omni.ja update.locale
+    popd
+  fi
+
   # Recreate precomplete file (needs to be accurate for full MAR updates).
-  pushd tor-browser_en-US/Browser
+  pushd ${PKG_DIR}/Browser
   rm -f precomplete
   python $MARTOOLS/createprecomplete.py
   popd
   #
   # Create full MAR file and compressed package.
-  MAR_FILE=tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_en-US.mar
-  MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE tor-browser_en-US/Browser
-  ~/build/dtar.sh $OUTDIR/tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_en-US.tar.xz tor-browser_en-US
-  rm -rf tor-browser_en-US
+  MAR_FILE=tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_${PKG_LOCALE}.mar
+  MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE ${PKG_DIR}/Browser
+  ~/build/dtar.sh $OUTDIR/tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_${PKG_LOCALE}.tar.xz ${PKG_DIR}
+  rm -rf ${PKG_DIR}
   #
-  unzip linux-langpacks.zip
-  cd linux-langpacks
-  LINUX_LOCALES="$BUNDLE_LOCALES $BUNDLE_LOCALES_LINUX"
-  for LANG in $LINUX_LOCALES
-  do
-    xpi=$LANG.xpi
-    cp -a ../tor-browser ../tor-browser_$LANG
-    cp $xpi ../tor-browser_$LANG/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
-    cd ..
+  # If we did not create a multi-lingual package above, create a package for
+  # each locale.
+  if [ "z$MULTI_LINGUAL" != "z1" ]; then
+    for LANG in $LINUX_LOCALES
+    do
+      xpi=linux-langpacks/$LANG.xpi
+      cp -a ${TB_STAGE_DIR} tor-browser_$LANG
+      cp $xpi tor-browser_$LANG/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
 
-    pushd tor-browser_$LANG/Browser/browser/
-    mkdir -p defaults/preferences
-    cp ~/build/000-tor-browser.js defaults/preferences/
-    # Set the locale of the bundle.
-    echo "pref(\"general.useragent.locale\", \"$LANG\");" >> defaults/preferences/000-tor-browser.js
-    zip -Xm omni.ja defaults/preferences/000-tor-browser.js
-    rm -rf defaults
-    popd
+      pushd tor-browser_$LANG/Browser/browser/
+      mkdir -p defaults/preferences
+      cp ~/build/000-tor-browser.js defaults/preferences/
+      # Set the locale of the bundle.
+      echo "pref(\"general.useragent.locale\", \"$LANG\");" >> defaults/preferences/000-tor-browser.js
+      zip -Xm omni.ja defaults/preferences/000-tor-browser.js
+      rm -rf defaults
+      popd
 
-    # Set the update.locale (it is used to replace %LOCALE% within
-    # app.update.url) and remove the en-US spellchecking dictionary.
-    pushd tor-browser_$LANG/Browser/
-    echo "$LANG" > update.locale
-    zip -Xm omni.ja update.locale
-    rm -rf dictionaries
-    popd
-
-    # Recreate precomplete file (needs to be accurate for full MAR updates).
-    pushd tor-browser_$LANG/Browser
-    rm -f precomplete
-    python $MARTOOLS/createprecomplete.py
-    popd
+      # Set the update.locale (it is used to replace %LOCALE% within
+      # app.update.url), remove the en-US spellchecking dictionary, and
+      # recreate precomplete file (needs to be accurate for full MAR updates).
+      pushd tor-browser_$LANG/Browser/
+      echo "$LANG" > update.locale
+      zip -Xm omni.ja update.locale
+      rm -rf dictionaries
+      rm -f precomplete
+      python $MARTOOLS/createprecomplete.py
+      popd
 
-    # Create full MAR file and compressed package for this locale.
-    MAR_FILE=tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_$LANG.mar
-    MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE tor-browser_$LANG/Browser
-    ~/build/dtar.sh $OUTDIR/tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_$LANG.tar.xz tor-browser_$LANG
+      # Create full MAR file and compressed package for this locale.
+      MAR_FILE=tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_$LANG.mar
+      MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE tor-browser_$LANG/Browser
+      ~/build/dtar.sh $OUTDIR/tor-browser-linux${GBUILD_BITS}-${TORBROWSER_VERSION}_$LANG.tar.xz tor-browser_$LANG
 
-    rm -rf tor-browser_$LANG
-    cd linux-langpacks
-  done
+      rm -rf tor-browser_$LANG
+    done
+  fi
diff --git a/gitian/descriptors/mac/gitian-bundle.yml b/gitian/descriptors/mac/gitian-bundle.yml
index f24e521..e3baa3c 100644
--- a/gitian/descriptors/mac/gitian-bundle.yml
+++ b/gitian/descriptors/mac/gitian-bundle.yml
@@ -203,6 +203,29 @@ script: |
   ~/build/background-plist.py ../../../Contents/Info.plist > TorBrowser.app.meek-http-helper/Contents/Info.plist
   unzip ~/build/TorBrowser.app.meek-http-helper.zip
   popd
+
+  unzip mac-langpacks.zip
+  MAC_LOCALES="$BUNDLE_LOCALES $BUNDLE_LOCALES_MAC"
+  PKG_LOCALE="en-US"
+  # If we are building a multi-lingual package, add all of the language packs
+  # and use "ALL" in the package name and as the locale for update purposes.
+  if [ "z$MULTI_LINGUAL" = "z1" ]; then
+    PKG_LOCALE="ALL"
+    pushd mac-langpacks
+    for LANG in $MAC_LOCALES
+    do
+      xpi=$LANG.xpi
+      cp $xpi ~/build/$TORBROWSER_NAME.app/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
+    done
+    popd
+
+    # Set the update.locale to ALL (it is used to replace %LOCALE% within
+    # app.update.url).
+    pushd ~/build/$TORBROWSER_NAME.app/Contents/Resources/
+    echo $PKG_LOCALE > update.locale
+    zip -Xm omni.ja update.locale
+    popd
+  fi
   #
   # XXX: We need to insert these placeholders because otherwise mkisofs won't
   # include these otherwise empty dirs:
@@ -214,47 +237,46 @@ script: |
   popd
   #
   # Create full MAR file and disk image.
-  MAR_FILE=tor-browser-osx${GBUILD_BITS}-${TORBROWSER_VERSION}_en-US.mar
+  MAR_FILE=tor-browser-osx${GBUILD_BITS}-${TORBROWSER_VERSION}_${PKG_LOCALE}.mar
   MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE ~/build/$TORBROWSER_NAME.app
   cp -a ~/build/$TORBROWSER_NAME.app ~/build/dmg/$TORBROWSER_APP.app
-  ~/build/ddmg.sh $OUTDIR/TorBrowser-${TORBROWSER_VERSION}-osx${GBUILD_BITS}_en-US.dmg ~/build/dmg
+  ~/build/ddmg.sh $OUTDIR/TorBrowser-${TORBROWSER_VERSION}-osx${GBUILD_BITS}_${PKG_LOCALE}.dmg ~/build/dmg
   rm -rf ~/build/dmg/$TORBROWSER_APP.app
   mv $TORBROWSER_NAME.app ${TORBROWSER_NAME}_plain.app
-  #
-  unzip mac-langpacks.zip
-  cd mac-langpacks
-  MAC_LOCALES="$BUNDLE_LOCALES $BUNDLE_LOCALES_MAC"
-  for LANG in $MAC_LOCALES
-  do
-    xpi=$LANG.xpi
-    DEST=$TORBROWSER_APP
-    cp -a ../${TORBROWSER_NAME}_plain.app ~/build/dmg/$DEST.app
-    cp $xpi ~/build/dmg/$DEST.app/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
-    cd ..
 
-    pushd ~/build/dmg/$DEST.app/Contents/Resources/browser/
-    mkdir -p defaults/preferences
-    cp ~/build/000-tor-browser.js defaults/preferences/
-    # Set the locale of the bundle.
-    echo "pref(\"general.useragent.locale\", \"$LANG\");" >> defaults/preferences/000-tor-browser.js
-    zip -Xm omni.ja defaults/preferences/000-tor-browser.js
-    rm -rf defaults
-    popd
+  # If we did not create a multi-lingual package above, create a package for
+  # each locale.
+  if [ "z$MULTI_LINGUAL" != "z1" ]; then
+    for LANG in $MAC_LOCALES
+    do
+      xpi=mac-langpacks/$LANG.xpi
+      DEST=$TORBROWSER_APP
+      cp -a ${TORBROWSER_NAME}_plain.app ~/build/dmg/$DEST.app
+      cp $xpi ~/build/dmg/$DEST.app/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
 
-    # Set the update.locale (it is used to replace %LOCALE% within
-    # app.update.url), remove the en-US spellchecking dictionary, and recreate
-    # the precomplete file (needs to be accurate for full MAR updates).
-    pushd ~/build/dmg/$DEST.app/Contents/Resources/
-    echo "$LANG" > update.locale
-    zip -Xm omni.ja update.locale
-    rm -rf dictionaries
-    rm -f precomplete
-    python $MARTOOLS/createprecomplete.py
-    popd
-    #
-    MAR_FILE=tor-browser-osx${GBUILD_BITS}-${TORBROWSER_VERSION}_$LANG.mar
-    MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE ~/build/dmg/$DEST.app
-     ~/build/ddmg.sh $OUTDIR/TorBrowser-${TORBROWSER_VERSION}-osx${GBUILD_BITS}_$LANG.dmg ~/build/dmg/
-    rm -rf ~/build/dmg/$DEST.app
-    cd mac-langpacks
-  done
+      pushd ~/build/dmg/$DEST.app/Contents/Resources/browser/
+      mkdir -p defaults/preferences
+      cp ~/build/000-tor-browser.js defaults/preferences/
+      # Set the locale of the bundle.
+      echo "pref(\"general.useragent.locale\", \"$LANG\");" >> defaults/preferences/000-tor-browser.js
+      zip -Xm omni.ja defaults/preferences/000-tor-browser.js
+      rm -rf defaults
+      popd
+
+      # Set the update.locale (it is used to replace %LOCALE% within
+      # app.update.url), remove the en-US spellchecking dictionary, and recreate
+      # the precomplete file (needs to be accurate for full MAR updates).
+      pushd ~/build/dmg/$DEST.app/Contents/Resources/
+      echo "$LANG" > update.locale
+      zip -Xm omni.ja update.locale
+      rm -rf dictionaries
+      rm -f precomplete
+      python $MARTOOLS/createprecomplete.py
+      popd
+      #
+      MAR_FILE=tor-browser-osx${GBUILD_BITS}-${TORBROWSER_VERSION}_$LANG.mar
+      MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE ~/build/dmg/$DEST.app
+      ~/build/ddmg.sh $OUTDIR/TorBrowser-${TORBROWSER_VERSION}-osx${GBUILD_BITS}_$LANG.dmg ~/build/dmg/
+      rm -rf ~/build/dmg/$DEST.app
+    done
+  fi
diff --git a/gitian/descriptors/windows/gitian-bundle.yml b/gitian/descriptors/windows/gitian-bundle.yml
index b54d562..eac3345 100644
--- a/gitian/descriptors/windows/gitian-bundle.yml
+++ b/gitian/descriptors/windows/gitian-bundle.yml
@@ -154,6 +154,30 @@ script: |
   # Copy reproducibility info
   cp ../versions "Tor Browser"/Browser/TorBrowser/Docs/sources/
   cp ../bundle.inputs "Tor Browser"/Browser/TorBrowser/Docs/sources/
+
+  unzip ../win32-langpacks.zip
+  WIN32_LOCALES="$BUNDLE_LOCALES $BUNDLE_LOCALES_WIN32"
+  PKG_LOCALE="en-US"
+  # If we are building a multi-lingual package, add all of the language packs
+  # and use "ALL" in the package name and as the locale for update purposes.
+  if [ "z$MULTI_LINGUAL" = "z1" ]; then
+    PKG_LOCALE="ALL"
+    pushd win32-langpacks
+    for LANG in $WIN32_LOCALES
+    do
+      xpi=$LANG.xpi
+      cp $xpi ../"Tor Browser"/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
+    done
+    popd
+
+    # Set the update.locale to ALL (it is used to replace %LOCALE% within
+    # app.update.url).
+    pushd "Tor Browser"/Browser/
+    echo $PKG_LOCALE > update.locale
+    zip -Xm omni.ja update.locale
+    popd
+  fi
+
   #
   pushd "Tor Browser"/Browser/browser/
   unzip omni.ja defaults/preferences/000-tor-browser.js
@@ -173,7 +197,7 @@ script: |
   # Create full MAR file and installer.
   # Strangely, mbsdiff is linked as mbsdiff.exe even though it is a host
   # (e.g., Linux) executable.
-  MAR_FILE=tor-browser-win32-${TORBROWSER_VERSION}_en-US.mar
+  MAR_FILE=tor-browser-win32-${TORBROWSER_VERSION}_${PKG_LOCALE}.mar
   MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff.exe $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE "Tor Browser"/Browser
   makensis torbrowser.nsi
   # Working around NSIS braindamage
@@ -181,51 +205,47 @@ script: |
   python ~/build/pe_checksum_fix.py
   mv torbrowser-install-tmp2.exe torbrowser-install.exe
   rm torbrowser-install-tmp.exe
-  mv torbrowser-install.exe $OUTDIR/torbrowser-install-${TORBROWSER_VERSION}_en-US.exe
-  #
-  unzip ../win32-langpacks.zip
-  cd win32-langpacks
-  WIN32_LOCALES="$BUNDLE_LOCALES $BUNDLE_LOCALES_WIN32"
-  for LANG in $WIN32_LOCALES
-  do
-    xpi=$LANG.xpi
-    cp $xpi ../"Tor Browser"/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
-    cd ..
+  mv torbrowser-install.exe $OUTDIR/torbrowser-install-${TORBROWSER_VERSION}_${PKG_LOCALE}.exe
 
-    pushd "Tor Browser"/Browser/browser/
-    mkdir -p defaults/preferences
-    cp ~/build/000-tor-browser.js defaults/preferences/
-    echo "pref(\"general.useragent.locale\", \"$LANG\");" >> defaults/preferences/000-tor-browser.js
-    zip -Xm omni.ja defaults/preferences/000-tor-browser.js
-    rm -rf defaults
-    popd
+  # If we did not create a multi-lingual package above, create a package for
+  # each locale.
+  if [ "z$MULTI_LINGUAL" != "z1" ]; then
+    for LANG in $WIN32_LOCALES
+    do
+      xpi=win32-langpacks/$LANG.xpi
+      cp $xpi "Tor Browser"/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
 
-    # Set the update.locale (it is used to replace %LOCALE% within
-    # app.update.url) and remove the en-US spellchecking dictionary.
-    pushd "Tor Browser"/Browser/
-    echo "$LANG" > update.locale
-    zip -Xm omni.ja update.locale
-    rm -rf dictionaries
-    popd
+      pushd "Tor Browser"/Browser/browser/
+      mkdir -p defaults/preferences
+      cp ~/build/000-tor-browser.js defaults/preferences/
+      echo "pref(\"general.useragent.locale\", \"$LANG\");" >> defaults/preferences/000-tor-browser.js
+      zip -Xm omni.ja defaults/preferences/000-tor-browser.js
+      rm -rf defaults
+      popd
 
-    # Recreate precomplete file (needs to be accurate for full MAR updates).
-    pushd "Tor Browser"/Browser/
-    rm -f precomplete
-    python $MARTOOLS/createprecomplete.py
-    popd
+      # Set the update.locale (it is used to replace %LOCALE% within
+      # app.update.url), remove the en-US spellchecking dictionary, and
+      # recreate precomplete file (needs to be accurate for full MAR updates).
+      pushd "Tor Browser"/Browser/
+      echo "$LANG" > update.locale
+      zip -Xm omni.ja update.locale
+      rm -rf dictionaries
+      rm -f precomplete
+      python $MARTOOLS/createprecomplete.py
+      popd
 
-    # Create full MAR file and installer for this locale.
-    # Strangely, mbsdiff is linked as mbsdiff.exe even though it is a host
-    # (e.g., Linux) executable.
-    MAR_FILE=tor-browser-win32-${TORBROWSER_VERSION}_$LANG.mar
-    MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff.exe $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE "Tor Browser"/Browser
-    makensis torbrowser.nsi
-    # Working around NSIS braindamage
-    mv torbrowser-install.exe torbrowser-install-tmp.exe
-    python ~/build/pe_checksum_fix.py
-    mv torbrowser-install-tmp2.exe torbrowser-install.exe
-    rm torbrowser-install-tmp.exe
-    mv torbrowser-install.exe $OUTDIR/torbrowser-install-${TORBROWSER_VERSION}_$LANG.exe
-    rm "Tor Browser"/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
-    cd win32-langpacks
-  done
+      # Create full MAR file and installer for this locale.
+      # Strangely, mbsdiff is linked as mbsdiff.exe even though it is a host
+      # (e.g., Linux) executable.
+      MAR_FILE=tor-browser-win32-${TORBROWSER_VERSION}_$LANG.mar
+      MAR=$MARTOOLS/mar MBSDIFF=$MARTOOLS/mbsdiff.exe $MARTOOLS/make_full_update.sh -q $OUTDIR/$MAR_FILE "Tor Browser"/Browser
+      makensis torbrowser.nsi
+      # Working around NSIS braindamage
+      mv torbrowser-install.exe torbrowser-install-tmp.exe
+      python ~/build/pe_checksum_fix.py
+      mv torbrowser-install-tmp2.exe torbrowser-install.exe
+      rm torbrowser-install-tmp.exe
+      mv torbrowser-install.exe $OUTDIR/torbrowser-install-${TORBROWSER_VERSION}_$LANG.exe
+      rm "Tor Browser"/Browser/TorBrowser/Data/Browser/profile.default/extensions/langpack-$LANG at firefox.mozilla.org.xpi
+    done
+  fi
diff --git a/gitian/versions.nightly b/gitian/versions.nightly
index 04d2214..4e8cd42 100755
--- a/gitian/versions.nightly
+++ b/gitian/versions.nightly
@@ -8,6 +8,10 @@ BUNDLE_LOCALES_WIN32="ja"
 BUNDLE_LOCALES_MAC="ja-JP-mac"
 BUILD_PT_BUNDLES=1
 
+# If you remove MULTI_LINGUAL=1, be sure to use a version of Tor Launcher
+# that does not include the language prompt.
+MULTI_LINGUAL=1
+
 VERIFY_TAGS=0
 
 FIREFOX_VERSION=38.3.0esr



More information about the tor-commits mailing list