Help menu!
[blender.git] / release / scripts / sysinfo.py
1 #!BPY
2 """
3 Name: 'System Information...'
4 Blender: 234
5 Group: 'HelpSystem'
6 Tooltip: 'Information about your Blender environment, useful to diagnose problems.'
7 """
8
9 # $Id$
10 #
11 # --------------------------------------------------------------------------
12 # sysinfo.py version 0.1 Jun 09, 2004
13 # --------------------------------------------------------------------------
14 # ***** BEGIN GPL LICENSE BLOCK *****
15 #
16 # Copyright (C) 2004: Willian P. Germano, wgermano _at_ ig.com.br
17 #
18 # This program is free software; you can redistribute it and/or
19 # modify it under the terms of the GNU General Public License
20 # as published by the Free Software Foundation; either version 2
21 # of the License, or (at your option) any later version.
22 #
23 # This program is distributed in the hope that it will be useful,
24 # but WITHOUT ANY WARRANTY; without even the implied warranty of
25 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26 # GNU General Public License for more details.
27 #
28 # You should have received a copy of the GNU General Public License
29 # along with this program; if not, write to the Free Software Foundation,
30 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
31 #
32 # ***** END GPL LICENCE BLOCK *****
33 # --------------------------------------------------------------------------
34
35 import Blender
36 from Blender.BGL import *
37 import sys
38
39 Blender.Window.WaitCursor(1)
40 # has_textwrap = 1 # see commented code below
41 output_filename = "system-info.txt"
42 warnings = 0
43
44 def cutPoint(text, length):
45   "Returns position of the last space found before 'length' chars"
46   l = length
47   c = text[l]
48   while c != ' ':
49     l -= 1
50     if l == 0: return length # no space found
51     c = text[l]
52   return l
53
54 def textWrap(text, length = 70):
55   lines = []
56   while len(text) > 70:
57     cpt = cutPoint(text, length)
58     line, text = text[:cpt], text[cpt + 1:]
59     lines.append(line)
60   lines.append(text)
61   return lines
62
63 ## Better use our own text wrap functions here
64 #try:
65 #  import textwrap
66 #except:
67 #  has_textwrap = 0
68 #  msg = sys.exc_info()[1].__str__().split()[3]
69 #  Blender.Draw.PupMenu("Python error:|This script requires the %s module" %msg)
70
71 header = "=  Blender %s System Information  =" % Blender.Get("version")
72 lilies = len(header)*"="+"\n"
73 header = lilies + header + "\n" + lilies
74
75 output = Blender.Text.New(output_filename)
76
77 output.write(header + "\n\n")
78
79 output.write("Platform: %s\n========\n\n" % sys.platform)
80
81 output.write("Python:\n======\n\n")
82 output.write("- Version: %s\n\n" % sys.version)
83 output.write("- Path:\n\n")
84 for p in sys.path:
85   output.write(p + '\n')
86
87 output.write("\n- Default folder for registered scripts:\n\n")
88 scriptsdir = Blender.Get("datadir")
89 if scriptsdir:
90   scriptsdir = scriptsdir.replace("/bpydata","/scripts")
91   output.write(scriptsdir)
92 else:
93   output.write("<WARNING> -- not found")
94   warnings += 1
95
96 missing_mods = [] # missing basic modules
97
98 try:
99   from mod_blender import basic_modules
100   for m in basic_modules:
101     try: exec ("import %s" % m)
102     except: missing_mods.append(m)
103
104   if missing_mods:
105     output.write("\n\n<WARNING>:\n\nSome expected modules were not found.\n")
106     output.write("Because of that some scripts bundled with Blender may not work.\n")
107     output.write("Please read the FAQ in the Readme.html file shipped with Blender\n")
108     output.write("for information about how to fix the problem.\n\n") 
109     output.write("The missing modules:\n")
110     warnings += 1
111     for m in missing_mods:
112       output.write('-> ' + m + '\n')
113   else:
114     output.write("\n\n- Modules: all basic ones were found.\n")
115
116 except:
117   output.write("\n\n<WARNING>:\nCouldn't find mod_blender.py in scripts dir.")
118   output.write("\nBasic modules availability won't be tested.\n")
119   warnings += 1
120
121
122 output.write("\nOpenGL:\n======\n\n")
123 output.write("- Renderer: %s\n" % glGetString(GL_RENDERER))
124 output.write("- Vendor:   %s\n" % glGetString(GL_VENDOR))
125 output.write("- Version:  %s\n\n" % glGetString(GL_VERSION))
126 output.write("- Extensions:\n\n")
127
128 glext = glGetString(GL_EXTENSIONS)
129 glext = textWrap(glext, 70)
130
131 for l in glext:
132   output.write(l + "\n")
133
134 output.write("\n\n- Simplistic almost useless benchmark:\n\n")
135 t = Blender.sys.time()
136 nredraws = 10
137 for i in range(nredraws):
138   Blender.Redraw(-1) # redraw all windows
139 result = str(Blender.sys.time() - t)
140 output.write("Redrawing all areas %s times took %s seconds.\n" % (nredraws, result))
141
142 if (warnings):
143   output.write("\n(*) Found %d warning" % warnings)
144   if (warnings > 1): output.write("s") # (blush)
145   output.write(", documented in the text above.")
146 else: output.write("\n==\nNo problems were found.")
147
148 Blender.Window.WaitCursor(0)
149 exitmsg = "Done!|Please check the text %s in the Text Editor window" % output.name
150 Blender.Draw.PupMenu(exitmsg)