Home | History | Annotate | Download | only in linux
      1 #!/usr/bin/env python
      2 # Copyright 2013 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 # Script to install the Chrome OS fonts on Linux.
      7 # This script can be run manually (as root), but is also run as part
      8 # install-build-deps.sh.
      9 
     10 import os
     11 import shutil
     12 import subprocess
     13 import sys
     14 
     15 URL_PREFIX = 'https://commondatastorage.googleapis.com'
     16 URL_DIR = 'chromeos-localmirror/distfiles'
     17 URL_FILE = 'notofonts-20121206.tar.gz'
     18 FONTS_DIR = '/usr/local/share/fonts'
     19 
     20 # The URL matches the URL in the ebuild script in chromiumos. See:
     21 #  /path/to/chromiumos/src/
     22 #  third_party/chromiumos-overlay/media-fonts/notofonts/
     23 #  notofonts-20121206.ebuild
     24 
     25 def main(args):
     26   if not sys.platform.startswith('linux'):
     27     print "Error: %s must be run on Linux." % __file__
     28     return 1
     29 
     30   if os.getuid() != 0:
     31     print "Error: %s must be run as root." % __file__
     32     return 1
     33 
     34   if not os.path.isdir(FONTS_DIR):
     35     print "Error: Destination directory does not exist: %s" % FONTS_DIR
     36     return 1
     37 
     38   dest_dir = os.path.join(FONTS_DIR, 'chromeos')
     39 
     40   url = "%s/%s/%s" % (URL_PREFIX, URL_DIR, URL_FILE)
     41 
     42   stamp = os.path.join(dest_dir, ".stamp02")
     43   if os.path.exists(stamp):
     44     with open(stamp) as s:
     45       if s.read() == url:
     46         print "Chrome OS fonts already up-to-date in %s." % dest_dir
     47         return 0
     48 
     49   if os.path.isdir(dest_dir):
     50     shutil.rmtree(dest_dir)
     51   os.mkdir(dest_dir)
     52   os.chmod(dest_dir, 0755)
     53 
     54   print "Installing Chrome OS fonts to %s." % dest_dir
     55   tarball = os.path.join(dest_dir, URL_FILE)
     56   subprocess.check_call(['curl', '-L', url, '-o', tarball])
     57   subprocess.check_call(['tar', '--no-same-owner', '--no-same-permissions',
     58                          '-xf', tarball, '-C', dest_dir])
     59   os.remove(tarball)
     60 
     61   readme = os.path.join(dest_dir, "README")
     62   with open(readme, 'w') as s:
     63     s.write("This directory and its contents are auto-generated.\n")
     64     s.write("It may be deleted and recreated. Do not modify.\n")
     65     s.write("Script: %s\n" % __file__)
     66 
     67   with open(stamp, 'w') as s:
     68     s.write(url)
     69 
     70   for base, dirs, files in os.walk(dest_dir):
     71     for dir in dirs:
     72       os.chmod(os.path.join(base, dir), 0755)
     73     for file in files:
     74       os.chmod(os.path.join(base, file), 0644)
     75 
     76   return 0
     77 
     78 if __name__ == '__main__':
     79   sys.exit(main(sys.argv[1:]))
     80