diff options
Diffstat (limited to 'o3d/installer')
19 files changed, 2324 insertions, 0 deletions
diff --git a/o3d/installer/mac/O3D_Stats/English.lproj/InfoPlist.strings b/o3d/installer/mac/O3D_Stats/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..a03f1e5 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/English.lproj/InfoPlist.strings @@ -0,0 +1,5 @@ +/* Localized versions of Info.plist keys */ + + +NSHumanReadableCopyright = "© Google Inc, 2009"; +InstallerSectionTitle = "Statistics"; diff --git a/o3d/installer/mac/O3D_Stats/English.lproj/Localizable.strings b/o3d/installer/mac/O3D_Stats/English.lproj/Localizable.strings new file mode 100644 index 0000000..3aef4d4 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/English.lproj/Localizable.strings @@ -0,0 +1,3 @@ +/* Localized versions of Info.plist keys */ + +"PaneTitle" = "Statistics"; diff --git a/o3d/installer/mac/O3D_Stats/English.lproj/O3D_Stats.xib b/o3d/installer/mac/O3D_Stats/English.lproj/O3D_Stats.xib new file mode 100644 index 0000000..e5302b2 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/English.lproj/O3D_Stats.xib @@ -0,0 +1,586 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> + <data> + <int key="IBDocument.SystemTarget">0</int> + <string key="IBDocument.SystemVersion">9G55</string> + <string key="IBDocument.InterfaceBuilderVersion">677</string> + <string key="IBDocument.AppKitVersion">949.43</string> + <string key="IBDocument.HIToolboxVersion">353.00</string> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="8"/> + </object> + <object class="NSArray" key="IBDocument.PluginDependencies"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="995885815"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="533019728"> + <string key="NSClassName">InstallerSection</string> + </object> + <object class="NSCustomObject" id="304932500"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="521373648"> + <string key="NSClassName">O3D_StatsPane</string> + </object> + <object class="NSCustomView" id="878039515"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="566423633"> + <reference key="NSNextResponder" ref="878039515"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{17, 282}, {384, 28}}</string> + <reference key="NSSuperview" ref="878039515"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="809567365"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">272629760</int> + <string key="NSContents">Help us improve O3D</string> + <object class="NSFont" key="NSSupport" id="316557201"> + <string key="NSName">LucidaGrande-Bold</string> + <double key="NSSize">1.300000e+01</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="566423633"/> + <object class="NSColor" key="NSBackgroundColor" id="222943333"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor" id="20271656"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + </object> + <object class="NSTextField" id="760275755"> + <reference key="NSNextResponder" ref="878039515"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{17, 217}, {384, 57}}</string> + <reference key="NSSuperview" ref="878039515"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="386271124"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">272629760</int> + <string key="NSContents">When you enable statistics, non-personal technical data will be automatically sent to Google to help us improve O3D.</string> + <object class="NSFont" key="NSSupport" id="223084996"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.300000e+01</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="760275755"/> + <reference key="NSBackgroundColor" ref="222943333"/> + <reference key="NSTextColor" ref="20271656"/> + </object> + </object> + <object class="NSMatrix" id="1021698340"> + <reference key="NSNextResponder" ref="878039515"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{119, 130}, {190, 64}}</string> + <reference key="NSSuperview" ref="878039515"/> + <bool key="NSEnabled">YES</bool> + <int key="NSNumRows">2</int> + <int key="NSNumCols">1</int> + <object class="NSMutableArray" key="NSCells"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSButtonCell" id="1007645086"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Enable statistics</string> + <reference key="NSSupport" ref="223084996"/> + <int key="NSTag">1</int> + <reference key="NSControlView" ref="1021698340"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">128</int> + <object class="NSButtonImageSource" key="NSAlternateImage" id="899163449"> + <string key="NSImageName">NSRadioButton</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + <object class="NSButtonCell" id="291237987"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Disable statistics</string> + <reference key="NSSupport" ref="223084996"/> + <reference key="NSControlView" ref="1021698340"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">128</int> + <object class="NSImage" key="NSNormalImage"> + <int key="NSImageFlags">549453824</int> + <string key="NSSize">{18, 18}</string> + <object class="NSMutableArray" key="NSReps"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="0" id="8"/> + <object class="NSBitmapImageRep"> + <object class="NSData" key="NSTIFFRepresentation"> + <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw +IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ +29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 +dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA +AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG +AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ +0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ +7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ +5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ +3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD +AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns +AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ +6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ +/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ +///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl +YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA +AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD +AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu +AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB +AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES +AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABBxwAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS +AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw +cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAPbWAAEAAAAA0y1hcHBs2U706y3Sst1fqit5+wYbUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA +AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA +BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA +AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA +AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 +cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD +AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH +SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF +hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 +vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt +7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq +Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo +aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e +n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX +2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW +FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O +Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 +ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt +rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA +AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA +AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl +A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq +DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU +HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 +MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v +UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ +eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj +rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn +5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh +AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK +CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY +GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 +MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S +UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 +d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV +pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK +0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// +AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw +BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA +FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H +LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh +Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ +h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp +svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb +1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX +8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE +AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg +QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> + </object> + </object> + </object> + </object> + <object class="NSColor" key="NSColor" id="440852265"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MCAwAA</bytes> + </object> + </object> + <reference key="NSAlternateImage" ref="899163449"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <string key="NSCellSize">{190, 31}</string> + <string key="NSIntercellSpacing">{4, 2}</string> + <int key="NSMatrixFlags">1151868928</int> + <string key="NSCellClass">NSActionCell</string> + <object class="NSButtonCell" key="NSProtoCell" id="916470276"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Radio</string> + <reference key="NSSupport" ref="223084996"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">128</int> + <object class="NSImage" key="NSNormalImage"> + <int key="NSImageFlags">549453824</int> + <string key="NSSize">{18, 18}</string> + <object class="NSMutableArray" key="NSReps"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="8"/> + <object class="NSBitmapImageRep"> + <object class="NSData" key="NSTIFFRepresentation"> + <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw +IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ +29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 +dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA +AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG +AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ +0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ +7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ +5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ +3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD +AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns +AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ +6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ +/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ +///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl +YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA +AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD +AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu +AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB +AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES +AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABBxwAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS +AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> + </object> + </object> + </object> + </object> + <reference key="NSColor" ref="440852265"/> + </object> + <reference key="NSAlternateImage" ref="899163449"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + <reference key="NSSelectedCell" ref="1007645086"/> + <reference key="NSBackgroundColor" ref="222943333"/> + <object class="NSColor" key="NSCellBackgroundColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MQA</bytes> + </object> + <reference key="NSFont" ref="316557201"/> + </object> + </object> + <string key="NSFrameSize">{418, 330}</string> + <reference key="NSSuperview"/> + <object class="NSMutableString" key="NSClassName"> + <characters key="NS.bytes">NSView</characters> + </object> + <string key="NSExtension">NSResponder</string> + </object> + <object class="NSCustomObject" id="330240596"> + <string key="NSClassName">NSApplication</string> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">firstPane</string> + <reference key="source" ref="533019728"/> + <reference key="destination" ref="521373648"/> + </object> + <int key="connectionID">6</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">parentSection</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="533019728"/> + </object> + <int key="connectionID">7</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">contentView</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="878039515"/> + </object> + <int key="connectionID">9</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">statsOnRadio</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="1007645086"/> + </object> + <int key="connectionID">19</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">statsOffRadio</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="291237987"/> + </object> + <int key="connectionID">20</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">statsRadioMatrix</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="1021698340"/> + </object> + <int key="connectionID">21</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">statsOnRadio_</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="1007645086"/> + </object> + <int key="connectionID">22</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">statsOffRadio_</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="291237987"/> + </object> + <int key="connectionID">23</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">statsRadioMatrix_</string> + <reference key="source" ref="521373648"/> + <reference key="destination" ref="1021698340"/> + </object> + <int key="connectionID">24</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <object class="NSArray" key="object" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <reference key="children" ref="995885815"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="533019728"/> + <reference key="parent" ref="0"/> + <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="304932500"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">5</int> + <reference key="object" ref="521373648"/> + <reference key="parent" ref="0"/> + <string key="objectName">O3D_StatsPane</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">8</int> + <reference key="object" ref="878039515"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="566423633"/> + <reference ref="760275755"/> + <reference ref="1021698340"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">View</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="330240596"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">11</int> + <reference key="object" ref="566423633"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="809567365"/> + </object> + <reference key="parent" ref="878039515"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">12</int> + <reference key="object" ref="809567365"/> + <reference key="parent" ref="566423633"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">13</int> + <reference key="object" ref="760275755"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="386271124"/> + </object> + <reference key="parent" ref="878039515"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">14</int> + <reference key="object" ref="386271124"/> + <reference key="parent" ref="760275755"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">15</int> + <reference key="object" ref="1021698340"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="916470276"/> + <reference ref="291237987"/> + <reference ref="1007645086"/> + </object> + <reference key="parent" ref="878039515"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">16</int> + <reference key="object" ref="916470276"/> + <reference key="parent" ref="1021698340"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">17</int> + <reference key="object" ref="291237987"/> + <reference key="parent" ref="1021698340"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">18</int> + <reference key="object" ref="1007645086"/> + <reference key="parent" ref="1021698340"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>-1.IBPluginDependency</string> + <string>-2.IBPluginDependency</string> + <string>-3.IBPluginDependency</string> + <string>11.IBPluginDependency</string> + <string>12.IBPluginDependency</string> + <string>13.IBPluginDependency</string> + <string>14.IBPluginDependency</string> + <string>15.IBPluginDependency</string> + <string>16.IBPluginDependency</string> + <string>17.IBPluginDependency</string> + <string>18.IBPluginDependency</string> + <string>5.IBPluginDependency</string> + <string>5.ImportedFromIB2</string> + <string>8.IBEditorWindowLastContentRect</string> + <string>8.IBPluginDependency</string> + <string>8.ImportedFromIB2</string> + <string>8.editorWindowContentRectSynchronizationRect</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1" id="5"/> + <string>{{336, 964}, {418, 330}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="5"/> + <string>{{467, 510}, {418, 330}}</string> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">24</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">O3D_StatsPane</string> + <string key="superclassName">InstallerPane</string> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>statsOffRadio_</string> + <string>statsOnRadio_</string> + <string>statsRadioMatrix_</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSButtonCell</string> + <string>NSButtonCell</string> + <string>NSMatrix</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">O3D_StatsPane.h</string> + </object> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.LastKnownRelativeProjectPath">../O3D_Stats.xcodeproj</string> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + </data> +</archive> diff --git a/o3d/installer/mac/O3D_Stats/Info.plist b/o3d/installer/mac/O3D_Stats/Info.plist new file mode 100644 index 0000000..181fd45 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/Info.plist @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>com.google.${PRODUCT_NAME:identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundlePackageType</key> + <string>BNDL</string> + <key>CFBundleShortVersionString</key> + <string>4.0</string> + <key>CFBundleSignature</key> + <string>O3Di</string> + <key>CFBundleVersion</key> + <string>2.0</string> + <key>InstallerSectionTitle</key> + <string>Statistics</string> + <key>NSMainNibFile</key> + <string>O3D_Stats</string> + <key>NSPrincipalClass</key> + <string>InstallerSection</string> +</dict> +</plist> diff --git a/o3d/installer/mac/O3D_Stats/InstallerSections.plist b/o3d/installer/mac/O3D_Stats/InstallerSections.plist new file mode 100644 index 0000000..0c840f8 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/InstallerSections.plist @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>SectionOrder</key> + <array> + <string>Introduction</string> + <string>ReadMe</string> + <string>License</string> + <string>O3D_Stats.bundle</string> + <string>Target</string> + <string>PackageSelection</string> + <string>Install</string> + </array> +</dict> +</plist> diff --git a/o3d/installer/mac/O3D_Stats/O3D_Stats.xcodeproj/project.pbxproj b/o3d/installer/mac/O3D_Stats/O3D_Stats.xcodeproj/project.pbxproj new file mode 100644 index 0000000..961c1c7 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/O3D_Stats.xcodeproj/project.pbxproj @@ -0,0 +1,291 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; + B40F7FFC06739E1B0053A16B /* InstallerPlugins.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B40F7FFB06739E1B0053A16B /* InstallerPlugins.framework */; }; + B44C200B06739AE500D31AA1 /* O3D_StatsPane.m in Sources */ = {isa = PBXBuildFile; fileRef = B44C200906739AE500D31AA1 /* O3D_StatsPane.m */; }; + B47CF355067B4E030066DBF6 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B47CF353067B4E030066DBF6 /* Localizable.strings */; }; + EE3F05FC0DD294BA00EA504A /* O3D_Stats.xib in Resources */ = {isa = PBXBuildFile; fileRef = EE3F05FA0DD294BA00EA504A /* O3D_Stats.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; + 32DBCF630370AF2F00C91783 /* O3D_Stats_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = O3D_Stats_Prefix.pch; sourceTree = "<group>"; }; + 8D5B49B6048680CD000E48DA /* O3D_Stats.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = O3D_Stats.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + B40F7FFB06739E1B0053A16B /* InstallerPlugins.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InstallerPlugins.framework; path = /System/Library/Frameworks/InstallerPlugins.framework; sourceTree = "<absolute>"; }; + B44C200806739AE500D31AA1 /* O3D_StatsPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = O3D_StatsPane.h; sourceTree = "<group>"; }; + B44C200906739AE500D31AA1 /* O3D_StatsPane.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = O3D_StatsPane.m; sourceTree = "<group>"; }; + B47CF354067B4E030066DBF6 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; }; + B4A6B2A60673D523003CD9B2 /* InstallerSections.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = InstallerSections.plist; sourceTree = "<group>"; }; + EE3F05FB0DD294BA00EA504A /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/O3D_Stats.xib; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + B40F7FFC06739E1B0053A16B /* InstallerPlugins.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* InstallerPlugin */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = InstallerPlugin; + sourceTree = "<group>"; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = "<group>"; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + EE3F05FA0DD294BA00EA504A /* O3D_Stats.xib */, + B47CF353067B4E030066DBF6 /* Localizable.strings */, + B4A6B2A60673D523003CD9B2 /* InstallerSections.plist */, + 8D5B49B7048680CD000E48DA /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + B44C200906739AE500D31AA1 /* O3D_StatsPane.m */, + B44C200806739AE500D31AA1 /* O3D_StatsPane.h */, + ); + name = Classes; + sourceTree = "<group>"; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + B40F7FFB06739E1B0053A16B /* InstallerPlugins.framework */, + ); + name = "Linked Frameworks"; + sourceTree = "<group>"; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C1672FE841209C02AAC07 /* Foundation.framework */, + 089C167FFE841241C02AAC07 /* AppKit.framework */, + ); + name = "Other Frameworks"; + sourceTree = "<group>"; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* O3D_Stats.bundle */, + ); + name = Products; + sourceTree = "<group>"; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* O3D_Stats_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* O3D_Stats */ = { + isa = PBXNativeTarget; + buildConfigurationList = B44174E608BA33C40065BEDE /* Build configuration list for PBXNativeTarget "O3D_Stats" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = O3D_Stats; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = InstallerPlugin; + productReference = 8D5B49B6048680CD000E48DA /* O3D_Stats.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = B44174EA08BA33C40065BEDE /* Build configuration list for PBXProject "O3D_Stats" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* InstallerPlugin */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D5B49AC048680CD000E48DA /* O3D_Stats */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */, + B47CF355067B4E030066DBF6 /* Localizable.strings in Resources */, + EE3F05FC0DD294BA00EA504A /* O3D_Stats.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B44C200B06739AE500D31AA1 /* O3D_StatsPane.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; + B47CF353067B4E030066DBF6 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + B47CF354067B4E030066DBF6 /* English */, + ); + name = Localizable.strings; + sourceTree = "<group>"; + }; + EE3F05FA0DD294BA00EA504A /* O3D_Stats.xib */ = { + isa = PBXVariantGroup; + children = ( + EE3F05FB0DD294BA00EA504A /* English */, + ); + name = O3D_Stats.xib; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + B44174E708BA33C40065BEDE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = O3D_Stats_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = O3D_Stats; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Debug; + }; + B44174E808BA33C40065BEDE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = O3D_Stats_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = O3D_Stats; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + B44174EB08BA33C40065BEDE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = i386; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.4; + }; + name = Debug; + }; + B44174EC08BA33C40065BEDE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = i386; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.4; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + B44174E608BA33C40065BEDE /* Build configuration list for PBXNativeTarget "O3D_Stats" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B44174E708BA33C40065BEDE /* Debug */, + B44174E808BA33C40065BEDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B44174EA08BA33C40065BEDE /* Build configuration list for PBXProject "O3D_Stats" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B44174EB08BA33C40065BEDE /* Debug */, + B44174EC08BA33C40065BEDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/o3d/installer/mac/O3D_Stats/O3D_StatsPane.h b/o3d/installer/mac/O3D_Stats/O3D_StatsPane.h new file mode 100644 index 0000000..6889341 --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/O3D_StatsPane.h @@ -0,0 +1,54 @@ +// +// O3D_StatsPane.h +// O3D_Stats +// + +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + + +#import <Cocoa/Cocoa.h> +#import <InstallerPlugins/InstallerPlugins.h> + +@interface O3D_StatsPane : InstallerPane { + IBOutlet NSButtonCell *statsOnRadio_; + IBOutlet NSButtonCell *statsOffRadio_; + IBOutlet NSMatrix *statsRadioMatrix_; +} + + +- (BOOL)shouldExitPane:(InstallerSectionDirection)dir; + +- (void)didEnterPane:(InstallerSectionDirection)dir; + + +@end diff --git a/o3d/installer/mac/O3D_Stats/O3D_StatsPane.m b/o3d/installer/mac/O3D_Stats/O3D_StatsPane.m new file mode 100644 index 0000000..4d3ae0d --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/O3D_StatsPane.m @@ -0,0 +1,67 @@ +// +// O3D_StatsPane.m +// O3D_Stats +// + +// @@REWRITE(insert c-copyright) +// @@REWRITE(delete-start) +// Created by Matthew Vosburgh on 4/14/09. +// Copyright (c) 2009 Google Inc. All rights reserved. +// @@REWRITE(delete-end) + +#import "O3D_StatsPane.h" + +#define kPrefString @"O3D_STATS" + + +@implementation O3D_StatsPane + +// Read a pref string for current user, but global to all apps. +static NSString* ReadGlobalPreferenceString(NSString *key) { + return (NSString *)CFPreferencesCopyValue((CFStringRef)key, + kCFPreferencesAnyApplication, + kCFPreferencesCurrentUser, + kCFPreferencesCurrentHost); +} + + +// Write a pref string for the current user, but global to all apps. +static void WriteGlobalPreferenceString(NSString *key, + NSString *value) { + CFPreferencesSetValue((CFStringRef)key, + (CFPropertyListRef)value, + kCFPreferencesAnyApplication, + kCFPreferencesCurrentUser, + kCFPreferencesCurrentHost); + + CFPreferencesSynchronize(kCFPreferencesAnyApplication, + kCFPreferencesCurrentUser, + kCFPreferencesCurrentHost); +} + + +- (NSString *)title { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + + return [bundle localizedStringForKey:@"PaneTitle" + value:nil + table:nil]; +} + + +- (BOOL)shouldExitPane:(InstallerSectionDirection)dir { + BOOL statsOn = [statsRadioMatrix_ selectedCell] == statsOnRadio_; + + WriteGlobalPreferenceString(kPrefString, statsOn ? @"YES" : @"NO"); + return YES; +} + +- (void)didEnterPane:(InstallerSectionDirection)dir { + NSString *value = ReadGlobalPreferenceString(kPrefString); + BOOL statsOn = ![value isEqualToString:@"NO"]; + + [statsRadioMatrix_ selectCell: statsOn ? statsOnRadio_ : statsOffRadio_]; +} + + +@end diff --git a/o3d/installer/mac/O3D_Stats/O3D_Stats_Prefix.pch b/o3d/installer/mac/O3D_Stats/O3D_Stats_Prefix.pch new file mode 100644 index 0000000..b3c37ff --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/O3D_Stats_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'InstallerPlugin' target in the 'InstallerPlugin' project. +// + +#ifdef __OBJC__ + #import <Cocoa/Cocoa.h> +#endif diff --git a/o3d/installer/mac/O3D_Stats/version.plist b/o3d/installer/mac/O3D_Stats/version.plist new file mode 100644 index 0000000..a548b4b --- /dev/null +++ b/o3d/installer/mac/O3D_Stats/version.plist @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>BuildVersion</key> + <string>32</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>ProjectName</key> + <string>DevToolsWizardTemplates</string> + <key>SourceVersion</key> + <string>3670000</string> +</dict> +</plist> diff --git a/o3d/installer/win/build.scons b/o3d/installer/win/build.scons new file mode 100644 index 0000000..a9979ef --- /dev/null +++ b/o3d/installer/win/build.scons @@ -0,0 +1,207 @@ +# Copyright 2009, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +import os +Import('env') + +INPUTS = [ + 'custom_actions.cc', +] + +CUSTOM_ACTIONS_LIBS = [ + 'advapi32', + 'dxguid', + 'msi', + 'ole32', + 'oleaut32', + 'shell32', + 'shlwapi', + 'user32', +] + +# Build the dll, provide our own set of libraries to be linked with our dll. +# It is important to have full control of this since custom actions will run +# in a 'sandbox' and can't have external dependencies. +cactions = env.ComponentLibrary('cactions', INPUTS, LIBS=CUSTOM_ACTIONS_LIBS, + COMPONENT_STATIC=False) + +# copy to artifacts +env.Replicate('$ARTIFACTS_DIR', cactions[0]) + +# Unique guid for o3d namespace generated by www.guidgen.com +o3d_namespace_guid = 'B445DBAE-F5F9-435A-9A9B-088261CDF00A' + +# Pull out version numbers. +nppversion = env.get('O3D_PLUGIN_VERSION_COMMAS') +dotnppversion = env.get('O3D_PLUGIN_VERSION') +# We don't actually want the extras version to update by itself; it should +# change only when we actually add something to the installer or change the +# d3dx9 version. This version is therefore independent of the o3d plugin and +# sdk versions. +extrasversion ='0,1,1,0' +dotextrasversion = '0.1.1.0' + +# TODO: this should be a tool!! + +# Utility function for generating GUID's in the o3d namespace. +def gen_named_guid(namespace_guid, name, version): + nbguidgen_exe = env.File('$SCONSTRUCT_DIR/nbguidgen/win/nbguidgen.exe') + guid = os.popen('%s %s %s' % + (nbguidgen_exe.abspath, namespace_guid, + '%s-%s' % (name, version))).read() + return guid + +def get_guid_generator(namespace_guid, version): + return lambda name: gen_named_guid(namespace_guid, name, version) + +# TODO: These all return the same generator if their versions match. +# Is that a problem? Do we really need more than one of them? +plugin_guid_generator = \ + get_guid_generator(o3d_namespace_guid, nppversion) +extras_guid_generator = \ + get_guid_generator(o3d_namespace_guid, extrasversion) + +google_update_reg_path = 'Software\\Google\\Update\\Clients\\' +google_update_state_reg_path = 'Software\\Google\\Update\\ClientState\\' + +# Guids and other variables for the plugin installer: +o3d_npp_product_guid = plugin_guid_generator('o3d_product') +o3d_npp_package_guid = plugin_guid_generator('o3d_package') +dx_redist_guid = plugin_guid_generator('dx_redist') +d3dx_guid = plugin_guid_generator('d3dx') + +# Changing the following values would break upgrade paths, so we hard-code the +# values instead of generating them. The commands used to generate them are +# kept, so that we can avoid creating collisions accidentally. + +# bad_old_o3d_upgrade_code = gen_named_guid(o3d_namespace_guid, +# 'magicflute_upgrade', '') +# o3d_npp_upgrade_code = gen_named_guid(o3d_namespace_guid, +# 'plugin_upgrade', '') +# o3d_extras_upgrade_code = gen_named_guid(o3d_namespace_guid, +# 'extras_upgrade', '') +bad_old_o3d_upgrade_code = 'dc819ed6-4155-3cff-b580-45626aed5848' +o3d_npp_upgrade_code = '0f098121-2876-3c23-bd4c-501220ecbb42' +o3d_extras_upgrade_code = 'c271f2f0-c7ad-3bc9-8216-211436aa2244' + +# Keep these around for historical reasons; if we ever want to bring the SDK +# back, we might want to use the same GUIDs and Google Update project for +# simplicity. +#o3d_sdk_upgrade_code = 'd6b024ab-1784-348b-80c5-96ab43799d0a' +#o3d_sdk_google_update_guid = '{00764f6f-9998-4520-9c41-94a30e36565a}' + +o3d_npp_component_guid = plugin_guid_generator( + 'o3d_npplugin_component') +o3d_iep_component_guid = plugin_guid_generator( + 'o3d_ieplugin_component') +o3d_npp_google_update_reg_component_guid = plugin_guid_generator( + 'o3d_user_google_update_reg_component') +o3d_reporter_guid = plugin_guid_generator('o3d_reporter') +o3d_driver_blacklist_guid = plugin_guid_generator( + 'o3d_driver_blacklist') +o3d_npp_google_update_guid = '{70308795-045C-42da-8F4E-D452381A7459}' +o3d_npp_reg_key = '%s%s' % (google_update_reg_path, o3d_npp_google_update_guid) +o3d_npp_state_reg_key = '%s%s' % ( + google_update_state_reg_path, o3d_npp_google_update_guid) + +# Guids and other variables for the extras installer: +o3d_extras_d3dx_component_guid = plugin_guid_generator( + 'o3d_extras_d3dx_component') +o3d_extras_product_guid = extras_guid_generator('o3d_extras_product') +o3d_extras_package_guid = extras_guid_generator('o3d_extras_package') +o3d_get_extras_guid = gen_named_guid(o3d_namespace_guid, + 'extras_installer', '') + +o3d_extras_google_update_guid = '{34B2805D-C72C-4f81-AED5-5A22D1E092F1}' +o3d_extras_reg_key = '%s%s' % (google_update_reg_path, o3d_extras_google_update_guid) + +# Wix tool needs to be in the PATH. +# TODO: the wix tool should not need this dance! +wix_path = env.Dir('$WIX_DIR') +path = os.environ['PATH'] +path += os.pathsep + wix_path.abspath +os.environ['PATH'] = path + +# Add the wix tool to the SCons environment. +env.Tool('wix') + +# Lookup the plugin to be installed +npplugin_path = env.File('$ARTIFACTS_DIR/npo3dautoplugin.dll') +ieplugin_path = env.File('$ARTIFACTS_DIR/o3d_host.dll') +conditioner_path = env.File('$ARTIFACTS_DIR/o3dConditioner.exe') +cglib1_path = env.File('$ARTIFACTS_DIR/cg.dll') +cglib2_path = env.File('$ARTIFACTS_DIR/cgGL.dll') +cgc_path = env.File('$ARTIFACTS_DIR/cgc.exe') +docs_path = env.File('$SCONSTRUCT_DIR/installer/win/docs.url') +rep_path = env.File('$ARTIFACTS_DIR/reporter.exe') +dbl_path = env.File('$SCONSTRUCT_DIR/installer/win/driver_blacklist.txt') +get_extras_path = env.File('$ARTIFACTS_DIR/getextras.exe') + + +# Path to custiom actions dll. +cactions_dll_path = env.File('$ARTIFACTS_DIR/cactions.dll') + +# Pass flags to the wix compiler. +env.Append(WIXCANDLEFLAGS = [ + '-dNppProductGuid=' + o3d_npp_product_guid, + '-dNppVersion=' + dotnppversion, + '-dDeprecatedUpgradeCode=' + bad_old_o3d_upgrade_code, + '-dNppUpgradeCode=' + o3d_npp_upgrade_code, + '-dNppPackageGuid=' + o3d_npp_package_guid, + '-dNppComponentGuid=' + o3d_npp_component_guid, + '-dNPPluginPath=' + npplugin_path.abspath, + '-dIEPluginPath=' + ieplugin_path.abspath, + '-dIepComponentGuid=' + o3d_iep_component_guid, + '-dD3DXGuid=' + d3dx_guid, + '-dNppGoogleUpdateRegGuid=' + o3d_npp_google_update_reg_component_guid, + '-dNppGoogleUpdateRegKey=' + o3d_npp_reg_key, + '-dNppGoogleUpdateStateRegKey=' + o3d_npp_state_reg_key, + '-dRepGuid=' + o3d_reporter_guid, + '-dDBLGuid=' + o3d_driver_blacklist_guid, + '-dRepPath=' + rep_path.abspath, + '-dDBLPath=' + dbl_path.abspath, + '-dGetExtrasGuid=' + o3d_get_extras_guid, + '-dGetExtrasPath=' + get_extras_path.abspath, +]) + +# Build installer +installer_msi = env.WiX('o3d.msi', ['o3d_plugin.wxs']) + +# Make sure that the plugin dll has been built before building the installer. +# Make sure that the custom action dll has been built before building the +# installer. +# Relies on reporter.exe being built prior to installer. +env.Depends(installer_msi, + [npplugin_path, ieplugin_path, cactions_dll_path, rep_path, + get_extras_path]) + +# Copy to artifacts. +env.Replicate('$ARTIFACTS_DIR', installer_msi) + diff --git a/o3d/installer/win/custom_actions.cc b/o3d/installer/win/custom_actions.cc new file mode 100644 index 0000000..658d5b7 --- /dev/null +++ b/o3d/installer/win/custom_actions.cc @@ -0,0 +1,326 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Custom installer action which checks if DirectX 9.0c or later is present. + +#include <dxdiag.h> +#include <msi.h> +#include <msiquery.h> +#include <shellapi.h> +#include <shlwapi.h> +#include <tchar.h> +#include <strsafe.h> // Must be after tchar.h. +#include <windows.h> +#include <atlstr.h> + +#include "plugin/win/update_lock.h" + +#pragma comment(linker, "/EXPORT:CheckDirectX=_CheckDirectX@4") +#pragma comment(linker, "/EXPORT:IsSoftwareRunning=_IsSoftwareRunning@4") +#pragma comment(linker, "/EXPORT:InstallD3DXIfNeeded=_InstallD3DXIfNeeded@4") + +#if 0 +// NOTE: Useful for debugging, but not currently in use. Left here so +// that I don't have to figure out how to write it again. +void PopupMsiError(MSIHANDLE installer_handle, int id) { + PMSIHANDLE record_handle = MsiCreateRecord(1); + MsiRecordSetInteger(record_handle, 1, id); + MsiProcessMessage(installer_handle, INSTALLMESSAGE(INSTALLMESSAGE_USER|MB_OK), + record_handle); + MsiCloseHandle(record_handle); +} +#endif + +void WriteToMsiLog(MSIHANDLE installer_handle, TCHAR *message) { + PMSIHANDLE record_handle = MsiCreateRecord(1); + MsiRecordSetString(record_handle, 1, message); + MsiProcessMessage(installer_handle, INSTALLMESSAGE_INFO, record_handle); + MsiCloseHandle(record_handle); +} + +HRESULT SetRegKeyValueString(HKEY hkey_parent, const TCHAR *key_name, + const TCHAR *value_name, const TCHAR *value, DWORD value_size) { + HKEY hkey; + LONG res = ::RegCreateKeyEx(hkey_parent, key_name, 0, 0, + REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hkey, NULL); + HRESULT hr = HRESULT_FROM_WIN32(res); + + if (hr != S_OK) { + return hr; + } + + res = ::RegSetValueEx(hkey, value_name, 0, REG_SZ, + reinterpret_cast<const BYTE *>(value), value_size); + hr = HRESULT_FROM_WIN32(res); + + ::RegCloseKey(hkey); + return hr; +} + +HRESULT SetRegKeyValueDWord(HKEY hkey_parent, const TCHAR *key_name, + const TCHAR *value_name, DWORD value) { + HKEY hkey; + LONG res = ::RegCreateKeyEx(hkey_parent, key_name, 0, 0, + REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hkey, NULL); + HRESULT hr = HRESULT_FROM_WIN32(res); + + if (hr != S_OK) { + return hr; + } + + res = ::RegSetValueEx(hkey, value_name, 0, REG_DWORD, + reinterpret_cast<const BYTE *>(&value), sizeof(value)); + hr = HRESULT_FROM_WIN32(res); + + ::RegCloseKey(hkey); + return hr; +} + +// Retrieve the currently installed version of DirectX using a COM +// DxDiagProvider. Returns 0 on error. +DWORD GetDirectXVersion() { + HRESULT hr; + DWORD directx_version = 0; + DWORD directx_version_major = 0; + DWORD directx_version_minor = 0; + TCHAR directx_version_letter = ' '; + + bool cleanup_com = false; + + bool success_getting_major = false; + bool success_getting_minor = false; + bool success_getting_letter = false; + + // Init COM. COM may fail if its already been inited with a different + // concurrency model. And if it fails you shouldn't release it. + hr = CoInitialize(NULL); + cleanup_com = SUCCEEDED(hr); + + // Get an IDxDiagProvider + IDxDiagProvider* dx_diag_provider = NULL; + hr = CoCreateInstance(CLSID_DxDiagProvider, + NULL, + CLSCTX_INPROC_SERVER, + IID_IDxDiagProvider, + reinterpret_cast<LPVOID*>(&dx_diag_provider)); + if (SUCCEEDED(hr)) { + // Fill out a DXDIAG_INIT_PARAMS struct + DXDIAG_INIT_PARAMS dx_diag_init_param; + ZeroMemory(&dx_diag_init_param, sizeof(DXDIAG_INIT_PARAMS)); + dx_diag_init_param.dwSize = sizeof(DXDIAG_INIT_PARAMS); + dx_diag_init_param.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; + dx_diag_init_param.bAllowWHQLChecks = false; + dx_diag_init_param.pReserved = NULL; + + // Init the DxDiagProvider + hr = dx_diag_provider->Initialize(&dx_diag_init_param); + if (SUCCEEDED(hr)) { + IDxDiagContainer* dx_diag_root = NULL; + IDxDiagContainer* dx_diag_system_info = NULL; + + // Get the DxDiag root container + hr = dx_diag_provider->GetRootContainer(&dx_diag_root); + if (SUCCEEDED(hr)) { + // Get the object called DxDiag_SystemInfo + hr = dx_diag_root->GetChildContainer(L"DxDiag_SystemInfo", + &dx_diag_system_info); + if (SUCCEEDED(hr)) { + VARIANT var; + VariantInit(&var); + + // Get the "dwDirectXVersionMajor" property + hr = dx_diag_system_info->GetProp(L"dwDirectXVersionMajor", &var); + if (SUCCEEDED(hr) && var.vt == VT_UI4) { + directx_version_major = var.ulVal; + success_getting_major = true; + } + VariantClear(&var); + + // Get the "dwDirectXVersionMinor" property + hr = dx_diag_system_info->GetProp(L"dwDirectXVersionMinor", &var); + if (SUCCEEDED(hr) && var.vt == VT_UI4) { + directx_version_minor = var.ulVal; + success_getting_minor = true; + } + VariantClear(&var); + + // Get the "szDirectXVersionLetter" property + hr = dx_diag_system_info->GetProp(L"szDirectXVersionLetter", &var); + if (SUCCEEDED(hr) && var.vt == VT_BSTR && + SysStringLen(var.bstrVal) != 0) { +#ifdef UNICODE + directx_version_letter = var.bstrVal[0]; +#else + char strDestination[10]; + WideCharToMultiByte(CP_ACP, 0, var.bstrVal, -1, strDestination, + 10 * sizeof(CHAR), NULL, NULL); + directx_version_letter = + static_cast<char>(tolower(strDestination[0])); +#endif + success_getting_letter = true; + } + VariantClear(&var); + + // If it all worked right, then mark it down + if (success_getting_major && success_getting_minor && + success_getting_letter) { + // Convert to hex representation. + directx_version = directx_version_major; + directx_version <<= 8; + directx_version += directx_version_minor; + directx_version <<= 8; + if (directx_version_letter >= 'a' && + directx_version_letter <= 'z') { + directx_version += (directx_version_letter - 'a') + 1; + } + } + dx_diag_system_info->Release(); + } + dx_diag_root->Release(); + } + } + dx_diag_provider->Release(); + } + + if (cleanup_com) { + CoUninitialize(); + } + return directx_version; +} + +HRESULT SetCustomUpdateError(MSIHANDLE installer_handle, + DWORD error_code, + CString message) { + wchar_t key_name[256]; + DWORD key_size = 256; + UINT ret = MsiGetProperty(installer_handle, L"GoogleUpdateResultKey", + reinterpret_cast<LPWSTR>(&key_name), &key_size); + if (ret != ERROR_SUCCESS) { + WriteToMsiLog(installer_handle, _T("MsiGetProperty failed!")); + return ERROR_READ_FAULT; + } else { + HRESULT hr = SetRegKeyValueDWord(HKEY_CURRENT_USER, key_name, + _T("InstallerResult"), 1 /* FAILED_CUSTOM_ERROR */); + if (hr != S_OK) { + WriteToMsiLog(installer_handle, _T("SetRegKeyValueDWord failed!")); + return hr; + } + hr = SetRegKeyValueDWord(HKEY_CURRENT_USER, key_name, + _T("InstallerError"), error_code); + if (hr != S_OK) { + WriteToMsiLog(installer_handle, _T("SetRegKeyValueDWord failed!")); + return hr; + } + hr = SetRegKeyValueString(HKEY_CURRENT_USER, key_name, + _T("InstallerResultUIString"), + message, message.GetLength() * sizeof(TCHAR)); + if (hr != S_OK) { + WriteToMsiLog(installer_handle, _T("SetRegKeyValueString failed!")); + return hr; + } + } +} + +// Check whether DirectX version 9.0c or higher is installed and +// notify the installer about the result. +extern "C" UINT __stdcall CheckDirectX(MSIHANDLE installer_handle) { + // Get current version. + DWORD installed_version = GetDirectXVersion(); + + // 0x090003 == 9.0c + if (installed_version >= 0x090003) { + // Set msi property to let the installer know that the currently + // installed version of dx is new enough. + UINT ret = MsiSetProperty(installer_handle, L"DIRECTX_9_0_C_INSTALLED", + L"1"); + } else { + // TODO: This will need i18n when we do that for the rest of o3d. + CString message = + _T("O3D needs an installation of DirectX 9.0 revision C or later.\n") + _T("\nPlease download the latest version of DirectX from ") + _T("http://www.microsoft.com/download."); + DWORD error_code = 1603; /* Fatal error during installation */ + if (SetCustomUpdateError(installer_handle, error_code, message) != S_OK) { + return ERROR_WRITE_FAULT; + } + } + return ERROR_SUCCESS; +} + +// Check to see whether the plugin is currently running. If it is, we can't +// update the plugin. The installer will check for the SOFTWARE_RUNNING flag +// and exit if it's trying to do a silent update. Knowing that it's failed this +// time, it'll try again later. +extern "C" UINT __stdcall IsSoftwareRunning(MSIHANDLE installer_handle) { + if (!update_lock::CanUpdate()) { + MsiSetProperty(installer_handle, L"SOFTWARE_RUNNING", L"1"); + } + + return ERROR_SUCCESS; +} + +// TODO: Get security to review this method in particular, as it runs an +// executable in a predictable location. +extern "C" UINT __stdcall InstallD3DXIfNeeded(MSIHANDLE installer_handle) { + HANDLE handle = ::LoadLibrary(L"d3dx9_36.dll"); + if (handle) { + ::CloseHandle(handle); + } else { + // 2 output characters per byte in the input due to hex format, then one + // extra for the NUL. + TCHAR idString[sizeof(DWORD) * 2 + 1]; + HRESULT hr = ::StringCchPrintf(idString, sizeof(idString) / sizeof(TCHAR), + _T("%x"), ::GetCurrentProcessId()); + if (!SUCCEEDED(hr)) { + WriteToMsiLog(installer_handle, _T("StringCchPrintf failed!")); + return ERROR_GEN_FAILURE; + } + TCHAR getextras_path[] = _T("%TEMP%\\Extras\\getextras.exe"); + SHELLEXECUTEINFO info = {0}; + info.cbSize = sizeof(info); + info.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI | SEE_MASK_UNICODE; + info.lpVerb = _T("open"); + info.lpFile = getextras_path; + info.lpParameters = idString; + // SW_HIDE is a wild guess, but seems as good as any. + info.nShow = SW_HIDE; + info.lpDirectory = NULL; + if (!::ShellExecuteEx(&info)) { + WriteToMsiLog(installer_handle, + _T("ShellExecuteEx of getextras.exe failed.")); + WriteToMsiLog(installer_handle, + _T("Path was:")); + WriteToMsiLog(installer_handle, getextras_path); + return ERROR_GEN_FAILURE; + } + } + return ERROR_SUCCESS; +} diff --git a/o3d/installer/win/docs.url b/o3d/installer/win/docs.url new file mode 100644 index 0000000..54d3edc --- /dev/null +++ b/o3d/installer/win/docs.url @@ -0,0 +1,4 @@ +[InternetShortcut] +URL=http://go.corp.google.com/o3d +IconFile=http://www.google.com/favicon.ico +IconIndex=1 diff --git a/o3d/installer/win/driver_blacklist.txt b/o3d/installer/win/driver_blacklist.txt new file mode 100644 index 0000000..1b45e75 --- /dev/null +++ b/o3d/installer/win/driver_blacklist.txt @@ -0,0 +1,12 @@ +# This file contains the GUIDs of blacklisted drivers as unsigned ints in hex. +# File format: +# # comments out to the end of a line. +# Lines should be no longer than 256 characters. Still, to keep things +# simple, just put one GUID per line. +# Whitespace is ignored except in that it separates GUIDs. +# No other characters are legal. + +# Sample GUID [DO NOT UNCOMMENT THIS LINE]: +# 0xd7b71e3e + +# Actual blacklisted drivers: diff --git a/o3d/installer/win/o3d_extras.wxs b/o3d/installer/win/o3d_extras.wxs new file mode 100644 index 0000000..9568236 --- /dev/null +++ b/o3d/installer/win/o3d_extras.wxs @@ -0,0 +1,120 @@ +<?xml version='1.0' encoding='windows-1252'?> + +<!-- +Copyright 2009, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<!-- + Wix script for the installer that puts the d3dx9 dll where o3d can find + it. +--> + +<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'> + + <Product Name='O3D Extras' Id='$(var.ExtrasProductGuid)' + Language='1033' Codepage='1252' Version='$(var.ExtrasVersion)' + Manufacturer='Google' UpgradeCode='$(var.ExtrasUpgradeCode)'> + <Package Id='$(var.ExtrasPackageGuid)' Keywords='Installer' + Description='O3D Extras Installer' Manufacturer='Google' + InstallerVersion='101' InstallPrivileges='limited' + Languages='1033' Compressed='yes' SummaryCodepage='1252' /> + + <Media Id='1' Cabinet='o3dExtras.cab' EmbedCab='yes' + CompressionLevel='high'/> + + <Directory Id='TARGETDIR' Name='SourceDir'> + <Directory Id='AppDataFolder' Name='QFiles'> + <Directory Id='pu.MozillaDir' Name='Mozilla'> + <Directory Id='pu.FirefoxPluginsDir' Name='plugins'> + <Directory Id='O3DPrivateDllDir' Name='O3D' + LongName='O3DExtras'> + <Component Id='D3DXRedist' Guid='$(var.ExtrasD3DXComponentGuid)'> + <File Id='d3dx' Name="d3dx9_36.dll" Vital='yes' + DiskId='1' src='$(var.DxRedistPath)\d3dx9_36.dll' /> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + </Directory> + </Directory> + </Directory> + <!-- Write the current version of the plugin to the Google Update + registry key for auto update. --> + <Component Id='pu.UpdateReg' Guid='$(var.ExtrasGoogleUpdateRegGuid)'> + <Registry Id='pu.UpdateRegistryKeys' Root='HKCU' + Key='$(var.ExtrasGoogleUpdateRegKey)' + Name='pv' Value='$(var.ExtrasVersion)' Action='write' + Type='string' /> + <Registry Id='pu.UpdateRegistryKeys2' Root='HKCU' + Key='$(var.ExtrasGoogleUpdateRegKey)' + Name='name' Value='o3d_extras' Action='write' + Type='string' /> + <Registry Id='pu.UpdateRegistryKeys3' Root='HKCU' + Key='$(var.ExtrasGoogleUpdateRegKey)' + Name='lang' Value='en' Action='write' + Type='string' /> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + + <Feature + Id='UpdateRegistry' + Level='1'> + <ComponentRef + Id='pu.UpdateReg'/> + </Feature> + <Feature + Id='DirectX' + Level='1'> + <ComponentRef + Id='D3DXRedist'/> + </Feature> + + <Upgrade Id='$(var.ExtrasUpgradeCode)'> + <UpgradeVersion + Minimum='0.0.0.0' IncludeMinimum='yes' + Maximum='$(var.ExtrasVersion)' IncludeMaximum='yes' + OnlyDetect='no' Property='UPGRADING'/> + </Upgrade> + + <InstallExecuteSequence> + <UnregisterClassInfo> + (REMOVE="ALL") OR UPGRADING + </UnregisterClassInfo> + <RemoveExistingProducts After='InstallInitialize'> + UPGRADING + </RemoveExistingProducts> + <RegisterClassInfo/> + </InstallExecuteSequence> + + <InstallUISequence> + </InstallUISequence> + + </Product> +</Wix> diff --git a/o3d/installer/win/o3d_kill_version.py b/o3d/installer/win/o3d_kill_version.py new file mode 100644 index 0000000..e3eb624 --- /dev/null +++ b/o3d/installer/win/o3d_kill_version.py @@ -0,0 +1,6 @@ +#!/usr/bin/python2.4 +# Copyright 2008 Google Inc. All Rights Reserved. + +# version = (major, minor, trunk, patch) +plugin_version = (0, 2, 0, 0) +sdk_version = plugin_version diff --git a/o3d/installer/win/o3d_plugin.wxs b/o3d/installer/win/o3d_plugin.wxs new file mode 100644 index 0000000..daaddf6a --- /dev/null +++ b/o3d/installer/win/o3d_plugin.wxs @@ -0,0 +1,345 @@ +<?xml version='1.0' encoding='windows-1252'?> + +<!-- +Copyright 2009, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<!-- +Wix script for building o3d installer. +--> + +<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'> + + <Product Name='O3D Plugin' Id='$(var.NppProductGuid)' + Language='1033' Codepage='1252' Version='$(var.NppVersion)' + Manufacturer='Google' UpgradeCode='$(var.NppUpgradeCode)'> + + <Package Id='$(var.NppPackageGuid)' Keywords='Installer' + Description='O3D Plugin Installer' Manufacturer='Google' + InstallerVersion='101' InstallPrivileges='limited' + Languages='1033' Compressed='yes' SummaryCodepage='1252' /> + + <Media Id='1' Cabinet='o3dplugin.cab' EmbedCab='yes' + CompressionLevel='high'/> + + <!-- Checks if the custom action for detecting directx has failed + and displays an error message if that is the case. --> + <Condition + Message='O3D needs an installation of DirectX 9.0c or higher. Please download the latest version of DirectX from http://www.microsoft.com/download.'> + DIRECTX_9_0_C_INSTALLED + </Condition> + + <!-- Prevent silent updates from installing if O3D is running. + If UILevel is less than or equal to 2, the update is silent. + If UILevel is greater than 2, the update is not silent. + The message should never be seen since this condition will attempt + to display the message only when the install is silent. --> + <Condition + Message='Please first close any running instances of O3D.'> + UILevel > 2 OR NOT (SOFTWARE_RUNNING) OR REMOVE ~= "ALL" + </Condition> + + <!-- Copy the plugin to the mozilla plugin folder under + 'Documents and Settings' --> + <Directory Id='TARGETDIR' Name='SourceDir'> + <Directory Id='AppDataFolder' Name='QFiles'> + <Directory Id='pu.MozillaDir' Name='Mozilla'> + <Directory Id='pu.FirefoxPluginsDir' Name='plugins'> + <Component Id='pu.Npdll' Guid='$(var.NppComponentGuid)'> + <File Id='pu.GoogleNpapiDll.dll' Name='npo3d.dll' + LongName='npo3dautoplugin.dll' DiskId='1' + Source='$(var.NPPluginPath)' Vital='yes' /> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + </Directory> + <Directory Id='Google' Name='Google'> + <Directory Id='O3D' Name='O3D'> + <Component Id='InstallReporter' Guid='$(var.RepGuid)'> + <File + Id='Reporter' + Name='reporter.exe' + DiskId='1' + Source='$(var.RepPath)' + Vital='yes'/> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + <Component Id='InstallDriverBlacklist' Guid='$(var.DBLGuid)'> + <!-- Note: the "Name" here is required, but is overridden by + the "LongName". --> + <File + Id='DriverBlacklist' + Name='BadDrvrs.txt' + LongName='driver_blacklist.txt' + DiskId='1' + Source='$(var.DBLPath)' + Vital='yes'/> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + <Component Id='pu.IEdll' + Guid='$(var.IepComponentGuid)'> + <File Id='pu.GoogleActiveXDll.dll' Name='o3d_host.dll' + DiskId='1' Source='$(var.IEPluginPath)' Vital='yes'/> + <!-- We add all of these registry values here, instead + of running regsvr32 on the dll because otherwise we + leave cruft behind if the dll is manually removed + or corrupted. + + If COM interfaces are added to the DLL, you can + recreate this list by running the RegCap.exe tool + (part of Visual Studio) to extract the list of + registry entries from o3d_host.dll, and then use + tallow.exe (part of WiX) to convert that .reg file + to WiX XML form. --> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.NPObjectProxy.1" + Value="NPObjectProxy Class" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.NPObjectProxy.1\CLSID" + Value="{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.NPObjectProxy.1\Insertable" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.NPObjectProxy" + Value="NPObjectProxy Class" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.NPObjectProxy\CLSID" + Value="{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.NPObjectProxy\CurVer" + Value="o3d_host.NPObjectProxy.1" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}" + Value="NPObjectProxy Class" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\ProgID" + Value="o3d_host.NPObjectProxy.1" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\VersionIndependentProgID" + Value="o3d_host.NPObjectProxy" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\Programmable" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\InprocServer32" + Value="[#pu.GoogleActiveXDll.dll]" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\InprocServer32" + Name="ThreadingModel" Value="Apartment" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\Control" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\Insertable" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\TypeLib" + Value="{D4F6E31C-E952-48FE-9833-6AE308BD79C6}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{1D68424D-7A71-4b61-AE5C-56DBCD8B0E53}\Version" + Value="1.0" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}" + Value="O3DHostControl Class" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\ProgID" + Value="o3d_host.O3DHostControl.1" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\VersionIndependentProgID" + Value="o3d_host.O3DHostControl" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Programmable" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\InprocServer32" + Value="[#pu.GoogleActiveXDll.dll]" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\InprocServer32" + Name="ThreadingModel" Value="Apartment" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Control" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Insertable" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\ToolboxBitmap32" + Value="[#pu.GoogleActiveXDll.dll], 102" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\MiscStatus" + Value="0" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\MiscStatus\1" + Value="131473" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\TypeLib" + Value="{D4F6E31C-E952-48FE-9833-6AE308BD79C6}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Version" + Value="1.0" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Implemented Categories" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}" /> + <Registry Root="HKCU" Key="Software\Classes\CLSID\{9666A772-407E-4F90-BC37-982E8160EB2D}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.O3DHostControl.1" + Value="O3DHostControl Class" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.O3DHostControl.1\CLSID" + Value="{9666A772-407E-4F90-BC37-982E8160EB2D}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.O3DHostControl.1\Insertable" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.O3DHostControl" + Value="O3DHostControl Class" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.O3DHostControl\CLSID" + Value="{9666A772-407E-4F90-BC37-982E8160EB2D}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\o3d_host.O3DHostControl\CurVer" + Value="o3d_host.O3DHostControl.1" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\TypeLib" /> + <Registry Root="HKCU" Key="Software\Classes\TypeLib\{D4F6E31C-E952-48FE-9833-6AE308BD79C6}" /> + <Registry Root="HKCU" Key="Software\Classes\TypeLib\{D4F6E31C-E952-48FE-9833-6AE308BD79C6}\1.0" + Value="npapi_host2 1.0 Type Library" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\TypeLib\{D4F6E31C-E952-48FE-9833-6AE308BD79C6}\1.0\FLAGS" + Value="0" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\TypeLib\{D4F6E31C-E952-48FE-9833-6AE308BD79C6}\1.0\0" /> + <Registry Root="HKCU" Key="Software\Classes\TypeLib\{D4F6E31C-E952-48FE-9833-6AE308BD79C6}\1.0\0\win32" + Value="[#pu.GoogleActiveXDll.dll]" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\Interface" /> + <Registry Root="HKCU" Key="Software\Classes\Interface\{56D79537-181C-4A38-ADF5-E12EC24D7FC7}" + Value="IHostControl" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\Interface\{56D79537-181C-4A38-ADF5-E12EC24D7FC7}\ProxyStubClsid" + Value="{00020424-0000-0000-C000-000000000046}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\Interface\{56D79537-181C-4A38-ADF5-E12EC24D7FC7}\ProxyStubClsid32" + Value="{00020424-0000-0000-C000-000000000046}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\Interface\{56D79537-181C-4A38-ADF5-E12EC24D7FC7}\TypeLib" + Value="{D4F6E31C-E952-48FE-9833-6AE308BD79C6}" Type="string" /> + <Registry Root="HKCU" Key="Software\Classes\Interface\{56D79537-181C-4A38-ADF5-E12EC24D7FC7}\TypeLib" + Name="Version" Value="1.0" Type="string" /> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + </Directory> + </Directory> + <Directory Id='TempFolder' Name='TmpFiles'> + <!-- This continues to run after we exit, so we don't clean it up. + It's in the temp dir, so that's not so bad. It *must* be placed where + performondemand.cc is expecting it to be! + TODO: Figure out how to get it removed as of the next reboot. + TODO: We also don't remove the extras on uninstall. We don't + want to on upgrade, just on a full uninstall; can we tell the + difference? --> + <Directory Id='ExtrasTempDir' Name='Extras'> + <Component Id='GetExtras' + Guid='$(var.GetExtrasGuid)'> + <File Id='getextras' Name="getxtras" LongName='getextras.exe' + DiskId='1' src='$(var.GetExtrasPath)' /> + </Component> + </Directory> + </Directory> + + <!-- Write the current version of the plugin to the Google Update + registry key for auto update. --> + <Component Id='pu.UpdaterReg' Guid='$(var.NppGoogleUpdateRegGuid)'> + <Registry Id='pu.UpdaterRegistryKeys' Root='HKCU' + Key='$(var.NppGoogleUpdateRegKey)' + Name='pv' Value='$(var.NppVersion)' Action='write' + Type='string' /> + <Registry Id='pu.UpdaterRegistryKeys2' Root='HKCU' + Key='$(var.NppGoogleUpdateRegKey)' + Name='name' Value='o3d' Action='write' + Type='string' /> + <Registry Id='pu.UpdaterRegistryKeys3' Root='HKCU' + Key='$(var.NppGoogleUpdateRegKey)' + Name='lang' Value='en' Action='write' + Type='string' /> + <Registry Id='pu.TrackReg' Root='HKCU' + Key='$(var.NppGoogleUpdateStateRegKey)' + Name='dr' Value='0' Action='write' + Type='string' /> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + + <!-- List of actions to be performed. --> + <Feature Id='G3DPlugin' Title='O3D Plugin' Level='1'> + <ComponentRef Id='GetExtras' /> + <ComponentRef Id='pu.Npdll' /> + <ComponentRef Id='pu.IEdll'/> + <ComponentRef Id='pu.UpdaterReg' /> + <ComponentRef Id='InstallReporter'/> + <ComponentRef Id='InstallDriverBlacklist'/> + </Feature> + + <!-- Identify previous versions to remove before installing. The deprecated + one dates to when we accidentally used the same upgrade code for the + SDK and the plugin, so they'll both try to uninstall it, just in case. + At worst, the user will have one or the other disappear mysteriously, + but only once. + --> + <Upgrade Id='$(var.DeprecatedUpgradeCode)'> + <UpgradeVersion OnlyDetect='no' Property='UPGRADING_DEPR'/> + </Upgrade> + <Upgrade Id='$(var.NppUpgradeCode)'> + <UpgradeVersion + Minimum='0.0.0.0' IncludeMinimum='yes' + Maximum='$(var.NppVersion)' IncludeMaximum='yes' + OnlyDetect='no' Property='UPGRADING'/> + </Upgrade> + + <!-- Custom action to tell CheckDirectX where to report errors. --> + <CustomAction + Id='SetupGoogleUpdateRegistryKey' + Property='GoogleUpdateResultKey' + Value='$(var.NppGoogleUpdateStateRegKey)' /> + <!-- Custom action for detecting DirectX 9.0c or higher. --> + <CustomAction + Id='CheckDirectX' + BinaryKey='CustomActions' + DllEntry='CheckDirectX' /> + + <!-- Custom action for checking that we're not already running. --> + <CustomAction + Id='IsSoftwareRunning' + BinaryKey='CustomActions' + DllEntry='IsSoftwareRunning' /> + + <Binary + Id='CustomActions' + SourceFile='cactions.dll' /> + + <!-- Custom action for telling Google Update to install d3dx if necessary. --> + <CustomAction + Id='InstallD3DXIfNeeded' + BinaryKey='CustomActions' + DllEntry='InstallD3DXIfNeeded' + Execute='deferred' /> + + <!-- Custom action needs to be in the InstallUISequence to make + sure it has been executed before the Condition check. --> + <InstallUISequence> + <Custom + Action='SetupGoogleUpdateRegistryKey' + Before='CheckDirectX' /> + <Custom + Action='IsSoftwareRunning' + Before='CheckDirectX' /> + <Custom + Action='CheckDirectX' + Before='LaunchConditions' /> + </InstallUISequence> + + <InstallExecuteSequence> + <Custom + Action='SetupGoogleUpdateRegistryKey' + Before='CheckDirectX' /> + <Custom + Action='IsSoftwareRunning' + Before='CheckDirectX' /> + <Custom + Action='CheckDirectX' + Before='LaunchConditions' /> + <Custom + Action='InstallD3DXIfNeeded' + After='InstallFiles'> + NOT Installed + </Custom> + <UnregisterClassInfo> + (REMOVE="ALL") OR UPGRADING OR UPGRADING_DEPR + </UnregisterClassInfo> + <RemoveExistingProducts After='InstallInitialize'> + UPGRADING OR UPGRADING_DEPR + </RemoveExistingProducts> + <RegisterClassInfo/> + </InstallExecuteSequence> + + </Product> +</Wix> diff --git a/o3d/installer/win/o3d_sdk.wxs b/o3d/installer/win/o3d_sdk.wxs new file mode 100644 index 0000000..b3dcaa0 --- /dev/null +++ b/o3d/installer/win/o3d_sdk.wxs @@ -0,0 +1,223 @@ +<?xml version='1.0' encoding='windows-1252'?> + +<!-- +Copyright 2009, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<!-- + Wix script for building o3d installer. +--> + +<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'> + + <Product Name='O3D SDK' Id='$(var.SDKProductGuid)' + Language='1033' Codepage='1252' Version='$(var.SDKVersion)' + Manufacturer='Google' UpgradeCode='$(var.SDKUpgradeCode)'> + <Package Id='$(var.SDKPackageGuid)' Keywords='Installer' + Description='O3D SDK Installer' Manufacturer='Google' + InstallerVersion='101' InstallPrivileges='limited' + Languages='1033' Compressed='yes' SummaryCodepage='1252' /> + + <Media Id='1' Cabinet='o3dSDK.cab' EmbedCab='yes' + CompressionLevel='high'/> + + <!-- Checks if the custom action for detecting directx has failed + and displays an error message if that is the case. --> + <Condition + Message='O3D needs an installation of DirectX 9.0c or higher. Please download the latest version of DirectX from http://www.microsoft.com/download.'> + DIRECTX_9_0_C_INSTALLED + </Condition> + + <Directory + Id='TARGETDIR' + Name='SourceDir'> + <Directory + Id='ProgramMenuFolder' + Name='PMenu' + LongName='Programs'> + <Directory + Id='ProgramMenuDir' + Name='O3D' + LongName='O3D' /> + </Directory> + <!-- Start menu items. --> + <Directory + Id='AppDataFolder' + Name='QMenu'> + <Directory + Id='Google' + Name='Google'> + <Directory + Id='O3D' + Name='O3D'> + <Directory + Id='INSTALLDIR' + Name='O3D' + LongName='O3D' /> + <?include docs.wxs ?> + <!-- Collada items. --> + <Component Id='InstallCollada' Guid='$(var.SDKColladaGuid)'> + <File + Id='O3DSDKCollada' + Name='o3dCond.exe' + LongName='o3dConditioner.exe' + DiskId='1' + Source='$(var.SDKColladaPath)'> + <Shortcut + Id="O3DSDKColladaShortcut" + Directory="ProgramMenuDir" + Name="o3dCond.exe" + LongName="Collada Conditioner"/> + </File> + <File + Id='CGLib1' + Name='cg.dll' + LongName='cg.dll' + DiskId='1' + Source='$(var.SDKCG1Path)'/> + <File + Id='CGLib2' + Name='cgGL.dll' + LongName='cgGL.dll' + DiskId='1' + Source='$(var.SDKCG2Path)'/> + <File + Id='CGC' + Name='cgc.exe' + LongName='cgc.exe' + DiskId='1' + Source='$(var.SDKCGCPath)'/> + <!-- We're just dropping this dll in here for now. Later, if we + want to save space, we can do the same download-on-demand of the + extras package that the plugin does. That will require the + conditioner/exporter to use LoadLibrary to load d3dx9_36.dll, + however. --> + <File + Id='D3DX9' + Name='d3dx9_36.dll' + LongName='d3dx9_36.dll' + DiskId='1' + Source='$(var.DxRedistPath)\d3dx9_36.dll'/> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + </Directory> + </Directory> + <!-- Write the current version of the plugin to the Google Update + registry key for auto update. --> + <Component Id='UpdaterReg' Guid='$(var.SDKGoogleUpdateRegGuid)'> + <Registry Id='pu.UpdaterRegistryKeys' Root='HKCU' + Key='$(var.SDKGoogleUpdateRegKey)' + Name='pv' Value='$(var.SDKVersion)' Action='write' + Type='string' /> + <Registry Id='pu.UpdaterRegistryKeys2' Root='HKCU' + Key='$(var.SDKGoogleUpdateRegKey)' + Name='name' Value='o3d_sdk' Action='write' + Type='string' /> + <Registry Id='pu.UpdaterRegistryKeys3' Root='HKCU' + Key='$(var.SDKGoogleUpdateRegKey)' + Name='lang' Value='en' Action='write' + Type='string' /> + <Condition>NOT (ALLUSERS)</Condition> + </Component> + </Directory> + + <?include docs_features.wxs ?> + <Feature + Id='SDKCollada' + Level='1'> + <ComponentRef + Id='InstallCollada'/> + </Feature> + <Feature + Id='UpdateRegistry' + Level='1'> + <ComponentRef + Id='UpdaterReg'/> + </Feature> + + <!-- Identify previous versions to remove before installing. The deprecated + one dates to when we accidentally used the same upgrade code for the SDK and + the plugin, so they'll both try to uninstall it, just in case. At worst, + the user will have one or the other disappear mysteriously, but only once. + --> + <Upgrade Id='$(var.DeprecatedUpgradeCode)'> + <UpgradeVersion OnlyDetect='no' Property='UPGRADING_DEPR'/> + </Upgrade> + <Upgrade Id='$(var.SDKUpgradeCode)'> + <UpgradeVersion + Minimum='0.0.0.0' IncludeMinimum='yes' + Maximum='$(var.SDKVersion)' IncludeMaximum='yes' + OnlyDetect='no' Property='UPGRADING'/> + </Upgrade> + + <!-- Custom action for detecting DirectX 9.0c or higher. --> + <CustomAction + Id='CheckDirectX' + BinaryKey='CustomActions' + DllEntry='CheckDirectX' /> + + <Binary + Id='CustomActions' + SourceFile='cactions.dll' /> + + <InstallExecuteSequence> + <!-- We have to FindRelatedProducts before the LaunchConditions checks, + so that we know if we're upgrading before we tell folks they need to be + administrators. LaunchConditions happens at sequence number 100, and + CheckDirectX is 99. --> + <FindRelatedProducts Sequence='98' /> + <Custom + Action='CheckDirectX' + Before='LaunchConditions' /> + <UnregisterClassInfo> + (REMOVE="ALL") OR UPGRADING OR UPGRADING_DEPR + </UnregisterClassInfo> + <RemoveExistingProducts After='InstallInitialize'> + UPGRADING OR UPGRADING_DEPR + </RemoveExistingProducts> + <RegisterClassInfo/> + </InstallExecuteSequence> + + <!-- Custom action needs to be in the InstallUISequence to make + sure it has been executed before the Condition check. --> + <InstallUISequence> + <FindRelatedProducts Sequence='98' /> + <!-- We have to FindRelatedProducts before the LaunchConditions checks, + so that we know if we're upgrading before we tell folks they need to be + administrators. LaunchConditions happens at sequence number 100, and + CheckDirectX is 99. --> + <Custom + Action='CheckDirectX' + Before='LaunchConditions' /> + </InstallUISequence> + + </Product> +</Wix> diff --git a/o3d/installer/win/o3d_version.py b/o3d/installer/win/o3d_version.py new file mode 100644 index 0000000..ac48c54 --- /dev/null +++ b/o3d/installer/win/o3d_version.py @@ -0,0 +1,6 @@ +#!/usr/bin/python2.4 +# Copyright 2008 Google Inc. All Rights Reserved. + +# version = (major, minor, trunk, patch) +plugin_version = (0, 1, 35, 0) +sdk_version = plugin_version |