- add sources.
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / tools / genhttpfs.py
1 #!/usr/bin/env python
2 # Copyright (c) 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 # This scripts generates a manifest file for the MountHttp file system.
7 # Files and directory paths are specified on the command-line.  The names
8 # with glob and directories are recursed to form a list of files.
9 #
10 # For each file, the mode bits, size and path relative to the CWD are written
11 # to the output file which is stdout by default.
12 #
13
14 import glob
15 import optparse
16 import os
17 import sys
18
19
20 def main(argv):
21   parser = optparse.OptionParser(
22       usage='Usage: %prog [options] filename ...')
23   parser.add_option('-C', '--srcdir',
24                     help='Change directory.', dest='srcdir', default=None)
25   parser.add_option('-o', '--output',
26                     help='Output file name.', dest='output', default=None)
27   parser.add_option('-v', '--verbose',
28                     help='Verbose output.',  dest='verbose',
29                     action='store_true')
30   parser.add_option('-r', '--recursive',
31                     help='Recursive search.', action='store_true')
32   options, args = parser.parse_args(argv)
33
34   if options.output:
35     outfile = open(options.output, 'w')
36   else:
37     outfile = sys.stdout
38
39   if options.srcdir:
40     os.chdir(options.srcdir)
41
42   # Generate a set of unique file names bases on the input globs
43   fileset = set()
44   for fileglob in args:
45     filelist = glob.glob(fileglob)
46     if not filelist:
47       raise RuntimeError('Could not find match for "%s".\n' % fileglob)
48     for filename in filelist:
49       if os.path.isfile(filename):
50         fileset |= set([filename])
51         continue
52       if os.path.isdir(filename) and options.recursive:
53         for root, _, files in os.walk(filename):
54           fileset |= set([os.path.join(root, name) for name in files])
55         continue
56       raise RuntimeError('Can not handle path "%s".\n' % filename)
57
58   cwd = os.path.abspath(os.getcwd())
59   cwdlen = len(cwd)
60   for filename in sorted(fileset):
61     relname = os.path.abspath(filename)
62     if cwd not in relname:
63       raise RuntimeError('%s is not relative to CWD %s.\n' % filename, cwd)
64     relname = relname[cwdlen:]
65     stat = os.stat(filename)
66     mode = '-r--'
67     outfile.write('%s %d %s\n' % (mode, stat.st_size, relname))
68
69   return 0
70
71
72 if __name__ == '__main__':
73   try:
74     sys.exit(main(sys.argv[1:]))
75   except OSError, e:
76     sys.stderr.write('%s: %s\n' % (os.path.basename(__file__), e))
77     sys.exit(1)