| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Creates windows and posix stub files for a given set of signatures. | 6 """Creates windows and posix stub files for a given set of signatures. |
| 7 | 7 |
| 8 For libraries that need to be loaded outside of the standard executable startup | 8 For libraries that need to be loaded outside of the standard executable startup |
| 9 path mechanism, stub files need to be generated for the wanted functions. In | 9 path mechanism, stub files need to be generated for the wanted functions. In |
| 10 windows, this is done via "def" files and the delay load mechanism. On a posix | 10 windows, this is done via "def" files and the delay load mechanism. On a posix |
| (...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 | 917 |
| 918 if options.type == FILE_TYPE_POSIX_STUB: | 918 if options.type == FILE_TYPE_POSIX_STUB: |
| 919 if options.stubfile_name is None: | 919 if options.stubfile_name is None: |
| 920 parser.error('Output file name need for %s' % FILE_TYPE_POSIX_STUB) | 920 parser.error('Output file name need for %s' % FILE_TYPE_POSIX_STUB) |
| 921 if options.path_from_source is None: | 921 if options.path_from_source is None: |
| 922 parser.error('Path from source needed for %s' % FILE_TYPE_POSIX_STUB) | 922 parser.error('Path from source needed for %s' % FILE_TYPE_POSIX_STUB) |
| 923 | 923 |
| 924 return options, args | 924 return options, args |
| 925 | 925 |
| 926 | 926 |
| 927 def EnsureDirExists(dir): |
| 928 """Creates a directory. Does not use the more obvious 'if not exists: create' |
| 929 to avoid race with other invocations of the same code, which will error out |
| 930 on makedirs if another invocation has succeeded in creating the directory |
| 931 since the existence check.""" |
| 932 try: |
| 933 os.makedirs(dir) |
| 934 except: |
| 935 if not os.path.isdir(dir): |
| 936 raise |
| 937 |
| 938 |
| 927 def CreateOutputDirectories(options): | 939 def CreateOutputDirectories(options): |
| 928 """Creates the intermediate and final output directories. | 940 """Creates the intermediate and final output directories. |
| 929 | 941 |
| 930 Given the parsed options, create the intermediate and final output | 942 Given the parsed options, create the intermediate and final output |
| 931 directories if they do not exist. Returns the paths to both directories | 943 directories if they do not exist. Returns the paths to both directories |
| 932 as a pair. | 944 as a pair. |
| 933 | 945 |
| 934 Args: | 946 Args: |
| 935 options: An OptionParser.OptionValues object with the parsed options. | 947 options: An OptionParser.OptionValues object with the parsed options. |
| 936 | 948 |
| 937 Returns: | 949 Returns: |
| 938 The pair (out_dir, intermediate_dir), both of which are strings. | 950 The pair (out_dir, intermediate_dir), both of which are strings. |
| 939 """ | 951 """ |
| 940 out_dir = os.path.normpath(options.out_dir) | 952 out_dir = os.path.normpath(options.out_dir) |
| 941 intermediate_dir = os.path.normpath(options.intermediate_dir) | 953 intermediate_dir = os.path.normpath(options.intermediate_dir) |
| 942 if intermediate_dir is None: | 954 if intermediate_dir is None: |
| 943 intermediate_dir = out_dir | 955 intermediate_dir = out_dir |
| 944 | 956 |
| 945 if not os.path.exists(out_dir): | 957 EnsureDirExists(out_dir) |
| 946 os.makedirs(out_dir) | 958 EnsureDirExists(intermediate_dir) |
| 947 if not os.path.exists(intermediate_dir): | |
| 948 os.makedirs(intermediate_dir) | |
| 949 | 959 |
| 950 return out_dir, intermediate_dir | 960 return out_dir, intermediate_dir |
| 951 | 961 |
| 952 | 962 |
| 953 def CreateWindowsLibForSigFiles(sig_files, out_dir, intermediate_dir): | 963 def CreateWindowsLibForSigFiles(sig_files, out_dir, intermediate_dir): |
| 954 """For each signature file, create a windows lib. | 964 """For each signature file, create a windows lib. |
| 955 | 965 |
| 956 Args: | 966 Args: |
| 957 sig_files: Array of Strings with the paths to each signature file. | 967 sig_files: Array of Strings with the paths to each signature file. |
| 958 out_dir: String holding path to directory where the generated libs go. | 968 out_dir: String holding path to directory where the generated libs go. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 if options.type == FILE_TYPE_WIN: | 1054 if options.type == FILE_TYPE_WIN: |
| 1045 CreateWindowsLibForSigFiles(args, out_dir, intermediate_dir) | 1055 CreateWindowsLibForSigFiles(args, out_dir, intermediate_dir) |
| 1046 elif options.type == FILE_TYPE_POSIX_STUB: | 1056 elif options.type == FILE_TYPE_POSIX_STUB: |
| 1047 CreatePosixStubsForSigFiles(args, options.stubfile_name, out_dir, | 1057 CreatePosixStubsForSigFiles(args, options.stubfile_name, out_dir, |
| 1048 intermediate_dir, options.path_from_source, | 1058 intermediate_dir, options.path_from_source, |
| 1049 options.extra_stub_header) | 1059 options.extra_stub_header) |
| 1050 | 1060 |
| 1051 | 1061 |
| 1052 if __name__ == '__main__': | 1062 if __name__ == '__main__': |
| 1053 main() | 1063 main() |
| OLD | NEW |