|
@@ -0,0 +1,98 @@
|
|
|
+from __future__ import with_statement
|
|
|
+import contextlib
|
|
|
+import sys
|
|
|
+import os
|
|
|
+import optparse
|
|
|
+import json
|
|
|
+
|
|
|
+sys.path.append("%s/../../build" % os.path.dirname(os.path.realpath(__file__)))
|
|
|
+
|
|
|
+import find_depot_tools
|
|
|
+from vs_toolchain import \
|
|
|
+ SetEnvironmentAndGetRuntimeDllDirs, \
|
|
|
+ SetEnvironmentAndGetSDKDir, \
|
|
|
+ GetVisualStudioVersion, \
|
|
|
+ NormalizePath
|
|
|
+
|
|
|
+sys.path.append("%s/win_toolchain" % find_depot_tools.add_depot_tools_to_path())
|
|
|
+
|
|
|
+from get_toolchain_if_necessary import CalculateHash
|
|
|
+
|
|
|
+
|
|
|
[email protected]
|
|
|
+def cwd(dir):
|
|
|
+ curdir = os.getcwd()
|
|
|
+ try:
|
|
|
+ os.chdir(dir)
|
|
|
+ yield
|
|
|
+ finally:
|
|
|
+ os.chdir(curdir)
|
|
|
+
|
|
|
+
|
|
|
+def calculate_hash(root):
|
|
|
+ with cwd(root):
|
|
|
+ return CalculateHash('.', None)
|
|
|
+
|
|
|
+def windows_installed_software():
|
|
|
+ import win32com.client
|
|
|
+ strComputer = "."
|
|
|
+ objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
|
|
|
+ objSWbemServices = objWMIService.ConnectServer(strComputer, "root\cimv2")
|
|
|
+ colItems = objSWbemServices.ExecQuery("Select * from Win32_Product")
|
|
|
+ items = []
|
|
|
+
|
|
|
+ for objItem in colItems:
|
|
|
+ item = {}
|
|
|
+ if objItem.Caption:
|
|
|
+ item['caption'] = objItem.Caption
|
|
|
+ if objItem.Caption:
|
|
|
+ item['description'] = objItem.Description
|
|
|
+ if objItem.InstallDate:
|
|
|
+ item['install_date'] = objItem.InstallDate
|
|
|
+ if objItem.InstallDate2:
|
|
|
+ item['install_date_2'] = objItem.InstallDate2
|
|
|
+ if objItem.InstallLocation:
|
|
|
+ item['install_location'] = objItem.InstallLocation
|
|
|
+ if objItem.Name:
|
|
|
+ item['name'] = objItem.Name
|
|
|
+ if objItem.SKUNumber:
|
|
|
+ item['sku_number'] = objItem.SKUNumber
|
|
|
+ if objItem.Vendor:
|
|
|
+ item['vendor'] = objItem.Vendor
|
|
|
+ if objItem.Version:
|
|
|
+ item['version'] = objItem.Version
|
|
|
+ items.append(item)
|
|
|
+
|
|
|
+ return items
|
|
|
+
|
|
|
+
|
|
|
+def windows_profile():
|
|
|
+ runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs()
|
|
|
+ win_sdk_dir = SetEnvironmentAndGetSDKDir()
|
|
|
+ path = NormalizePath(os.environ['GYP_MSVS_OVERRIDE_PATH'])
|
|
|
+
|
|
|
+ return {
|
|
|
+ 'pwd': os.getcwd(), # since current windows executable are symbols path dependant, profile the current directory too
|
|
|
+ 'installed_software': windows_installed_software(),
|
|
|
+ 'sdks': [
|
|
|
+ {'name': 'vs', 'path': path, 'hash': calculate_hash(path)},
|
|
|
+ {'name': 'wsdk', 'path': win_sdk_dir, 'hash': calculate_hash(win_sdk_dir)}
|
|
|
+ ],
|
|
|
+ 'runtime_lib_dirs': runtime_dll_dirs,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+def main(options):
|
|
|
+ if sys.platform == 'win32':
|
|
|
+ with open(options.output_json, 'wb') as f:
|
|
|
+ json.dump(windows_profile(), f)
|
|
|
+ else:
|
|
|
+ raise OSError("Unsupported OS")
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ parser = optparse.OptionParser()
|
|
|
+ parser.add_option('--output-json', metavar='FILE', default='profile.json',
|
|
|
+ help='write information about toolchain to FILE')
|
|
|
+ options, args = parser.parse_args()
|
|
|
+ sys.exit(main(options))
|