Index: native_client_sdk/src/tools/create_nmf.py |
diff --git a/native_client_sdk/src/tools/create_nmf.py b/native_client_sdk/src/tools/create_nmf.py |
index aa269dd0b34d21c7373f28442d983825828d3f40..80cd18d24cfedceeb427cbb1f4dadf1ed2854541 100755 |
--- a/native_client_sdk/src/tools/create_nmf.py |
+++ b/native_client_sdk/src/tools/create_nmf.py |
@@ -11,7 +11,7 @@ any shared libraries dependencies that the executables might have. |
import errno |
import json |
-import optparse |
+import argparse |
binji
2014/11/13 23:57:03
sort
Sam Clegg
2014/11/30 17:55:12
Done.
|
import os |
import posixpath |
import shutil |
@@ -158,7 +158,7 @@ class ArchFile(object): |
self.path = path |
self.url = url |
self.arch = arch |
- if not arch: |
+ if arch is None: |
self.arch = ParseElfHeader(path)[0] |
def __repr__(self): |
@@ -402,7 +402,7 @@ class NmfUtils(object): |
def GetManifest(self): |
"""Returns a JSON-formatted dict containing the NaCl dependencies""" |
- if not self.manifest: |
+ if self.manifest is None: |
if self.pnacl: |
self._GeneratePNaClManifest() |
else: |
@@ -465,17 +465,30 @@ def ParseExtraFiles(encoded_list, err): |
return canonicalized |
+def IsValidSDKRoot(directory): |
+ if not os.path.exists(os.path.join(directory, 'toolchain')): |
binji
2014/11/13 23:57:03
just
return os.path.exists(...)
?
Sam Clegg
2014/11/30 17:55:12
Split into seperate CL
|
+ return False |
+ |
+ return True |
+ |
+ |
def GetSDKRoot(): |
"""Determine current NACL_SDK_ROOT, either via the environment variable |
itself, or by attempting to derive it from the location of this script. |
""" |
sdk_root = os.environ.get('NACL_SDK_ROOT') |
- if not sdk_root: |
- sdk_root = os.path.dirname(SCRIPT_DIR) |
- if not os.path.exists(os.path.join(sdk_root, 'toolchain')): |
- return None |
+ if sdk_root: |
binji
2014/11/13 23:57:03
Is this change necessary?
Sam Clegg
2014/11/30 17:55:12
Separate CL
|
+ if not IsValidSDKRoot(sdk_root): |
+ raise Error('Invalid NACL_SDK_ROOT: %s' % sdk_root) |
+ return sdk_root |
- return sdk_root |
+ # If no $NACL_SDK_ROOT set then use the current script location to |
+ # attempt to drive the root. |
binji
2014/11/13 23:57:03
sp: derive
Sam Clegg
2014/11/30 17:55:12
Separate CL
|
+ sdk_root = os.path.dirname(SCRIPT_DIR) |
+ if IsValidSDKRoot(sdk_root): |
+ return sdk_root |
+ |
+ return None |
def FindObjdumpExecutable(): |
@@ -483,7 +496,7 @@ def FindObjdumpExecutable(): |
object dependencies. |
""" |
sdk_root = GetSDKRoot() |
- if not sdk_root: |
+ if sdk_root is None: |
return None |
osname = getos.GetPlatform() |
@@ -508,7 +521,7 @@ def GetDefaultLibPath(config): |
""" |
assert(config in ('Debug', 'Release')) |
sdk_root = GetSDKRoot() |
- if not sdk_root: |
+ if sdk_root is None: |
# TOOD(sbc): output a warning here? We would also need to suppress |
# the warning when run from the chromium build. |
return [] |
@@ -542,59 +555,59 @@ def GetDefaultLibPath(config): |
def main(argv): |
- parser = optparse.OptionParser( |
- usage='Usage: %prog [options] nexe [extra_libs...]', description=__doc__) |
- parser.add_option('-o', '--output', dest='output', |
- help='Write manifest file to FILE (default is stdout)', |
- metavar='FILE') |
- parser.add_option('-D', '--objdump', dest='objdump', |
- help='Override the default "objdump" tool used to find ' |
- 'shared object dependencies', |
- metavar='TOOL') |
- parser.add_option('--no-default-libpath', action='store_true', |
- help="Don't include the SDK default library paths") |
- parser.add_option('--debug-libs', action='store_true', |
- help='Use debug library paths when constructing default ' |
- 'library path.') |
- parser.add_option('-L', '--library-path', dest='lib_path', |
- action='append', default=[], |
- help='Add DIRECTORY to library search path', |
- metavar='DIRECTORY') |
- parser.add_option('-P', '--path-prefix', dest='path_prefix', default='', |
- help='Deprecated. An alias for --lib-prefix.', |
- metavar='DIRECTORY') |
- parser.add_option('-p', '--lib-prefix', dest='lib_prefix', default='', |
- help='A path to prepend to shared libraries in the .nmf', |
- metavar='DIRECTORY') |
- parser.add_option('-N', '--nexe-prefix', dest='nexe_prefix', default='', |
- help='A path to prepend to nexes in the .nmf', |
- metavar='DIRECTORY') |
- parser.add_option('-s', '--stage-dependencies', dest='stage_dependencies', |
- help='Destination directory for staging libraries', |
- metavar='DIRECTORY') |
- parser.add_option('--no-arch-prefix', action='store_true', |
- help='Don\'t put shared libraries in the lib32/lib64 ' |
- 'directories. Instead, they will be put in the same ' |
- 'directory as the .nexe that matches its architecture.') |
- parser.add_option('-t', '--toolchain', help='Legacy option, do not use') |
- parser.add_option('-n', '--name', dest='name', |
- help='Rename FOO as BAR', |
- action='append', default=[], metavar='FOO,BAR') |
- parser.add_option('-x', '--extra-files', |
- help=('Add extra key:file tuple to the "files"' + |
- ' section of the .nmf'), |
- action='append', default=[], metavar='FILE') |
- parser.add_option('-O', '--pnacl-optlevel', |
- help='Set the optimization level to N in PNaCl manifests', |
- metavar='N') |
- parser.add_option('--pnacl-debug-optlevel', |
- help='Set the optimization level to N for debugging ' |
- 'sections in PNaCl manifests', |
- metavar='N') |
- parser.add_option('-v', '--verbose', |
- help='Verbose output', action='store_true') |
- parser.add_option('-d', '--debug-mode', |
- help='Debug mode', action='store_true') |
+ parser = argparse.ArgumentParser(description=__doc__) |
+ parser.add_argument('-o', '--output', dest='output', |
+ help='Write manifest file to FILE (default is stdout)', |
+ metavar='FILE') |
+ parser.add_argument('-D', '--objdump', dest='objdump', |
+ help='Override the default "objdump" tool used to find ' |
+ 'shared object dependencies', |
+ metavar='TOOL') |
+ parser.add_argument('--no-default-libpath', action='store_true', |
+ help="Don't include the SDK default library paths") |
+ parser.add_argument('--debug-libs', action='store_true', |
+ help='Use debug library paths when constructing default ' |
+ 'library path.') |
+ parser.add_argument('-L', '--library-path', dest='lib_path', |
+ action='append', default=[], |
+ help='Add DIRECTORY to library search path', |
+ metavar='DIRECTORY') |
+ parser.add_argument('-P', '--path-prefix', dest='path_prefix', default='', |
+ help='Deprecated. An alias for --lib-prefix.', |
+ metavar='DIRECTORY') |
+ parser.add_argument('-p', '--lib-prefix', dest='lib_prefix', default='', |
+ help='A path to prepend to shared libraries in the .nmf', |
+ metavar='DIRECTORY') |
+ parser.add_argument('-N', '--nexe-prefix', dest='nexe_prefix', default='', |
+ help='A path to prepend to nexes in the .nmf', |
+ metavar='DIRECTORY') |
+ parser.add_argument('-s', '--stage-dependencies', dest='stage_dependencies', |
+ help='Destination directory for staging libraries', |
+ metavar='DIRECTORY') |
+ parser.add_argument('--no-arch-prefix', action='store_true', |
+ help='Don\'t put shared libraries in the lib32/lib64 ' |
+ 'directories. Instead, they will be put in the same ' |
+ 'directory as the .nexe that matches its architecture.') |
+ parser.add_argument('-t', '--toolchain', help='Legacy option, do not use') |
+ parser.add_argument('-n', '--name', dest='name', |
+ help='Rename FOO as BAR', |
+ action='append', default=[], metavar='FOO,BAR') |
+ parser.add_argument('-x', '--extra-files', |
+ help=('Add extra key:file tuple to the "files"' + |
+ ' section of the .nmf'), |
+ action='append', default=[], metavar='FILE') |
+ parser.add_argument('-O', '--pnacl-optlevel', |
+ help='Set the optimization level to N in PNaCl manifests', |
+ metavar='N') |
+ parser.add_argument('--pnacl-debug-optlevel', |
+ help='Set the optimization level to N for debugging ' |
+ 'sections in PNaCl manifests', |
+ metavar='N') |
+ parser.add_argument('-v', '--verbose', |
+ help='Verbose output', action='store_true') |
+ parser.add_argument('-d', '--debug-mode', |
+ help='Debug mode', action='store_true') |
+ parser.add_argument('executables', nargs='+') |
# To enable bash completion for this command first install optcomplete |
# and then add this line to your .bashrc: |
@@ -605,7 +618,7 @@ def main(argv): |
except ImportError: |
pass |
- options, args = parser.parse_args(argv) |
+ options = parser.parse_args(argv) |
if options.verbose: |
Trace.verbose = True |
if options.debug_mode: |
@@ -614,9 +627,6 @@ def main(argv): |
if options.toolchain is not None: |
sys.stderr.write('warning: option -t/--toolchain is deprecated.\n') |
- if len(args) < 1: |
- parser.error('No nexe files specified. See --help for more info') |
- |
canonicalized = ParseExtraFiles(options.extra_files, sys.stderr) |
if canonicalized is None: |
parser.error('Bad --extra-files (-x) argument syntax') |
@@ -661,7 +671,7 @@ def main(argv): |
nmf_root = os.path.dirname(options.output) |
nmf = NmfUtils(objdump=options.objdump, |
- main_files=args, |
+ main_files=options.executables, |
lib_path=options.lib_path, |
extra_files=canonicalized, |
lib_prefix=options.lib_prefix, |
@@ -672,7 +682,7 @@ def main(argv): |
pnacl_debug_optlevel=pnacl_debug_optlevel, |
nmf_root=nmf_root) |
- if not options.output: |
+ if options.output is None: |
sys.stdout.write(nmf.GetJson()) |
else: |
with open(options.output, 'w') as output: |