https://wiki.secondlife.com/w/api.php?action=feedcontributions&user=Boroondas+Gupte&feedformat=atomSecond Life Wiki - User contributions [en]2024-03-29T08:29:28ZUser contributionsMediaWiki 1.36.1https://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1187958Viewer 2 Microsoft Windows Builds2014-03-01T12:49:37Z<p>Boroondas Gupte: /* Post Configuration step */ simplified phrasing and avoided repetition of word "command"</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want to alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4 Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), '''curl''' (under "Web"), and '''m4''' (under "interpreters"). Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepad-plus-plus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
* [http://www.fmod.org/download/#FMODExAPIDownloads FMOD Ex Api]<br />
** This is the software that supports sounds. Installing it is optional but the installation instructions will assume you have installed it.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user''' and select '''Properties'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release STORM-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;FMODEX (bool)<br />
::Controls if the FmodEX package is incorporated into the viewer.<br />
:;FMODEX_LIBRARY (path)<br />
::Specifies the location of the FmodEX .lib file needed for linking.<br />
:;FMODEX_INCLUDE_DIR (path)<br />
::Specifies the location of the FmodEX include files.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Example configuration commands===<br />
{{KBnote|You will need to adjust the configure commands below to reflect where you have installed FmodEX.}}<br />
<br />
autobuild configure -c ReleaseOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c RelWithDebInfoOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c DebugOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodexL_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
===Post Configuration step===<br />
<br />
You need to copy three files from the FmodEX directory tree into the build tree that the configure command has just created.<br />
<br />
* Copy <code>\api\fmodex.dll</code> to <code>\build-vc100\packages\lib\release</code><br />
* Copy <code>\api\fmodexL.dll</code> to <code>\build-vc100\packages\lib\debug</code><br />
* Copy <code>\documentation\license.txt</code> to <code>build-vc100\packages\licenses\fmodex.txt</code><br />
<br />
{{KBtip|The configuration and copy commands are long. You may want to make two .bat files to simplify this process. The first .bat file will perform the configure step. The second .bat file will perform the copy step. The reason to have two .bat files and not just one is the configure step will exit with an expected error, so everything in the first file after the configure command would be skipped.}}<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
*Run:<br />
<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
Example:<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== A full build happens for NVIDIA users, when an incremental compile is expected ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1187957Viewer 2 Microsoft Windows Builds2014-03-01T12:48:47Z<p>Boroondas Gupte: /* Post Configuration step */ Commands after configure will only be scipped when within the same script</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want to alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4 Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), '''curl''' (under "Web"), and '''m4''' (under "interpreters"). Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepad-plus-plus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
* [http://www.fmod.org/download/#FMODExAPIDownloads FMOD Ex Api]<br />
** This is the software that supports sounds. Installing it is optional but the installation instructions will assume you have installed it.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user''' and select '''Properties'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release STORM-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;FMODEX (bool)<br />
::Controls if the FmodEX package is incorporated into the viewer.<br />
:;FMODEX_LIBRARY (path)<br />
::Specifies the location of the FmodEX .lib file needed for linking.<br />
:;FMODEX_INCLUDE_DIR (path)<br />
::Specifies the location of the FmodEX include files.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Example configuration commands===<br />
{{KBnote|You will need to adjust the configure commands below to reflect where you have installed FmodEX.}}<br />
<br />
autobuild configure -c ReleaseOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c RelWithDebInfoOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c DebugOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodexL_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
===Post Configuration step===<br />
<br />
You need to copy three files from the FmodEX directory tree into the build tree that the configure command has just created.<br />
<br />
* Copy <code>\api\fmodex.dll</code> to <code>\build-vc100\packages\lib\release</code><br />
* Copy <code>\api\fmodexL.dll</code> to <code>\build-vc100\packages\lib\debug</code><br />
* Copy <code>\documentation\license.txt</code> to <code>build-vc100\packages\licenses\fmodex.txt</code><br />
<br />
{{KBtip|The configuration and copy commands are long. You may want to make two .bat files to simplify this process. The first .bat file will perform the configure step. The second .bat file will perform the copy step. The reason to have two .bat files and not just one is the configure step will exit with an expected error, so any dos commands in the first file after the configure command would be skipped.}}<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
*Run:<br />
<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
Example:<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== A full build happens for NVIDIA users, when an incremental compile is expected ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1187956Viewer 2 Microsoft Windows Builds2014-03-01T12:46:04Z<p>Boroondas Gupte: /* Post Configuration step */ changed "below" to "after", as it's the order of execution that matters, not where the commands appear in the file</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want to alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4 Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), '''curl''' (under "Web"), and '''m4''' (under "interpreters"). Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepad-plus-plus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
* [http://www.fmod.org/download/#FMODExAPIDownloads FMOD Ex Api]<br />
** This is the software that supports sounds. Installing it is optional but the installation instructions will assume you have installed it.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user''' and select '''Properties'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release STORM-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;FMODEX (bool)<br />
::Controls if the FmodEX package is incorporated into the viewer.<br />
:;FMODEX_LIBRARY (path)<br />
::Specifies the location of the FmodEX .lib file needed for linking.<br />
:;FMODEX_INCLUDE_DIR (path)<br />
::Specifies the location of the FmodEX include files.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Example configuration commands===<br />
{{KBnote|You will need to adjust the configure commands below to reflect where you have installed FmodEX.}}<br />
<br />
autobuild configure -c ReleaseOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c RelWithDebInfoOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c DebugOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodexL_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
===Post Configuration step===<br />
<br />
You need to copy three files from the FmodEX directory tree into the build tree that the configure command has just created.<br />
<br />
* Copy <code>\api\fmodex.dll</code> to <code>\build-vc100\packages\lib\release</code><br />
* Copy <code>\api\fmodexL.dll</code> to <code>\build-vc100\packages\lib\debug</code><br />
* Copy <code>\documentation\license.txt</code> to <code>build-vc100\packages\licenses\fmodex.txt</code><br />
<br />
{{KBtip|The configuration and copy commands are long. You may want to make two .bat files to simplify this process. The first .bat file will perform the configure step. The second .bat file will perform the copy step. The reason to have two .bat files and not just one is the configure step will exit with an expected error, so any dos commands after the configure command would be skipped.}}<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
*Run:<br />
<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
Example:<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== A full build happens for NVIDIA users, when an incremental compile is expected ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1187955Viewer 2 Microsoft Windows Builds2014-03-01T12:43:15Z<p>Boroondas Gupte: /* Post Configuration step */ changed phrasing</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want to alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4 Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), '''curl''' (under "Web"), and '''m4''' (under "interpreters"). Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepad-plus-plus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
* [http://www.fmod.org/download/#FMODExAPIDownloads FMOD Ex Api]<br />
** This is the software that supports sounds. Installing it is optional but the installation instructions will assume you have installed it.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user''' and select '''Properties'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release STORM-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;FMODEX (bool)<br />
::Controls if the FmodEX package is incorporated into the viewer.<br />
:;FMODEX_LIBRARY (path)<br />
::Specifies the location of the FmodEX .lib file needed for linking.<br />
:;FMODEX_INCLUDE_DIR (path)<br />
::Specifies the location of the FmodEX include files.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Example configuration commands===<br />
{{KBnote|You will need to adjust the configure commands below to reflect where you have installed FmodEX.}}<br />
<br />
autobuild configure -c ReleaseOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c RelWithDebInfoOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c DebugOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodexL_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
===Post Configuration step===<br />
<br />
You need to copy three files from the FmodEX directory tree into the build tree that the configure command has just created.<br />
<br />
* Copy <code>\api\fmodex.dll</code> to <code>\build-vc100\packages\lib\release</code><br />
* Copy <code>\api\fmodexL.dll</code> to <code>\build-vc100\packages\lib\debug</code><br />
* Copy <code>\documentation\license.txt</code> to <code>build-vc100\packages\licenses\fmodex.txt</code><br />
<br />
{{KBtip|The configuration and copy commands are long. You may want to make two .bat files to simplify this process. The first .bat file will perform the configure step. The second .bat file will perform the copy step. The reason to have two .bat files and not just one is the configure step will exit with an expected error, so any dos commands below the configure command would be skipped.}}<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
*Run:<br />
<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
Example:<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== A full build happens for NVIDIA users, when an incremental compile is expected ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1187954Viewer 2 Microsoft Windows Builds2014-03-01T12:39:21Z<p>Boroondas Gupte: /* Post Configuration step */ fixed a typo</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want to alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs#DownloadFamilies_4 Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), '''curl''' (under "Web"), and '''m4''' (under "interpreters"). Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepad-plus-plus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
* [http://www.fmod.org/download/#FMODExAPIDownloads FMOD Ex Api]<br />
** This is the software that supports sounds. Installing it is optional but the installation instructions will assume you have installed it.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user''' and select '''Properties'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release STORM-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;FMODEX (bool)<br />
::Controls if the FmodEX package is incorporated into the viewer.<br />
:;FMODEX_LIBRARY (path)<br />
::Specifies the location of the FmodEX .lib file needed for linking.<br />
:;FMODEX_INCLUDE_DIR (path)<br />
::Specifies the location of the FmodEX include files.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Example configuration commands===<br />
{{KBnote|You will need to adjust the configure commands below to reflect where you have installed FmodEX.}}<br />
<br />
autobuild configure -c ReleaseOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c RelWithDebInfoOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodex_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
autobuild configure -c DebugOS -- -DPACKAGE:BOOL=OFF -DFMODEX:BOOL=TRUE -DFMODEX_LIBRARY:PATH=E:\FmodEX\api\fmodexL_vc.lib -DFMODEX_INCLUDE_DIR:PATH=E:\FmodEX\api\inc<br />
<br />
===Post Configuration step===<br />
<br />
You need to copy three files from the FmodEX directory tree into the build tree that the configure command has just created.<br />
<br />
* Copy <code>\api\fmodex.dll</code> to <code>\build-vc100\packages\lib\release</code><br />
* Copy <code>\api\fmodexL.dll</code> to <code>\build-vc100\packages\lib\debug</code><br />
* Copy <code>\documentation\license.txt</code> to <code>build-vc100\packages\licenses\fmodex.txt</code><br />
<br />
{{KBtip|The configuration and copy commands are long. You may want to make two .bat files to simplify this process. The first .bat file will perform the configure step. The second .bat file will perform the copy step. The reason to have two .bat files and not just one is the configure step will exit with an expected error; any dos commands below the configure command will not execute.}}<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
*Run:<br />
<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
Example:<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== A full build happens for NVIDIA users, when an incremental compile is expected ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1180945Viewer 2 Microsoft Windows Builds2013-08-26T16:51:56Z<p>Boroondas Gupte: Changed section title from "NVIDIA users may suffer from OPEN-166" to /* A full build happens for NVIDIA users, when an incremental compile is expected */</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepadplusplus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod ===<br />
<br />
{{KBcaution|FMOD is no longer available from the company that wrote it. FmodEX will be replacing it soon, and there will be updated instructions on how to incorporate it into your build. In the meantime ignore all references to building with FMOD.}}<br />
<br />
{{KBcaution|If you are just starting out building the viewer or if you do not care for sound skip these FMOD steps. You will save some time and it is less confusing to make a non-FMOD build.}}<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
'''If the above command fails, you might have the version of bash packaged with Git in your PATH.''' Please edit your path and ensure that the Git path (e.g 'C:\Program Files (x86)\Git\cmd'), if it exists, appears AFTER 'c:\cygwin\bin'.<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-release and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
you can set the default configuration type by setting the environment variable <tt>AUTOBUILD_CONFIGURATION</tt><br />
<br />
set AUTOBUILD_CONFIGURATION=''RelWithDebInfoOS''<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package (for example, see [[#Fmod|Fmod]] below), you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
:;FMOD (bool)<br />
::Controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[#Fmod|Fmod]] below in addition to setting the switch.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Fmod===<br />
<br />
Fmod is the audio library the viewer uses. If you are compiling with Fmod you will need to use a local copy of the configuration file:<br />
<br />
set AUTOBUILD_CONFIG_FILE=''my_autobuild.xml''<br />
<br />
At the command line in the source tree's root directory, presumably in your cloned repository (e.g. <nowiki>C:\linden\VWR-12345\</nowiki>)<br />
<br />
Add a cmake argument to enable building with FMOD:<br />
autobuild configure --config-file my_autobuild.xml [-c ''configuration type''] -- '''-DFMOD:BOOL=TRUE'''<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
{{KBcaution|If you are building with Fmod and have followed the previous Fmod setup instructions AND you are now using a new command window you will need to redo the <code>set AUTOBUILD_CONFIG_FILE{{=}}my_autobuild.xml</code>.}}<br />
<br />
*Run:<br />
<br />
Without FMOD:<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
With FMOD:<br />
autobuild build --config-file my_autobuild.xml -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE"<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE"<br />
autobuild build --config-file my_autobuild.xml -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== A full build happens for NVIDIA users, when an incremental compile is expected ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1180944Viewer 2 Microsoft Windows Builds2013-08-26T16:48:46Z<p>Boroondas Gupte: /* NVIDIA users may suffer from OPEN-166 */ Added punctuation</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepadplusplus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod ===<br />
<br />
{{KBcaution|FMOD is no longer available from the company that wrote it. FmodEX will be replacing it soon, and there will be updated instructions on how to incorporate it into your build. In the meantime ignore all references to building with FMOD.}}<br />
<br />
{{KBcaution|If you are just starting out building the viewer or if you do not care for sound skip these FMOD steps. You will save some time and it is less confusing to make a non-FMOD build.}}<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
'''If the above command fails, you might have the version of bash packaged with Git in your PATH.''' Please edit your path and ensure that the Git path (e.g 'C:\Program Files (x86)\Git\cmd'), if it exists, appears AFTER 'c:\cygwin\bin'.<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-release and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
you can set the default configuration type by setting the environment variable <tt>AUTOBUILD_CONFIGURATION</tt><br />
<br />
set AUTOBUILD_CONFIGURATION=''RelWithDebInfoOS''<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package (for example, see [[#Fmod|Fmod]] below), you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
:;FMOD (bool)<br />
::Controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[#Fmod|Fmod]] below in addition to setting the switch.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Fmod===<br />
<br />
Fmod is the audio library the viewer uses. If you are compiling with Fmod you will need to use a local copy of the configuration file:<br />
<br />
set AUTOBUILD_CONFIG_FILE=''my_autobuild.xml''<br />
<br />
At the command line in the source tree's root directory, presumably in your cloned repository (e.g. <nowiki>C:\linden\VWR-12345\</nowiki>)<br />
<br />
Add a cmake argument to enable building with FMOD:<br />
autobuild configure --config-file my_autobuild.xml [-c ''configuration type''] -- '''-DFMOD:BOOL=TRUE'''<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
{{KBcaution|If you are building with Fmod and have followed the previous Fmod setup instructions AND you are now using a new command window you will need to redo the <code>set AUTOBUILD_CONFIG_FILE{{=}}my_autobuild.xml</code>.}}<br />
<br />
*Run:<br />
<br />
Without FMOD:<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
With FMOD:<br />
autobuild build --config-file my_autobuild.xml -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE"<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE"<br />
autobuild build --config-file my_autobuild.xml -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== NVIDIA users may suffer from OPEN-166 ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile, you may be affected by jira issue {{jira|OPEN-166}}. To fix this, see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment].<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1180943Viewer 2 Microsoft Windows Builds2013-08-26T16:47:30Z<p>Boroondas Gupte: /* NVIDIA users may suffer from OPEN-166 */ Prettyfied link to Comment</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepadplusplus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod ===<br />
<br />
{{KBcaution|FMOD is no longer available from the company that wrote it. FmodEX will be replacing it soon, and there will be updated instructions on how to incorporate it into your build. In the meantime ignore all references to building with FMOD.}}<br />
<br />
{{KBcaution|If you are just starting out building the viewer or if you do not care for sound skip these FMOD steps. You will save some time and it is less confusing to make a non-FMOD build.}}<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
'''If the above command fails, you might have the version of bash packaged with Git in your PATH.''' Please edit your path and ensure that the Git path (e.g 'C:\Program Files (x86)\Git\cmd'), if it exists, appears AFTER 'c:\cygwin\bin'.<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-release and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
you can set the default configuration type by setting the environment variable <tt>AUTOBUILD_CONFIGURATION</tt><br />
<br />
set AUTOBUILD_CONFIGURATION=''RelWithDebInfoOS''<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package (for example, see [[#Fmod|Fmod]] below), you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
:;FMOD (bool)<br />
::Controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[#Fmod|Fmod]] below in addition to setting the switch.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Fmod===<br />
<br />
Fmod is the audio library the viewer uses. If you are compiling with Fmod you will need to use a local copy of the configuration file:<br />
<br />
set AUTOBUILD_CONFIG_FILE=''my_autobuild.xml''<br />
<br />
At the command line in the source tree's root directory, presumably in your cloned repository (e.g. <nowiki>C:\linden\VWR-12345\</nowiki>)<br />
<br />
Add a cmake argument to enable building with FMOD:<br />
autobuild configure --config-file my_autobuild.xml [-c ''configuration type''] -- '''-DFMOD:BOOL=TRUE'''<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
{{KBcaution|If you are building with Fmod and have followed the previous Fmod setup instructions AND you are now using a new command window you will need to redo the <code>set AUTOBUILD_CONFIG_FILE{{=}}my_autobuild.xml</code>.}}<br />
<br />
*Run:<br />
<br />
Without FMOD:<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
With FMOD:<br />
autobuild build --config-file my_autobuild.xml -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE"<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE"<br />
autobuild build --config-file my_autobuild.xml -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== NVIDIA users may suffer from OPEN-166 ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile you may be affected by jira issue {{jira|OPEN-166}}. To fix this see the instructions in [https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563 Dolphin Linden's comment]<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1180942Viewer 2 Microsoft Windows Builds2013-08-26T16:45:16Z<p>Boroondas Gupte: /* NVIDIA users may suffer from OPEN-166 */ Linked Jira issue ID to issue</p>
<hr />
<div>{{multi-lang}}<br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
{{KBcaution|If you want alter the build instructions please try to have a discussion with at least one person on [irc://irc.freenode.net/opensl #opensl on Freenode]. There are language and stylistic conventions we try to follow and we want to make sure any change to these instructions is tested in a number of build environments before being published here.}}<br />
{{CompileNav}} <br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package]<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
** If you get the S1023 error during installation, refer to [http://blogs.msdn.com/b/chuckw/archive/2011/12/09/known-issue-directx-sdk-june-2010-setup-and-the-s1023-error.aspx this page].<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update] and keep running it until no updates are needed. This may take more than 6 iterations on older versions of windows.<br />
** The link above only works when opened in Internet Explorer.<br />
** For windows 8, you need to use the desktop windows update window ('''Control Panel\System and Security\Windows Update'''). The rest is the same as Windows 7.<br />
** For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
** For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
** During the update cycles make sure you have picked up [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 Microsoft Visual Studio 2010 Service Pack 1] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 Microsoft Visual Studio 2010 Service Pack 1] (ISO)<br />
*If you are running VS2010 under anything older than Windows 7, then you might need to install the "Windows Automation" library to avoid seeing VS2010's UI crawl like a tortoise. [http://support.microsoft.com/kb/981741 Here is the relevant MS support article].<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.8 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepadplusplus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties''' or press the windows logo key and the pause key at the same time.<br />
** For XP, when the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables. For Vista and later, when the System Properties window opens, click the '''Advanced system settings''' on the left column, then click '''Environment Variables...'''<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
*(VC Express only) Enable Tools > Settings > Expert Settings to get the Build (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user'''.<br />
<br />
*Pick '''General'''<br />
Set '''Enable Managed Incremental Build''' to <code>Yes</code>.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod ===<br />
<br />
{{KBcaution|FMOD is no longer available from the company that wrote it. FmodEX will be replacing it soon, and there will be updated instructions on how to incorporate it into your build. In the meantime ignore all references to building with FMOD.}}<br />
<br />
{{KBcaution|If you are just starting out building the viewer or if you do not care for sound skip these FMOD steps. You will save some time and it is less confusing to make a non-FMOD build.}}<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
'''If the above command fails, you might have the version of bash packaged with Git in your PATH.''' Please edit your path and ensure that the Git path (e.g 'C:\Program Files (x86)\Git\cmd'), if it exists, appears AFTER 'c:\cygwin\bin'.<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-release and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
The basic command to configure the viewer build is<br />
<br />
autobuild configure [-c ''configuration type'']<br />
<br />
where ''configuration type'' is one of:<br />
:;DebugOS<br />
::maximum debugging information - probably not best for regular use<br />
:;ReleaseOS<br />
::maximum optimizations and some debugging features disabled - best performance<br />
:;RelWithDebInfoOS<br />
::a compromise between the above two extremes - probably best for development<br />
<br />
you can set the default configuration type by setting the environment variable <tt>AUTOBUILD_CONFIGURATION</tt><br />
<br />
set AUTOBUILD_CONFIGURATION=''RelWithDebInfoOS''<br />
<br />
If you need to modify the autobuild.xml configuration file in a way that you don't want to commit, such as having added a locally built library package (for example, see [[#Fmod|Fmod]] below), you will need to override the default configuration file by adding<br />
--config-file ''my_autobuild.xml''<br />
where ''my_autobuild.xml'' is the name of your local configuration file.<br />
<br />
=== Configuration Switches ===<br />
<br />
There are a number of switches you can specify to be passed through <tt>autobuild configure</tt> to the <tt>cmake</tt> command that creates your VS project files. These switches are added after the special argument "<tt>--</tt>". The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
autobuild configure -- -D''switch_name'':''switch_type''=''switch_value''<br />
<br />
:;VIEWER_CHANNEL<br />
::Sets the channel name for your viewer. See [[Channel and Version Requirements]] for how the channel name should be chosen and used.<br />
::Quoting for string values can be tricky, especially with multiple-word values; note the combination of single and double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING='"''channel''"'<br />
::or use escaped double quotes:<br />
autobuild configure -- -DVIEWER_CHANNEL:STRING="\"''channel''\""<br />
:;FMOD (bool)<br />
::Controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[#Fmod|Fmod]] below in addition to setting the switch.<br />
:;LL_TESTS (bool)<br />
::Controls whether or not the unit and integration tests are compiled and run. There are quite a lot of them so excluding them does save some time building, but they may detect errors that will be hard to diagnose in a full viewer. If you plan to submit changes to Linden Lab, please ensure that you have run the tests before submitting.<br />
:;PACKAGE (bool)<br />
::Controls whether or not the package step is run. The package step creates an installer for your viewer. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
===Autobuild Cache Directory===<br />
<br />
In the course of building, autobuild will download and cache a fairly large number of prepackaged builds for components it needs. Most of these will not require that you change them, and autobuild will cache them so that it does not need to download them again.<br />
<br />
The environment variable <nowiki>AUTOBUILD_INSTALLABLE_CACHE</nowiki> controls the location of the autobuild download cache directory. If you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory define the environment variable to point to some other location you have established:<br />
<br />
set AUTOBUILD_INSTALLABLE_CACHE=''E:\SSfiles\Libraries''<br />
<br />
===Fmod===<br />
<br />
Fmod is the audio library the viewer uses. If you are compiling with Fmod you will need to use a local copy of the configuration file:<br />
<br />
set AUTOBUILD_CONFIG_FILE=''my_autobuild.xml''<br />
<br />
At the command line in the source tree's root directory, presumably in your cloned repository (e.g. <nowiki>C:\linden\VWR-12345\</nowiki>)<br />
<br />
Add a cmake argument to enable building with FMOD:<br />
autobuild configure --config-file my_autobuild.xml [-c ''configuration type''] -- '''-DFMOD:BOOL=TRUE'''<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)'''<br />
<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
<br />
{{KBcaution|If you are building with Fmod and have followed the previous Fmod setup instructions AND you are now using a new command window you will need to redo the <code>set AUTOBUILD_CONFIG_FILE{{=}}my_autobuild.xml</code>.}}<br />
<br />
*Run:<br />
<br />
Without FMOD:<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
With FMOD:<br />
autobuild build --config-file my_autobuild.xml -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
<br />
Example without FMOD:<br />
autobuild configure -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE"<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
Example with FMOD:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- "-DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE"<br />
autobuild build --config-file my_autobuild.xml -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== NVIDIA users may suffer from OPEN-166 ====<br />
If you notice that you are suffering from full compiles when you should only be performing an incremental compile you may be affected by jira issue {{jira|OPEN-166}}. To fix this see the instructions in https://jira.secondlife.com/browse/OPEN-166?focusedCommentId=394563&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-394563<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Talk:Viewer_2_Microsoft_Windows_Builds&diff=1170380Talk:Viewer 2 Microsoft Windows Builds2012-07-08T16:07:52Z<p>Boroondas Gupte: /* A few style guidelines */ wikify (emphasized with bold)</p>
<hr />
<div>== A few style guidelines ==<br />
*The person who is following these instructions for the first time may know little or nothing about VS2010. Steps should be kept simple and explained in well written English, not in a succinct description that an experienced person would be able to follow.<br />
<br />
*If there is more than one way to do something only describe one of those ways. The philosophy at the start of this wiki page says, in part: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints.<br />
<br />
*A path to, or a menu entry, should be in '''bold'''.<br />
<br />
*A field you can change should be <code>highlighted</code>.<br />
<br />
*Instructions should apply to Visual Studio Express. If there is a small difference between Express and Pro assume the Pro user is experienced and can figure it out. Try to avoid instructions such as "If Express do this" or "If Pro do this".<br />
<br />
*These instructions were written collaboratively and tested by the authors for correctness in all four combinations of XP/Windows 7 and Express/Pro. If you are going to make a change to these instructions it is strongly suggested you make sure your change works for all these combinations. As your development environment may not be this extensive you may want to recruit help from people in the #opensl IRC channel who are using other OS and compiler configurations.<br />
<br />
*Also before making a change make sure it is not an issue with your local environment. Check with others to see if they are also having this issue.<br />
<br />
*People following these instructions still "go wrong" and come to #opensl for help. If you have the skill to contribute to improving these instructions please consider having an IRC client open to #opensl to assist people.<br />
<br />
*The full style guideline can be found here [[Style_Guide]].<br />
<br />
[[User:Jonathan Yap|Jonathan Yap]] 07:09, 22 June 2012 (PDT)<br />
<br />
: I rather want to have summary, such as, the table of configuration, needed commands without step-by-step instruction. Where to go such a article? If you don't plan to have that, we'd better have two page, one is your instruction, and other is "cheat sheet". -- [[User:Mako Nozaki|Mako]] 08:54, 22 June 2012 (PDT)<br />
<br />
::And by the wiki nature, I want every people post what they find without "filtering", accepting comments or suggestions on this wiki. If you have any comment about that, please write HERE, '''not IM to me''', to share your thought to all the people who watch this wiki. Thanks. -- [[User:Mako Nozaki|Mako]] 17:58, 22 June 2012 (PDT)<br />
<br />
==Mailing list discussions on compile errors, and more==<br />
<br />
=== Eliminate annoying IDE popup ===<br />
If you are compiling with the IDE and keep getting a popup along the lines of "improve microsoft visual studio performance"<br />
Either<br />
*To hide on XP or 2003 Server, right-click on the Task Bar | Select Properties | Select Taskbar tab | select Hide inactive icons | Click Customize | Set the Behavior for item "Improve Microsoft Visual Studio" to "Always hide".<br />
Or<br />
*Follow the registry edit instructions just before "Was this information helpful?" at this link http://support.microsoft.com/kb/981741<br />
<br />
Note: This second method did not work for me.<br />
<br />
[[User:Jonathan Yap|Jonathan Yap]] 8:43, 31 May 2011 (PDT)<br />
<br />
== Order of installing ==<br />
<br />
I got errors during the installation of the directX SDK. the problems occured while it was installing the c++ Runtimes (which have already been installed before). So here is what i did to fix this:<br />
<br />
* remove all 2010 installations<br />
* install the DirectX SDK (June 2010) (that also installs the redistributable packages)<br />
* Install the Visual C++ 2010 Express<br />
* Install Windows SDK for Windows 7 and .NET Framework 4<br />
* Run Microsoft Update<br />
<br />
[[User:Gaia Clary|Gaia Clary]] 21:28, 8 Feb 2012 (CEST)<br />
<br />
: FYI, This is what I find workable. If anyone stuck with the method on the article, try:<br />
<br />
:*Install [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
:*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
:*Check if any Microsoft Visual C++ 2010 Redistributable Package is installed. If so, uninstall it (both x82/x64).<br />
:*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
:*If you have default installed Direct X SDK, [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package] should have been installed as well.<br />
:*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update], and keep running it until no updates are needed. This may take 6~8 iterations on older versions of windows.<br />
:** For Windows XP, use the provided link above. After then, use Microsoft Update on your start menu instead of default Windows Update.<br />
:** For Windows Vista and Windows 7, you can use the link above to add Microsoft Update feature to your Windows Update. "Microsoft Update" won't on menu, so you will have to use default Windows Update to update your Visual Studios.<br />
:** During the update cycles make sure you have picked up ”Microsoft Visual Studio 2010 Service Pack 1". If you haven't, get it from [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 here] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 here] (ISO).<br />
:-- [[User:Mako Nozaki|Mako]] 21:34, 22 June 2012 (PDT)<br />
<br />
== Proposal: Move hints on this talk page to another page ==<br />
<br />
Another hint. In general, we use the talk page to discuss the article itself, not for catch-all issue. See another talk pages and [[Project:Talk_Page_Guidelines]] for the references. Thus, you might want to create another page for hints, i.e. [[Viewer 2 Microsoft Windows Builds/Hint]] and move tips toward that page, and keep talk page open for people who want to say something about this article and maintenance style itself. -- [[User:Mako Nozaki|Mako]] 06:44, 22 June 2012 (PDT)<br />
: For a starter, I withdrew my two posts about tips under my namespace, [[User:Mako Nozaki/The Solutions Against The Viewer Troubles]] since currently I can't find no suitable place to post this article in main namespace. -- [[User:Mako Nozaki|Mako]] 21:21, 22 June 2012 (PDT)<br />
<br />
== Should always re-install Windows operation systems before you start developing viewer? ==<br />
<br />
Related to my previous post to the first topic, this instruction seems to anticipate your Windows "cleaned". However, we may have another projects, another environment, stuffs we can't delete. If we stuck in the middle, should we every time catch someone in the IRC or delete all the environment and start from installing operation systems again? I think wiki is for sharing informations so that people don't have to repeat the similar question on the mailing list or IRC. Just thought. -- [[User:Mako Nozaki|Mako]] 17:40, 22 June 2012 (PDT)</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Limits&diff=1170152Limits2012-07-03T21:23:55Z<p>Boroondas Gupte: /* Avatar */ The number of attachment points is fixed, so it doesn't need a "Max." ... here we're talking about the number of attachments.</p>
<hr />
<div><noinclude>{{KBmaster}}</noinclude><br />
== Summary ==<br />
{{RightToc}}<br />
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer's job is to:<br />
<br />
* Handle locations of objects.<br />
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.<br />
<br />
The simulator's job is to:<br />
<br />
* Run the physics engine.<br />
* Detect collisions.<br />
* Keep track of where everything is<br />
* Send locations of content to the Viewer along with updates when certain changes occur.<br />
<br />
Limits are necessary for all of these components to work together. The list below outlines many of the '''Second Life numerical limits that affect your inworld experience'''. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.<br />
<br />
{{KBcaution|1=The scope of this page is focused on Linden Lab's official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren't provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don't add data without a hard limit, and don't add obscure trivia that doesn't practically affect the general inworld experience.|width=80%}}<br />
<br />
== [[Avatar]] ==<br />
<br />
* '''Max. # of attachments''' - 38 combined [[HUD]] or body attachments.<br />
** They can be viewed by right-clicking your avatar and choosing '''Take Off''' > '''HUD''' or '''Detach'''.<br />
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. <br />
* '''Max. unassisted fly height''' - Stable hover at 4096m.<br />
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.<br />
* '''Common shoe sizes''' - Most women's shoes are designed for a size 0 (zero) foot. Men's generally scale up to 14.<br />
** You can check this by going to Edit menu > Appearance and clicking on the Shape > Legs tab.<br />
<!--Can someone verify the following?<br />
* '''Min. length of avatar name''' - 2 for first name, 2 for last name, 5 in total (including the space).--><br />
* '''Max. length of avatar name''' - 31 for first name, 31 for last name, 63 in total (including the space).<br />
<br />
* '''Max. length of {{LSLGC|Username}}''' - All lower case and a maximum of 63 including the '.'(eg; firstname.lastname)<br />
**Older account user names are a combination of the First and last name in lower case separated by a period(.)(eg; lilmix.pixelmaid)<br />
**Modern user names are a single name(no period)(eg; john1234) - '''Max.''' length is 31 characters<br />
**The {{LSLGC|Legacy Name}}s for modern user names always shows Resident as the last name. So the Max is 40 characters in total for a new avatar's legacy name(including the space and last name 'Resident')<br />
*'''Min. length of [[Display_Names]]''' - At least one script character<br />
*'''Max. length of Display Names''' - 31 characters<br />
**Display Names can include most Unicode script characters, spaces, and some punctuation.<br />
<br />
* '''Max. avatar speed''' - 250m/s (with only attachments to assist)<br />
* '''Max. teleport speed'''<!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--><br />
** '''Server 1.27.1''' - 10 teleports per 15 seconds<br />
** '''Server 1.27.0''' - 3 teleports per 15 seconds<br />
<br />
== [[Animation]] ==<br />
<br />
* '''Max. length of animation:''' 30.0 seconds<br />
* '''Min. animation priority:''' 0<br />
* '''Max. animation priority:''' 4<br />
<br />
== Building ==<br />
<br />
* '''Max. [[prim]] dimensions (non-[[megaprim]])''' - 64&times;64&times;64m<br />
** it was 10&times;10&times;10m before SL Server 3.0.0 (238864) <br />
* '''Min. prim dimensions''' - 0.01&times;0.01&times;0.01m<br />
* '''Max. # of prims in a linkset''' - 256 <br />
** It was 255 before SL Server 1.26.<br />
* '''Max. link distance''' - See [[Linkability Rules]].<br />
* '''Max. physics weight for an object to be set physical''' - 32.0<br />
** If you try to link more, it'll either say "Can't enable physics for objects with more than 32 primitives" or "Object has too many primitives -- its dynamics have been disabled.".<br />
** On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.<br />
* '''Max. build or rez height''' - 4,096m<br />
** This is 768m for Viewers prior to SL 1.20<br />
* '''Max. prim name length''' - 63 bytes UTF-8 [[string]]<br />
** Note: This is the same total character limit as avatar names.<br />
* '''Max. prim description length''' - 127 bytes UTF-8 [[string]]<br />
** Note: <br />
* '''Temporary prim lifetime''' - around 60 seconds<br />
* '''Max. number of temporary prims''' - regular_prim_limit - current_regular_prims + minimum(0.5 * regular_prim_limit + 400, 1000)<br />
** From [http://forums-archive.secondlife.com/8/cd/305651/1.html Andrew Linden's February 2009 discussion])<br />
* '''Max. length of hovertext (via [[llSetText]] or [[PRIM_TEXT]])''' - 254 bytes UTF-8 [[string]]<br />
<br />
== Chat (text) ==<br />
<br />
* '''Whisper distance''' - 10 m<br />
* '''Chat distance''' - 20 m<br />
* '''Shout distance''' - 100 m<br />
** ''Rule of thumb:'' when you're at default zoom ('''View''' > '''Reset View'''), if you can see another person's nametag, they can see your chat. If they're far enough away that you don't see a nametag, they won't "hear" you unless you shout.<br />
** Text spoken as a "Chat" step in a gesture cannot be shouted or whispered<br />
** Text spoken as "Replace with" text in a gesture can be whispered or shouted in Viewer 2 either by putting <code>/whisper</code> or <code>/shout</code> at the start of the "Replace with" text or by typing <code>/whisper</code> or <code>/shout</code> at the beginning of the nearby chat input bar, followed by the gesture's trigger text. (Though, if you do both, or if a gesture with built-in <code>/whisper</code> or <code>/shout</code> is used mid-sentence, the "/whisper" or "/shout" will appear literally.) Viewer 1 does not honor <code>/whisper</code> or <code>/shout</code> and will always send them literally.<br />
* '''Max. length of a chat message''' - 1023 bytes/single-byte characters<br />
** The same holds true for an IM <-> email replies.<br />
*** When the receiver is offline, if they set an IM to Email feature ('''Edit''' > '''Preferences''' (or press {{K|Ctrl|P}}), go to the '''Communication''' tab and check the '''Send IM to Email''' checkbox), it will send offline messages directly to the mailbox connected to your account. When an offline message is received via Email, this message can also be answered via Email again. The length of properly delivered Email replies is limited to 1023 bytes/single-byte characters.<br />
* '''Capped''' - Maximum number of offline messages (involving [[IM]]s, inventory offers, group notices and group invitations) received before messages get capped is 25.<br />
** Senders can't know whether their messages were capped or not.<br />
* '''Email -> IM''' replies can be sent up to 5 days after receiving the offline IM the email is meant to answer.<sup>[<span class="plainlinks">[https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing blog]</span>]</sup><br />
* '''IMs''' are retained on Linden Lab's servers for up to 31 days before being discarded. For example, if someone sends you an Instant Message and the next time you login is 33 days later, you won't get it.<br />
** Torley confirmed this with Kelly Linden.<br />
* The number of '''IMs''' an object can send in one hour is 5000.<br />
<br />
== [[Gesture]]s ==<br />
<br />
* '''Shortcut key mapping:''' 33 unique combinations, since {{K|F2}}&ndash;{{K|F12}} can be used with the {{K|Ctrl}} or {{K|Shift}} modifiers.<br />
* '''Maximum Chat step length:''' 127 single-byte characters.<br />
* '''Maximum Wait time:''' 3600 seconds (one hour).<br />
<br />
== [[Group]]s ==<br />
<br />
* '''Maximum number of groups you can belong to:''' 42<br />
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.<br />
* '''Minimum number of members in a group:''' 2<br />
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.<br />
* '''Maximum number of roles allowed in a group:''' 10 (including "Owners" and "Everyone", which cannot be deleted)<br />
* '''Maximum Group Name:''' 35 single-byte characters.<br />
* '''Maximum Group Title:''' 20 single-byte characters.<br />
* '''Maximum Length of a Group Notice:''' 512 single-byte characters.<br />
<br />
== [[Inventory]] ==<br />
<br />
* '''Maximum number of inventory items that can be sent in a folder:''' 42<br />
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.<br />
* '''Maximum notecard line:''' None, but scripts can only read the first 255 bytes.<br />
* '''Maximum notecard size:''' 65,536 bytes<br />
* '''Number of items in the Library:''' 1,248 as of 2010-06-17<br />
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.<br />
<br />
== [[Land]] ==<br />
<br />
* '''Maximum [[Land#Parcel|parcel]] size:''' 65,536 meters²<br />
** Covering a whole region, or square on the World Map.<br />
* '''Minimum parcel size:''' 16 meters²<br />
* '''Maximum parcel name length:''' 63 single-byte characters<br />
* '''Maximum parcel description length:''' 255 characters<br />
* '''Region name length:''' Under Linden Concierge policy, minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]].<br />
** Rare exceptions exist, like [http://slurl.com/secondlife/Q/128/128/24 Q].<br />
* '''Maximum "NO ENTRY" ban line height:''' is for all options 80 meter. Only the option 'Banned Residents' (named) has a 5020 meter ban line high, which is visible up to a high of 800 meter above the terrain mesh.<br />
* '''Maximum prims in a [[Land#Region|region]]:'''<br />
** Full region: 15,000<br />
** [[Land#Homestead|Homestead]]: 3,750<br />
** [[Land#Openspace|Openspace]]: 750<br />
* '''Maximum auto return value''': Besides "0" (which means ''never''), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.<br />
* '''Terraforming limits:'''<br />
** Most mainland can be raised/lowered by 4 meters (+/-).<br />
** Some mainland cannot be terraformed, including: Bay City Regions, Blumfield, Boardman, Brown, De Haro, Nautilus City Regions, Nova Albion Regions, Shermerville Regions, and West Haven.<br />
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).<br />
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.<br />
* '''Maximum water height:''' 100 meters using inworld controls (mainland limit), 255 meters by using a *.raw file upload.<br />
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.<br />
* '''Maximum terrain height:''' 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.<br />
* '''Miscellaneous estate limits:''' You can have a maximum of 10 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.<br />
** See World menu > Region/Estate > Estate tab.<br />
* '''Mainland maximum number of agents'''<br />
** Full region: 100 (Historically set to 40 by LL but this does vary. Some meeting areas have this set to 60 and higher.)<br />
*** Recent server performance improvements make regions with 60 agents in them perform quite well excepting the issue described in {{JIRA|SVC-3895}}.<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Island maximum number of agents:'''<br />
** Full region: 100<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Freeze Time:''' Land owners can [[freeze]] other Residents for up to 30 seconds. Members of land owning groups can also be granted this ability.<br />
* '''Minimum parcel that can be listed in Places or All search:''' 144 meters² <!-- 128 and under are disabled --><br />
* '''Minimum parcel that can be listed in Events:''' 512 meters²<br />
* '''Maximum altitude for event listings:''' 768 meters ({{JIRA|WEB-814}})<br />
* '''Maximum heights that objects can be seen on the [[World Map]]:''' 400.005m<br />
* '''[[Classic clouds]] layer:''' Approximately 150-225 meters, although the edges of particles can appear to exceed that.<br />
<br />
== Misc. ==<br />
<br />
*'''[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]''' - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.<br />
*'''Contacts in Communication > Friends tab ''' - A maximum of 20 simultaneous contacts can be selected to change permissions, remove, or invite for a conference chat.<br />
<br />
== Navigation ==<br />
<br />
[[File:Max Alt.jpg|thumb|right|435px|'''Height counter error above 2147483647 meters''']]<br />
* '''Absolute height limit:''' [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&nbsp;=&nbsp;2<sup>31</sup>&nbsp;−&nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.<br />
* '''Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:''' 2147483583<br />
** This is lower than the ''Absolute height limit'' above probably because of precision issues. Any value higher than 2147483583 would be rounded up to something beyond 2147483647 and thus cause an [http://en.wikipedia.org/wiki/Arithmetic_overflow overflow], while 2147483583 will still be rounded down to 2147483520 (see below).<br />
* '''Highest altitude you can teleport to with an SLurl:''' 2147483520 meters<br />
<br />
== [[Profile]] ==<br />
<br />
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.<br />
<br />
* '''2nd Life tab's About field''' - 510 bytes<br />
* '''Picks tab''' - 10 picks with 1022 bytes each<br />
* '''1st Life tab's Info field''' - 253 bytes<br />
* '''Classified tab''' - 100 listings with x bytes each<br />
* '''My Notes''' - 1022 bytes<br />
<br />
== Performance ==<br />
<br />
* '''Healthy Viewer FPS''' - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via Help menu > Lag Meter, or for more advanced usage, see View menu > Statistics Bar.<br />
* '''Avatar Rendering Cost scores''' - [[Avatar Rendering Cost|Learn all about it!]]<br />
<br />
== [[Scripting]] ==<br />
<br />
* '''Height at which scripts reactivate on a no-script parcel''' - 50 m above terrain mesh. Scripted objects that take controls continue to remain active when you fly down or enter a no-script parcel.<br />
* '''Maximum height where scripts can run''' - none, as long as the object remains rezzed or attached.<br />
* '''Maximum script source code size''' - 65536 single byte characters.<br />
* For specific scripting limits, lookup calls in the '''[[LSL Portal]]'''.<br />
<br />
== [[Textures]] ==<br />
* '''[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]''' of profile, place, etc. pictures — all of these were measured at UI size (Edit menu > Preferences > General tab > UI Size) = 1.000:<br />
<br />
=== 1.x Series Viewers ===<br />
<br />
(official Viewer up to 1.23.5, most [[Alternate viewers|Third Party Viewers]])<br />
* '''Search > All for "Classifieds", "People", and "Places"''' - 4:3 (256&times;192 pi&times;els)<br />
* '''Search > Places and Classified tabs''' - ~7:5 (398&times;282 pixels)<br />
* '''Search > Land tab''' - ~7:5 (358&times;252 pixels)<br />
* '''Profile > 2nd Life tab''' - ~4:3 (178&times;133 pixels)<br />
* '''Profile > Picks tab''' - 16:9 (288&times;162 pixels)<br />
* '''Profile > 1st Life tab''' - 1:1 (133&times;133 pixels)<br />
* '''Profile > Classifieds tab''' - ~3:2 (206&times;137 pixels)<br />
* '''Profile > Web tab''' - 1:1 (400&times;400 pixels)<br />
** A scrollbar uses 15 pixels on the right-hand side.<br />
* '''About Land > Options tab''' - ~3:2 (178&times;117 pixels)<br />
* '''Group Information > General tab's "Group Insignia"''' - 1:1 (126&times;126 pixels)<br />
** Some of these textures are shared (for example, Search > All place pages, Search > Places, and About Land > Options use the same image), so you should pick a well-balanced ratio and size.<br />
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]<br />
<br />
=== 2.x Series Viewers ===<br />
<br />
* '''Search > Classifieds thumbnail''' - 4:3 (60&times;45 pixels)<br />
* '''Search > Classifieds expanded''' - ~4:3 (252&times;188 pixels)<br />
* '''Search > Classifieds expanded > Details''' - 17:7 (272&times;112 pixels)<br />
* '''Search > People''' - 4:3 (188&times;141 pixels)<br />
* '''Search > Destination Guide thumbnail''' - ~4:3 (45&times;34 pixels)<br />
* '''Search > Destination Guide expanded''' - 5:3 (250&times;150 pixels)<br />
* '''Profile > 2nd Life tab''' - ~1:1 (100&times;99 pixels)<br />
* '''Profile > Picks thumbnail''' - 8:5 (88&times;55 pixels)<br />
* '''Profile > Pick expanded''' - ~5:3 (285&times;172 pixels)<br />
* '''About Land > Options tab''' - ~20:13 (193&times;125 pixels)<br />
* '''Places > More information''' - ~11:7 (272&times;173 pixels)<br />
<br />
=== All Viewers ===<br />
<br />
* '''Maximum texture size''' - 1024&times;1024 pixels<br />
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).<br />
** Some textures inworld have a resolution as high as 2048&times;2048; this is due to a previous limit that was higher.<br />
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.<br />
** Where large textures are being forced by import to only 512&times;512, lower your ...> Preferences >...> UI Size under 1.0, to increase import size to the max 1024&times;1024.<br />
<br />
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]<br />
<br />
=== Notes ===<br />
In general 1 byte is enough to contain one character.</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1168702Viewer 2 Microsoft Windows Builds2012-06-10T16:37:14Z<p>Boroondas Gupte: /* Configuring the Viewer Build */ added missing space before opening brace</p>
<hr />
<div>{{multi-lang}}<br />
{{CompileNav}} <br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
*Install [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Visual C++ 2010 Express] (Web install) or [http://go.microsoft.com/?linkid=9709969 Visual C++ 2010 Express] (ISO)<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web install) [Note: uncheck the Redistributable Package option to prevent installation failure] or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO)<br />
*Check if any Microsoft Visual C++ 2010 Redistributable Package is installed. If so, uninstall it (both x82/x64).<br />
*Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
*If you have default installed Direct X SDK, [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package] should have been installed as well.<br />
*Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update], and keep running it until no updates are needed. This may take 6~8 iterations on older versions of windows.<br />
** For Windows XP, use the provided link above. After then, use Microsoft Update on your start menu instead of default Windows Update.<br />
** For Windows Vista and Windows 7, you can use the link above to add Microsoft Update feature to your Windows Update. "Microsoft Update" won't on menu, so you will have to use default Windows Update to update your Visual Studios.<br />
** During the update cycles make sure you have picked up ”Microsoft Visual Studio 2010 Service Pack 1". If you haven't, get it from [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 here] (Web install) or [http://go.microsoft.com/fwlink/?LinkId=210710 here] (ISO).<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.4 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepadplusplus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild.<br />
* Add the following environment variables:<br />
:{|border="1" class="lltable"<br />
|-<br />
! Name !! Value !! Description<br />
|-<br />
|AUTOBUILD_VSVER||100||so that Autobuild doesn't default to using (or trying) older compiler versions<br />
|-<br />
|AUTOBUILD_INSTALLABLE_CACHE||any existing directory(e.g. E:\SSfiles\Libraries)||(optional) if you do not want the library files downloaded as part of the configure process going into your Windows <nowiki>%TEMP%</nowiki> directory<br />
|-<br />
|}<br />
<br />
* In general, you can modify the environment variables by selecting '''System''' from the Control Panel, selecting '''Advanced system settings''', and clicking '''Environment Variables'''.<br />
* See [http://support.microsoft.com/kb/310519 Microsoft Support Issue] for the detailed instruction on Windows XP.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE.<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You will need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
* Navigate to '''View''' ( > '''Other Windows''' ) > '''Property Manager'''. You will see Property Manager as a pane on the left side.<br />
<br />
:* (VC Express only) If you don't see Property Manager on the menu, enable '''Tools''' > '''Settings''' > '''Expert Settings''' and try again.<br />
<br />
* In Property Manager, click '''Release | Win32''' node. The node expands and displays a user property sheet.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
* Either double-click '''Microsoft.Cpp.Win32.user''', or click '''Microsoft.Cpp.Win32.user''' and then click Properties in the shortcut menu.<br />
<br />
*Pick '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-release. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-release</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-release since you last synchronized your files:<br />
* CD into <code>viewer-release</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-release</code><br />
* Do:<br />
hg clone viewer-release VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod method 1 (using autobuild) ===<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-release and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables --config-file my_autobuild.xml edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables --config-file my_autobuild.xml edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
=== Fmod method 2 (using switches) ===<br />
[To be written up]<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
At the command line in the source tree's root directory, presumably in your cloned repository (e.g. <nowiki>C:\linden\VWR-12345\</nowiki>), run:<br />
autobuild configure --config-file my_autobuild.xml -c [CONFIGURATION]<br />
or if you rather want to use default autobuild.xml, run without --config-file option (the same as the following):<br />
autobuild configure -c [CONFIGURATION]<br />
where <nowiki>[CONFIGURATION]</nowiki> is '''ReleaseOS''', '''RelWithDebInfoOS''' or '''DebugOS'''. See [[Building the Viewer with Autobuild#Build a desired configuration]].<br />
<br />
{{KBnote|It is not a good idea to work in viewer-release, unless you are only compiling for youself.}}<br />
<br />
=== Configuration Switches ===<br />
There are a number of switches you can use to modify the configuration process. The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
* '''FMOD''' (bool) controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[#Fmod_method_1_.28using_autobuild.29]] for this to work.<br />
* '''LL_TESTS''' (bool) controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.<br />
* '''PACKAGE''' (bool) controls if the package step is run. You must have installed NSIS described in [[#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
Example: <br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a ''preconfigured'' Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)''' <br />
<br />
*CD into the source tree's root directory and run:<br />
autobuild build --config-file my_autobuild.xml -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
autobuild configure --config-file my_autobuild.xml -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
autobuild build --config-file my_autobuild.xml -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} (or {{K|F6}} if non-Express) to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate deprecated switches, messages, and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=TPVD/Developers_Group_Agenda&diff=1165064TPVD/Developers Group Agenda2012-04-03T21:18:20Z<p>Boroondas Gupte: /* New: */ wikified formatting</p>
<hr />
<div> '''Add agenda requests at the end, and please put your SL Name in the request so Oz's know who to contact for any clarification'''<br />
'''Use <nowiki>--~~~~</nowiki> to insert your signature'''<br />
Next meeting: '''Noon SLT, April 6'''<br />
<br />
====New:====<br />
<br />
# Showcase deprecation and new Destinations web apps (Sky Linden)<br />
# In-world Viewer Test resources ([[User:Oz Linden|Oz Linden]])<br />
# Pathfinding technology sharing ([[User:Oz Linden|Oz Linden]])<br />
<br />
{{KBcaution|The next meeting will '''not''' be Apr 19th, since Oz will be on a plane (allegedly one with wifi, but I much doubt that will be up to an in-world meeting). Rescheduling TBD.}}<br />
<br />
<!-- Add your item above this comment, and be sure to attach your name or signature using --~~~ --><br />
<br />
====Open Items:====<br />
<br />
# Can the following JIRA issues be made public please: -- [[User:Whirly Fizzle|Whirly Fizzle]]<br />
#* [https://jira.secondlife.com/browse/SH-2791 SH-2791] <br />
#* [https://jira.secondlife.com/browse/CHOP-839 CHOP-839] <br />
# '''Communications reliability issues'''<br />
#*{{JiraIssue|VWR-25940|HTTP communication with grid capabilities router is unreliable at times affecting HTTP Textures}}<br />
#*{{JiraIssue|SVC-6917|Apache2-worker/caps router on sim hosts is relaying 499 HTTP status codes back to clients - not a valid wire status code}}<br />
#*{{JiraIssue|SVC-6760|Apache2-worker/caps router on sim hosts is experiencing a high failure rate leading to service interruptions}}<br />
#*{{JiraIssue|VWR-25145|asset/texture download scenarios that work badly}}<br />
#*{{JiraIssue|VWR-26218|Windows viewer is experiencing DNS issues while attempting to fetch textures}}<br />
#: and the 499/caps failures? Can someone find out why do a few users see these issues so much? --[[User:Kadah Coba|Kadah Coba]] 12:38, 31 May 2011 (PDT)<br />
#* Seeking feedback on good/bad experiences and networking hardware here:<br />
#** {{JiraIssue|VWR-25426|Friendlist displays users as Unknown or (loading), teleports fail, assets will not save}}<br />
#* {{JiraIssue|SVC-4968|Group won't load - too many members}}<br />
<br />
[[Category:Third Party Viewers]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Source_branches&diff=1163374Source branches2012-02-20T15:51:06Z<p>Boroondas Gupte: The SVN repo is long gone. Replaced page with #REDIRECT to article about LL's public mercurial repositories</p>
<hr />
<div>#REDIRECT [[Viewer Integration and Release Processes]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=SpaceNavigator&diff=1160203SpaceNavigator2011-12-27T00:11:53Z<p>Boroondas Gupte: /* Linux */ while we can't use a wiki-syntax ordered list ("# ...") here, due to line breaks within list items, we can use a html one</p>
<hr />
<div>{{Help<br />
|BugFixes=<br />
|Avatar=<br />
|Object=<br />
|LandSim=<br />
|Community=<br />
|Viewer=*<br />
|Communication=<br />
|Multimedia=<br />
|Navigation=*<br />
|Misc=<br />
|Description=<br />
|Wiki=<br />
|Glossary=*<br />
}}<br />
[[Image:I-can-has-spacenavigator.jpg|384px|]] [[Image:SpaceNavigator.png|384px]]<br />
== What is it? ==<br />
'''The [http://www.3dconnexion.com/products/spacenavigator.html 3DConnexion SpaceNavigator] is a 3D mouse''' with [http://en.wikipedia.org/wiki/6DOF 6 degrees of freedom] which can be used in conjunction with Second Life's [[Flycam|Joystick Flycam]]. It's officially supported from version 1.20 and up.<br />
<br />
== How do I make it work? ==<br />
* Install the drivers and [http://www.3dconnexion.com/docs/QSG_English.pdf calibrate]. (For setup on Linux, see [[#Linux|below]])<br />
* In Second Life, make sure to do this:<br />
** Go to Edit menu > Preferences > Input & Camera tab.<br />
** Click "Joystick Setup" and click "Enable Joystick" in the upper-left. If it's grayed-out, make sure your SN is connected properly.<br />
* Confirm Preferences and click OK.<br />
** '''Avatar mode''' - Move the SpaceNavigator cap. You should see your avatar move around.<br />
** '''Flycam mode''' - Press the left SN button, and move the SN to control your camera. (Note that tiny white "Flycam" text ''no'' longer appears in the lower-right.)<br />
** '''Build mode''' - Rez an object, and while it's selected, twist the SN. You should see the object spin.<br />
<br />
* To learn more, '''[[Joystick Flycam|see the Joystick Flycam page]]''' and '''[[Video_Tutorials#SPACENAVIGATOR|watch video tutorials]]''' (these were filmed in an earlier version of Second Life, so some details have changed since then):<br />
<videoflash>gEAyMDDSh5g</videoflash><br />
<br />
=== Linux ===<br />
Linux users may need to do the following. These instructions have been confirmed for Ubuntu Karmic and SL Viewer 1.x.<br />
<ol><br />
<li>Uninstall any 3Dconnexion company supplied Linux drivers as they conflict with the one built into the kernel. The SpaceNavigator shows up as a [http://en.wikipedia.org/wiki/Human_interface_device HID] device that Second Life can use.</li><br />
<li>Create some udev rules if they are not supplied with the distro (e.g. Ubuntu and Gentoo don't supply them). You probably only need to add the third one of the three following KERNEL lines.<br />
<bash><br />
cat << EOF > /etc/udev/rules.d/91-spacenavigator.rules<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c603", SYMLINK+="input/spacemouse", GROUP="plugdev", MODE="664"<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c623", SYMLINK+="input/spacetraveler", GROUP="plugdev", MODE="664"<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c626", SYMLINK+="input/spacenavigator", GROUP="plugdev", MODE="664"<br />
EOF<br />
</bash></li><br />
<li>Create some HAL policy rules to prevent the SpaceNavigator from being used as a mouse with hot-plugging on x-org. Only needed if you find the joystick controlling the mouse. Note that this doesn't apply to Ubuntu distributions from 10.04 onwards.<br />
<bash><br />
cat << EOF > /etc/hal/fdi/policy/3Dconnexion_SpaceNavigator.fdi<br />
<?xml version="1.0" encoding="ISO-8859-1"?><br />
<deviceinfo version="0.2"><br />
<device><br />
<match key="info.product" contains="3Dconnexion SpaceNavigator"><br />
<merge key="input.x11_driver" type="string"></merge><br />
</match><br />
</device><br />
</deviceinfo><br />
EOF<br />
</bash></li><br />
<li>Reboot</li><br />
</ol><br />
<br />
== Related resources ==<br />
* Consult the [http://www.3dconnexion.com/docs/10b.php official documentation] (obvious yet true).<br />
<br />
* Join an inworld group like "3DConnexion Space Cadets" to chat with other SN fans.<br />
<br />
* You can also ask on [http://forums.secondlife.com our forums] and [http://forums.secondlife.com/search.php?query=SpaceNavigator see existing matches for "SpaceNavigator"].<br />
<br />
* Interested in the more technical aspects? Join [[SLDev]] and ask there.<br />
<br />
* [http://www.3dconnexion.com/solutions/secondlife.php Demo video by Beast Linden].<br />
<br />
* [http://uk.youtube.com/watch?v=gfUAyGR5nNs Demo video by Tenebrous Pau].<br />
<br />
=== Bugs ===<br />
* Experiencing a bug? See if it's already been reported or fixed @ {{jira|VWR-6363}}.<br />
<br />
[[Category:Feature Requests]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=SpaceNavigator&diff=1160202SpaceNavigator2011-12-26T23:51:35Z<p>Boroondas Gupte: /* Linux */ due to being entered through 'cat', these are shell inputs</p>
<hr />
<div>{{Help<br />
|BugFixes=<br />
|Avatar=<br />
|Object=<br />
|LandSim=<br />
|Community=<br />
|Viewer=*<br />
|Communication=<br />
|Multimedia=<br />
|Navigation=*<br />
|Misc=<br />
|Description=<br />
|Wiki=<br />
|Glossary=*<br />
}}<br />
[[Image:I-can-has-spacenavigator.jpg|384px|]] [[Image:SpaceNavigator.png|384px]]<br />
== What is it? ==<br />
'''The [http://www.3dconnexion.com/products/spacenavigator.html 3DConnexion SpaceNavigator] is a 3D mouse''' with [http://en.wikipedia.org/wiki/6DOF 6 degrees of freedom] which can be used in conjunction with Second Life's [[Flycam|Joystick Flycam]]. It's officially supported from version 1.20 and up.<br />
<br />
== How do I make it work? ==<br />
* Install the drivers and [http://www.3dconnexion.com/docs/QSG_English.pdf calibrate]. (For setup on Linux, see [[#Linux|below]])<br />
* In Second Life, make sure to do this:<br />
** Go to Edit menu > Preferences > Input & Camera tab.<br />
** Click "Joystick Setup" and click "Enable Joystick" in the upper-left. If it's grayed-out, make sure your SN is connected properly.<br />
* Confirm Preferences and click OK.<br />
** '''Avatar mode''' - Move the SpaceNavigator cap. You should see your avatar move around.<br />
** '''Flycam mode''' - Press the left SN button, and move the SN to control your camera. (Note that tiny white "Flycam" text ''no'' longer appears in the lower-right.)<br />
** '''Build mode''' - Rez an object, and while it's selected, twist the SN. You should see the object spin.<br />
<br />
* To learn more, '''[[Joystick Flycam|see the Joystick Flycam page]]''' and '''[[Video_Tutorials#SPACENAVIGATOR|watch video tutorials]]''' (these were filmed in an earlier version of Second Life, so some details have changed since then):<br />
<videoflash>gEAyMDDSh5g</videoflash><br />
<br />
=== Linux ===<br />
Linux users may need to do the following. These instructions have been confirmed for Ubuntu Karmic and SL Viewer 1.x.<br />
<br />
1) Uninstall any 3Dconnexion company supplied Linux drivers as they conflict with the one built into the kernel. The SpaceNavigator shows up as a [http://en.wikipedia.org/wiki/Human_interface_device HID] device that Second Life can use.<br />
<br /><br />
2) Create some udev rules if they are not supplied with the distro (e.g. Ubuntu and Gentoo don't supply them). You probably only need to add the third one of the three following KERNEL lines.<br />
<bash><br />
cat << EOF > /etc/udev/rules.d/91-spacenavigator.rules<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c603", SYMLINK+="input/spacemouse", GROUP="plugdev", MODE="664"<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c623", SYMLINK+="input/spacetraveler", GROUP="plugdev", MODE="664"<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c626", SYMLINK+="input/spacenavigator", GROUP="plugdev", MODE="664"<br />
EOF<br />
</bash><br />
3) Create some HAL policy rules to prevent the SpaceNavigator from being used as a mouse with hot-plugging on x-org. Only needed if you find the joystick controlling the mouse. Note that this doesn't apply to Ubuntu distributions from 10.04 onwards.<br />
<bash><br />
cat << EOF > /etc/hal/fdi/policy/3Dconnexion_SpaceNavigator.fdi<br />
<?xml version="1.0" encoding="ISO-8859-1"?><br />
<deviceinfo version="0.2"><br />
<device><br />
<match key="info.product" contains="3Dconnexion SpaceNavigator"><br />
<merge key="input.x11_driver" type="string"></merge><br />
</match><br />
</device><br />
</deviceinfo><br />
EOF<br />
</bash><br />
4) Reboot<br />
<br />
== Related resources ==<br />
* Consult the [http://www.3dconnexion.com/docs/10b.php official documentation] (obvious yet true).<br />
<br />
* Join an inworld group like "3DConnexion Space Cadets" to chat with other SN fans.<br />
<br />
* You can also ask on [http://forums.secondlife.com our forums] and [http://forums.secondlife.com/search.php?query=SpaceNavigator see existing matches for "SpaceNavigator"].<br />
<br />
* Interested in the more technical aspects? Join [[SLDev]] and ask there.<br />
<br />
* [http://www.3dconnexion.com/solutions/secondlife.php Demo video by Beast Linden].<br />
<br />
* [http://uk.youtube.com/watch?v=gfUAyGR5nNs Demo video by Tenebrous Pau].<br />
<br />
=== Bugs ===<br />
* Experiencing a bug? See if it's already been reported or fixed @ {{jira|VWR-6363}}.<br />
<br />
[[Category:Feature Requests]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=SpaceNavigator&diff=1160201SpaceNavigator2011-12-26T23:44:13Z<p>Boroondas Gupte: /* Linux */ no need to encode 'special' characters within <pre> element</p>
<hr />
<div>{{Help<br />
|BugFixes=<br />
|Avatar=<br />
|Object=<br />
|LandSim=<br />
|Community=<br />
|Viewer=*<br />
|Communication=<br />
|Multimedia=<br />
|Navigation=*<br />
|Misc=<br />
|Description=<br />
|Wiki=<br />
|Glossary=*<br />
}}<br />
[[Image:I-can-has-spacenavigator.jpg|384px|]] [[Image:SpaceNavigator.png|384px]]<br />
== What is it? ==<br />
'''The [http://www.3dconnexion.com/products/spacenavigator.html 3DConnexion SpaceNavigator] is a 3D mouse''' with [http://en.wikipedia.org/wiki/6DOF 6 degrees of freedom] which can be used in conjunction with Second Life's [[Flycam|Joystick Flycam]]. It's officially supported from version 1.20 and up.<br />
<br />
== How do I make it work? ==<br />
* Install the drivers and [http://www.3dconnexion.com/docs/QSG_English.pdf calibrate]. (For setup on Linux, see [[#Linux|below]])<br />
* In Second Life, make sure to do this:<br />
** Go to Edit menu > Preferences > Input & Camera tab.<br />
** Click "Joystick Setup" and click "Enable Joystick" in the upper-left. If it's grayed-out, make sure your SN is connected properly.<br />
* Confirm Preferences and click OK.<br />
** '''Avatar mode''' - Move the SpaceNavigator cap. You should see your avatar move around.<br />
** '''Flycam mode''' - Press the left SN button, and move the SN to control your camera. (Note that tiny white "Flycam" text ''no'' longer appears in the lower-right.)<br />
** '''Build mode''' - Rez an object, and while it's selected, twist the SN. You should see the object spin.<br />
<br />
* To learn more, '''[[Joystick Flycam|see the Joystick Flycam page]]''' and '''[[Video_Tutorials#SPACENAVIGATOR|watch video tutorials]]''' (these were filmed in an earlier version of Second Life, so some details have changed since then):<br />
<videoflash>gEAyMDDSh5g</videoflash><br />
<br />
=== Linux ===<br />
Linux users may need to do the following. These instructions have been confirmed for Ubuntu Karmic and SL Viewer 1.x.<br />
<br />
1) Uninstall any 3Dconnexion company supplied Linux drivers as they conflict with the one built into the kernel. The SpaceNavigator shows up as a [http://en.wikipedia.org/wiki/Human_interface_device HID] device that Second Life can use.<br />
<br /><br />
2) Create some udev rules if they are not supplied with the distro (e.g. Ubuntu and Gentoo don't supply them). You probably only need to add the third one of the three following KERNEL lines.<br />
<pre><br />
cat << EOF > /etc/udev/rules.d/91-spacenavigator.rules<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c603", SYMLINK+="input/spacemouse", GROUP="plugdev", MODE="664"<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c623", SYMLINK+="input/spacetraveler", GROUP="plugdev", MODE="664"<br />
KERNEL=="event[0-9]*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c626", SYMLINK+="input/spacenavigator", GROUP="plugdev", MODE="664"<br />
EOF<br />
</pre><br />
3) Create some HAL policy rules to prevent the SpaceNavigator from being used as a mouse with hot-plugging on x-org. Only needed if you find the joystick controlling the mouse. Note that this doesn't apply to Ubuntu distributions from 10.04 onwards.<br />
<pre><br />
cat << EOF > /etc/hal/fdi/policy/3Dconnexion_SpaceNavigator.fdi<br />
<?xml version="1.0" encoding="ISO-8859-1"?><br />
<deviceinfo version="0.2"><br />
<device><br />
<match key="info.product" contains="3Dconnexion SpaceNavigator"><br />
<merge key="input.x11_driver" type="string"></merge><br />
</match><br />
</device><br />
</deviceinfo><br />
EOF<br />
</pre><br />
4) Reboot<br />
<br />
== Related resources ==<br />
* Consult the [http://www.3dconnexion.com/docs/10b.php official documentation] (obvious yet true).<br />
<br />
* Join an inworld group like "3DConnexion Space Cadets" to chat with other SN fans.<br />
<br />
* You can also ask on [http://forums.secondlife.com our forums] and [http://forums.secondlife.com/search.php?query=SpaceNavigator see existing matches for "SpaceNavigator"].<br />
<br />
* Interested in the more technical aspects? Join [[SLDev]] and ask there.<br />
<br />
* [http://www.3dconnexion.com/solutions/secondlife.php Demo video by Beast Linden].<br />
<br />
* [http://uk.youtube.com/watch?v=gfUAyGR5nNs Demo video by Tenebrous Pau].<br />
<br />
=== Bugs ===<br />
* Experiencing a bug? See if it's already been reported or fixed @ {{jira|VWR-6363}}.<br />
<br />
[[Category:Feature Requests]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Alternate_viewers&diff=1160198Alternate viewers2011-12-26T23:33:25Z<p>Boroondas Gupte: Undo revision 1159717 by Jeremy Linden (Talk). Please keep this redirect as-is, to keep links from forum archive to TPVs functional.</p>
<hr />
<div>#REDIRECT [[Downloads#non-linden]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=TPVd&diff=1157365TPVd2011-11-06T17:56:28Z<p>Boroondas Gupte: Redirected page to Third Party Viewer Directory</p>
<hr />
<div>#REDIRECT [[Third Party Viewer Directory]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=TPVD&diff=1157363TPVD2011-11-06T17:51:31Z<p>Boroondas Gupte: Redirected page to Third Party Viewer Directory</p>
<hr />
<div>#REDIRECT [[Third Party Viewer Directory]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=How_To_Submit_A_Viewer_Change&diff=1157087How To Submit A Viewer Change2011-11-02T20:26:26Z<p>Boroondas Gupte: /* Linden Submissions */ cosmetic corrections</p>
<hr />
<div>{{Project Snowstorm Nav}}<br />
'''This is not the place to start''' if you want to change the Viewer.<br /><br />
If you are interested in proposing a Viewer feature or modification, see [[How To Propose A Viewer Feature]].<br />
<br /><br /><br />
__TOC__<br />
<br clear="all"/><br />
This page is one part of the [[Viewer Integration and Release Processes]] and, before you belong here, you should already have gotten your proposed change accepted (strictly speaking, if you want to do the work of implementing the change first, that's up to you, but you still have to go back and get the idea accepted before you submit the code).<br />
<br /><br /><br />
For general advice on how to prepare changes so that they can get through the review and submission process easily, see [[Submitting code]].<br />
<br />
<br />
==Submitting an Integration Request==<br />
<br /><br />
Commit access to the viewer-development repository is managed by the Snowstorm team.<br /><br /><br />
<br />
A full description of the [[#Snowstorm Workflow Detail|Snowstorm workflow is below]]. The criteria to be met before submitting an integration request, and complete instructions for completing a merge request, are described in the following sections.<br />
<br /><br /><br />
<br />
----<br />
<br />
===Readiness Criteria===<br />
<br /><br />
Changes must meet all of the [[Viewer Integration and Release Processes#Development_Integration_Criteria|Development Integration Criteria]] before it can be pulled to the Development repository.<br />
<br />
# '''Functionality must have been reviewed and accepted by the Product Owner''':<br />
#: Normally, this means that the item must be on the current Sprint Backlog for the Snowstorm Project Team or some other Linden viewer development team, and has been reviewed by the Product Manager for that team. See [[How To Propose A Viewer Feature]].<br />
# '''Design and code must have been reviewed by competent reviewers.'''<br />
#: Reviewer(s) must be identified in the Jira item(s) used to track the change.<br />
#: The strongly preferred way to review code is to post the change on the [[Code Review Tool]] site.<br />
# '''There must be a test plan'''<br />
#: The test plan must describe in detail how Integration QA can validate the modified behavior.<br />
#:* For bug fixes, putting the test plan into a Jira comment is acceptable (since the issue should already contain a documented way to reproduce the problem, this should not be much new work).<br />
#:* For features, links to wiki pages are preferred.<br />
#:* For features especially, building and distributing a viewer from the Project repository for live testing is strongly encouraged.<br />
# '''The Project repository must have merged in the latest changes from Development.'''<br />
#: The results must be validated by building viewers for all platforms and doing at least minimal viewer testing.<br />
# '''There must be a [http://lecs.opensource.secondlife.com/SLVcontribution_agmt.pdf Contribution Agreement] on file from each contributor to the change that is not a Linden employee or contractor.'''<br />
#* External contributions '''must''' include the appropriate updates to <code>doc/contributions.txt</code><br />
#* If you already have one or more entries in <code>contributions.txt</code>, add new ones at the appropriate positions (sorting yours, if desired).<br />
<br /><br />
<br />
----<br />
<br />
===Linden Submissions===<br />
<br /><br />
''After'' the code has met all of the above-stated Readiness Criteria (all code and product owner review is complete), submit a Merge Request issue in the Snowstorm Jira project to have the Snowstorm team integrate your change(s) into the viewer-development repository. The process for creating a Merge Request is described below. <br />
<br />
# Login to your Jira account<br />
# Create a new issue; Project '''Snowstorm''', Issue Type '''Merge Request'''<br />
# Enter a ''meaningful'' Summary (e.g. 'Merge Soft-Body Physics project'), ''not'' "Please merge my changes"<br />
# In the '''Branch/Repo Fixed In''' field, select the repository to which your change should be merged. Normally this is <tt>viewer-development</tt> or <tt>viewer-beta</tt>; this should be the same as the one you cloned to do the work. '''Do not''' select a version number &mdash; that will be set later by the Release Manager.<br />
# In the Description, highlight any potential areas of conflict<br />
<br />
'''Note that, by default, all issues in the Snowstorm Jira project are visible to the public.'''<br />
<br />
When your issue is complete, execute the '''Submit for Review''' transition.<br />
<br />
This image shows the workflow for Merge Request issues (green = development, blue = product managment, purple = viewer integration, orange = QA ):<br />
<br />
[[Image:ViewerMergeWorkflow.png]]<br />
<br />
----<br />
<br />
===Open Source Submissions===<br />
<br /><br />
Open source contributors should be working on issues that are already in the Snowstorm project and on the Sprint Backlog, so the issues involved should already be in the Snowstorm project. For these issues, execute the '''Ready For Review''' transition.<br />
<br />
When you execute that transition, you will be prompted for the following two fields, which you should be prepared to fill in (or you should have already edited them into the issue):<br />
<br />
;Branch/Repo Fixed In<br />
:This should be the url of a publicly visible (preferably bitbucket.org) hg repository that is a clone of the current viewer development with the change for this issue (and _only_ this issue) added to it.<br />
<br />
;Code Review<br />
:This should be the URL of a review of that same change posted at codereview.secondlife.com (see [[Code Review Tool]])<br />
<br /><br />
<br />
== Snowstorm Workflow Detail ==<br />
<br /><br />
The sections below describe the workflow for issues in the [http://jira.secondlife.com/browse/STORM Snowstorm Jira project]. Issues enter this workflow either by being moved from the VWR project, or when a '''Merge Request''' issue is created by some Linden scrum team that is ready to merge into the main development viewer.<br />
<br />
[[Image:JIRA-STORM-workflow.png|right]]<br />
<br /><br />
<br /><br />
<br />
===Normal Workflow Transitions===<br />
<br /><br />
;Open &rarr; ''Start Progress'' &rarr; In Progress (''assignee only'')<br />
:When a developer picks a task to work on from the Sprint List, they Assign the task to themselves and execute this transition to show that work has begun.<br />
----<br />
;In Progress &rarr; ''Ready For Review'' &rarr; Reviewing (''assignee only'')<br />
:When a developer has finished work, they execute this transition, setting:<br />
:*'''Branch/Repo Fixed In''' and '''Changeset/Revision ID''' fields to point to a public mercurial repository containing the change<br />
:*'''Code Review''' to the URL of [[Code_Review_Tool#Post_Code_To_Be_Reviewed|a code review in the Code Review Tool]]<br />
----<br />
;Reviewing &rarr; ''Add Approval'' &rarr; Reviewing<br />
:When each review is complete, the reviewer (normally a Linden) executes this transition, checking either '''Product Owner''' or '''Code Review''' in the '''Approvals''' field.<br />
:When both are checked, the last reviewer should execute the ''Merge'' transition.<br />
----<br />
;Reviewing &rarr; ''Merge'' &rarr; Approved<br />
:At this point, the issue should have satisfied all of the [[#Readiness_Criteria|Readiness Criteria]]. This transition moves the issue to the Snowstorm Integration Queue (including setting it to Unassigned)<br />
----<br />
;Approved &rarr; ''Integrated'' &rarr; Integration Test<br />
:When a Snowstorm Team member takes responsibility for pulling the request, they Assign it to themselves (thus removing it from the queue), and execute the hg steps to pull the change to viewer-development. When that is complete, they execute this transition to indicate that QA should test it (sets Assignee to Unassigned).<br />
----<br />
;Integration Test &rarr; ''Pass QA'' &rarr; Passed QA<br />
:When a QA tester has confirmed that the issue is fixed in a Development (or later stage - Beta or other release candidate) build, they execute the Passed QA transition.<br />
----<br />
;Passed QA &rarr; ''Close'' &rarr; Closed<br />
:When Release posts the final stable release that includes the change for the issue, this transition is executed.<br />
----<br />
<br style='clear: both;'/><br />
<br /><br />
<br /><br />
<br />
=== Workflow Transition Exceptions ===<br />
<br /><br />
;Open &harr; ''Needs More Info/Re-Open'' &rarr; Needs More Info<br />
:If information from the Reporter or someone else is needed in order to complete the request, these transitions are used to reflect that.<br />
----<br />
;Reviewing &rarr; ''Reject'' &rarr; Open<br />
:If either review determines that the change is not ready, this transition is used to return the issue to the developer.<br />
----<br />
;Approved &rarr; ''Integration Failed'' &rarr; Open<br />
:If a problem arises when integrating a change, the person that finds the problem executes this transition to return the issue to the developer with a description of the problem to be solved.<br />
----<br />
;Integration Test &rarr; ''Fail QA'' &rarr; Open<br />
:Used by QA to indicate that when tested in a Development (or later stage) build, the test failed<br />
<br /><br />
<br />
==Tracking==<br />
<br /><br />
You can see the current state of the Snowstorm queues:<br />
<br />
==== [http://jira.secondlife.com/secure/IssueNavigator.jspa?mode=hide&requestId=13082 Reviewing] ====<br />
Development is believed to be complete, and issue is awaiting review and approval.<br />
<br /><br />
<br />
==== [http://jira.secondlife.com/secure/IssueNavigator.jspa?mode=hide&requestId=13064 Integration] ====<br />
Change has been approved for integration into viewer-development<br />
<br /><br />
<br />
==== [http://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+STORM+AND+status+%3D+Integrated+ORDER+BY+updated+DESC%2C+priority+DESC Testing] ====<br />
Change has been integrated and is awaiting QA<br />
<br /><br />
<br />
<br />
These and other Project Snowstorm tracking information are available on the shared "Snowstorm" dashboard in Jira.</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1153976Open Development User Group2011-09-21T18:55:26Z<p>Boroondas Gupte: Topics for Sep 21: STORM-1524 (again)</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# Status of {{JiraIssue|STORM-1524|Fixes for viewer-autobuild for standalone}}? ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#* Got any LL reviews of this, yet?<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1153588Open Development User Group2011-09-14T20:22:56Z<p>Boroondas Gupte: Topics: new logo; STORM-1524</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# New Snowstorm Logo :-) ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#* [[Image:New-Snowstorm-icon.png]]<br />
# Status of {{JiraIssue|STORM-1524|Fixes for viewer-autobuild for standalone}}? ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#* Anyone up to give this a real code review? The two [https://codereview.secondlife.com/r/167/ Ship-It!]s are based on testing rather than looking at the code.<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=How_to_avoid_DOS_line_endings_in_Windows_tools&diff=1153346How to avoid DOS line endings in Windows tools2011-09-11T14:13:31Z<p>Boroondas Gupte: /* Strip'em */ made ')' bold, too. You don't give an explicit list of files to strip'em but a regex.</p>
<hr />
<div>{{RightToc}}<br />
<br />
If you are going to work on the viewer code you need to conform to the [[Coding Standard]].<br />
Standards your editor must support:<br />
* Lines must end with a <code>LF</code> (linefeed) character. In addition to the editor specific notes below, you should consider using the Mercurial extension [http://mercurial.selenic.com/wiki/EolExtension EolExtension] to make line-endings less of a problem.<br />
* A tab must be the same width as 4 spaces.<br />
<br />
==Strip'em==<br />
*Third party tool for Visual Studio 2008/2010 to automatically convert files to specified line ending type when a file is saved.<br />
*Download and instructions: http://grebulon.com/software/stripem.php<br />
*You will need to set to save to '''Unix (LF)''' line ending and add <code>|xml</code> to the regular expression of files this tool watches. <br />
**This is done in its options floater accessed from inside Visual Studio, '''Tools''' -> '''Stripem'''. <br />
*You need to configure Visual Studio to automatically reload files that change externally.<br />
**Select '''Tools''' -> '''Options...''' -> '''Environment''' -> '''Documents''' from the VS menu. <br />
**Check '''Detect when file is changed outside the environment''' and '''Auto-load changes, if saved'''.<br />
<br />
==Notepad++==<br />
Configuring Notepad++ ([http://notepadplusplus.org/ download Notepad++])<br />
<br />
* Line ending<br />
** You should not need to specify the line ending for an existing file but for a new file you will want to set '''Edit''' > '''EOL Conversion''' > '''UNIX Format'''<br />
* Tab spacing<br />
** Go to '''Settings''' > '''Preferences''' > '''Language Menu/Tab Settings'''.<br />
** Click on '''Default'''<br />
** Change '''Tab Size''' to <code>4</code><br />
** Uncheck the box '''Replace by space'''<br />
** Note: if you are going to be using the program as a general editor, you can customize which file types this tab to space conversion applies to.<br />
<br />
<br />
==Programmer's Notepad==<br />
Configuring Programmer's Notepad ([http://pnotepad.org/ download Programmer's Notepad])<br />
<br />
* Per-file Line-ending Setting<br />
** You should not need to specify the line ending for an existing file but for a new file you will want to set '''File''' > '''Properties...''' > '''Line Endings''' to '''Unix (LF)'''<br />
* To set "Unix" line endings as default for new files<br />
** Go to '''Tools''' > '''Options''' > '''General''' > '''Defaults'''<br />
** Set '''Line Endings''' to '''Unix (LF)'''<br />
* Tab spacing<br />
** Go to '''Tools''' > '''Options''' > '''General''' > '''Defaults'''<br />
** Make sure the '''Use the tab character for indentation''' setting is checked.<br />
** Set '''Tab Width''' to <code>4</code><br />
* Visible whitespace<br />
** It is convenient to be able to tell at a glance if there are incorrect characters used for indentation or line endings<br />
** Go to '''Tools''' > '''Options''' > '''General''' > '''Defaults'''<br />
** Check the box '''Visible Line Endings'''<br />
** Check the box '''Visible Whitespace Characters'''<br />
* Correcting line endings on existing files<br />
** Go to '''Tools''' > '''Line Endings''' > '''Unix (LF)''' to convert the file</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=LlGetGeometricCenter&diff=1153180LlGetGeometricCenter2011-09-07T18:35:33Z<p>Boroondas Gupte: fixed grammar of 'note'</p>
<hr />
<div>{{Issues/SVC-6579}}{{LSL_Function<br />
|func_id=278|func_sleep=0.0|func_energy=10.0<br />
|func=llGetGeometricCenter|return_type=vector<br />
|func_footnote<br />
|func_desc<br />
|Return_text=that is the geometric center of the object [[Viewer_coordinate_frames#Local|relative]] to the root prim.<br />
|spec<br />
|caveats=The "geometric center" is different from the "center" in viewer's build tools and also different from what [[llRezObject]] considers to be the "center" of a linkset.<br />
|constants<br />
|examples<br />
|helpers<br />
|also_functions=<br />
{{LSL DefineRow||[[llGetCenterOfMass]]|}}<br />
|also_events<br />
|also_tests<br />
|also_articles<br />
|notes=<br />
* The "geometric center" is the average of all linked prim centers. Mathematically, it's the root-relative positions of all linked prims in the linkset added together and divided by the number of prims in the linkset.<br />
|cat1=Physics<br />
|cat2<br />
|cat3<br />
|cat4<br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=LlGetGeometricCenter&diff=1153179LlGetGeometricCenter2011-09-07T18:33:03Z<p>Boroondas Gupte: made the caveat sentence a bit clearer (I hope)</p>
<hr />
<div>{{Issues/SVC-6579}}{{LSL_Function<br />
|func_id=278|func_sleep=0.0|func_energy=10.0<br />
|func=llGetGeometricCenter|return_type=vector<br />
|func_footnote<br />
|func_desc<br />
|Return_text=that is the geometric center of the object [[Viewer_coordinate_frames#Local|relative]] to the root prim.<br />
|spec<br />
|caveats=The "geometric center" is different from the "center" in viewer's build tools and also different from what [[llRezObject]] considers to be the "center" of a linkset.<br />
|constants<br />
|examples<br />
|helpers<br />
|also_functions=<br />
{{LSL DefineRow||[[llGetCenterOfMass]]|}}<br />
|also_events<br />
|also_tests<br />
|also_articles<br />
|notes=<br />
* Geometric center is the average of all linked prim centers. Mathematically it's the root relative position of all linked prims in the linkset added together and divided by the number of prims in the linkset.<br />
|cat1=Physics<br />
|cat2<br />
|cat3<br />
|cat4<br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=LlGetGeometricCenter&diff=1153178LlGetGeometricCenter2011-09-07T18:31:41Z<p>Boroondas Gupte: This seems to be working 'as designed' and we know of no plans to change this specific function, so drop the 'currently' notion from the caveat.</p>
<hr />
<div>{{Issues/SVC-6579}}{{LSL_Function<br />
|func_id=278|func_sleep=0.0|func_energy=10.0<br />
|func=llGetGeometricCenter|return_type=vector<br />
|func_footnote<br />
|func_desc<br />
|Return_text=that is the geometric center of the object [[Viewer_coordinate_frames#Local|relative]] to the root prim.<br />
|spec<br />
|caveats=The "geometric center" is different from the "center" in viewer's build tools and what [[llRezObject]] considers as the "center" of a linkset.<br />
|constants<br />
|examples<br />
|helpers<br />
|also_functions=<br />
{{LSL DefineRow||[[llGetCenterOfMass]]|}}<br />
|also_events<br />
|also_tests<br />
|also_articles<br />
|notes=<br />
* Geometric center is the average of all linked prim centers. Mathematically it's the root relative position of all linked prims in the linkset added together and divided by the number of prims in the linkset.<br />
|cat1=Physics<br />
|cat2<br />
|cat3<br />
|cat4<br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Snowglobe_FAQ&diff=1153089Snowglobe FAQ2011-09-05T20:35:31Z<p>Boroondas Gupte: /* What source code will you be releasing, and how will it be licensed? */ Corrected license name. (There's no such thing as a "lesser gnu" :-P)</p>
<hr />
<div>This FAQ is for the Viewer open source project, [[Snowglobe]]; also see the [[Extended FAQ]].<br />
<br />
==The basics==<br />
<br />
Linden Lab has made the Second Life Viewer source code available as open source, enabling developers to download the Second Life Viewer source code and make modifications and additions to the code.<br />
<br />
===What do you mean "open source"?===<br />
Computer software is often produced by writing the software in a human-readable format (the "source code"), and then translating ("compiling") it into a format that is more efficient for computers and easier for end-users to work with (the "executable"). The executable is not designed to be edited, so it's very difficult to modify. When a company produces proprietary software, they typically only give users of the software the executable (not the source code), and prohibit modification or even detailed inspection of that executable.<br />
<br />
In simple terms, "open source" means making the source code available for copying, and explicitly allowing users to modify their copy, and share their modified version with their friends, their customers, or the rest of the world. The most widely accepted definition of "open source" is the [http://opensource.org/docs/osd "Open Source Definition"] published by the Open Source Initiative, though many prefer the term "Free Software", defined by the Free Software Foundation's [http://www.gnu.org/philosophy/free-sw.html "Free Software Definition"]. The Second Life viewer code qualifies as both "open source" and "free software".<br />
<br />
===I just like to shop and chat with friends in Second Life. I don't get this techy stuff, how will "open source" benefit my experience?===<br />
This is a fundamental improvement in the way that the Second Life Grid's infrastructure gets built, which improves the experience for all users of the Second Life Grid. In the short term, this will provide a richer communication channel between the community and the engineers that build it. This gives the community greater insight necessary to make more informed suggestions about how to improve the Second Life Grid, and gives the engineers another valuable channel to get feedback and oversight. It allows Linden Lab to more easily extend our quality assurance process outside the walls of our (real world) building. As the architecture improves, standards evolve that lead to the creation of an ecosystem of tools and other software products that make Second Life a much more compelling experience. With more tools available, content creators get a greater and faster ability to create more compelling objects, more interesting buildings and in-world architecture, and more quirky and unique fashion items. Eventually, development of the viewer itself becomes more distributed, as individuals and companies become more familiar with the codebase and figure out how to leverage their access to the code, and those of us at Linden Lab figure out how to more deeply involve the community in our development process.<br />
<br />
In short, this helps casual users by making the Second Life Grid a more robust and attractive environment for everyone. If all you want to do is hang out with your friends, this will help in attracting more of your friends. If all you want to do is shop, this will foster greater creativity, which means there will be more interesting and valuable things to shop for.<br />
<br />
==Security==<br />
<br />
===Won't this lead to serious security issues? What are you doing to counter that?===<br />
Security was obviously a major factor to consider when preparing to open source the Second Life viewer. We've spent significant time preparing and testing to ensure the stability and continued robustness of the client software.<br />
<br />
This move will eventually increase the security of the Second Life Grid since there are now more people looking at the code, highlighting potential exploits and providing bug fixes and updates. There will always those who wish to crack any type of software for malicious purposes. Opening the source code doesn't change our exposure to that, since these crackers retroengineer proprietary code anyway. In fact, it takes some of the sport out of doing just that.<br />
<br />
We can't foresee every possible way that some people might be able to create an abusive viewer, but we've done a thorough audit and taken other precautions to ensure that the new availability of source code will be an unambiguously positive experience. More on this in later questions...<br />
<br />
It's also worth reiterating that any code written by the community which is integrated into the official Second Life client, available only from Linden Lab, will be fully vetted by our QA team.<br />
<br />
===Won't this cause more problems in-world?===<br />
The Second Life Grid is a chaotic, vibrant environment. People are free to create what they want. That's what makes it so engaging and interesting. Sadly, some people choose to create scripts which impact the enjoyment of the Second Life Grid for others. That's against the community culture of Second Life. We've seen a few recent examples of what we call 'griefing', with the Grey Goo attacks. These caused short interruptions to the service while we restarted the Second Life Grid. We're putting in place measures to prevent a recurrence of those attacks.<br />
<br />
Open sourcing our client is unrelated to these types of attacks which use the scripting language allowing objects to be animated within the Second Life Grid. By far, the greatest uses of those scripts only serve to enhance the experience for all residents. We give people the ability to create powerful scripts, and with that comes a certain responsibility to use that power wisely. Sadly, some people abuse it, but we want to cater for the majority, so those abilities will remain in place. Meanwhile, we're countering certain self-replicating scripts, which are clearly part of a griefing attack.<br />
<br />
We believe that open sourcing the viewer will accelerate the development of new features, the resolution of bugs, and enhance the security for all residents so the sooner it's available, the better.<br />
<br />
===How can you prevent malicious programmers from finding flaws in the code to exploit security problems?===<br />
You might as well ask how you stop someone breaking into your home. You want to make it difficult to do (by adding locks on the doors), make it transparent when it does (by adding an alarm), and ensure a prompt response (so the alarm alerts the police). The idea is to disincentivize that behavior. We're doing the same on the Second Life Grid, which as you might imagine has security, constant monitoring, and a 24 hour response team. But, ultimately, if someone is determined to break in, has access to the right resources and skills, and enough time - they may well succeed. To that extent, the Second Life Grid is as much at risk as any other online business.<br />
<br />
There is a risk that publishing will make it slightly easier for malicious programmers to find security vulnerabilities in the Second Life viewer. However, withholding source code access doesn't seem to be much of a deterrent to criminals hoping to exploit problems in the viewer. Our old approach of "security through obscurity", by withholding source code and prohibiting reverse compilation of the viewer ensured that only those people who don't respect rules would inspect the viewer's security. Our new approach of publishing the source code creates a much larger group of people inspecting the inner workings of our viewer. Since that group has our explicit blessing, this group is likely to be (in aggregate) a much more law-abiding group, and more inclined to discreetly report problems to us. For a more thorough discussion of this subject, see: "The secrets of open source security." by Chad Perrin at TechRepublic .<br />
<br />
However, we're not solely relying on our switch to a more robust development model to ensure greater security for the Second Life viewer. We've spent months performing a security audit of our design and our source code to reduce the risk that the increased attention we'll be receiving as we release this won't result in a spate of vulnerability discoveries.<br />
<br />
As far as the nuisance-value of attacks like Grey Goo, we're already seeing a social response which deters individual residents from creating malicious content that impacts others. Ultimately, any sustainable community relies on social norms, with the threat of disdain and ostracism, to encourage individuals to act responsibly. We're proud that the Second Life community has historically risen to the challenge of dealing with disruptive individuals without overweening regulation, and we plan to continue to apply a light touch, fostering more sophisticated community norms rather than instituting heavy-handed crackdowns.<br />
<br />
Wait, doesn't that mean anyone will be able to change anything in the code? How are you going to keep people from inserting malicious code and exploits into SL?<br />
Anyone will be able to create a new viewer for their own personal use, or share that modified viewer with others. Anyone will be able to submit code to Linden Lab, which we will consider including in the Second Life viewer that most people download from secondlife.com. However, we will carefully review any submission, and ensure that it is safe and stable code that will be of broad benefit to all before we accept it into the mainstream version of the Second Life viewer.<br />
<br />
For most residents, the experience of getting the viewer will be the same as before, with the only change being that some well-tested new features developed outside of Linden Lab (but reviewed and approved by Linden Lab) will occasionally find their way into the viewer.<br />
<br />
Won't someone be able to create a hacked up viewer that steals all of my Linden (L$)?<br />
No. The important logic for transfering L$ between accounts happens on our servers, not in the viewer. The simulator code on our servers doesn't assume that the viewer is "trusted" code in any way, in the same way that web servers (should) never assume that a particular "trusted" web browser is being used.<br />
<br />
Will someone use a hacked client to copy all my content without my permission?<br />
In some cases (e.g. textures), it will be possible for someone to create a client that doesn't respect the "do not copy" flag, since anything that can be viewed on the viewer can be copied. Some content doesn't need to get sent to the viewer, such as scripts, or items in your inventory, and these types of items will not be copyable.<br />
<br />
Please see the next section, For Content Creators, for more information about how Linden Lab is working to protect content on the Second Life Grid.<br />
<br />
Won't someone be able to create a hacked up viewer that ignores my parcel/estate permissions?<br />
No, these permissions are managed on the Second Life Grid servers, not in the viewer.<br />
<br />
Will someone be able to use a hacked client to steal my SL identity?<br />
No. As long as you continue to download your viewer from secondlife.com, there's no new security risk that having an open source viewer introduces for your online identity. The security of your identity is tied to your ability to keep others from gaining access to your password, and thus to your account. We will still require a password on our servers to gain access to your account, so nothing about an open source viewer will change that.<br />
<br />
===What does a "security audit" consist of?===<br />
We've spent months with Linden Lab engineers dedicated to reviewing the design decisions over the years, finding and fixing flaws that they find. We've had developers pore over the results of security flaw detection tools, meticulously sorting out false positives from potential issues, and placing additional safeguards in those areas.<br />
<br />
However, we consider this an ongoing project that will probably never be done as long as we're adding new features and capabilities to the Second Life Grid. We encourage further scrutiny, and encourage responsible flaw discovery and reporting.<br />
<br />
==For content creators==<br />
<br />
===Does open source mean I'll have to give my in-world creations away for free? How does this affect my Second Life intellectual property rights?===<br />
No. This in no way changes the status of your in-world creations. If you previously charged for your in-world creations, you can still charge for your creations without changing anything or taking any measures. This only affects source code created by Linden Lab. You will retain whatever intellectual property rights you previously had.<br />
<br />
===Doesn't source code availability make copyright enforcement more difficult?===<br />
Viewer source code availability may make it marginally easier for copyright infringement of creative works on the Second Life Grid. However, source code availability enables many possible innovations, the vast majority of which will be viewed as overwhelmingly positive developments by virtually everyone on the Second Life Grid.<br />
<br />
Copyright infringement is a problem for content creators, but there are many ways to respond. Inexperienced content creators often respond by attempting to implement ineffective copy protection mechanisms that rarely hinder infringement, and often hinder lawful use of their creations. More sophisticated content creators respond by figuring out how to deepen the relationship with customers and create such value around their brands that customers will want to pay to ensure they get the "genuine article". We hope, over time, that the Second Life community will become more sophisticated in dealing with the same issues that content creators in the real world have been dealing with for quite some time.<br />
<br />
===How can you protect users from copyright infringement?===<br />
We do not intend to become the law enforcement of Second Life. We think it's important for the economy and the community that we intervene rarely and with a light touch. So for instance, you will not see Linden Lab getting involved to adjudicate specific disputes between residents. We will of course help all residents uphold their legal rights and do what we can to advise them of their legal requirements. This extends to copyright. For example, we will be making metadata which timestamps the first creation of content in-world in order to help residents protect their creations.<br />
<br />
Ultimately, like any business, be it in-world or other, it's up to the owners and management of that operation to safeguard and protect their creations and interests. We believe the Second Life Grid has a balanced and fair framework within which to do it, backed by national laws with which is complies. In the short term, we're also able to use our Terms of Service to prohibit certain behavior.<br />
<br />
We are fortunate that many of the consumers of original content on the Second Life Grid are also creators of their own content. Hence the community has a foundation of respect for the works and creations of others. Ultimately, we see this social underpinning as the best protection for Intellectual Property. There are laws such as the DMCA which can be applied to Second Life creations, and in some instances that may be the only course of resolution, but we feel the most effective and immediate way is through the community itself. We believe that vigilant community members will shun plagiarism, and evolve increasingly effective social norms to encourage creativity through enlightened self-interest (the desire to benefit from further creativity).<br />
<br />
What's 'texture theft' and why is this an issue? How are you preventing this?<br />
'Texture theft' refers to the copying of material designs used for objects on the Second Life Grid. While these can be copyright protected just like any other Second Life Grid content, the fact they are downloaded into the client makes them easier to copy. Just in the same way as it is easy to copy images in a web browser or to photocopy pages in a book.<br />
<br />
Here again, the legal protection comes for residents via the DMCA, but we are looking at adding features which clearly mark the original creator of a piece of content which would prevent, or discourage resale by someone who had copied that texture and was passing it off as their own.<br />
<br />
==Licensing and business questions==<br />
<br />
===What source code will you be releasing, and how will it be licensed?===<br />
The Second Life Grid consists of two major components: the viewer, which is the software that residents install on their computers to access Second Life, and the server infrastructure, which is the collection of software components running at Linden Lab's datacenters.<br />
<br />
The Viewer source code is available under the GNU Lesser General Public License (LGPL), as well as under separate licenses for entities that wish to reserve the ability to create proprietary extensions for the Viewer. Due to third party licensing restrictions, some proprietary components are still necessary for an optimal experience.<br />
<br />
===Why did you choose the LGPL instead of other licenses?===<br />
We feel that the LGPL is the best license for ensuring that members of the community share changes with one another (and with us).<br />
<br />
===What source code won't you be releasing?===<br />
We don't (yet) plan to release the code that runs our simulators or other server code ("the Grid"). We're keeping an open mind about the possibility of opening more of the Second Life Grid; the level of success we have with open sourcing our viewer will direct the speed and extent of further moves in this arena.<br />
<br />
There are limited portions of viewer code we've licensed from third parties that also will not be released. We believe we can eliminate proprietary dependencies in the viewer code, either through relicensing or replacement, and are working toward that end.<br />
<br />
===Why are you releasing the source code for the Second Life viewer?===<br />
An open source approach has always been part of Linden Lab's long-term strategy, having always operated as an open community. This initiative will allow deeper industry and community collaboration, advise the development of market-driven standards, and may one day spur the development of the viewer to accelerate beyond the resources and direction of Linden Lab. The potential of Second Life is vast and the way in which residents wish to use it varies enormously. This provides immense opportunities for residents, many of whom are adept developers and many of who have built profitable businesses around the Second Life Grid.<br />
<br />
In the short term, we look at this as a way of improving the processes we use to build Second Life, creating greater transparency, and giving the community the means to participate in and improve the way we create software. In the long haul, we hope this move will accelerate innovation on the Second Life Grid, enabling anyone to enhance the viewer in all sorts of ways.<br />
<br />
Lots of companies open source software components. What makes this different or in any way notable?<br />
This is the first time a market leading company has made its sole product available to the open source community. We believe it is unprecedented and pretty audacious, but believe we're making the right decision. While Linden Lab will continue to be the sole source of the official client, this initiative provides tremendous opportunity for experimentation and innovation that have always been the hallmarks of the Second Life Grid.<br />
<br />
===How will this affect Linden Lab's long-term business plan?===<br />
Linden Lab is a pioneer and a leader in its field. Going open source might be seen by some as an audacious and unusual move for a company in such a position, but is indicative of the company's approach and ethos. Without abandoning its real estate-based revenue structure, Linden Lab believes the move will only further increase adoption and integration. Again, this is a move to help standardize the development platform that Linden Lab has established, not an abandonment of its business practice to date.<br />
<br />
===What does this mean for the long-term future of the Second Life Grid?===<br />
We hope that the viewer will become something of a standard for 3D virtual worlds. We're the leading virtual world with the most sophisticated viewer and we think that's a good basis to become the standard for new worlds and for those considering developing their own viewers.<br />
<br />
==Feature development==<br />
<br />
===How is it decided what features get added to the Second Life viewer and which don't? Do Residents get to play a role in this?===<br />
Residents will play an increasing role in the shaping and prioritization of new features. Linden Lab will continue to be the arbiters of which features will be included in the Second Life viewer as downloaded from secondlife.com. However, we'll have new tools and provide assistance to help residents collaborate on more well-formed proposals that are more likely to be implemented by Linden Lab and others. Additionally, we hope to see alternate clients, so that much in the same way that people can choose their web browser today, they will also be able to choose from an array of virtual reality browsers to connect to the Second Life Grid.<br />
<br />
If I disagree with another user's feature (that he/she programmed) which I want removed, is there a process for me disputing that? Can I have an anti-Feature Voting Tool proposal?<br />
Users won't be able to arbitrarily add new features to Linden Lab's version of the Second Life viewer, so it won't be possible for a malicious programmer to alter your version of the viewer. If you continue to download your viewer from secondlife.com, you still will be getting a viewer that Linden Lab has carefully reviewed all changes to. If you choose to get a viewer from elsewhere on the Internet, you should only get it from some other source that you trust. We envision that other people will create compelling new viewers that have new features (or, perhaps, don't have unwanted features), and it will be up to you to evaluate those other viewers on their merits, including your trust.<br />
<br />
===Will contributing lots of quality development work mean I'm more likely to be hired if I apply for a job at Linden Lab?===<br />
Yes, that's one of the best ways to get noticed if simply submitting a resume isn't enough. We receive a lot of resumes, so standing out in the crowd can be tough. Visible participation in the community is a great way to get noticed and prove your ability as a developer.</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Limits&diff=1152918Limits2011-09-02T20:40:38Z<p>Boroondas Gupte: /* Chat (text) */ made UI labels (tab name and checkbox name) bold</p>
<hr />
<div><noinclude>{{KBmaster}}</noinclude><br />
== Summary ==<br />
{{RightToc}}<br />
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer's job is to:<br />
<br />
* Handle locations of objects.<br />
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.<br />
<br />
The simulator's job is to:<br />
<br />
* Run the physics engine.<br />
* Detect collisions.<br />
* Keep track of where everything is<br />
* Send locations of content to the Viewer along with updates when certain changes occur.<br />
<br />
Limits are necessary for all of these components to work together. The list below outlines many of the '''Second Life numerical limits that affect your inworld experience'''. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.<br />
<br />
{{KBcaution|1=The scope of this page is focused on Linden Lab's official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren't provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don't add data without a hard limit, and don't add obscure trivia that doesn't practically affect the general inworld experience.}}<br />
<br />
== [[Avatar]] ==<br />
<br />
* '''Max. # of attachment points''' - 30 for avatar, 8 for [[HUD]].<br />
** They can be viewed by right-clicking your avatar and choosing '''Take Off''' > '''HUD''' or '''Detach'''.<br />
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. <br />
* '''Max. unassisted fly height''' - Stable hover almost 150m above the ground (terrain mesh).<br />
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.<br />
* '''Common shoe sizes''' - Most women's shoes are designed for a size 0 (zero) foot. Men's generally scale up to 14.<br />
** You can check this by going to Edit menu > Appearance and clicking on the Shape > Legs tab.<br />
<!--Can someone verify the following?<br />
* '''Min. length of avatar name''' - 2 for first name, 2 for last name, 5 in total (including the space).--><br />
* '''Max. length of avatar name''' - 31 for first name, 31 for last name, 63 in total (including the space).<br />
* '''Max. avatar speed''' - 250m/s (with only attachments to assist)<br />
* '''Max. teleport speed'''<!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--><br />
** '''Server 1.27.1''' - 10 teleports per 15 seconds<br />
** '''Server 1.27.0''' - 3 teleports per 15 seconds<br />
<br />
== [[Animation]] ==<br />
<br />
* '''Max. length of animation:''' 30.0 seconds<br />
* '''Min. animation priority:''' 0<br />
* '''Max. animation priority:''' 4<br />
<br />
== Building ==<br />
<br />
* '''Max. [[prim]] dimensions (non-[[megaprim]])''' - 64&times;64&times;64m<br />
** it was 10&times;10&times;10m before SL Server 3.0.0 (238864) <br />
* '''Min. prim dimensions''' - 0.01&times;0.01&times;0.01m<br />
* '''Max. # of prims in a linkset''' - 256 <br />
** It was 255 before SL Server 1.26.<br />
* '''Max. link distance''' - See [[Linkability Rules]].<br />
* '''Max. # of prims in a physical object''' - 32<br />
** If you try to link more, it'll either say "Can't enable physics for objects with more than 32 primitives" or "Object has too many primitives -- its dynamics have been disabled.".<br />
** On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.<br />
* '''Max. build or rez height''' - 4,096m<br />
** This is 768m for Viewers prior to SL 1.20<br />
* '''Max. prim name length''' - 63 bytes UTF-8 [[string]]<br />
** Note: This is the same total character limit as avatar names.<br />
* '''Max. prim description length''' - 127 bytes UTF-8 [[string]]<br />
** Note: <br />
* '''Temporary prim lifetime''' - around 60 seconds<br />
* '''Max. number of temporary prims''' - regular_prim_limit - current_regular_prims + minimum(0.5 * regular_prim_limit + 400, 1000)<br />
** From [http://forums-archive.secondlife.com/8/cd/305651/1.html Andrew Linden's February 2009 discussion])<br />
* '''Max. length of hovertext (via [[llSetText]] or [[PRIM_TEXT]])''' - 254 bytes UTF-8 [[string]]<br />
<br />
== Chat (text) ==<br />
<br />
* '''Whisper distance''' - 10 m<br />
* '''Chat distance''' - 20 m<br />
* '''Shout distance''' - 100 m<br />
** ''Rule of thumb:'' when you're at default zoom ('''View''' > '''Reset View'''), if you can see another person's nametag, they can see your chat. If they're far enough away that you don't see a nametag, they won't "hear" you unless you shout.<br />
** Text spoken as a "Chat" step in a gesture cannot be shouted or whispered<br />
** Text spoken as "Replace with" text in a gesture can be whispered or shouted in Viewer 2 either by putting <code>/whisper</code> or <code>/shout</code> at the start of the "Replace with" text or by typing <code>/whisper</code> or <code>/shout</code> at the beginning of the nearby chat input bar, followed by the gesture's trigger text. (Though, if you do both, or if a gesture with built-in <code>/whisper</code> or <code>/shout</code> is used mid-sentence, the "/whisper" or "/shout" will appear literally.) Viewer 1 does not honor <code>/whisper</code> or <code>/shout</code> and will always send them literally.<br />
* '''Max. length of a chat message''' - 1023 bytes/single-byte characters<br />
** The same holds true for an IM <-> email replies.<br />
*** When the receiver is offline, if they set an IM to Email feature ('''Edit''' > '''Preferences''' (or press {{K|Ctrl|P}}), go to the '''Communication''' tab and check the '''Send IM to Email''' checkbox), it will send offline messages directly to the mailbox connected to your account. When an offline message is received via Email, this message can also be answered via Email again. The length of properly delivered Email replies is limited to 1023 bytes/single-byte characters.<br />
* '''Capped''' - Maximum number of offline messages (involving [[IM]]s, inventory offers, group notices and group invitations) received before messages get capped is 25.<br />
** Senders can't know whether their messages were capped or not.<br />
* '''Email -> IM''' replies can be sent up to 5 days after receiving the offline IM the email is meant to answer.<sup>[<span class="plainlinks">[https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing blog]</span>]</sup><br />
* '''IMs''' are retained on Linden Lab's servers for up to 31 days before being discarded. For example, if someone sends you an Instant Message and the next time you login is 33 days later, you won't get it.<br />
** Torley confirmed this with Kelly Linden.<br />
<br />
== [[Gesture]]s ==<br />
<br />
* '''Shortcut key mapping:''' 33 unique combinations, since {{K|F2}}&ndash;{{K|F12}} can be used with the {{K|Ctrl}} or {{K|Shift}} modifiers.<br />
* '''Maximum Chat step length:''' 127 single-byte characters.<br />
* '''Maximum Wait time:''' 3600 seconds (one hour).<br />
<br />
== [[Group]]s ==<br />
<br />
* '''Maximum number of groups you can belong to:''' 42<br />
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.<br />
* '''Minimum number of members in a group:''' 2<br />
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.<br />
* '''Maximum number of roles allowed in a group:''' 10 (including "Owners" and "Everyone", which cannot be deleted)<br />
* '''Maximum Group Name:''' 35 single-byte characters.<br />
* '''Maximum Group Title:''' 20 single-byte characters.<br />
* '''Maximum Length of a Group Notice:''' 512 single-byte characters.<br />
<br />
== [[Inventory]] ==<br />
<br />
* '''Maximum number of inventory items that can be sent in a folder:''' 42<br />
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.<br />
* '''Maximum notecard line:''' None, but scripts can only read the first 255 bytes.<br />
* '''Maximum notecard size:''' 65,536 bytes<br />
* '''Number of items in the Library:''' 1,248 as of 2010-06-17<br />
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.<br />
<br />
== [[Land]] ==<br />
<br />
* '''Maximum [[Land#Parcel|parcel]] size:''' 65,536 meters²<br />
** Covering a whole region, or square on the World Map.<br />
* '''Minimum parcel size:''' 16 meters²<br />
* '''Maximum parcel name length:''' 63 single-byte characters<br />
* '''Maximum parcel description length:''' 255 characters<br />
* '''Region name length:''' Under Linden Concierge policy, minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]].<br />
** Rare exceptions exist, like [http://slurl.com/secondlife/Q/128/128/24 Q].<br />
* '''Maximum "NO ENTRY" ban line height:''' 768 meters above the terrain mesh.<br />
** This is if you are explicitly banned from a parcel. If the parcel is simply not public access or restricted to certain Residents or a group, then the access lines go up to 50 meters above the terrain mesh.<br />
* '''Maximum prims in a [[Land#Region|region]]:'''<br />
** Full region: 15,000<br />
** [[Land#Homestead|Homestead]]: 3,750<br />
** [[Land#Openspace|Openspace]]: 750<br />
* '''Maximum auto return value''': Besides "0" (which means ''never''), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.<br />
* '''Terraforming limits:'''<br />
** Most mainland can be raised/lowered by 4 meters (+/-).<br />
** Some mainland cannot be terraformed, including: Bay City Regions, Blumfield, Boardman, Brown, De Haro, Nautilus City Regions, Nova Albion Regions, Shermerville Regions, and West Haven.<br />
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).<br />
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.<br />
* '''Maximum water height:''' 100 meters using inworld controls (mainland limit), 255 meters by using a *.raw file upload.<br />
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.<br />
* '''Maximum terrain height:''' 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.<br />
* '''Miscellaneous estate limits:''' You can have a maximum of 10 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.<br />
** See World menu > Region/Estate > Estate tab.<br />
* '''Mainland maximum number of agents'''<br />
** Full region: 100 (Historically set to 40 by LL but this does vary. Some meeting areas have this set to 60 and higher.)<br />
*** Recent server performance improvements make regions with 60 agents in them perform quite well excepting the issue described in {{JIRA|SVC-3895}}.<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Island maximum number of agents:'''<br />
** Full region: 100<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Freeze Time:''' Land owners can [[freeze]] other Residents for up to 30 seconds. Members of land owning groups can also be granted this ability.<br />
* '''Minimum parcel that can be listed in Places or All search:''' 144 meters² <!-- 128 and under are disabled --><br />
* '''Minimum parcel that can be listed in Events:''' 512 meters²<br />
* '''Maximum altitude for event listings:''' 768 meters ({{JIRA|WEB-814}})<br />
* '''Maximum heights that objects can be seen on the [[World Map]]:''' 400.005m<br />
* '''[[Classic clouds]] layer:''' Approximately 150-225 meters, although the edges of particles can appear to exceed that.<br />
<br />
== Misc. ==<br />
<br />
*'''[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]''' - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.<br />
*'''Contacts in Communication > Friends tab ''' - A maximum of 20 simultaneous contacts can be selected to change permissions, remove, or invite for a conference chat.<br />
<br />
== Navigation ==<br />
<br />
[[File:Max Alt.jpg|thumb|right|435px|'''Height counter error above 2147483647 meters''']]<br />
* '''Absolute height limit:''' [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&nbsp;=&nbsp;2<sup>31</sup>&nbsp;−&nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.<br />
* '''Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:''' 2147483583<br />
** This is lower than the ''Absolute height limit'' above probably because of precision issues. Any value higher than 2147483583 would be rounded up to something beyond 2147483647 and thus cause an [http://en.wikipedia.org/wiki/Arithmetic_overflow overflow], while 2147483583 will still be rounded down to 2147483520 (see below).<br />
* '''Highest altitude you can teleport to with an SLurl:''' 2147483520 meters<br />
<br />
== [[Profile]] ==<br />
<br />
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.<br />
<br />
* '''2nd Life tab's About field''' - 510 bytes<br />
* '''Picks tab''' - 10 picks with 1022 bytes each<br />
* '''1st Life tab's Info field''' - 253 bytes<br />
* '''Classified tab''' - 100 listings with x bytes each<br />
* '''My Notes''' - 1022 bytes<br />
<br />
== Performance ==<br />
<br />
* '''Healthy Viewer FPS''' - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via Help menu > Lag Meter, or for more advanced usage, see View menu > Statistics Bar.<br />
* '''Avatar Rendering Cost scores''' - [[Avatar Rendering Cost|Learn all about it!]]<br />
<br />
== [[Scripting]] ==<br />
<br />
* '''Height at which scripts reactivate on a no-script parcel''' - 50 m above terrain mesh. Scripted objects that take controls continue to remain active when you fly down or enter a no-script parcel.<br />
* '''Maximum height where scripts can run''' - none, as long as the object remains rezzed or attached.<br />
* '''Maximum script source code size''' - 65536 single byte characters.<br />
* For specific scripting limits, lookup calls in the '''[[LSL Portal]]'''.<br />
<br />
== [[Textures]] ==<br />
* '''[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]''' of profile, place, etc. pictures — all of these were measured at UI size (Edit menu > Preferences > General tab > UI Size) = 1.000:<br />
<br />
=== 1.x Series Viewers ===<br />
<br />
(official Viewer up to 1.23.5, most [[Alternate viewers|Third Party Viewers]])<br />
* '''Search > All for "Classifieds", "People", and "Places"''' - 4:3 (256&times;192 pi&times;els)<br />
* '''Search > Places and Classified tabs''' - ~7:5 (398&times;282 pixels)<br />
* '''Search > Land tab''' - ~7:5 (358&times;252 pixels)<br />
* '''Profile > 2nd Life tab''' - ~4:3 (178&times;133 pixels)<br />
* '''Profile > Picks tab''' - 16:9 (288&times;162 pixels)<br />
* '''Profile > 1st Life tab''' - 1:1 (133&times;133 pixels)<br />
* '''Profile > Classifieds tab''' - ~3:2 (206&times;137 pixels)<br />
* '''Profile > Web tab''' - 1:1 (400&times;400 pixels)<br />
** A scrollbar uses 15 pixels on the right-hand side.<br />
* '''About Land > Options tab''' - ~3:2 (178&times;117 pixels)<br />
* '''Group Information > General tab's "Group Insignia"''' - 1:1 (126&times;126 pixels)<br />
** Some of these textures are shared (for example, Search > All place pages, Search > Places, and About Land > Options use the same image), so you should pick a well-balanced ratio and size.<br />
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]<br />
<br />
=== 2.x Series Viewers ===<br />
<br />
* '''Search > Classifieds thumbnail''' - 4:3 (60&times;45 pixels)<br />
* '''Search > Classifieds expanded''' - ~4:3 (252&times;188 pixels)<br />
* '''Search > Classifieds expanded > Details''' - 17:7 (272&times;112 pixels)<br />
* '''Search > People''' - 4:3 (188&times;141 pixels)<br />
* '''Search > Destination Guide thumbnail''' - ~4:3 (45&times;34 pixels)<br />
* '''Search > Destination Guide expanded''' - 5:3 (250&times;150 pixels)<br />
* '''Profile > 2nd Life tab''' - ~1:1 (100&times;99 pixels)<br />
* '''Profile > Picks thumbnail''' - 8:5 (88&times;55 pixels)<br />
* '''Profile > Pick expanded''' - ~5:3 (285&times;172 pixels)<br />
* '''About Land > Options tab''' - ~20:13 (193&times;125 pixels)<br />
* '''Places > More information''' - ~11:7 (272&times;173 pixels)<br />
<br />
=== All Viewers ===<br />
<br />
* '''Maximum texture size''' - 1024&times;1024 pixels<br />
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).<br />
** Some textures inworld have a resolution as high as 2048&times;2048; this is due to a previous limit that was higher.<br />
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.<br />
** Where large textures are being forced by import to only 512&times;512, lower your ...> Preferences >...> UI Size under 1.0, to increase import size to the max 1024&times;1024.<br />
<br />
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Limits&diff=1152917Limits2011-09-02T20:39:15Z<p>Boroondas Gupte: /* Chat (text) */ Made menu entry labels bold</p>
<hr />
<div><noinclude>{{KBmaster}}</noinclude><br />
== Summary ==<br />
{{RightToc}}<br />
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer's job is to:<br />
<br />
* Handle locations of objects.<br />
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.<br />
<br />
The simulator's job is to:<br />
<br />
* Run the physics engine.<br />
* Detect collisions.<br />
* Keep track of where everything is<br />
* Send locations of content to the Viewer along with updates when certain changes occur.<br />
<br />
Limits are necessary for all of these components to work together. The list below outlines many of the '''Second Life numerical limits that affect your inworld experience'''. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.<br />
<br />
{{KBcaution|1=The scope of this page is focused on Linden Lab's official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren't provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don't add data without a hard limit, and don't add obscure trivia that doesn't practically affect the general inworld experience.}}<br />
<br />
== [[Avatar]] ==<br />
<br />
* '''Max. # of attachment points''' - 30 for avatar, 8 for [[HUD]].<br />
** They can be viewed by right-clicking your avatar and choosing '''Take Off''' > '''HUD''' or '''Detach'''.<br />
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. <br />
* '''Max. unassisted fly height''' - Stable hover almost 150m above the ground (terrain mesh).<br />
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.<br />
* '''Common shoe sizes''' - Most women's shoes are designed for a size 0 (zero) foot. Men's generally scale up to 14.<br />
** You can check this by going to Edit menu > Appearance and clicking on the Shape > Legs tab.<br />
<!--Can someone verify the following?<br />
* '''Min. length of avatar name''' - 2 for first name, 2 for last name, 5 in total (including the space).--><br />
* '''Max. length of avatar name''' - 31 for first name, 31 for last name, 63 in total (including the space).<br />
* '''Max. avatar speed''' - 250m/s (with only attachments to assist)<br />
* '''Max. teleport speed'''<!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--><br />
** '''Server 1.27.1''' - 10 teleports per 15 seconds<br />
** '''Server 1.27.0''' - 3 teleports per 15 seconds<br />
<br />
== [[Animation]] ==<br />
<br />
* '''Max. length of animation:''' 30.0 seconds<br />
* '''Min. animation priority:''' 0<br />
* '''Max. animation priority:''' 4<br />
<br />
== Building ==<br />
<br />
* '''Max. [[prim]] dimensions (non-[[megaprim]])''' - 64&times;64&times;64m<br />
** it was 10&times;10&times;10m before SL Server 3.0.0 (238864) <br />
* '''Min. prim dimensions''' - 0.01&times;0.01&times;0.01m<br />
* '''Max. # of prims in a linkset''' - 256 <br />
** It was 255 before SL Server 1.26.<br />
* '''Max. link distance''' - See [[Linkability Rules]].<br />
* '''Max. # of prims in a physical object''' - 32<br />
** If you try to link more, it'll either say "Can't enable physics for objects with more than 32 primitives" or "Object has too many primitives -- its dynamics have been disabled.".<br />
** On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.<br />
* '''Max. build or rez height''' - 4,096m<br />
** This is 768m for Viewers prior to SL 1.20<br />
* '''Max. prim name length''' - 63 bytes UTF-8 [[string]]<br />
** Note: This is the same total character limit as avatar names.<br />
* '''Max. prim description length''' - 127 bytes UTF-8 [[string]]<br />
** Note: <br />
* '''Temporary prim lifetime''' - around 60 seconds<br />
* '''Max. number of temporary prims''' - regular_prim_limit - current_regular_prims + minimum(0.5 * regular_prim_limit + 400, 1000)<br />
** From [http://forums-archive.secondlife.com/8/cd/305651/1.html Andrew Linden's February 2009 discussion])<br />
* '''Max. length of hovertext (via [[llSetText]] or [[PRIM_TEXT]])''' - 254 bytes UTF-8 [[string]]<br />
<br />
== Chat (text) ==<br />
<br />
* '''Whisper distance''' - 10 m<br />
* '''Chat distance''' - 20 m<br />
* '''Shout distance''' - 100 m<br />
** ''Rule of thumb:'' when you're at default zoom ('''View''' > '''Reset View'''), if you can see another person's nametag, they can see your chat. If they're far enough away that you don't see a nametag, they won't "hear" you unless you shout.<br />
** Text spoken as a "Chat" step in a gesture cannot be shouted or whispered<br />
** Text spoken as "Replace with" text in a gesture can be whispered or shouted in Viewer 2 either by putting <code>/whisper</code> or <code>/shout</code> at the start of the "Replace with" text or by typing <code>/whisper</code> or <code>/shout</code> at the beginning of the nearby chat input bar, followed by the gesture's trigger text. (Though, if you do both, or if a gesture with built-in <code>/whisper</code> or <code>/shout</code> is used mid-sentence, the "/whisper" or "/shout" will appear literally.) Viewer 1 does not honor <code>/whisper</code> or <code>/shout</code> and will always send them literally.<br />
* '''Max. length of a chat message''' - 1023 bytes/single-byte characters<br />
** The same holds true for an IM <-> email replies.<br />
*** When the receiver is offline, if they set an IM to Email feature ('''Edit''' > '''Preferences''' (or press {{K|Ctrl|P}}), go to the Communication tab and check the Send IM to Email checkbox), it will send offline messages directly to the mailbox connected to your account. When an offline message is received via Email, this message can also be answered via Email again. The length of properly delivered Email replies is limited to 1023 bytes/single-byte characters.<br />
* '''Capped''' - Maximum number of offline messages (involving [[IM]]s, inventory offers, group notices and group invitations) received before messages get capped is 25.<br />
** Senders can't know whether their messages were capped or not.<br />
* '''Email -> IM''' replies can be sent up to 5 days after receiving the offline IM the email is meant to answer.<sup>[<span class="plainlinks">[https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing blog]</span>]</sup><br />
* '''IMs''' are retained on Linden Lab's servers for up to 31 days before being discarded. For example, if someone sends you an Instant Message and the next time you login is 33 days later, you won't get it.<br />
** Torley confirmed this with Kelly Linden.<br />
<br />
== [[Gesture]]s ==<br />
<br />
* '''Shortcut key mapping:''' 33 unique combinations, since {{K|F2}}&ndash;{{K|F12}} can be used with the {{K|Ctrl}} or {{K|Shift}} modifiers.<br />
* '''Maximum Chat step length:''' 127 single-byte characters.<br />
* '''Maximum Wait time:''' 3600 seconds (one hour).<br />
<br />
== [[Group]]s ==<br />
<br />
* '''Maximum number of groups you can belong to:''' 42<br />
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.<br />
* '''Minimum number of members in a group:''' 2<br />
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.<br />
* '''Maximum number of roles allowed in a group:''' 10 (including "Owners" and "Everyone", which cannot be deleted)<br />
* '''Maximum Group Name:''' 35 single-byte characters.<br />
* '''Maximum Group Title:''' 20 single-byte characters.<br />
* '''Maximum Length of a Group Notice:''' 512 single-byte characters.<br />
<br />
== [[Inventory]] ==<br />
<br />
* '''Maximum number of inventory items that can be sent in a folder:''' 42<br />
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.<br />
* '''Maximum notecard line:''' None, but scripts can only read the first 255 bytes.<br />
* '''Maximum notecard size:''' 65,536 bytes<br />
* '''Number of items in the Library:''' 1,248 as of 2010-06-17<br />
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.<br />
<br />
== [[Land]] ==<br />
<br />
* '''Maximum [[Land#Parcel|parcel]] size:''' 65,536 meters²<br />
** Covering a whole region, or square on the World Map.<br />
* '''Minimum parcel size:''' 16 meters²<br />
* '''Maximum parcel name length:''' 63 single-byte characters<br />
* '''Maximum parcel description length:''' 255 characters<br />
* '''Region name length:''' Under Linden Concierge policy, minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]].<br />
** Rare exceptions exist, like [http://slurl.com/secondlife/Q/128/128/24 Q].<br />
* '''Maximum "NO ENTRY" ban line height:''' 768 meters above the terrain mesh.<br />
** This is if you are explicitly banned from a parcel. If the parcel is simply not public access or restricted to certain Residents or a group, then the access lines go up to 50 meters above the terrain mesh.<br />
* '''Maximum prims in a [[Land#Region|region]]:'''<br />
** Full region: 15,000<br />
** [[Land#Homestead|Homestead]]: 3,750<br />
** [[Land#Openspace|Openspace]]: 750<br />
* '''Maximum auto return value''': Besides "0" (which means ''never''), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.<br />
* '''Terraforming limits:'''<br />
** Most mainland can be raised/lowered by 4 meters (+/-).<br />
** Some mainland cannot be terraformed, including: Bay City Regions, Blumfield, Boardman, Brown, De Haro, Nautilus City Regions, Nova Albion Regions, Shermerville Regions, and West Haven.<br />
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).<br />
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.<br />
* '''Maximum water height:''' 100 meters using inworld controls (mainland limit), 255 meters by using a *.raw file upload.<br />
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.<br />
* '''Maximum terrain height:''' 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.<br />
* '''Miscellaneous estate limits:''' You can have a maximum of 10 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.<br />
** See World menu > Region/Estate > Estate tab.<br />
* '''Mainland maximum number of agents'''<br />
** Full region: 100 (Historically set to 40 by LL but this does vary. Some meeting areas have this set to 60 and higher.)<br />
*** Recent server performance improvements make regions with 60 agents in them perform quite well excepting the issue described in {{JIRA|SVC-3895}}.<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Island maximum number of agents:'''<br />
** Full region: 100<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Freeze Time:''' Land owners can [[freeze]] other Residents for up to 30 seconds. Members of land owning groups can also be granted this ability.<br />
* '''Minimum parcel that can be listed in Places or All search:''' 144 meters² <!-- 128 and under are disabled --><br />
* '''Minimum parcel that can be listed in Events:''' 512 meters²<br />
* '''Maximum altitude for event listings:''' 768 meters ({{JIRA|WEB-814}})<br />
* '''Maximum heights that objects can be seen on the [[World Map]]:''' 400.005m<br />
* '''[[Classic clouds]] layer:''' Approximately 150-225 meters, although the edges of particles can appear to exceed that.<br />
<br />
== Misc. ==<br />
<br />
*'''[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]''' - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.<br />
*'''Contacts in Communication > Friends tab ''' - A maximum of 20 simultaneous contacts can be selected to change permissions, remove, or invite for a conference chat.<br />
<br />
== Navigation ==<br />
<br />
[[File:Max Alt.jpg|thumb|right|435px|'''Height counter error above 2147483647 meters''']]<br />
* '''Absolute height limit:''' [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&nbsp;=&nbsp;2<sup>31</sup>&nbsp;−&nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.<br />
* '''Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:''' 2147483583<br />
** This is lower than the ''Absolute height limit'' above probably because of precision issues. Any value higher than 2147483583 would be rounded up to something beyond 2147483647 and thus cause an [http://en.wikipedia.org/wiki/Arithmetic_overflow overflow], while 2147483583 will still be rounded down to 2147483520 (see below).<br />
* '''Highest altitude you can teleport to with an SLurl:''' 2147483520 meters<br />
<br />
== [[Profile]] ==<br />
<br />
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.<br />
<br />
* '''2nd Life tab's About field''' - 510 bytes<br />
* '''Picks tab''' - 10 picks with 1022 bytes each<br />
* '''1st Life tab's Info field''' - 253 bytes<br />
* '''Classified tab''' - 100 listings with x bytes each<br />
* '''My Notes''' - 1022 bytes<br />
<br />
== Performance ==<br />
<br />
* '''Healthy Viewer FPS''' - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via Help menu > Lag Meter, or for more advanced usage, see View menu > Statistics Bar.<br />
* '''Avatar Rendering Cost scores''' - [[Avatar Rendering Cost|Learn all about it!]]<br />
<br />
== [[Scripting]] ==<br />
<br />
* '''Height at which scripts reactivate on a no-script parcel''' - 50 m above terrain mesh. Scripted objects that take controls continue to remain active when you fly down or enter a no-script parcel.<br />
* '''Maximum height where scripts can run''' - none, as long as the object remains rezzed or attached.<br />
* '''Maximum script source code size''' - 65536 single byte characters.<br />
* For specific scripting limits, lookup calls in the '''[[LSL Portal]]'''.<br />
<br />
== [[Textures]] ==<br />
* '''[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]''' of profile, place, etc. pictures — all of these were measured at UI size (Edit menu > Preferences > General tab > UI Size) = 1.000:<br />
<br />
=== 1.x Series Viewers ===<br />
<br />
(official Viewer up to 1.23.5, most [[Alternate viewers|Third Party Viewers]])<br />
* '''Search > All for "Classifieds", "People", and "Places"''' - 4:3 (256&times;192 pi&times;els)<br />
* '''Search > Places and Classified tabs''' - ~7:5 (398&times;282 pixels)<br />
* '''Search > Land tab''' - ~7:5 (358&times;252 pixels)<br />
* '''Profile > 2nd Life tab''' - ~4:3 (178&times;133 pixels)<br />
* '''Profile > Picks tab''' - 16:9 (288&times;162 pixels)<br />
* '''Profile > 1st Life tab''' - 1:1 (133&times;133 pixels)<br />
* '''Profile > Classifieds tab''' - ~3:2 (206&times;137 pixels)<br />
* '''Profile > Web tab''' - 1:1 (400&times;400 pixels)<br />
** A scrollbar uses 15 pixels on the right-hand side.<br />
* '''About Land > Options tab''' - ~3:2 (178&times;117 pixels)<br />
* '''Group Information > General tab's "Group Insignia"''' - 1:1 (126&times;126 pixels)<br />
** Some of these textures are shared (for example, Search > All place pages, Search > Places, and About Land > Options use the same image), so you should pick a well-balanced ratio and size.<br />
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]<br />
<br />
=== 2.x Series Viewers ===<br />
<br />
* '''Search > Classifieds thumbnail''' - 4:3 (60&times;45 pixels)<br />
* '''Search > Classifieds expanded''' - ~4:3 (252&times;188 pixels)<br />
* '''Search > Classifieds expanded > Details''' - 17:7 (272&times;112 pixels)<br />
* '''Search > People''' - 4:3 (188&times;141 pixels)<br />
* '''Search > Destination Guide thumbnail''' - ~4:3 (45&times;34 pixels)<br />
* '''Search > Destination Guide expanded''' - 5:3 (250&times;150 pixels)<br />
* '''Profile > 2nd Life tab''' - ~1:1 (100&times;99 pixels)<br />
* '''Profile > Picks thumbnail''' - 8:5 (88&times;55 pixels)<br />
* '''Profile > Pick expanded''' - ~5:3 (285&times;172 pixels)<br />
* '''About Land > Options tab''' - ~20:13 (193&times;125 pixels)<br />
* '''Places > More information''' - ~11:7 (272&times;173 pixels)<br />
<br />
=== All Viewers ===<br />
<br />
* '''Maximum texture size''' - 1024&times;1024 pixels<br />
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).<br />
** Some textures inworld have a resolution as high as 2048&times;2048; this is due to a previous limit that was higher.<br />
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.<br />
** Where large textures are being forced by import to only 512&times;512, lower your ...> Preferences >...> UI Size under 1.0, to increase import size to the max 1024&times;1024.<br />
<br />
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Limits&diff=1152916Limits2011-09-02T20:37:28Z<p>Boroondas Gupte: /* Chat (text) */ Use Template:K for key-combo</p>
<hr />
<div><noinclude>{{KBmaster}}</noinclude><br />
== Summary ==<br />
{{RightToc}}<br />
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer's job is to:<br />
<br />
* Handle locations of objects.<br />
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.<br />
<br />
The simulator's job is to:<br />
<br />
* Run the physics engine.<br />
* Detect collisions.<br />
* Keep track of where everything is<br />
* Send locations of content to the Viewer along with updates when certain changes occur.<br />
<br />
Limits are necessary for all of these components to work together. The list below outlines many of the '''Second Life numerical limits that affect your inworld experience'''. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.<br />
<br />
{{KBcaution|1=The scope of this page is focused on Linden Lab's official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren't provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don't add data without a hard limit, and don't add obscure trivia that doesn't practically affect the general inworld experience.}}<br />
<br />
== [[Avatar]] ==<br />
<br />
* '''Max. # of attachment points''' - 30 for avatar, 8 for [[HUD]].<br />
** They can be viewed by right-clicking your avatar and choosing '''Take Off''' > '''HUD''' or '''Detach'''.<br />
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. <br />
* '''Max. unassisted fly height''' - Stable hover almost 150m above the ground (terrain mesh).<br />
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.<br />
* '''Common shoe sizes''' - Most women's shoes are designed for a size 0 (zero) foot. Men's generally scale up to 14.<br />
** You can check this by going to Edit menu > Appearance and clicking on the Shape > Legs tab.<br />
<!--Can someone verify the following?<br />
* '''Min. length of avatar name''' - 2 for first name, 2 for last name, 5 in total (including the space).--><br />
* '''Max. length of avatar name''' - 31 for first name, 31 for last name, 63 in total (including the space).<br />
* '''Max. avatar speed''' - 250m/s (with only attachments to assist)<br />
* '''Max. teleport speed'''<!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--><br />
** '''Server 1.27.1''' - 10 teleports per 15 seconds<br />
** '''Server 1.27.0''' - 3 teleports per 15 seconds<br />
<br />
== [[Animation]] ==<br />
<br />
* '''Max. length of animation:''' 30.0 seconds<br />
* '''Min. animation priority:''' 0<br />
* '''Max. animation priority:''' 4<br />
<br />
== Building ==<br />
<br />
* '''Max. [[prim]] dimensions (non-[[megaprim]])''' - 64&times;64&times;64m<br />
** it was 10&times;10&times;10m before SL Server 3.0.0 (238864) <br />
* '''Min. prim dimensions''' - 0.01&times;0.01&times;0.01m<br />
* '''Max. # of prims in a linkset''' - 256 <br />
** It was 255 before SL Server 1.26.<br />
* '''Max. link distance''' - See [[Linkability Rules]].<br />
* '''Max. # of prims in a physical object''' - 32<br />
** If you try to link more, it'll either say "Can't enable physics for objects with more than 32 primitives" or "Object has too many primitives -- its dynamics have been disabled.".<br />
** On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.<br />
* '''Max. build or rez height''' - 4,096m<br />
** This is 768m for Viewers prior to SL 1.20<br />
* '''Max. prim name length''' - 63 bytes UTF-8 [[string]]<br />
** Note: This is the same total character limit as avatar names.<br />
* '''Max. prim description length''' - 127 bytes UTF-8 [[string]]<br />
** Note: <br />
* '''Temporary prim lifetime''' - around 60 seconds<br />
* '''Max. number of temporary prims''' - regular_prim_limit - current_regular_prims + minimum(0.5 * regular_prim_limit + 400, 1000)<br />
** From [http://forums-archive.secondlife.com/8/cd/305651/1.html Andrew Linden's February 2009 discussion])<br />
* '''Max. length of hovertext (via [[llSetText]] or [[PRIM_TEXT]])''' - 254 bytes UTF-8 [[string]]<br />
<br />
== Chat (text) ==<br />
<br />
* '''Whisper distance''' - 10 m<br />
* '''Chat distance''' - 20 m<br />
* '''Shout distance''' - 100 m<br />
** ''Rule of thumb:'' when you're at default zoom ('''View''' > '''Reset View'''), if you can see another person's nametag, they can see your chat. If they're far enough away that you don't see a nametag, they won't "hear" you unless you shout.<br />
** Text spoken as a "Chat" step in a gesture cannot be shouted or whispered<br />
** Text spoken as "Replace with" text in a gesture can be whispered or shouted in Viewer 2 either by putting <code>/whisper</code> or <code>/shout</code> at the start of the "Replace with" text or by typing <code>/whisper</code> or <code>/shout</code> at the beginning of the nearby chat input bar, followed by the gesture's trigger text. (Though, if you do both, or if a gesture with built-in <code>/whisper</code> or <code>/shout</code> is used mid-sentence, the "/whisper" or "/shout" will appear literally.) Viewer 1 does not honor <code>/whisper</code> or <code>/shout</code> and will always send them literally.<br />
* '''Max. length of a chat message''' - 1023 bytes/single-byte characters<br />
** The same holds true for an IM <-> email replies.<br />
*** When the receiver is offline, if they set an IM to Email feature (Edit > Preferences (or press {{K|Ctrl|P}}), go to the Communication tab and check the Send IM to Email checkbox), it will send offline messages directly to the mailbox connected to your account. When an offline message is received via Email, this message can also be answered via Email again. The length of properly delivered Email replies is limited to 1023 bytes/single-byte characters.<br />
* '''Capped''' - Maximum number of offline messages (involving [[IM]]s, inventory offers, group notices and group invitations) received before messages get capped is 25.<br />
** Senders can't know whether their messages were capped or not.<br />
* '''Email -> IM''' replies can be sent up to 5 days after receiving the offline IM the email is meant to answer.<sup>[<span class="plainlinks">[https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing blog]</span>]</sup><br />
* '''IMs''' are retained on Linden Lab's servers for up to 31 days before being discarded. For example, if someone sends you an Instant Message and the next time you login is 33 days later, you won't get it.<br />
** Torley confirmed this with Kelly Linden.<br />
<br />
== [[Gesture]]s ==<br />
<br />
* '''Shortcut key mapping:''' 33 unique combinations, since {{K|F2}}&ndash;{{K|F12}} can be used with the {{K|Ctrl}} or {{K|Shift}} modifiers.<br />
* '''Maximum Chat step length:''' 127 single-byte characters.<br />
* '''Maximum Wait time:''' 3600 seconds (one hour).<br />
<br />
== [[Group]]s ==<br />
<br />
* '''Maximum number of groups you can belong to:''' 42<br />
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.<br />
* '''Minimum number of members in a group:''' 2<br />
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.<br />
* '''Maximum number of roles allowed in a group:''' 10 (including "Owners" and "Everyone", which cannot be deleted)<br />
* '''Maximum Group Name:''' 35 single-byte characters.<br />
* '''Maximum Group Title:''' 20 single-byte characters.<br />
* '''Maximum Length of a Group Notice:''' 512 single-byte characters.<br />
<br />
== [[Inventory]] ==<br />
<br />
* '''Maximum number of inventory items that can be sent in a folder:''' 42<br />
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.<br />
* '''Maximum notecard line:''' None, but scripts can only read the first 255 bytes.<br />
* '''Maximum notecard size:''' 65,536 bytes<br />
* '''Number of items in the Library:''' 1,248 as of 2010-06-17<br />
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.<br />
<br />
== [[Land]] ==<br />
<br />
* '''Maximum [[Land#Parcel|parcel]] size:''' 65,536 meters²<br />
** Covering a whole region, or square on the World Map.<br />
* '''Minimum parcel size:''' 16 meters²<br />
* '''Maximum parcel name length:''' 63 single-byte characters<br />
* '''Maximum parcel description length:''' 255 characters<br />
* '''Region name length:''' Under Linden Concierge policy, minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]].<br />
** Rare exceptions exist, like [http://slurl.com/secondlife/Q/128/128/24 Q].<br />
* '''Maximum "NO ENTRY" ban line height:''' 768 meters above the terrain mesh.<br />
** This is if you are explicitly banned from a parcel. If the parcel is simply not public access or restricted to certain Residents or a group, then the access lines go up to 50 meters above the terrain mesh.<br />
* '''Maximum prims in a [[Land#Region|region]]:'''<br />
** Full region: 15,000<br />
** [[Land#Homestead|Homestead]]: 3,750<br />
** [[Land#Openspace|Openspace]]: 750<br />
* '''Maximum auto return value''': Besides "0" (which means ''never''), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.<br />
* '''Terraforming limits:'''<br />
** Most mainland can be raised/lowered by 4 meters (+/-).<br />
** Some mainland cannot be terraformed, including: Bay City Regions, Blumfield, Boardman, Brown, De Haro, Nautilus City Regions, Nova Albion Regions, Shermerville Regions, and West Haven.<br />
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).<br />
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.<br />
* '''Maximum water height:''' 100 meters using inworld controls (mainland limit), 255 meters by using a *.raw file upload.<br />
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.<br />
* '''Maximum terrain height:''' 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.<br />
* '''Miscellaneous estate limits:''' You can have a maximum of 10 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.<br />
** See World menu > Region/Estate > Estate tab.<br />
* '''Mainland maximum number of agents'''<br />
** Full region: 100 (Historically set to 40 by LL but this does vary. Some meeting areas have this set to 60 and higher.)<br />
*** Recent server performance improvements make regions with 60 agents in them perform quite well excepting the issue described in {{JIRA|SVC-3895}}.<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Island maximum number of agents:'''<br />
** Full region: 100<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Freeze Time:''' Land owners can [[freeze]] other Residents for up to 30 seconds. Members of land owning groups can also be granted this ability.<br />
* '''Minimum parcel that can be listed in Places or All search:''' 144 meters² <!-- 128 and under are disabled --><br />
* '''Minimum parcel that can be listed in Events:''' 512 meters²<br />
* '''Maximum altitude for event listings:''' 768 meters ({{JIRA|WEB-814}})<br />
* '''Maximum heights that objects can be seen on the [[World Map]]:''' 400.005m<br />
* '''[[Classic clouds]] layer:''' Approximately 150-225 meters, although the edges of particles can appear to exceed that.<br />
<br />
== Misc. ==<br />
<br />
*'''[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]''' - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.<br />
*'''Contacts in Communication > Friends tab ''' - A maximum of 20 simultaneous contacts can be selected to change permissions, remove, or invite for a conference chat.<br />
<br />
== Navigation ==<br />
<br />
[[File:Max Alt.jpg|thumb|right|435px|'''Height counter error above 2147483647 meters''']]<br />
* '''Absolute height limit:''' [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&nbsp;=&nbsp;2<sup>31</sup>&nbsp;−&nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.<br />
* '''Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:''' 2147483583<br />
** This is lower than the ''Absolute height limit'' above probably because of precision issues. Any value higher than 2147483583 would be rounded up to something beyond 2147483647 and thus cause an [http://en.wikipedia.org/wiki/Arithmetic_overflow overflow], while 2147483583 will still be rounded down to 2147483520 (see below).<br />
* '''Highest altitude you can teleport to with an SLurl:''' 2147483520 meters<br />
<br />
== [[Profile]] ==<br />
<br />
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.<br />
<br />
* '''2nd Life tab's About field''' - 510 bytes<br />
* '''Picks tab''' - 10 picks with 1022 bytes each<br />
* '''1st Life tab's Info field''' - 253 bytes<br />
* '''Classified tab''' - 100 listings with x bytes each<br />
* '''My Notes''' - 1022 bytes<br />
<br />
== Performance ==<br />
<br />
* '''Healthy Viewer FPS''' - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via Help menu > Lag Meter, or for more advanced usage, see View menu > Statistics Bar.<br />
* '''Avatar Rendering Cost scores''' - [[Avatar Rendering Cost|Learn all about it!]]<br />
<br />
== [[Scripting]] ==<br />
<br />
* '''Height at which scripts reactivate on a no-script parcel''' - 50 m above terrain mesh. Scripted objects that take controls continue to remain active when you fly down or enter a no-script parcel.<br />
* '''Maximum height where scripts can run''' - none, as long as the object remains rezzed or attached.<br />
* '''Maximum script source code size''' - 65536 single byte characters.<br />
* For specific scripting limits, lookup calls in the '''[[LSL Portal]]'''.<br />
<br />
== [[Textures]] ==<br />
* '''[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]''' of profile, place, etc. pictures — all of these were measured at UI size (Edit menu > Preferences > General tab > UI Size) = 1.000:<br />
<br />
=== 1.x Series Viewers ===<br />
<br />
(official Viewer up to 1.23.5, most [[Alternate viewers|Third Party Viewers]])<br />
* '''Search > All for "Classifieds", "People", and "Places"''' - 4:3 (256&times;192 pi&times;els)<br />
* '''Search > Places and Classified tabs''' - ~7:5 (398&times;282 pixels)<br />
* '''Search > Land tab''' - ~7:5 (358&times;252 pixels)<br />
* '''Profile > 2nd Life tab''' - ~4:3 (178&times;133 pixels)<br />
* '''Profile > Picks tab''' - 16:9 (288&times;162 pixels)<br />
* '''Profile > 1st Life tab''' - 1:1 (133&times;133 pixels)<br />
* '''Profile > Classifieds tab''' - ~3:2 (206&times;137 pixels)<br />
* '''Profile > Web tab''' - 1:1 (400&times;400 pixels)<br />
** A scrollbar uses 15 pixels on the right-hand side.<br />
* '''About Land > Options tab''' - ~3:2 (178&times;117 pixels)<br />
* '''Group Information > General tab's "Group Insignia"''' - 1:1 (126&times;126 pixels)<br />
** Some of these textures are shared (for example, Search > All place pages, Search > Places, and About Land > Options use the same image), so you should pick a well-balanced ratio and size.<br />
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]<br />
<br />
=== 2.x Series Viewers ===<br />
<br />
* '''Search > Classifieds thumbnail''' - 4:3 (60&times;45 pixels)<br />
* '''Search > Classifieds expanded''' - ~4:3 (252&times;188 pixels)<br />
* '''Search > Classifieds expanded > Details''' - 17:7 (272&times;112 pixels)<br />
* '''Search > People''' - 4:3 (188&times;141 pixels)<br />
* '''Search > Destination Guide thumbnail''' - ~4:3 (45&times;34 pixels)<br />
* '''Search > Destination Guide expanded''' - 5:3 (250&times;150 pixels)<br />
* '''Profile > 2nd Life tab''' - ~1:1 (100&times;99 pixels)<br />
* '''Profile > Picks thumbnail''' - 8:5 (88&times;55 pixels)<br />
* '''Profile > Pick expanded''' - ~5:3 (285&times;172 pixels)<br />
* '''About Land > Options tab''' - ~20:13 (193&times;125 pixels)<br />
* '''Places > More information''' - ~11:7 (272&times;173 pixels)<br />
<br />
=== All Viewers ===<br />
<br />
* '''Maximum texture size''' - 1024&times;1024 pixels<br />
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).<br />
** Some textures inworld have a resolution as high as 2048&times;2048; this is due to a previous limit that was higher.<br />
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.<br />
** Where large textures are being forced by import to only 512&times;512, lower your ...> Preferences >...> UI Size under 1.0, to increase import size to the max 1024&times;1024.<br />
<br />
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Limits&diff=1152915Limits2011-09-02T20:35:00Z<p>Boroondas Gupte: /* Gestures */ Use Template:K for keys</p>
<hr />
<div><noinclude>{{KBmaster}}</noinclude><br />
== Summary ==<br />
{{RightToc}}<br />
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer's job is to:<br />
<br />
* Handle locations of objects.<br />
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.<br />
<br />
The simulator's job is to:<br />
<br />
* Run the physics engine.<br />
* Detect collisions.<br />
* Keep track of where everything is<br />
* Send locations of content to the Viewer along with updates when certain changes occur.<br />
<br />
Limits are necessary for all of these components to work together. The list below outlines many of the '''Second Life numerical limits that affect your inworld experience'''. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.<br />
<br />
{{KBcaution|1=The scope of this page is focused on Linden Lab's official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren't provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don't add data without a hard limit, and don't add obscure trivia that doesn't practically affect the general inworld experience.}}<br />
<br />
== [[Avatar]] ==<br />
<br />
* '''Max. # of attachment points''' - 30 for avatar, 8 for [[HUD]].<br />
** They can be viewed by right-clicking your avatar and choosing '''Take Off''' > '''HUD''' or '''Detach'''.<br />
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. <br />
* '''Max. unassisted fly height''' - Stable hover almost 150m above the ground (terrain mesh).<br />
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.<br />
* '''Common shoe sizes''' - Most women's shoes are designed for a size 0 (zero) foot. Men's generally scale up to 14.<br />
** You can check this by going to Edit menu > Appearance and clicking on the Shape > Legs tab.<br />
<!--Can someone verify the following?<br />
* '''Min. length of avatar name''' - 2 for first name, 2 for last name, 5 in total (including the space).--><br />
* '''Max. length of avatar name''' - 31 for first name, 31 for last name, 63 in total (including the space).<br />
* '''Max. avatar speed''' - 250m/s (with only attachments to assist)<br />
* '''Max. teleport speed'''<!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--><br />
** '''Server 1.27.1''' - 10 teleports per 15 seconds<br />
** '''Server 1.27.0''' - 3 teleports per 15 seconds<br />
<br />
== [[Animation]] ==<br />
<br />
* '''Max. length of animation:''' 30.0 seconds<br />
* '''Min. animation priority:''' 0<br />
* '''Max. animation priority:''' 4<br />
<br />
== Building ==<br />
<br />
* '''Max. [[prim]] dimensions (non-[[megaprim]])''' - 64&times;64&times;64m<br />
** it was 10&times;10&times;10m before SL Server 3.0.0 (238864) <br />
* '''Min. prim dimensions''' - 0.01&times;0.01&times;0.01m<br />
* '''Max. # of prims in a linkset''' - 256 <br />
** It was 255 before SL Server 1.26.<br />
* '''Max. link distance''' - See [[Linkability Rules]].<br />
* '''Max. # of prims in a physical object''' - 32<br />
** If you try to link more, it'll either say "Can't enable physics for objects with more than 32 primitives" or "Object has too many primitives -- its dynamics have been disabled.".<br />
** On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.<br />
* '''Max. build or rez height''' - 4,096m<br />
** This is 768m for Viewers prior to SL 1.20<br />
* '''Max. prim name length''' - 63 bytes UTF-8 [[string]]<br />
** Note: This is the same total character limit as avatar names.<br />
* '''Max. prim description length''' - 127 bytes UTF-8 [[string]]<br />
** Note: <br />
* '''Temporary prim lifetime''' - around 60 seconds<br />
* '''Max. number of temporary prims''' - regular_prim_limit - current_regular_prims + minimum(0.5 * regular_prim_limit + 400, 1000)<br />
** From [http://forums-archive.secondlife.com/8/cd/305651/1.html Andrew Linden's February 2009 discussion])<br />
* '''Max. length of hovertext (via [[llSetText]] or [[PRIM_TEXT]])''' - 254 bytes UTF-8 [[string]]<br />
<br />
== Chat (text) ==<br />
<br />
* '''Whisper distance''' - 10 m<br />
* '''Chat distance''' - 20 m<br />
* '''Shout distance''' - 100 m<br />
** ''Rule of thumb:'' when you're at default zoom ('''View''' > '''Reset View'''), if you can see another person's nametag, they can see your chat. If they're far enough away that you don't see a nametag, they won't "hear" you unless you shout.<br />
** Text spoken as a "Chat" step in a gesture cannot be shouted or whispered<br />
** Text spoken as "Replace with" text in a gesture can be whispered or shouted in Viewer 2 either by putting <code>/whisper</code> or <code>/shout</code> at the start of the "Replace with" text or by typing <code>/whisper</code> or <code>/shout</code> at the beginning of the nearby chat input bar, followed by the gesture's trigger text. (Though, if you do both, or if a gesture with built-in <code>/whisper</code> or <code>/shout</code> is used mid-sentence, the "/whisper" or "/shout" will appear literally.) Viewer 1 does not honor <code>/whisper</code> or <code>/shout</code> and will always send them literally.<br />
* '''Max. length of a chat message''' - 1023 bytes/single-byte characters<br />
** The same holds true for an IM <-> email replies.<br />
*** When the receiver is offline, if they set an IM to Email feature (Edit > Preferences (or press Ctrl-P), go to the Communication tab and check the Send IM to Email checkbox), it will send offline messages directly to the mailbox connected to your account. When an offline message is received via Email, this message can also be answered via Email again. The length of properly delivered Email replies is limited to 1023 bytes/single-byte characters.<br />
* '''Capped''' - Maximum number of offline messages (involving [[IM]]s, inventory offers, group notices and group invitations) received before messages get capped is 25.<br />
** Senders can't know whether their messages were capped or not.<br />
* '''Email -> IM''' replies can be sent up to 5 days after receiving the offline IM the email is meant to answer.<sup>[<span class="plainlinks">[https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing blog]</span>]</sup><br />
* '''IMs''' are retained on Linden Lab's servers for up to 31 days before being discarded. For example, if someone sends you an Instant Message and the next time you login is 33 days later, you won't get it.<br />
** Torley confirmed this with Kelly Linden.<br />
<br />
== [[Gesture]]s ==<br />
<br />
* '''Shortcut key mapping:''' 33 unique combinations, since {{K|F2}}&ndash;{{K|F12}} can be used with the {{K|Ctrl}} or {{K|Shift}} modifiers.<br />
* '''Maximum Chat step length:''' 127 single-byte characters.<br />
* '''Maximum Wait time:''' 3600 seconds (one hour).<br />
<br />
== [[Group]]s ==<br />
<br />
* '''Maximum number of groups you can belong to:''' 42<br />
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.<br />
* '''Minimum number of members in a group:''' 2<br />
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.<br />
* '''Maximum number of roles allowed in a group:''' 10 (including "Owners" and "Everyone", which cannot be deleted)<br />
* '''Maximum Group Name:''' 35 single-byte characters.<br />
* '''Maximum Group Title:''' 20 single-byte characters.<br />
* '''Maximum Length of a Group Notice:''' 512 single-byte characters.<br />
<br />
== [[Inventory]] ==<br />
<br />
* '''Maximum number of inventory items that can be sent in a folder:''' 42<br />
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.<br />
* '''Maximum notecard line:''' None, but scripts can only read the first 255 bytes.<br />
* '''Maximum notecard size:''' 65,536 bytes<br />
* '''Number of items in the Library:''' 1,248 as of 2010-06-17<br />
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.<br />
<br />
== [[Land]] ==<br />
<br />
* '''Maximum [[Land#Parcel|parcel]] size:''' 65,536 meters²<br />
** Covering a whole region, or square on the World Map.<br />
* '''Minimum parcel size:''' 16 meters²<br />
* '''Maximum parcel name length:''' 63 single-byte characters<br />
* '''Maximum parcel description length:''' 255 characters<br />
* '''Region name length:''' Under Linden Concierge policy, minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]].<br />
** Rare exceptions exist, like [http://slurl.com/secondlife/Q/128/128/24 Q].<br />
* '''Maximum "NO ENTRY" ban line height:''' 768 meters above the terrain mesh.<br />
** This is if you are explicitly banned from a parcel. If the parcel is simply not public access or restricted to certain Residents or a group, then the access lines go up to 50 meters above the terrain mesh.<br />
* '''Maximum prims in a [[Land#Region|region]]:'''<br />
** Full region: 15,000<br />
** [[Land#Homestead|Homestead]]: 3,750<br />
** [[Land#Openspace|Openspace]]: 750<br />
* '''Maximum auto return value''': Besides "0" (which means ''never''), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.<br />
* '''Terraforming limits:'''<br />
** Most mainland can be raised/lowered by 4 meters (+/-).<br />
** Some mainland cannot be terraformed, including: Bay City Regions, Blumfield, Boardman, Brown, De Haro, Nautilus City Regions, Nova Albion Regions, Shermerville Regions, and West Haven.<br />
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).<br />
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.<br />
* '''Maximum water height:''' 100 meters using inworld controls (mainland limit), 255 meters by using a *.raw file upload.<br />
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.<br />
* '''Maximum terrain height:''' 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.<br />
* '''Miscellaneous estate limits:''' You can have a maximum of 10 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.<br />
** See World menu > Region/Estate > Estate tab.<br />
* '''Mainland maximum number of agents'''<br />
** Full region: 100 (Historically set to 40 by LL but this does vary. Some meeting areas have this set to 60 and higher.)<br />
*** Recent server performance improvements make regions with 60 agents in them perform quite well excepting the issue described in {{JIRA|SVC-3895}}.<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Island maximum number of agents:'''<br />
** Full region: 100<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Freeze Time:''' Land owners can [[freeze]] other Residents for up to 30 seconds. Members of land owning groups can also be granted this ability.<br />
* '''Minimum parcel that can be listed in Places or All search:''' 144 meters² <!-- 128 and under are disabled --><br />
* '''Minimum parcel that can be listed in Events:''' 512 meters²<br />
* '''Maximum altitude for event listings:''' 768 meters ({{JIRA|WEB-814}})<br />
* '''Maximum heights that objects can be seen on the [[World Map]]:''' 400.005m<br />
* '''[[Classic clouds]] layer:''' Approximately 150-225 meters, although the edges of particles can appear to exceed that.<br />
<br />
== Misc. ==<br />
<br />
*'''[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]''' - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.<br />
*'''Contacts in Communication > Friends tab ''' - A maximum of 20 simultaneous contacts can be selected to change permissions, remove, or invite for a conference chat.<br />
<br />
== Navigation ==<br />
<br />
[[File:Max Alt.jpg|thumb|right|435px|'''Height counter error above 2147483647 meters''']]<br />
* '''Absolute height limit:''' [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&nbsp;=&nbsp;2<sup>31</sup>&nbsp;−&nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.<br />
* '''Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:''' 2147483583<br />
** This is lower than the ''Absolute height limit'' above probably because of precision issues. Any value higher than 2147483583 would be rounded up to something beyond 2147483647 and thus cause an [http://en.wikipedia.org/wiki/Arithmetic_overflow overflow], while 2147483583 will still be rounded down to 2147483520 (see below).<br />
* '''Highest altitude you can teleport to with an SLurl:''' 2147483520 meters<br />
<br />
== [[Profile]] ==<br />
<br />
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.<br />
<br />
* '''2nd Life tab's About field''' - 510 bytes<br />
* '''Picks tab''' - 10 picks with 1022 bytes each<br />
* '''1st Life tab's Info field''' - 253 bytes<br />
* '''Classified tab''' - 100 listings with x bytes each<br />
* '''My Notes''' - 1022 bytes<br />
<br />
== Performance ==<br />
<br />
* '''Healthy Viewer FPS''' - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via Help menu > Lag Meter, or for more advanced usage, see View menu > Statistics Bar.<br />
* '''Avatar Rendering Cost scores''' - [[Avatar Rendering Cost|Learn all about it!]]<br />
<br />
== [[Scripting]] ==<br />
<br />
* '''Height at which scripts reactivate on a no-script parcel''' - 50 m above terrain mesh. Scripted objects that take controls continue to remain active when you fly down or enter a no-script parcel.<br />
* '''Maximum height where scripts can run''' - none, as long as the object remains rezzed or attached.<br />
* '''Maximum script source code size''' - 65536 single byte characters.<br />
* For specific scripting limits, lookup calls in the '''[[LSL Portal]]'''.<br />
<br />
== [[Textures]] ==<br />
* '''[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]''' of profile, place, etc. pictures — all of these were measured at UI size (Edit menu > Preferences > General tab > UI Size) = 1.000:<br />
<br />
=== 1.x Series Viewers ===<br />
<br />
(official Viewer up to 1.23.5, most [[Alternate viewers|Third Party Viewers]])<br />
* '''Search > All for "Classifieds", "People", and "Places"''' - 4:3 (256&times;192 pi&times;els)<br />
* '''Search > Places and Classified tabs''' - ~7:5 (398&times;282 pixels)<br />
* '''Search > Land tab''' - ~7:5 (358&times;252 pixels)<br />
* '''Profile > 2nd Life tab''' - ~4:3 (178&times;133 pixels)<br />
* '''Profile > Picks tab''' - 16:9 (288&times;162 pixels)<br />
* '''Profile > 1st Life tab''' - 1:1 (133&times;133 pixels)<br />
* '''Profile > Classifieds tab''' - ~3:2 (206&times;137 pixels)<br />
* '''Profile > Web tab''' - 1:1 (400&times;400 pixels)<br />
** A scrollbar uses 15 pixels on the right-hand side.<br />
* '''About Land > Options tab''' - ~3:2 (178&times;117 pixels)<br />
* '''Group Information > General tab's "Group Insignia"''' - 1:1 (126&times;126 pixels)<br />
** Some of these textures are shared (for example, Search > All place pages, Search > Places, and About Land > Options use the same image), so you should pick a well-balanced ratio and size.<br />
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]<br />
<br />
=== 2.x Series Viewers ===<br />
<br />
* '''Search > Classifieds thumbnail''' - 4:3 (60&times;45 pixels)<br />
* '''Search > Classifieds expanded''' - ~4:3 (252&times;188 pixels)<br />
* '''Search > Classifieds expanded > Details''' - 17:7 (272&times;112 pixels)<br />
* '''Search > People''' - 4:3 (188&times;141 pixels)<br />
* '''Search > Destination Guide thumbnail''' - ~4:3 (45&times;34 pixels)<br />
* '''Search > Destination Guide expanded''' - 5:3 (250&times;150 pixels)<br />
* '''Profile > 2nd Life tab''' - ~1:1 (100&times;99 pixels)<br />
* '''Profile > Picks thumbnail''' - 8:5 (88&times;55 pixels)<br />
* '''Profile > Pick expanded''' - ~5:3 (285&times;172 pixels)<br />
* '''About Land > Options tab''' - ~20:13 (193&times;125 pixels)<br />
* '''Places > More information''' - ~11:7 (272&times;173 pixels)<br />
<br />
=== All Viewers ===<br />
<br />
* '''Maximum texture size''' - 1024&times;1024 pixels<br />
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).<br />
** Some textures inworld have a resolution as high as 2048&times;2048; this is due to a previous limit that was higher.<br />
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.<br />
** Where large textures are being forced by import to only 512&times;512, lower your ...> Preferences >...> UI Size under 1.0, to increase import size to the max 1024&times;1024.<br />
<br />
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Limits&diff=1152914Limits2011-09-02T20:23:26Z<p>Boroondas Gupte: Use &times; ('×') instead of lower case X to denote multidimensional limit values.</p>
<hr />
<div><noinclude>{{KBmaster}}</noinclude><br />
== Summary ==<br />
{{RightToc}}<br />
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer's job is to:<br />
<br />
* Handle locations of objects.<br />
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.<br />
<br />
The simulator's job is to:<br />
<br />
* Run the physics engine.<br />
* Detect collisions.<br />
* Keep track of where everything is<br />
* Send locations of content to the Viewer along with updates when certain changes occur.<br />
<br />
Limits are necessary for all of these components to work together. The list below outlines many of the '''Second Life numerical limits that affect your inworld experience'''. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.<br />
<br />
{{KBcaution|1=The scope of this page is focused on Linden Lab's official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren't provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don't add data without a hard limit, and don't add obscure trivia that doesn't practically affect the general inworld experience.}}<br />
<br />
== [[Avatar]] ==<br />
<br />
* '''Max. # of attachment points''' - 30 for avatar, 8 for [[HUD]].<br />
** They can be viewed by right-clicking your avatar and choosing '''Take Off''' > '''HUD''' or '''Detach'''.<br />
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. <br />
* '''Max. unassisted fly height''' - Stable hover almost 150m above the ground (terrain mesh).<br />
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.<br />
* '''Common shoe sizes''' - Most women's shoes are designed for a size 0 (zero) foot. Men's generally scale up to 14.<br />
** You can check this by going to Edit menu > Appearance and clicking on the Shape > Legs tab.<br />
<!--Can someone verify the following?<br />
* '''Min. length of avatar name''' - 2 for first name, 2 for last name, 5 in total (including the space).--><br />
* '''Max. length of avatar name''' - 31 for first name, 31 for last name, 63 in total (including the space).<br />
* '''Max. avatar speed''' - 250m/s (with only attachments to assist)<br />
* '''Max. teleport speed'''<!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--><br />
** '''Server 1.27.1''' - 10 teleports per 15 seconds<br />
** '''Server 1.27.0''' - 3 teleports per 15 seconds<br />
<br />
== [[Animation]] ==<br />
<br />
* '''Max. length of animation:''' 30.0 seconds<br />
* '''Min. animation priority:''' 0<br />
* '''Max. animation priority:''' 4<br />
<br />
== Building ==<br />
<br />
* '''Max. [[prim]] dimensions (non-[[megaprim]])''' - 64&times;64&times;64m<br />
** it was 10&times;10&times;10m before SL Server 3.0.0 (238864) <br />
* '''Min. prim dimensions''' - 0.01&times;0.01&times;0.01m<br />
* '''Max. # of prims in a linkset''' - 256 <br />
** It was 255 before SL Server 1.26.<br />
* '''Max. link distance''' - See [[Linkability Rules]].<br />
* '''Max. # of prims in a physical object''' - 32<br />
** If you try to link more, it'll either say "Can't enable physics for objects with more than 32 primitives" or "Object has too many primitives -- its dynamics have been disabled.".<br />
** On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.<br />
* '''Max. build or rez height''' - 4,096m<br />
** This is 768m for Viewers prior to SL 1.20<br />
* '''Max. prim name length''' - 63 bytes UTF-8 [[string]]<br />
** Note: This is the same total character limit as avatar names.<br />
* '''Max. prim description length''' - 127 bytes UTF-8 [[string]]<br />
** Note: <br />
* '''Temporary prim lifetime''' - around 60 seconds<br />
* '''Max. number of temporary prims''' - regular_prim_limit - current_regular_prims + minimum(0.5 * regular_prim_limit + 400, 1000)<br />
** From [http://forums-archive.secondlife.com/8/cd/305651/1.html Andrew Linden's February 2009 discussion])<br />
* '''Max. length of hovertext (via [[llSetText]] or [[PRIM_TEXT]])''' - 254 bytes UTF-8 [[string]]<br />
<br />
== Chat (text) ==<br />
<br />
* '''Whisper distance''' - 10 m<br />
* '''Chat distance''' - 20 m<br />
* '''Shout distance''' - 100 m<br />
** ''Rule of thumb:'' when you're at default zoom ('''View''' > '''Reset View'''), if you can see another person's nametag, they can see your chat. If they're far enough away that you don't see a nametag, they won't "hear" you unless you shout.<br />
** Text spoken as a "Chat" step in a gesture cannot be shouted or whispered<br />
** Text spoken as "Replace with" text in a gesture can be whispered or shouted in Viewer 2 either by putting <code>/whisper</code> or <code>/shout</code> at the start of the "Replace with" text or by typing <code>/whisper</code> or <code>/shout</code> at the beginning of the nearby chat input bar, followed by the gesture's trigger text. (Though, if you do both, or if a gesture with built-in <code>/whisper</code> or <code>/shout</code> is used mid-sentence, the "/whisper" or "/shout" will appear literally.) Viewer 1 does not honor <code>/whisper</code> or <code>/shout</code> and will always send them literally.<br />
* '''Max. length of a chat message''' - 1023 bytes/single-byte characters<br />
** The same holds true for an IM <-> email replies.<br />
*** When the receiver is offline, if they set an IM to Email feature (Edit > Preferences (or press Ctrl-P), go to the Communication tab and check the Send IM to Email checkbox), it will send offline messages directly to the mailbox connected to your account. When an offline message is received via Email, this message can also be answered via Email again. The length of properly delivered Email replies is limited to 1023 bytes/single-byte characters.<br />
* '''Capped''' - Maximum number of offline messages (involving [[IM]]s, inventory offers, group notices and group invitations) received before messages get capped is 25.<br />
** Senders can't know whether their messages were capped or not.<br />
* '''Email -> IM''' replies can be sent up to 5 days after receiving the offline IM the email is meant to answer.<sup>[<span class="plainlinks">[https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing blog]</span>]</sup><br />
* '''IMs''' are retained on Linden Lab's servers for up to 31 days before being discarded. For example, if someone sends you an Instant Message and the next time you login is 33 days later, you won't get it.<br />
** Torley confirmed this with Kelly Linden.<br />
<br />
== [[Gesture]]s ==<br />
<br />
* '''Shortcut key mapping:''' 33 unique combinations, since F2-F12 can be used with the "Ctrl" or "Shift" modifiers.<br />
* '''Maximum Chat step length:''' 127 single-byte characters.<br />
* '''Maximum Wait time:''' 3600 seconds (one hour).<br />
<br />
== [[Group]]s ==<br />
<br />
* '''Maximum number of groups you can belong to:''' 42<br />
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.<br />
* '''Minimum number of members in a group:''' 2<br />
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.<br />
* '''Maximum number of roles allowed in a group:''' 10 (including "Owners" and "Everyone", which cannot be deleted)<br />
* '''Maximum Group Name:''' 35 single-byte characters.<br />
* '''Maximum Group Title:''' 20 single-byte characters.<br />
* '''Maximum Length of a Group Notice:''' 512 single-byte characters.<br />
<br />
== [[Inventory]] ==<br />
<br />
* '''Maximum number of inventory items that can be sent in a folder:''' 42<br />
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.<br />
* '''Maximum notecard line:''' None, but scripts can only read the first 255 bytes.<br />
* '''Maximum notecard size:''' 65,536 bytes<br />
* '''Number of items in the Library:''' 1,248 as of 2010-06-17<br />
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.<br />
<br />
== [[Land]] ==<br />
<br />
* '''Maximum [[Land#Parcel|parcel]] size:''' 65,536 meters²<br />
** Covering a whole region, or square on the World Map.<br />
* '''Minimum parcel size:''' 16 meters²<br />
* '''Maximum parcel name length:''' 63 single-byte characters<br />
* '''Maximum parcel description length:''' 255 characters<br />
* '''Region name length:''' Under Linden Concierge policy, minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]].<br />
** Rare exceptions exist, like [http://slurl.com/secondlife/Q/128/128/24 Q].<br />
* '''Maximum "NO ENTRY" ban line height:''' 768 meters above the terrain mesh.<br />
** This is if you are explicitly banned from a parcel. If the parcel is simply not public access or restricted to certain Residents or a group, then the access lines go up to 50 meters above the terrain mesh.<br />
* '''Maximum prims in a [[Land#Region|region]]:'''<br />
** Full region: 15,000<br />
** [[Land#Homestead|Homestead]]: 3,750<br />
** [[Land#Openspace|Openspace]]: 750<br />
* '''Maximum auto return value''': Besides "0" (which means ''never''), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.<br />
* '''Terraforming limits:'''<br />
** Most mainland can be raised/lowered by 4 meters (+/-).<br />
** Some mainland cannot be terraformed, including: Bay City Regions, Blumfield, Boardman, Brown, De Haro, Nautilus City Regions, Nova Albion Regions, Shermerville Regions, and West Haven.<br />
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).<br />
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.<br />
* '''Maximum water height:''' 100 meters using inworld controls (mainland limit), 255 meters by using a *.raw file upload.<br />
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.<br />
* '''Maximum terrain height:''' 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.<br />
* '''Miscellaneous estate limits:''' You can have a maximum of 10 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.<br />
** See World menu > Region/Estate > Estate tab.<br />
* '''Mainland maximum number of agents'''<br />
** Full region: 100 (Historically set to 40 by LL but this does vary. Some meeting areas have this set to 60 and higher.)<br />
*** Recent server performance improvements make regions with 60 agents in them perform quite well excepting the issue described in {{JIRA|SVC-3895}}.<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Island maximum number of agents:'''<br />
** Full region: 100<br />
** [[Land#Homestead|Homestead]]: 20<br />
** [[Land#Openspace|Openspace]]: 10<br />
* '''Freeze Time:''' Land owners can [[freeze]] other Residents for up to 30 seconds. Members of land owning groups can also be granted this ability.<br />
* '''Minimum parcel that can be listed in Places or All search:''' 144 meters² <!-- 128 and under are disabled --><br />
* '''Minimum parcel that can be listed in Events:''' 512 meters²<br />
* '''Maximum altitude for event listings:''' 768 meters ({{JIRA|WEB-814}})<br />
* '''Maximum heights that objects can be seen on the [[World Map]]:''' 400.005m<br />
* '''[[Classic clouds]] layer:''' Approximately 150-225 meters, although the edges of particles can appear to exceed that.<br />
<br />
== Misc. ==<br />
<br />
*'''[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]''' - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.<br />
*'''Contacts in Communication > Friends tab ''' - A maximum of 20 simultaneous contacts can be selected to change permissions, remove, or invite for a conference chat.<br />
<br />
== Navigation ==<br />
<br />
[[File:Max Alt.jpg|thumb|right|435px|'''Height counter error above 2147483647 meters''']]<br />
* '''Absolute height limit:''' [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&nbsp;=&nbsp;2<sup>31</sup>&nbsp;−&nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.<br />
* '''Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:''' 2147483583<br />
** This is lower than the ''Absolute height limit'' above probably because of precision issues. Any value higher than 2147483583 would be rounded up to something beyond 2147483647 and thus cause an [http://en.wikipedia.org/wiki/Arithmetic_overflow overflow], while 2147483583 will still be rounded down to 2147483520 (see below).<br />
* '''Highest altitude you can teleport to with an SLurl:''' 2147483520 meters<br />
<br />
== [[Profile]] ==<br />
<br />
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.<br />
<br />
* '''2nd Life tab's About field''' - 510 bytes<br />
* '''Picks tab''' - 10 picks with 1022 bytes each<br />
* '''1st Life tab's Info field''' - 253 bytes<br />
* '''Classified tab''' - 100 listings with x bytes each<br />
* '''My Notes''' - 1022 bytes<br />
<br />
== Performance ==<br />
<br />
* '''Healthy Viewer FPS''' - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via Help menu > Lag Meter, or for more advanced usage, see View menu > Statistics Bar.<br />
* '''Avatar Rendering Cost scores''' - [[Avatar Rendering Cost|Learn all about it!]]<br />
<br />
== [[Scripting]] ==<br />
<br />
* '''Height at which scripts reactivate on a no-script parcel''' - 50 m above terrain mesh. Scripted objects that take controls continue to remain active when you fly down or enter a no-script parcel.<br />
* '''Maximum height where scripts can run''' - none, as long as the object remains rezzed or attached.<br />
* '''Maximum script source code size''' - 65536 single byte characters.<br />
* For specific scripting limits, lookup calls in the '''[[LSL Portal]]'''.<br />
<br />
== [[Textures]] ==<br />
* '''[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]''' of profile, place, etc. pictures — all of these were measured at UI size (Edit menu > Preferences > General tab > UI Size) = 1.000:<br />
<br />
=== 1.x Series Viewers ===<br />
<br />
(official Viewer up to 1.23.5, most [[Alternate viewers|Third Party Viewers]])<br />
* '''Search > All for "Classifieds", "People", and "Places"''' - 4:3 (256&times;192 pi&times;els)<br />
* '''Search > Places and Classified tabs''' - ~7:5 (398&times;282 pixels)<br />
* '''Search > Land tab''' - ~7:5 (358&times;252 pixels)<br />
* '''Profile > 2nd Life tab''' - ~4:3 (178&times;133 pixels)<br />
* '''Profile > Picks tab''' - 16:9 (288&times;162 pixels)<br />
* '''Profile > 1st Life tab''' - 1:1 (133&times;133 pixels)<br />
* '''Profile > Classifieds tab''' - ~3:2 (206&times;137 pixels)<br />
* '''Profile > Web tab''' - 1:1 (400&times;400 pixels)<br />
** A scrollbar uses 15 pixels on the right-hand side.<br />
* '''About Land > Options tab''' - ~3:2 (178&times;117 pixels)<br />
* '''Group Information > General tab's "Group Insignia"''' - 1:1 (126&times;126 pixels)<br />
** Some of these textures are shared (for example, Search > All place pages, Search > Places, and About Land > Options use the same image), so you should pick a well-balanced ratio and size.<br />
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]<br />
<br />
=== 2.x Series Viewers ===<br />
<br />
* '''Search > Classifieds thumbnail''' - 4:3 (60&times;45 pixels)<br />
* '''Search > Classifieds expanded''' - ~4:3 (252&times;188 pixels)<br />
* '''Search > Classifieds expanded > Details''' - 17:7 (272&times;112 pixels)<br />
* '''Search > People''' - 4:3 (188&times;141 pixels)<br />
* '''Search > Destination Guide thumbnail''' - ~4:3 (45&times;34 pixels)<br />
* '''Search > Destination Guide expanded''' - 5:3 (250&times;150 pixels)<br />
* '''Profile > 2nd Life tab''' - ~1:1 (100&times;99 pixels)<br />
* '''Profile > Picks thumbnail''' - 8:5 (88&times;55 pixels)<br />
* '''Profile > Pick expanded''' - ~5:3 (285&times;172 pixels)<br />
* '''About Land > Options tab''' - ~20:13 (193&times;125 pixels)<br />
* '''Places > More information''' - ~11:7 (272&times;173 pixels)<br />
<br />
=== All Viewers ===<br />
<br />
* '''Maximum texture size''' - 1024&times;1024 pixels<br />
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).<br />
** Some textures inworld have a resolution as high as 2048&times;2048; this is due to a previous limit that was higher.<br />
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.<br />
** Where large textures are being forced by import to only 512&times;512, lower your ...> Preferences >...> UI Size under 1.0, to increase import size to the max 1024&times;1024.<br />
<br />
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1152318Open Development User Group2011-08-24T20:46:19Z<p>Boroondas Gupte: VWR-25991</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
#{{JiraIssue|OPEN-107|Change of plans. We will be unifying the llconvexdecomposition and llconvexdecompositionstub repos}} ([[User:Oz Linden|Oz Linden]])<br />
#In an OS dev mailing list message today it was pointed out that using an OS built viewer gives an unclear message when trying to upload a mesh. It would be best to gray this option out -- what kind of test can be made for the absence of the commercial Havok library? (Jonathan Yap)<br />
# The name of the shortcut of the Desktop of Second life Viewer 3.0.0(official) is still Second Life Viewer 2. The default install path of Setup of Second life Viewer 3.0.0 is "C:\Program Files\SecondLifeViewer2".<br />
# {{JiraIssue|VWR-25991|Linux viewer doesn't start, due to "libSDL-1.2.so.0: cannot open shared object file"}}<br />
#* would creating that symlink in the wrapper script [https://bitbucket.org/lindenlab/3p-sdl/src/b015e0885123/build-cmd.sh <code>build-cmd.sh</code>] be an acceptable solution? ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1152094Viewer 2 Microsoft Windows Builds2011-08-23T19:14:00Z<p>Boroondas Gupte: /* Running from within the IDE */ added <code /> markup around directory name</p>
<hr />
<div>{{multi-lang}}<br />
{{CompileNav}} <br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
# Install [http://www.microsoft.com/express/download/ Visual Studio 2010] (Express is okay)<br />
#* If you installed VS2010 Express also install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package] or [http://www.microsoft.com/download/en/confirmation.aspx?id=14632 64-bit Windows] version.<br />
# Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO) or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web Install)<br />
# Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
# Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update], and keep running it until no updates are needed. This may take 6~8 iterations on older versions of windows.<br />
#* For Windows Vista and Windows 7, you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
#* For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
#* During the update cycles make sure you have picked up Microsoft Visual Studio 2010 Service Pack 1 [http://go.microsoft.com/fwlink/?LinkId=210710 (ISO)] or [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 (Web Install)]<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
* '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
** This should be version 2.8.4 (or above in the 2.8.x series).<br />
**Add the <code>\bin</code> directory to your path.<br />
* '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
** Version 2.7.1 works with the build scripts.<br />
* '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
**Create a new file <code>%USERPROFILE%\Mercurial.ini</code> and in it put your Second Life name and optionally your email address:<br />
[ui]<br />
username = John Doe <john@example.com><br />
* '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
** When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
**Add the <code>cygwin\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
* [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
** This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
*: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
*:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
*:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
* [http://notepadplusplus.org/ Notepad++]<br />
** You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
* [[Mercurial_Tools]] (strongly recommended)<br />
** When you are following these instructions you will be updating the <code>%USERPROFILE%\Mercurial.ini</code> file you created when you installed Mercurial.<br />
<br />
=== Install Autobuild ===<br />
* Follow the directions at [[Autobuild#Getting_Autobuild|Getting Autobuild]] to install Autobuild<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) older compiler versions:<br />
** Right-click "My Computer" and select '''Properties'''.<br />
** When the Properties dialog opens, click the '''Advanced''' tab followed by the '''Environmental Variables''' button. This will open a new window with a list of System and User variables.<br />
** In the User section, click '''New'''. Set '''Variable Name''' to AUTOBUILD_VSVER and set '''Variable Value''' to 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
<br />
* (VC Express only) Enable '''Tools''' > '''Settings''' > '''Expert Settings''' to get the '''Build''' (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user'''.<br />
<br />
*Pick '''Properties''' > '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-development. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-development</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-development since you last synchronized your files:<br />
* CD into <code>viewer-development</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-development</code><br />
* Do:<br />
hg clone viewer-development VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod method 1 (using autobuild) ===<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-development and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
=== Fmod method 2 (using switches) ===<br />
[To be written up]<br />
<br />
== Configuring the Viewer Build ==<br />
<br />
Fmod is the audio library the viewer uses. If you are compiling with Fmod you will need to do:<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
<br />
At the command line in the source tree's root directory (presumably a directory you have cloned from viewer-development, as it is not a good idea to work in viewer-development, unless you are only compiling for youself) e.g. <code>C:\linden\VWR-12345\</code>) run:<br />
autobuild configure -c [CONFIGURATION]<br />
where <code>[CONFIGURATION]</code> is one of those listed at [[Building the Viewer with Autobuild#Build a desired configuration]] (<code>ReleaseOS</code>, <code>RelWithDebInfoOS</code>, <code>DebugOS</code>)<br />
<br />
=== Configuration Switches ===<br />
There are a number of switches you can use to modify the configuration process. The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
* '''FMOD''' (bool) controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[Viewer_2_Microsoft_Windows_Builds#Fmod_method_1_.28using_autobuild.29]] for this to work.<br />
* '''LL_TESTS''' (bool) controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.<br />
* '''PACKAGE''' (bool) controls if the package step is run. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
Example: <br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you work from within a preconfigured Command Prompt window. Depending on how your computer has been set up there are two possible ways to open this window and you need to find which works in your particular case:<br />
*Method 1<br />
**From '''All Programs''' Navigate into the '''Microsoft Windows SDK V7.1''' program menu<br />
**Click on '''Windows SDK 7.1 Command Prompt'''<br />
*Method 2<br />
**From '''All Programs''' Navigate into the '''Microsoft Visual Studio 2010''' program menu<br />
**Click on '''Microsoft Visual Studio Command Prompt (2010)''' <br />
<br />
{{KBcaution|If you are building with Fmod and have followed the previous Fmod setup instructions AND you are now using a new command window you will need to redo the <code>set AUTOBUILD_CONFIG_FILE{{=}}my_autobuild.xml</code>.}}<br />
<br />
*Run:<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code> (adjust <code>Release</code> to the type of build you are doing, e.g. <code>RelWithDebInfo</code>)<br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate depreciated switches messages and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1152093Open Development User Group2011-08-23T19:07:57Z<p>Boroondas Gupte: added description for OPEN-107</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
#{{JiraIssue|OPEN-107|llconvexdecompositionstub is missing some required functions.}} Will this fix be merged soon? (Jonathan Yap)<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Talk:Lighting_and_shadows&diff=1151958Talk:Lighting and shadows2011-08-22T09:46:43Z<p>Boroondas Gupte: we have a template for jira issue linking :-)</p>
<hr />
<div>== LSL support for projectors! ==<br />
<br />
We need scripting support for the neat projector light sources! Neeeeeeeeeed! :) [[User:Dale Innis|Dale Innis]] 07:00, 15 June 2011 (PDT)<br />
<br />
(EDIT) Strife onizuka had alredy created {{jira|SCR-163}} so I'm now moving all suggestions from here to JIRA. Feel free to revert. --[[User:Opensource Obscure|oobscure]] 01:49, 22 August 2011 (PDT)</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1151140Open Development User Group2011-08-11T17:18:54Z<p>Boroondas Gupte: (cleared agenda)</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1151094Open Development User Group2011-08-10T19:14:41Z<p>Boroondas Gupte: use short signature instead of long one</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# {{JiraIssue|WEB-2596|Collect And Publish Opt-In Hardware and Compatibility Information on Users}} ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1151091Open Development User Group2011-08-10T19:13:50Z<p>Boroondas Gupte: WEB-2596: Collect And Publish Opt-In Hardware and Compatibility Information on Users</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# {{JiraIssue|WEB-2596|Collect And Publish Opt-In Hardware and Compatibility Information on Users}} --[[User:Boroondas Gupte|Boroondas Gupte]] 12:13, 10 August 2011 (PDT)<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Developer_communication_tools&diff=1150732Developer communication tools2011-08-05T21:15:40Z<p>Boroondas Gupte: /* IRC */ clickable links instead of bare (but also clickable) irc urls</p>
<hr />
<div>{{Languages}}<br />
{{OSWikiContribBox}}<br />
<br />
Let us know what you think on email, on the forum, or in-world. If it's not working for you, try to get help there. If it is working for you, try helping someone who's having trouble.<br />
<br />
== Mailing List ==<br />
<br />
[[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) - mailing list for discussing the development of the Second Life viewer. You may also want to search the [https://lists.secondlife.com/pipermail/opensource-dev/ OpenSource-Dev archives].<br />
<br />
== IRC ==<br />
Internet Relay Chat - your instant way to communicate, using the [http://freenode.net/ Freenode] IRC network.<br />
* [irc://irc.freenode.net/opensl <nowiki>#opensl</nowiki> on Freenode] - General open source viewer discussion and development channel<br />
* [irc://irc.freenode.net/opensl-jira <nowiki>#opensl-jira</nowiki> on Freenode] - Real time tracking of all Jira entries<br />
<br />
=== IRC client software ===<br />
A comparison of IRC clients can be found [http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients on Wikipedia]. If you don't want to install an IRC client, you can access these channels using Freenode's [http://webchat.freenode.net/ web-based interface].<br />
<br />
== Issue Tracker ==<br />
<br />
If you run into issues, look through the bug database and see if a bug has been filed. If not, file the bug.<br />
<br />
[http://jira.secondlife.com Second Life JIRA] is the place to submit bug reports, reproductions and patches for issues relating to the open source viewer.<br />
<br />
== In Second Life ==<br />
=== Locations ===<br />
The [[Hippotropolis]] region is a gathering place for developers and residents interested in improving the Second Life Viewer. [http://slurl.com/secondlife/Hippotropolis/190/65/38/ Teleport] to the Linden Open Source Project headquarters.<br />
<br />
=== Meetings ===<br />
<br />
See [[Project Snowstorm/Meetings]] for open source related meetings.<br />
<br />
=== Groups ===<br />
; SL Open Source Contributors : people who have made contributions of code, testing, documentation, or community support for the open source viewer. Provides access to the {{SLurl|region=Hippo Hollow|x=206|y=134|z=26|title=Hippo Hollow Sandbox}}<br />
; Second Life Beta : To organize, brainstorm, and talk about testing of Second Life Server in BETA. Let's get together and make some incredible things happen! Everyone is welcome :)) Server BETA testing is done on the grid ADITI. Instructions for connecting to ADITI can be found here: http://wiki.secondlife.com/wiki/Preview_Grid - ADITI Status: http://bit.ly/ADITI_notes<br />
<br />
; AW Groupies : In-world discussion of [[Architecture Working Group]] plus [[AW_Groupies|wiki webpages]]<br />
; Second Life Source Developers : A group who use their real life programing skills to make SL a better place with open source releases from Linden Lab.<br />
; Second Life Viewer 2.0 : Help each others to learn how to use the new viewer. Join to get informed! Feel free to ask us!<br />
<br />
== Wiki ==<br />
You're soaking in it...<br />
<br />
This is the place to post documentation, more in-depth discussions, and various projects</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Talk:Acronyms&diff=1150699Talk:Acronyms2011-08-05T18:29:56Z<p>Boroondas Gupte: /* Acronyms versus Abbreviations */ can move page if wanted</p>
<hr />
<div>== ALT ==<br />
The word ALT may indeed be an abbreviation for alternate account but it is generally accepted to mean the avatar that has been made in an alternate account. Should this be corrected here?{{unsigned|Jos Ling|15:24, 12 March 2009}}<br />
:Hm... something like "[[Avatar]] belonging to an [[Alternate Account]]"? [[Image:Zai_signature.png|45px]] '''[[User:Zai Lynch|Lynch]]''' <sup><small>([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])</small></sup> 15:33, 12 March 2009 (UTC)<br />
::Thinking about it further, I'm not sure if it's right. I think that [[avatar]] means the physical appearance inworld. So you can change your avatar from a tiny to a dragon to a human to a neko... and it still remains the same alt. I would use the word only connected to the name (account) rather than to the appearance. When someone changes the appearance at the same account, I wouldn't say that it is someones alt. But maybe that's just my definition?<br />
::[[Image:Zai_signature.png|45px]] '''[[User:Zai Lynch|Lynch]]''' <sup><small>([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])</small></sup> 15:39, 12 March 2009 (UTC)<br />
<br />
== Acronyms versus Abbreviations ==<br />
<br />
The listing here is of ''abbreviations'' and not ''acronyms''. An acronym is one form of abbreviation but so are "intialisms" and "contractions." It would be more accurate for this page to be called '''Abbreviations'''. -- [[User:Sigmund Leominster|Sigmund Leominster]] 22:10, 3 August 2011 (PDT)<br />
<br />
:You are right. If wanted, I can move the page.<br />
:--[[User:Boroondas Gupte|Boroondas Gupte]] 11:29, 5 August 2011 (PDT)</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1150387Open Development User Group2011-08-03T19:54:35Z<p>Boroondas Gupte: Unassign issues for PO?</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# Status of {{JiraIssue|STORM-1521|All text appears over avatar}}? I thought getting this fix in ASAP was a high priority. ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
# I've seen Product Engine devs un-assigning issues they've finished working on, with jira comments indicating that this was so the issues would get picked up by the Product Owner. Should we do the same? ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1150386Open Development User Group2011-08-03T19:48:48Z<p>Boroondas Gupte: Status of STORM-1521 (All text appears over avatar)?</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# Status of {{JiraIssue|STORM-1521|All text appears over avatar}}? I thought getting this fix in ASAP was a high priority. ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Build_the_Viewer_on_Linux&diff=1149947Build the Viewer on Linux2011-07-30T10:09:25Z<p>Boroondas Gupte: /* Where's the built viewer? */ "(depending on your platform)" is not currently true</p>
<hr />
<div>{{multi-lang}}<br />
{{CompileNav}}<br />
<br />
The following are instructions for building the Second Life viewer on linux. This process has been used on [http://www.debian.org/ debian] and debian based systems like [http://www.ubuntu.com/ ubuntu], and also on [http://www.fedoraproject.org/ Fedora]. For other platforms, see [[Get source and compile]].<br />
<onlyinclude><br />
== Required tools ==<br />
There are a number of tools that need to be installed first.<br />
<br />
* '''hg''' [package: mercurial]<br />
* '''cmake''' [package: cmake]<br />
** Currently (snowglobe 1.3.2 and higher) cmake 2.6.2 is the minimum required version.<br />
* <b>yacc</b> or compatible tool [suggested package: bison]<br />
* <b>lex</b> or compatible tool [suggested package: flex]<br />
* <b>python</b> [package: python]<br />
** python 2.4.3 is the minimum required version.<br />
** All more recent 2.x versions should work, too. If you encounter problems or deprecation warnings, please [[issue tracker|report]] them.<br />
** python 3.x hasn't been tested yet.<br />
* <b>g++</b> [package: g++]<br />
** Note (not relevant for standalone): gcc 4.4 (which is in recent Ubuntu and debian) won't work in versions prior to 2.0 (or Snowglobe 1.3) if you are not building ''standalone'' (see below), because it chokes on some parts of boost prior to 1.37 (http://svn.boost.org/trac/boost/ticket/2069). The solution is to install <b>GCC 4.3</b> and to run 'export CXX=/usr/bin/g++-4.3' or whatever your binary is before trying to compile. Another workaround is to use update-alternatives; for example, if you already have 4.4 installed, try this:<br />
sudo apt-get install g++-4.3<br />
sudo update-alternatives --remove-all gcc<br />
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 43 --slave /usr/bin/g++ g++ /usr/bin/g++-4.3 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.3<br />
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 44 --slave /usr/bin/g++ g++ /usr/bin/g++-4.4 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.4<br />
then choose 4.3:<br />
sudo update-alternatives --config gcc<br />
* '''libboost-program-options-dev''' was needed on Ubuntu 8.04 to use cmake, but it's '''not needed anymore''' to build a 1.23-render-pipeline on Ubuntu 9.04-beta (nor Snowglobe 2 on Ubuntu 9.10)<br />
* '''make''' (package: make)<br />
* '''bzip2''' (package: bzip2)<br />
<br />
The build process may use the following optional tools:<br />
<br />
* <b>distcc</b> distributed compiler (useful if you have multiple PCs.)<br />
* <b>ccache</b> a fast compiler cache (speed up recompilation, a must if you intend to do development.)<br />
<br />
{{KBhint|To boost your productivity as a developer, try the suggestions at [[Development Environment for Multiple Viewers]] about directory structure, multiple viewers and automation of repetitive tasks.}}<br />
<br />
</onlyinclude><br />
<br />
== What does 'Standalone' mean? ==<br />
<br />
A ''standalone'' build of the viewer refers to building a viewer against the shared libraries that are installed on your system instead of using precompiled libraries provided by Linden Lab.<br />
<br />
In order to build standalone, you will have to configure using <code>--standalone</code>, see [[#Configuring_your_tree|configuration]] below.<br />
<br />
The advantage of building standalone is that you might use less RAM: you'll be using the same shared libraries<br />
that other applications use. However this is a rather minor advantage. The disadvantages of building standalone is a long list of potential problems: you will have to manually install all the development packages of many many libraries. In some cases there isn't a package for it from your distribution, so you have to especially get those sources separately and compile and install them in a way that the viewer can find them. Building standalone is not supported officially by Linden Lab and therefore not tested. Hence, it might not work at all (although the open source snowglobe developers usually make sure that it works for snowglobe). Nevertheless, every now and then it happens that the viewer won't build with some new released library (ie, boost), in which case you most likely will have to use the latest source code retrieved with subversion.<br />
<br />
Nevertheless, there might be reasons that you want to do a standalone build anyway. The most important one being that Linden Lab also doesn't support 64-bit: they do not provided shared libraries for 64-bit; so, if you want to build native 64 bit you must use standalone. Another reason might be that Linden Lab is using a few rather old library versions that are incompatible with newer versions. If you have any reason to use a newer version for some library, then chances are that things will break unless you build standalone. One reason would be if you want to debug a library and fix it because it is buggy.<br />
<br />
Conclusion: if you are building the viewer for the first time, and you are building for 32-bit, then you should ''not'' use standalone.<br />
<br />
== Getting the source ==<br />
<br />
The source for the official Viewer's 2.x codebase resides in mercurial repositories hosted on http://bitbucket.org/lindenlab (a.k.a. http://hg.secondlife.com).<br />
<br />
{{KBnote|custom=Old Versions|Find instructions on how to obtain the sources for official 1.x codebase as well as [[Snowglobe]] 1.x and 2.x on the [https://wiki.secondlife.com/w/index.php?title{{=}}Compiling_the_viewer_%28Linux%29&oldid{{=}}1126012#Getting_the_source archived version of this section].}}<br />
<br />
To check out the '''[[viewer-release (source branch)|lindenlab/viewer-release]]''' branch, do<br />
hg clone http://bitbucket.org/lindenlab/viewer-release<br />
This will create a new folder called <code>viewer-release</code> inside your current working directory, containing the source tree. (You can optionally specify a different target directory. See <code>hg help clone</code>.) Other long-lived branches of interest are '''[[viewer-beta (source branch)|lindenlab/viewer-beta]]''' and '''[[viewer-development (source branch)|lindenlab/viewer-development]]'''. Contributions should usually be based on '''viewer-development'''.<br />
<br />
== Installing the required libraries (that Linden Lab can not or does not provide)==<br />
<br />
Even non-standalone still uses a few shared libraries from your system.<br />
This paragraph deals with those libraries. For ''standalone'' you will<br />
need a lot more (see later on).<br />
<br />
=== Libraries and header files that usually come with a Linux distribution ===<br />
Make sure the libraries and header files for the following packages are installed on your system:<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
!Fedora/Red Hat<br />
|-<br />
!libc.so<br />
|libc6-dev<br />
|glibc-devel<br />
|-<br />
!libstdc++.so.6<br />
|libstdc++6<br />
|libstdc++-devel<br />
|-<br />
!libX11.so<br />
|libx11-dev<br />
|libX11-devel<br />
|-<br />
!libGL.so<br />
|nvidia-glx-dev '''or''' libgl1-mesa-dev<br />
|mesa-libGL-devel<br />
|-<br />
!libXrender.so<br />
|libxrender-dev<br />
|libXrender-devel<br />
|}<br />
<br />
==== shortcut commands for the above ====<br />
<br />
Debian/Ubuntu:<br />
<br />
sudo apt-get install libc6-dev libstdc++6 libx11-dev libxrender-dev [libgl1-mesa-dev|nvidia-current-dev|...]<br />
<br />
Fedora/Red Hat:<br />
<br />
sudo yum install glibc-devel libstdc++-devel libX11-devel mesa-libGL-devel libXrender-devel<br />
<br />
=== Recommended libraries and headers ===<br />
<br />
The following packages are required when building standalone, but even if you are building non-standalone you should probably install them.<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
!Fedora/Red Hat<br />
|-<br />
!libGLU.so<br />
|libglu1-mesa-dev<br />
|mesa-libGLU-devel<br />
|-<br />
!libz.so<br />
|zlib1g-dev<br />
|zlib-devel<br />
|-<br />
!libssl.so<br />
|libssl-dev<br />
|openssl-devel<br />
|-<br />
!libogg.so<br />
|libogg-dev<br />
|libogg-devel<br />
|-<br />
!libpng12.so<br />
|libpng12-dev<br />
|libpng-devel<br />
|-<br />
!libdbus-glib-1.so<br />
|libdbus-glib-1-dev<br />
|dbus-glib-devel<br />
|-<br />
!libatk-1.0.so<br/>libcairo.so<br/>libgdk-x11-2.0.so<br/>libgdk_pixbuf-2.0.so<br/>libgmodule-2.0.so<br/>libglib-2.0.so<br/>libgtk-x11-2.0.so<br/>libgthread-2.0.so<br/>libpango-1.0.so<br/>and many more<br />
|libgtk2.0-dev<br />
|atk-devel cairo-devel gtk2-devel glib2-devel pango-devel<br />
|}<br />
<br />
==== shortcut commands for the above (2) ====<br />
<br />
Debian/Ubuntu:<br />
<br />
<pre><nowiki><br />
sudo apt-get install libglu1-mesa-dev zlib1g-dev libssl-dev libogg-dev libpng12-dev libdbus-glib-1-dev libgtk2.0-dev<br />
</nowiki></pre><br />
<br />
Fedora/Red Hat:<br />
<br />
<pre><nowiki><br />
sudo yum install mesa-libGLU-devel zlib-devel openssl-devel libogg-devel libpng-devel dbus-glib-devel \<br />
atk-devel cairo-devel gtk2-devel glib2-devel pango-devel<br />
</nowiki></pre><br />
<br />
== Necessary libraries when building standalone ==<br />
<br />
=== Existing package names ===<br />
<br />
If you want to build 'standalone', then the following packages are required in addition:<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
!Fedora/Red Hat<br />
!openSUSE<br />
|-<br />
!libopenal.so<br />
|libopenal-dev<br />
|openal-soft-devel<br />
|openal-soft-devel<br />
|-<br />
!libvorbis.so<br/>libvorbisenc.so<br/>libvorbisfile.so<br />
|libvorbis-dev<br />
|libvorbis-devel<br />
|libvorbis-devel<br />
|-<br />
!libalut.so<br />
|libalut-dev<br />
|freealut-devel<br />
|freealut-devel<br />
|-<br />
!libapr-1.so<br />
|libapr1-dev<br />
|apr-devel<br />
|libapr1-devel<br />
|-<br />
!libaprutil-1.so<br />
|libaprutil1-dev<br />
|apr-util-devel<br />
|libapr-util1-devel<br />
|-<br />
!libboost_program_options.so<br/>libboost_regex.so<br/>libboost_signals.so<br />
|libboost-dev<br />
|boost-devel<br />
|boost-devel<br />
|-<br />
!libcares.so<br />
|libc-ares-dev<br />
|c-ares-devel<br />
|libcares-devel<br />
|-<br />
!libxmlrpc-epi.so<br />
|libxmlrpc-epi-dev<br />
|?<br />
|libxmlrpc-epi0-devel<br />
|-<br />
!libopenjpeg.so<br />
|libopenjpeg-dev<br />
|openjpeg-devel<br />
|openjpeg-devel<br />
|-<br />
!libjpeg.so<br />
|libjpeg62-dev (libjpeg-dev)<br />
|libjpeg-devel<br />
|libjpeg62-devel<br />
|-<br />
!libSDL.so<br />
|libsdl1.2-dev<br />
|SDL-devel<br />
|libSDL-devel<br />
|-<br />
!libgstreamer-0.10.so<br />
|libgstreamer0.10-dev<br />
|gstreamer-devel<br />
|gstreamer-0_10-devel<br />
|-<br />
!gstreamer-0.10 plugins<br />
|libgstreamer-plugins-base0.10-dev<br />
|gstreamer-plugins-base-devel<br />
|gstreamer-0_10-plugins-base-devel<br />
|-<br />
!libgmock.so<br />
|google-mock (Snowglobe 2 only)<br />
|?<br />
|?<br />
|}<br />
<br />
==== shortcut commands for the above (3) ====<br />
<br />
Debian/Ubuntu:<br />
<br />
<pre><nowiki><br />
sudo apt-get install libopenal-dev libvorbis-dev libalut-dev libapr1-dev libaprutil1-dev libboost-dev \<br />
libc-ares-dev libxmlrpc-epi-dev libopenjpeg-dev libjpeg62-dev libgtk2.0-dev libsdl1.2-dev \<br />
libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev google-mock<br />
</nowiki></pre><br />
<br />
Fedora/Red Hat:<br />
<br />
<pre><nowiki><br />
sudo yum install openal-soft-devel libvorbis-devel freealut-devel apr-devel apr-util-devel boost-devel \<br />
c-ares-devel openjpeg-devel libjpeg-devel SDL-devel gstreamer-devel gstreamer-plugins-base-devel<br />
</nowiki></pre><br />
<br />
openSUSE:<br />
<br />
You will have to add the buildservice repository home:lemmy04:snowglobe (http://download.opensuse.org/repositories/home:/lemmy04:/snowglobe/) to your package sources.<br />
<br />
<pre><nowiki><br />
sudo zypper install openal-soft-devel libvorbis-devel freealut-devel libapr1-devel libapr-util1-devel \<br />
boost-devel libcares-devel libxmlrpc-epi0-devel openjpeg-devel libjpeg62-devel libSDL-devel gstreamer-0_10-devel gstreamer-0_10-plugins-base-devel<br />
</nowiki></pre><br />
<br />
=== More problematic libraries (standalone) ===<br />
<br />
Easy so far, now here's where the trouble starts.<br />
Not all required packages are in debian, not to mention you might not even be ''using'' debian<br />
of course; but we (standalone builders) rely for the most part on the tremendous work<br />
done by 64-bit pioneer [[User:Robin_Cornelius]] who happens to use debian. Although many<br />
required packages are now in debian, some still need to be downloaded from Robin's<br />
private repository (assuming you're on debian). TODO: Add instructions for those not<br />
using ubuntu/debian.<br />
<br/><br />
<br />
Edit your <code>/etc/apt/sources.list</code> and add the following lines:<br />
<br />
# Repository for SecondLife.<br />
deb <nowiki>http://apt.byteme.org.uk</nowiki> squeeze main<br />
deb-src <nowiki>http://apt.byteme.org.uk</nowiki> squeeze main<br />
<br />
or<br />
<br />
# Repository for SecondLife.<br />
deb <nowiki>http://apt.byteme.org.uk</nowiki> lenny main<br />
deb-src <nowiki>http://apt.byteme.org.uk</nowiki> lenny main<br />
<br />
depending on whether you are using testing (squeeze) or stable (lenny).<br />
Note that you won't be able to compile Snowglobe 2.x on lenny because the Qt library is too old.<br />
<br />
Run <code>apt-get update</code> to get the Package files from byteme as usual.<br />
You can ignore the warning about the missing public key, or do what is<br />
described at the bottom of [http://omvviewer.byteme.org.uk/index.php/downloads/debian/ this page] under 'GPG Keys and Signed repository' (note the remark about not using root), thus:<br />
<br />
% gpg --keyserver hkp://keyserver.ubuntu.com --recv-key 0x729A79A23B7EE764<br />
% gpg --export 0x729A79A23B7EE764 | sudo apt-key add -<br />
<br />
or for ubuntu users we use the openmetaverse repo<br />
<br />
# Openmetaverse repo<br />
deb http://ppa.launchpad.net/openmetaverse/ppa/ubuntu lucid main<br />
<br />
and of course to add the keys<br />
<br />
gpg --keyserver hkp://keyserver.ubuntu.com --recv-key 0x50A40F50<br />
gpg --export 0x50A40F50 | sudo apt-key add -<br />
<br />
and always remember to update after adding repos<br />
<br />
apt-get update<br />
<br />
Finally install these packages:<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
|-<br />
!libcurl-cares.so<br />
|libcurl4-cares-dev<br />
|-<br />
!llqtwebkit<br />
|libllqtwebkit-dev (Snowglobe 1) or<br/>libllqtwebkit2-dev (Snowglobe 2)<br />
|-<br />
!JsonCpp<br />
|libjsoncpp-dev<br />
|-<br />
|libndofdev<br />
|libndofdev-dev (optional, needed if you have a Space Navigator joystick)<br />
|-<br />
!glh-linear<br />
|glh-linear (Snowglobe 2 only)<br />
|-<br />
!boost-coroutine<br />
|boost-coroutine (Snowglobe 2 only)<br />
|}<br />
<br/><br />
<br />
Shortcut commands for the above<br />
<br />
sudo apt-get install libcurl4-cares-dev libllqtwebkit2-dev glh-linear boost-coroutine libndofdev-dev<br />
<br />
If you are on lenny you will also (automatically) install the packages '''cmake''', '''libopenjpeg-dev''' and '''libopenjpeg2''' from byteme. This is because the packages in lenny contain bugs.<br />
<br />
The libjsoncpp-dev installs a library called <code>/usr/lib/libjson.so</code>, but the viewer is looking for one called <code>libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so</code> in '/usr/lib' and '/usr/local/lib'. Therefore execute the following command as root:<br />
<br />
# This is not needed on Snowglobe 1.4.1 and higher.<br />
% ln -s /usr/lib/libjson.so /usr/local/lib/libjson_linux-gcc-$(g++ -dumpversion)_libmt.so<br />
<br />
In order to run the tests, you need a template library called 'tut'. Because this is a template library, we can just use the library archive from Linden Lab for any architecture. Therefore, to install tut, run:<br />
<br />
% scripts/install.py tut<br />
<br />
Until recently for some completely mysterious reason, the source code includes <code><tut/tut.hpp></code> while<br />
configure checks for <code>tut.h</code> in <code>/usr/lib</code> and <code>/usr/local/lib</code> only (CXXFLAGS?<br />
Never heard of that).<br />
In order to fix this brokenness for non-Snowglobe viewers or based on older snowglobe versions (prior to 1.4, or 2.1),<br />
execute the following (2.x viewers older than 2.1 and 1.x viewers older than 1.4 only):<br />
<br />
# This is not needed on Snowglobe 1.4.1 and higher.<br />
% sudo touch /usr/local/include/tut.h<br />
<br />
which satisfies the configure check. The installed tut.hpp is still used anyway since <code>libraries/include</code> is in the include search path by default. Alternatively, edit <code>indra/cmake/Tut.cmake</code> and comment out these two lines:<br />
<br />
<code><br />
#include(FindTut)<br />
#include_directories(${TUT_INCLUDE_DIR})<br />
</code><br />
<br />
Oh WAIT! On 2.0 standalone <code>libraries/include</code> is NOT included anymore, and it seems impossible<br />
to fix the cmake spaghetti so here's what you have to do on top of the above:<br />
<br />
sudo cp -r libraries/include/tut /usr/local/include<br />
<br />
Sorry but there is no other way.<br />
<br />
However, if you are using snowglobe 1.4 or a later 1.x, or snowglobe 2.1 or later, or a viewer based on those,<br />
then the viewer actually looks for tut/tut.hpp. So, you can still install it in <code>/usr/local/include/tut/</code>,<br />
but you can also install it in -say- /somewhere/include/tut/ and set the environment variable CMAKE_INCLUDE_PATH<br />
(a colon separated list of paths) to include <code>/somewhere/include</code> before configuration. Note that due to<br />
a cmake problem/bug it will find /somewhere/include but ''still'' use the include path of any other library,<br />
including /usr/include or /usr/local/include, so make sure you remove any other tut installation from common<br />
paths if you use the latter method.<br />
<br />
=== Get voice chat working (standalone) ===<br />
<br />
The voice binaries downloaded for non-standalone builds can be used in for standalone builds, too. Because they'll run as a separate process, this even works with 64-bit builds of the viewer (assuming your system is set up for also running 32-bit binaries). To download and unpack the binaries (which doesn't happen automatically when building standalone) run:<br />
${SOURCE_DIR}/scripts/install.py slvoice<br />
<br />
{{KBnote|In earlier revisions, the package was named <code>vivox</code> rather than <code>slvoice</code>.}}<br />
<br />
After [[#Compiling|building]], you'll have to copy the binaries into the right place<br />
(-- I don't think this is correct as this will also link the viewer against those libraries.<br />
Instead you have to use a script for SLVoice that sets the right LD_LIBRARY_PATH and<br />
then runs the real SLVoice --[[User:Aleric Inglewood|Aleric Inglewood]] 12:03, 13 July 2010 (UTC)):<br />
cp ${SOURCE_DIR}/indra/newview/vivox-runtime/i686-linux/SLVoice ${BUILD_DIR}/newview/packaged/bin/<br />
cp ${SOURCE_DIR}/indra/newview/vivox-runtime/i686-linux/*.so* ${BUILD_DIR}/newview/packaged/lib/<br />
<br />
If you want, you can then remove the voice binaries again from the source tree with<br />
${SOURCE_DIR}/scripts/install.py --uninstall vivox<br />
<br />
=== Remaining issues (standalone) ===<br />
<br />
In order to run the viewer you need to create a 'package' (a directory really, to which everything is copied that is needed to run it).<br />
Unfortunately, if you are building standalone on a 32-bit machine, it ''still'' tries to happily copy the Linden Lab provided shared libraries over, which we never even downloaded mind you, causing the packaging to fail. Therefore, edit <code>indra/newview/viewer_manifest.py</code> and comment out the following lines in <code>class Linux_i686Manifest(LinuxManifest)</code>:<br />
<br />
<pre><nowiki><br />
#self.path("libapr-1.so.0")<br />
#self.path("libaprutil-1.so.0")<br />
#self.path("libdb-4.2.so")<br />
#self.path("libcrypto.so.0.9.7")<br />
#self.path("libexpat.so.1")<br />
#self.path("libssl.so.0.9.7")<br />
#self.path("libuuid.so.1")<br />
#self.path("libSDL-1.2.so.0")<br />
#self.path("libELFIO.so")<br />
#self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")<br />
#self.path("libalut.so")<br />
#self.path("libopenal.so", "libopenal.so.1")<br />
self.end_prefix("lib")<br />
<br />
# Vivox runtimes<br />
#if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):<br />
# self.path("SLVoice")<br />
# self.end_prefix()<br />
#if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):<br />
# self.path("libortp.so")<br />
# self.path("libvivoxsdk.so")<br />
# self.end_prefix("lib")<br />
</nowiki></pre><br />
<br />
Also, until [http://jira.secondlife.com/browse/VWR-9475 VWR-9475] ''really'' gets fixed (it was fixed before, but not really),<br />
you need to install the 'SDL' precompiled library on standalone in order to get the needed cursor bitmaps (not necessary for Snowglobe 2.x):<br />
<br />
% scripts/install.py SDL<br />
<br />
However, if you are building standalone on 32-bit, that would also cause the wrong (non-system) headers and library to be included, so you will need to remove those again on 32-bit (from libraries/i686-linux/include/ and libraries/i686-linux/lib_release_client/).<br />
<br />
== Installing the Non-Free Shared Libraries ==<br />
'''Needs to be redone''' - [[User:Oz Linden|Oz Linden]]<br />
<br />
== Compiling ==<br />
<br />
This page describes how to build the Second Life viewer with [[CMake]]. CMake is a system for generating per-platform build files. On Linux, it will generate your choice of Makefiles or KDevelop project files.<br />
<br />
'''NOTE:''' These instructions are for the viewers using cmake (versions 1.21 and beyond). For older viewers (1.20 and earlier) see [[Compiling the viewer with SCons (Linux)]]<br />
<br />
== Build the viewer with autobuild ==<br />
Configuring and building with autobuild works the same on all platforms. Full instructions may be found at [[Build_Viewer_With_Autobuild]].<br />
<br />
{{KBcaution| If you are using prepackaged 3rd party libraries from Linden (not a stand alone build) then you will need to build using gcc version 4.1; set CC and CXX accordingly. ''TODO: expand/update''}}<br />
<br />
=== Configuration notes ===<br />
* To build for 'standalone' (see `[[#What_does_.27Standalone.27_mean.3F|What does 'standalone' mean?]]` above) choose an '''OpenSourceStandAlone''' option.<br />
* If you want to use KDevelop add <code>-G KDevelop3</code>.<br />
* Configuring a "non-standalone" version of the source code tree will cause the required (32-bit) third party library packages (as built by Linden Lab) to be downloaded during the CMake build process.<br />
* '''OpenSource''' configurations do not install FMOD (which will be disabled).<br />
* The environment variables CC and CXX are picked up automatically as usual. However, this is not the case of CXXFLAGS and LDFLAGS. You can pass the following to the configure commandline: <code>-DCMAKE_CXX_FLAGS:STRING="$CXXFLAGS" -DCMAKE_EXE_LINKER_FLAGS:STRING="$LDFLAGS"</code> to enable the use of these environment variables.<br />
* You can make the build process more verbose (make it print the compiler commands it executes) by passing <code>-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON</code> as well.<br />
* As of version 2.0, passing <code>-DLL_TESTS:BOOL=FALSE</code> will stop running any tests (if any; depends on standalone and viewer version).<br />
* If you want to restart the configuration process from scratch without any cached values affecting the configuration, erase the <code>CMakeCache.txt</code> in the build directory.<br />
* Autobuild appears to bind the CXX and CC env. variables at configuration time. So the following should work if done once:<br />
** CXX=g++-4.1 CC=gcc-4.1 autobuild configure -c Release<br />
<br />
=== Where's the built viewer? ===<br />
<br />
On Linux, your build will be at<br />
<br />
build-linux-ARCH/newview/packaged<br />
<br />
where "''ARCH''" should be something like "i686" or "x86_64" (depending on your platform).<br />
{{KBcaution|Currently, the build dir will be <code>build-linux-'''i686'''</code>, even when a 64-bit build was requested by <code>autobuild configure [...] -- -DWORD_SIZE{{=}}64 [...]</code>. See {{jira|OPEN-106}}.}}<br />
<br />
=== Using ccache ===<br />
<br />
It is very highly recommended that you use and install [http://ccache.samba.org/manual.html ccache] even before<br />
the first compile; it will speed up subsequent compiles with a factor of 10 in case you need to redo the compile!<br />
<br />
The easiest way to start using ccache is to make ''symbolic'' links to ccache<br />
from <code>/usr/local/bin</code>. Make sure that <code>/usr/local/bin</code> comes first in your <code>PATH</code>,<br />
before the real g++. Thus, as root and assuming you are using gcc/g++ (don't do this if you are using distcc, see below),<br />
<br />
<code><br />
% apt-get install ccache<br />
% cd /usr/local/bin<br />
% ln -s ../../bin/ccache gcc<br />
% ln -s ../../bin/ccache g++<br />
</code><br />
<br />
And then to test, as normal user (make sure you are not in /usr/local/bin anymore),<br />
<br />
<code><br />
% which g++<br />
</code><br />
<br />
This should print <code>/usr/local/bin/g++</code>, if not fix you <code>PATH</code>.<br />
<br />
Note that by default ccache puts the cache in <code>$HOME/.ccache</code> and will grow till about 1 GB, so make sure you have that diskspace there. Alternatively you can set the environment variable <code>CCACHE_DIR</code> to change the location of the cache.<br />
<br />
=== Using distcc ===<br />
<br />
If you have multiple PCs, you can speed up the build process by using distcc.<br />
You probably should ''still'' use ccache which has to be run before distcc, therefore<br />
both have to be specified in the <code>CXX</code> environment variable, by adding ccache to them.<br />
<br />
To use distcc, you need to pass an environment variable <code>CXX</code> containing the distcc command prefix to <code>develop.py</code> when configuring, e.g., <br />
<br />
CXX="ccache distcc g++" ./develop.py configure<br />
<br />
Or, if you are using a heterogeneous rows of PCs, you need to add a config prefix to <code>g++</code>, e.g. (in my case, as a Fedora user),<br />
<br />
CXX="ccache distcc i386-redhat-linux-g++" ./develop.py configure<br />
<br />
Once you did so, the generated makefiles contain instructions to use distcc. You don't need to specify anything special when invoking <code>develop.py</code> to build. The number of concurrent jobs (i.e., <code>-j</code> option to <code>make</code> command) to run is automatically determined by <code>develop.py</code>.<br />
<br />
If you invoke <code>make</code> command by yourself, don't forget to add the <code>-j</code> option with an appropriate number.<br />
<br />
= What to do if it doesn't work for you =<br />
<br />
* Ask for help on [[IRC]] (irc.freenode.net #opensl)<br />
* Find someone on the [[OpenSource-Dev|opensource-dev mailing list]]<br />
* Fix it: [[Modifying CMake Files]] (and please, submit a patch!)<br />
* If you are building on openSUSE 11.2 or newer, and your builds fail with lots of "undefined reference to ..." message: set the environment variable SUSE_ASNEEDED to 0 before building.<br />
<br />
= Submitting Patches =<br />
This is probably far down the road, but if you make changes to the source and want to submit them, see the page about [[Submitting patches|submitting patches]].<br />
<br />
----<br />
<br />
{{KBcaution|<br />
Everything below is probably outdated. It should be carefully sorted, cleaned up, updated and deleted (added 14/7/2010)<br />
}}<br />
<br />
= Prebuilt libraries vs. standalone builds =<br />
<br />
For standalone builds, we'd really like to beef up the checks for system libraries so that for example <code>cmake</code> will fail if a required library (such as OpenJPEG) isn't installed. We welcome all patches that help out with this.<br />
<br />
* [[Building_the_viewer_with_CMake/cmake-SL_script|cmake-SL]]: a script for standalone, pre-built and mixed libraries viewer builds under Linux.<br />
* [[Talk:CMake#Issues_when_compiling_a_standalone_Linux_viewer|Problems when compiling a standalone Linux viewer]]<br />
<br />
<br />
== Testing and packaging the client ==<br />
<br />
=== Testing the result from inside the tree ===<br />
<br />
You may find it simpler and less error-prone to follow the instructions in the [[Compiling_the_viewer_%28Linux%29#Packaging_the_client|Packaging the client]] section below to run the client under the same conditions as an end-user would.<br />
<br />
* 2008-05-29 (Ochi Wolfe): Compiling the 1.20.7 r88152 viewer, it seems like even when compiling as "release" the viewer is built ready-to-go inside the newview/packaged/ directory including the message_template.msg and message.xml in the right place. Try to cd to the newview/packaged/ directory and run SL from there with the ./secondlife command as you would normally do.<br />
<br />
Otherwise:<br />
<br />
* Preparing to run 'in-tree'<br />
** <i>ensure that you have indra/newview/app_settings/static_*.db2</i> - if not, you'll find it in the [[#slviewer-artwork-.3Cversion.3E.zip|slviewer-artwork]] download (a zip file).<br />
** now, from the indra directory:<br />
<code><br />
$ cp ../scripts/messages/message_template.msg newview/app_settings/<br />
$ cp ../etc/message.xml newview/app_settings/<br />
</code><br />
<br />
'''Important:''' Starting from version 1.18.0, copying message.xml is also required. Missing it will cause group IMs to fail to work, although the viewer will run fine otherwise.<br />
<br />
* Running it: The LD_LIBRARY_PATH stuff ensures that the binary looks for its libraries in the right places. From the indra directory:<br />
<code><br />
$ ( cd newview && LD_LIBRARY_PATH="`pwd`"/../../libraries/i686-linux/lib_release_client:"`pwd`"/app_settings/mozilla-runtime-linux-i686:${LD_LIBRARY_PATH}:/usr/local/lib ./secondlife-i686-bin )<br />
</code><br />
<br />
<br /><br />
==== The client seems kinda slow. ====<br />
<br />
By default, the open-source Second Life Viewer uses the open-source OpenJPEG library to decode the (many) JPEG-2000 texture images it receives from the servers. This isn't quite of comparable speed to the proprietary third-party library which the Linden Lab viewer builds have traditionally used, for which we are not permitted to redistribute the source.<br />
<br />
However, the [[#slviewer-linux-libs-.3Cversion.3E.tar.gz|slviewer-linux-libs]] package includes two pre-built libraries which facilitate the use of this slightly faster image decoding method: <b>libkdu_v42R.so</b> and <b>libllkdu.so</b>. These are provided for your testing; again, we are not permitted to grant you the right to re-distribute these libraries to downstream users, but the viewer will still work (albeit slightly slower) without them.<br />
<br />
To <b>use these faster image-decoding libraries</b>, they simply need to be put into the right places relative to the viewer runtime directory - nothing needs to be reconfigured or recompiled. If you're running the client from the source tree, the following will make the KDU libraries available:<br />
<code><br />
cp "$SLSRC/libraries/i686-linux/lib_release_client/libllkdu.so" "$SLSRC/indra/newview/libllkdu.so"<br />
mkdir "$SLSRC/indra/lib"<br />
cp "$SLSRC/libraries/i686-linux/lib_release_client/libkdu_v42R.so" "$SLSRC/indra/lib/libkdu_v42R.so"<br />
</code><br />
<br />
The file <b>indra/newview/viewer_manifest.py</b> contains some commented-out entries describing where these libraries belong; if you uncomment the two lines corresponding to libllkdu and libkdu then they will be automatically copied into the right place in the runtime directory when you follow the 'Packaging the client' instructions below.<br />
<br />
==== File Dialogs Don't Work on 64 bit system ====<br />
<br />
If you run a 64 bit system, and your file dialogs don't work, or they worked before and stopped after you installed an update, it may be due to a mismatch between the headers used to compile the viewer and the library it's using. The log will contain something like this:<br />
<code><br />
2007-06-21T01:28:35Z INFO: ll_try_gtk_init: Starting GTK Initialization.<br />
2007-06-21T01:28:36Z INFO: ll_try_gtk_init: GTK Initialized.<br />
2007-06-21T01:28:36Z INFO: ll_try_gtk_init: - Compiled against GTK version 2.10.11<br />
2007-06-21T01:28:36Z INFO: ll_try_gtk_init: - Running against GTK version 2.10.6<br />
2007-06-21T01:28:36Z WARNING: ll_try_gtk_init: - GTK COMPATIBILITY WARNING: Gtk+ version too old (micro mismatch)<br />
</code><br />
<br />
What happens here is that your distribution includes 32 bit GTK libraries, but the package only includes the libraries themselves and not the headers. When building, the SL client will build against the headers included with the main 64 bit GTK package. This will work if the 64 bit version of the library is the same or older than the 32 bit one. However, if your 32 bit library is older, then the viewer will detect the mismatch (built with headers for a newer version of GTK than it's using) and turn GTK off.<br />
<br />
Possible solutions:<br />
* Download the source for the version of the 32 bit GTK libraries your distribution comes with, and build your viewer against those headers.<br />
* Upgrade your 32 bit GTK package so that it's the same or newer as the 64 bit one.<br />
* Downgrade your 64 bit package (may not be a good idea).<br />
<br />
=== Packaging the client ===<br />
<br />
If you substitute 'BUILD=release' with '<b>BUILD=releasefordownload</b>' in the 'Compiling' section above, then packaging the resulting code, libraries, data and documentation into a tarball for the end-user will be done automatically as the final stage of the build process; the pristine end-user client distribution has been assembled into the directory <b>indra/newview/SecondLife_i686_1_X_Y_Z/</b> and has also been tarred into <b>indra/newview/SecondLife_i686_1_X_Y_Z.tar.bz2</b><br />
<br />
The file which controls what (and where) files go into the end-user runtime viewer directory is <b>indra/newview/viewer_manifest.py</b><br />
<br />
<br />
== Resident contributed instructions ==<br />
<br />
=== Automated libraries and headers adjustments, compilation and packaging ===<br />
<br />
Here are two scripts (one for v1.20 and older, and one for v1.21 and newer viewers) that basically do all what is described above, and more, and entitle you to compile a SL client very easily:<br />
<br />
* [[User:Henri Beauchamp/Automated Linux Build Script (1.20 and earlier)]]<br />
* [[User:Henri Beauchamp/Building the viewer with CMake/cmake-SL script]]<br />
<br />
* Please also see the (user contributed) instructions at [[User:Michelle2_Zenovka/cmake]]<br />
<br />
=== FreeBSD ===<br />
<br />
A list of patches is given for [[Compiling the viewer (FreeBSD)]]. They are obsolete, and no longer work.<br />
<br />
[[Category:Compiling viewer]]<br />
[[Category:Articles_in_need_of_updating]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Build_the_Viewer_on_Linux&diff=1149946Build the Viewer on Linux2011-07-30T09:31:03Z<p>Boroondas Gupte: /* Where's the built viewer? */ Made this a complete sentence.</p>
<hr />
<div>{{multi-lang}}<br />
{{CompileNav}}<br />
<br />
The following are instructions for building the Second Life viewer on linux. This process has been used on [http://www.debian.org/ debian] and debian based systems like [http://www.ubuntu.com/ ubuntu], and also on [http://www.fedoraproject.org/ Fedora]. For other platforms, see [[Get source and compile]].<br />
<onlyinclude><br />
== Required tools ==<br />
There are a number of tools that need to be installed first.<br />
<br />
* '''hg''' [package: mercurial]<br />
* '''cmake''' [package: cmake]<br />
** Currently (snowglobe 1.3.2 and higher) cmake 2.6.2 is the minimum required version.<br />
* <b>yacc</b> or compatible tool [suggested package: bison]<br />
* <b>lex</b> or compatible tool [suggested package: flex]<br />
* <b>python</b> [package: python]<br />
** python 2.4.3 is the minimum required version.<br />
** All more recent 2.x versions should work, too. If you encounter problems or deprecation warnings, please [[issue tracker|report]] them.<br />
** python 3.x hasn't been tested yet.<br />
* <b>g++</b> [package: g++]<br />
** Note (not relevant for standalone): gcc 4.4 (which is in recent Ubuntu and debian) won't work in versions prior to 2.0 (or Snowglobe 1.3) if you are not building ''standalone'' (see below), because it chokes on some parts of boost prior to 1.37 (http://svn.boost.org/trac/boost/ticket/2069). The solution is to install <b>GCC 4.3</b> and to run 'export CXX=/usr/bin/g++-4.3' or whatever your binary is before trying to compile. Another workaround is to use update-alternatives; for example, if you already have 4.4 installed, try this:<br />
sudo apt-get install g++-4.3<br />
sudo update-alternatives --remove-all gcc<br />
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 43 --slave /usr/bin/g++ g++ /usr/bin/g++-4.3 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.3<br />
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 44 --slave /usr/bin/g++ g++ /usr/bin/g++-4.4 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.4<br />
then choose 4.3:<br />
sudo update-alternatives --config gcc<br />
* '''libboost-program-options-dev''' was needed on Ubuntu 8.04 to use cmake, but it's '''not needed anymore''' to build a 1.23-render-pipeline on Ubuntu 9.04-beta (nor Snowglobe 2 on Ubuntu 9.10)<br />
* '''make''' (package: make)<br />
* '''bzip2''' (package: bzip2)<br />
<br />
The build process may use the following optional tools:<br />
<br />
* <b>distcc</b> distributed compiler (useful if you have multiple PCs.)<br />
* <b>ccache</b> a fast compiler cache (speed up recompilation, a must if you intend to do development.)<br />
<br />
{{KBhint|To boost your productivity as a developer, try the suggestions at [[Development Environment for Multiple Viewers]] about directory structure, multiple viewers and automation of repetitive tasks.}}<br />
<br />
</onlyinclude><br />
<br />
== What does 'Standalone' mean? ==<br />
<br />
A ''standalone'' build of the viewer refers to building a viewer against the shared libraries that are installed on your system instead of using precompiled libraries provided by Linden Lab.<br />
<br />
In order to build standalone, you will have to configure using <code>--standalone</code>, see [[#Configuring_your_tree|configuration]] below.<br />
<br />
The advantage of building standalone is that you might use less RAM: you'll be using the same shared libraries<br />
that other applications use. However this is a rather minor advantage. The disadvantages of building standalone is a long list of potential problems: you will have to manually install all the development packages of many many libraries. In some cases there isn't a package for it from your distribution, so you have to especially get those sources separately and compile and install them in a way that the viewer can find them. Building standalone is not supported officially by Linden Lab and therefore not tested. Hence, it might not work at all (although the open source snowglobe developers usually make sure that it works for snowglobe). Nevertheless, every now and then it happens that the viewer won't build with some new released library (ie, boost), in which case you most likely will have to use the latest source code retrieved with subversion.<br />
<br />
Nevertheless, there might be reasons that you want to do a standalone build anyway. The most important one being that Linden Lab also doesn't support 64-bit: they do not provided shared libraries for 64-bit; so, if you want to build native 64 bit you must use standalone. Another reason might be that Linden Lab is using a few rather old library versions that are incompatible with newer versions. If you have any reason to use a newer version for some library, then chances are that things will break unless you build standalone. One reason would be if you want to debug a library and fix it because it is buggy.<br />
<br />
Conclusion: if you are building the viewer for the first time, and you are building for 32-bit, then you should ''not'' use standalone.<br />
<br />
== Getting the source ==<br />
<br />
The source for the official Viewer's 2.x codebase resides in mercurial repositories hosted on http://bitbucket.org/lindenlab (a.k.a. http://hg.secondlife.com).<br />
<br />
{{KBnote|custom=Old Versions|Find instructions on how to obtain the sources for official 1.x codebase as well as [[Snowglobe]] 1.x and 2.x on the [https://wiki.secondlife.com/w/index.php?title{{=}}Compiling_the_viewer_%28Linux%29&oldid{{=}}1126012#Getting_the_source archived version of this section].}}<br />
<br />
To check out the '''[[viewer-release (source branch)|lindenlab/viewer-release]]''' branch, do<br />
hg clone http://bitbucket.org/lindenlab/viewer-release<br />
This will create a new folder called <code>viewer-release</code> inside your current working directory, containing the source tree. (You can optionally specify a different target directory. See <code>hg help clone</code>.) Other long-lived branches of interest are '''[[viewer-beta (source branch)|lindenlab/viewer-beta]]''' and '''[[viewer-development (source branch)|lindenlab/viewer-development]]'''. Contributions should usually be based on '''viewer-development'''.<br />
<br />
== Installing the required libraries (that Linden Lab can not or does not provide)==<br />
<br />
Even non-standalone still uses a few shared libraries from your system.<br />
This paragraph deals with those libraries. For ''standalone'' you will<br />
need a lot more (see later on).<br />
<br />
=== Libraries and header files that usually come with a Linux distribution ===<br />
Make sure the libraries and header files for the following packages are installed on your system:<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
!Fedora/Red Hat<br />
|-<br />
!libc.so<br />
|libc6-dev<br />
|glibc-devel<br />
|-<br />
!libstdc++.so.6<br />
|libstdc++6<br />
|libstdc++-devel<br />
|-<br />
!libX11.so<br />
|libx11-dev<br />
|libX11-devel<br />
|-<br />
!libGL.so<br />
|nvidia-glx-dev '''or''' libgl1-mesa-dev<br />
|mesa-libGL-devel<br />
|-<br />
!libXrender.so<br />
|libxrender-dev<br />
|libXrender-devel<br />
|}<br />
<br />
==== shortcut commands for the above ====<br />
<br />
Debian/Ubuntu:<br />
<br />
sudo apt-get install libc6-dev libstdc++6 libx11-dev libxrender-dev [libgl1-mesa-dev|nvidia-current-dev|...]<br />
<br />
Fedora/Red Hat:<br />
<br />
sudo yum install glibc-devel libstdc++-devel libX11-devel mesa-libGL-devel libXrender-devel<br />
<br />
=== Recommended libraries and headers ===<br />
<br />
The following packages are required when building standalone, but even if you are building non-standalone you should probably install them.<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
!Fedora/Red Hat<br />
|-<br />
!libGLU.so<br />
|libglu1-mesa-dev<br />
|mesa-libGLU-devel<br />
|-<br />
!libz.so<br />
|zlib1g-dev<br />
|zlib-devel<br />
|-<br />
!libssl.so<br />
|libssl-dev<br />
|openssl-devel<br />
|-<br />
!libogg.so<br />
|libogg-dev<br />
|libogg-devel<br />
|-<br />
!libpng12.so<br />
|libpng12-dev<br />
|libpng-devel<br />
|-<br />
!libdbus-glib-1.so<br />
|libdbus-glib-1-dev<br />
|dbus-glib-devel<br />
|-<br />
!libatk-1.0.so<br/>libcairo.so<br/>libgdk-x11-2.0.so<br/>libgdk_pixbuf-2.0.so<br/>libgmodule-2.0.so<br/>libglib-2.0.so<br/>libgtk-x11-2.0.so<br/>libgthread-2.0.so<br/>libpango-1.0.so<br/>and many more<br />
|libgtk2.0-dev<br />
|atk-devel cairo-devel gtk2-devel glib2-devel pango-devel<br />
|}<br />
<br />
==== shortcut commands for the above (2) ====<br />
<br />
Debian/Ubuntu:<br />
<br />
<pre><nowiki><br />
sudo apt-get install libglu1-mesa-dev zlib1g-dev libssl-dev libogg-dev libpng12-dev libdbus-glib-1-dev libgtk2.0-dev<br />
</nowiki></pre><br />
<br />
Fedora/Red Hat:<br />
<br />
<pre><nowiki><br />
sudo yum install mesa-libGLU-devel zlib-devel openssl-devel libogg-devel libpng-devel dbus-glib-devel \<br />
atk-devel cairo-devel gtk2-devel glib2-devel pango-devel<br />
</nowiki></pre><br />
<br />
== Necessary libraries when building standalone ==<br />
<br />
=== Existing package names ===<br />
<br />
If you want to build 'standalone', then the following packages are required in addition:<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
!Fedora/Red Hat<br />
!openSUSE<br />
|-<br />
!libopenal.so<br />
|libopenal-dev<br />
|openal-soft-devel<br />
|openal-soft-devel<br />
|-<br />
!libvorbis.so<br/>libvorbisenc.so<br/>libvorbisfile.so<br />
|libvorbis-dev<br />
|libvorbis-devel<br />
|libvorbis-devel<br />
|-<br />
!libalut.so<br />
|libalut-dev<br />
|freealut-devel<br />
|freealut-devel<br />
|-<br />
!libapr-1.so<br />
|libapr1-dev<br />
|apr-devel<br />
|libapr1-devel<br />
|-<br />
!libaprutil-1.so<br />
|libaprutil1-dev<br />
|apr-util-devel<br />
|libapr-util1-devel<br />
|-<br />
!libboost_program_options.so<br/>libboost_regex.so<br/>libboost_signals.so<br />
|libboost-dev<br />
|boost-devel<br />
|boost-devel<br />
|-<br />
!libcares.so<br />
|libc-ares-dev<br />
|c-ares-devel<br />
|libcares-devel<br />
|-<br />
!libxmlrpc-epi.so<br />
|libxmlrpc-epi-dev<br />
|?<br />
|libxmlrpc-epi0-devel<br />
|-<br />
!libopenjpeg.so<br />
|libopenjpeg-dev<br />
|openjpeg-devel<br />
|openjpeg-devel<br />
|-<br />
!libjpeg.so<br />
|libjpeg62-dev (libjpeg-dev)<br />
|libjpeg-devel<br />
|libjpeg62-devel<br />
|-<br />
!libSDL.so<br />
|libsdl1.2-dev<br />
|SDL-devel<br />
|libSDL-devel<br />
|-<br />
!libgstreamer-0.10.so<br />
|libgstreamer0.10-dev<br />
|gstreamer-devel<br />
|gstreamer-0_10-devel<br />
|-<br />
!gstreamer-0.10 plugins<br />
|libgstreamer-plugins-base0.10-dev<br />
|gstreamer-plugins-base-devel<br />
|gstreamer-0_10-plugins-base-devel<br />
|-<br />
!libgmock.so<br />
|google-mock (Snowglobe 2 only)<br />
|?<br />
|?<br />
|}<br />
<br />
==== shortcut commands for the above (3) ====<br />
<br />
Debian/Ubuntu:<br />
<br />
<pre><nowiki><br />
sudo apt-get install libopenal-dev libvorbis-dev libalut-dev libapr1-dev libaprutil1-dev libboost-dev \<br />
libc-ares-dev libxmlrpc-epi-dev libopenjpeg-dev libjpeg62-dev libgtk2.0-dev libsdl1.2-dev \<br />
libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev google-mock<br />
</nowiki></pre><br />
<br />
Fedora/Red Hat:<br />
<br />
<pre><nowiki><br />
sudo yum install openal-soft-devel libvorbis-devel freealut-devel apr-devel apr-util-devel boost-devel \<br />
c-ares-devel openjpeg-devel libjpeg-devel SDL-devel gstreamer-devel gstreamer-plugins-base-devel<br />
</nowiki></pre><br />
<br />
openSUSE:<br />
<br />
You will have to add the buildservice repository home:lemmy04:snowglobe (http://download.opensuse.org/repositories/home:/lemmy04:/snowglobe/) to your package sources.<br />
<br />
<pre><nowiki><br />
sudo zypper install openal-soft-devel libvorbis-devel freealut-devel libapr1-devel libapr-util1-devel \<br />
boost-devel libcares-devel libxmlrpc-epi0-devel openjpeg-devel libjpeg62-devel libSDL-devel gstreamer-0_10-devel gstreamer-0_10-plugins-base-devel<br />
</nowiki></pre><br />
<br />
=== More problematic libraries (standalone) ===<br />
<br />
Easy so far, now here's where the trouble starts.<br />
Not all required packages are in debian, not to mention you might not even be ''using'' debian<br />
of course; but we (standalone builders) rely for the most part on the tremendous work<br />
done by 64-bit pioneer [[User:Robin_Cornelius]] who happens to use debian. Although many<br />
required packages are now in debian, some still need to be downloaded from Robin's<br />
private repository (assuming you're on debian). TODO: Add instructions for those not<br />
using ubuntu/debian.<br />
<br/><br />
<br />
Edit your <code>/etc/apt/sources.list</code> and add the following lines:<br />
<br />
# Repository for SecondLife.<br />
deb <nowiki>http://apt.byteme.org.uk</nowiki> squeeze main<br />
deb-src <nowiki>http://apt.byteme.org.uk</nowiki> squeeze main<br />
<br />
or<br />
<br />
# Repository for SecondLife.<br />
deb <nowiki>http://apt.byteme.org.uk</nowiki> lenny main<br />
deb-src <nowiki>http://apt.byteme.org.uk</nowiki> lenny main<br />
<br />
depending on whether you are using testing (squeeze) or stable (lenny).<br />
Note that you won't be able to compile Snowglobe 2.x on lenny because the Qt library is too old.<br />
<br />
Run <code>apt-get update</code> to get the Package files from byteme as usual.<br />
You can ignore the warning about the missing public key, or do what is<br />
described at the bottom of [http://omvviewer.byteme.org.uk/index.php/downloads/debian/ this page] under 'GPG Keys and Signed repository' (note the remark about not using root), thus:<br />
<br />
% gpg --keyserver hkp://keyserver.ubuntu.com --recv-key 0x729A79A23B7EE764<br />
% gpg --export 0x729A79A23B7EE764 | sudo apt-key add -<br />
<br />
or for ubuntu users we use the openmetaverse repo<br />
<br />
# Openmetaverse repo<br />
deb http://ppa.launchpad.net/openmetaverse/ppa/ubuntu lucid main<br />
<br />
and of course to add the keys<br />
<br />
gpg --keyserver hkp://keyserver.ubuntu.com --recv-key 0x50A40F50<br />
gpg --export 0x50A40F50 | sudo apt-key add -<br />
<br />
and always remember to update after adding repos<br />
<br />
apt-get update<br />
<br />
Finally install these packages:<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!Library<br />
!Debian/Ubuntu<br />
|-<br />
!libcurl-cares.so<br />
|libcurl4-cares-dev<br />
|-<br />
!llqtwebkit<br />
|libllqtwebkit-dev (Snowglobe 1) or<br/>libllqtwebkit2-dev (Snowglobe 2)<br />
|-<br />
!JsonCpp<br />
|libjsoncpp-dev<br />
|-<br />
|libndofdev<br />
|libndofdev-dev (optional, needed if you have a Space Navigator joystick)<br />
|-<br />
!glh-linear<br />
|glh-linear (Snowglobe 2 only)<br />
|-<br />
!boost-coroutine<br />
|boost-coroutine (Snowglobe 2 only)<br />
|}<br />
<br/><br />
<br />
Shortcut commands for the above<br />
<br />
sudo apt-get install libcurl4-cares-dev libllqtwebkit2-dev glh-linear boost-coroutine libndofdev-dev<br />
<br />
If you are on lenny you will also (automatically) install the packages '''cmake''', '''libopenjpeg-dev''' and '''libopenjpeg2''' from byteme. This is because the packages in lenny contain bugs.<br />
<br />
The libjsoncpp-dev installs a library called <code>/usr/lib/libjson.so</code>, but the viewer is looking for one called <code>libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so</code> in '/usr/lib' and '/usr/local/lib'. Therefore execute the following command as root:<br />
<br />
# This is not needed on Snowglobe 1.4.1 and higher.<br />
% ln -s /usr/lib/libjson.so /usr/local/lib/libjson_linux-gcc-$(g++ -dumpversion)_libmt.so<br />
<br />
In order to run the tests, you need a template library called 'tut'. Because this is a template library, we can just use the library archive from Linden Lab for any architecture. Therefore, to install tut, run:<br />
<br />
% scripts/install.py tut<br />
<br />
Until recently for some completely mysterious reason, the source code includes <code><tut/tut.hpp></code> while<br />
configure checks for <code>tut.h</code> in <code>/usr/lib</code> and <code>/usr/local/lib</code> only (CXXFLAGS?<br />
Never heard of that).<br />
In order to fix this brokenness for non-Snowglobe viewers or based on older snowglobe versions (prior to 1.4, or 2.1),<br />
execute the following (2.x viewers older than 2.1 and 1.x viewers older than 1.4 only):<br />
<br />
# This is not needed on Snowglobe 1.4.1 and higher.<br />
% sudo touch /usr/local/include/tut.h<br />
<br />
which satisfies the configure check. The installed tut.hpp is still used anyway since <code>libraries/include</code> is in the include search path by default. Alternatively, edit <code>indra/cmake/Tut.cmake</code> and comment out these two lines:<br />
<br />
<code><br />
#include(FindTut)<br />
#include_directories(${TUT_INCLUDE_DIR})<br />
</code><br />
<br />
Oh WAIT! On 2.0 standalone <code>libraries/include</code> is NOT included anymore, and it seems impossible<br />
to fix the cmake spaghetti so here's what you have to do on top of the above:<br />
<br />
sudo cp -r libraries/include/tut /usr/local/include<br />
<br />
Sorry but there is no other way.<br />
<br />
However, if you are using snowglobe 1.4 or a later 1.x, or snowglobe 2.1 or later, or a viewer based on those,<br />
then the viewer actually looks for tut/tut.hpp. So, you can still install it in <code>/usr/local/include/tut/</code>,<br />
but you can also install it in -say- /somewhere/include/tut/ and set the environment variable CMAKE_INCLUDE_PATH<br />
(a colon separated list of paths) to include <code>/somewhere/include</code> before configuration. Note that due to<br />
a cmake problem/bug it will find /somewhere/include but ''still'' use the include path of any other library,<br />
including /usr/include or /usr/local/include, so make sure you remove any other tut installation from common<br />
paths if you use the latter method.<br />
<br />
=== Get voice chat working (standalone) ===<br />
<br />
The voice binaries downloaded for non-standalone builds can be used in for standalone builds, too. Because they'll run as a separate process, this even works with 64-bit builds of the viewer (assuming your system is set up for also running 32-bit binaries). To download and unpack the binaries (which doesn't happen automatically when building standalone) run:<br />
${SOURCE_DIR}/scripts/install.py slvoice<br />
<br />
{{KBnote|In earlier revisions, the package was named <code>vivox</code> rather than <code>slvoice</code>.}}<br />
<br />
After [[#Compiling|building]], you'll have to copy the binaries into the right place<br />
(-- I don't think this is correct as this will also link the viewer against those libraries.<br />
Instead you have to use a script for SLVoice that sets the right LD_LIBRARY_PATH and<br />
then runs the real SLVoice --[[User:Aleric Inglewood|Aleric Inglewood]] 12:03, 13 July 2010 (UTC)):<br />
cp ${SOURCE_DIR}/indra/newview/vivox-runtime/i686-linux/SLVoice ${BUILD_DIR}/newview/packaged/bin/<br />
cp ${SOURCE_DIR}/indra/newview/vivox-runtime/i686-linux/*.so* ${BUILD_DIR}/newview/packaged/lib/<br />
<br />
If you want, you can then remove the voice binaries again from the source tree with<br />
${SOURCE_DIR}/scripts/install.py --uninstall vivox<br />
<br />
=== Remaining issues (standalone) ===<br />
<br />
In order to run the viewer you need to create a 'package' (a directory really, to which everything is copied that is needed to run it).<br />
Unfortunately, if you are building standalone on a 32-bit machine, it ''still'' tries to happily copy the Linden Lab provided shared libraries over, which we never even downloaded mind you, causing the packaging to fail. Therefore, edit <code>indra/newview/viewer_manifest.py</code> and comment out the following lines in <code>class Linux_i686Manifest(LinuxManifest)</code>:<br />
<br />
<pre><nowiki><br />
#self.path("libapr-1.so.0")<br />
#self.path("libaprutil-1.so.0")<br />
#self.path("libdb-4.2.so")<br />
#self.path("libcrypto.so.0.9.7")<br />
#self.path("libexpat.so.1")<br />
#self.path("libssl.so.0.9.7")<br />
#self.path("libuuid.so.1")<br />
#self.path("libSDL-1.2.so.0")<br />
#self.path("libELFIO.so")<br />
#self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")<br />
#self.path("libalut.so")<br />
#self.path("libopenal.so", "libopenal.so.1")<br />
self.end_prefix("lib")<br />
<br />
# Vivox runtimes<br />
#if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):<br />
# self.path("SLVoice")<br />
# self.end_prefix()<br />
#if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):<br />
# self.path("libortp.so")<br />
# self.path("libvivoxsdk.so")<br />
# self.end_prefix("lib")<br />
</nowiki></pre><br />
<br />
Also, until [http://jira.secondlife.com/browse/VWR-9475 VWR-9475] ''really'' gets fixed (it was fixed before, but not really),<br />
you need to install the 'SDL' precompiled library on standalone in order to get the needed cursor bitmaps (not necessary for Snowglobe 2.x):<br />
<br />
% scripts/install.py SDL<br />
<br />
However, if you are building standalone on 32-bit, that would also cause the wrong (non-system) headers and library to be included, so you will need to remove those again on 32-bit (from libraries/i686-linux/include/ and libraries/i686-linux/lib_release_client/).<br />
<br />
== Installing the Non-Free Shared Libraries ==<br />
'''Needs to be redone''' - [[User:Oz Linden|Oz Linden]]<br />
<br />
== Compiling ==<br />
<br />
This page describes how to build the Second Life viewer with [[CMake]]. CMake is a system for generating per-platform build files. On Linux, it will generate your choice of Makefiles or KDevelop project files.<br />
<br />
'''NOTE:''' These instructions are for the viewers using cmake (versions 1.21 and beyond). For older viewers (1.20 and earlier) see [[Compiling the viewer with SCons (Linux)]]<br />
<br />
== Build the viewer with autobuild ==<br />
Configuring and building with autobuild works the same on all platforms. Full instructions may be found at [[Build_Viewer_With_Autobuild]].<br />
<br />
{{KBcaution| If you are using prepackaged 3rd party libraries from Linden (not a stand alone build) then you will need to build using gcc version 4.1; set CC and CXX accordingly. ''TODO: expand/update''}}<br />
<br />
=== Configuration notes ===<br />
* To build for 'standalone' (see `[[#What_does_.27Standalone.27_mean.3F|What does 'standalone' mean?]]` above) choose an '''OpenSourceStandAlone''' option.<br />
* If you want to use KDevelop add <code>-G KDevelop3</code>.<br />
* Configuring a "non-standalone" version of the source code tree will cause the required (32-bit) third party library packages (as built by Linden Lab) to be downloaded during the CMake build process.<br />
* '''OpenSource''' configurations do not install FMOD (which will be disabled).<br />
* The environment variables CC and CXX are picked up automatically as usual. However, this is not the case of CXXFLAGS and LDFLAGS. You can pass the following to the configure commandline: <code>-DCMAKE_CXX_FLAGS:STRING="$CXXFLAGS" -DCMAKE_EXE_LINKER_FLAGS:STRING="$LDFLAGS"</code> to enable the use of these environment variables.<br />
* You can make the build process more verbose (make it print the compiler commands it executes) by passing <code>-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON</code> as well.<br />
* As of version 2.0, passing <code>-DLL_TESTS:BOOL=FALSE</code> will stop running any tests (if any; depends on standalone and viewer version).<br />
* If you want to restart the configuration process from scratch without any cached values affecting the configuration, erase the <code>CMakeCache.txt</code> in the build directory.<br />
* Autobuild appears to bind the CXX and CC env. variables at configuration time. So the following should work if done once:<br />
** CXX=g++-4.1 CC=gcc-4.1 autobuild configure -c Release<br />
<br />
=== Where's the built viewer? ===<br />
<br />
On Linux, your build will be at<br />
<br />
build-linux-ARCH/newview/packaged<br />
<br />
where "''ARCH''" is something like "i686" or "x86_64" (depending on your platform).<br />
<br />
=== Using ccache ===<br />
<br />
It is very highly recommended that you use and install [http://ccache.samba.org/manual.html ccache] even before<br />
the first compile; it will speed up subsequent compiles with a factor of 10 in case you need to redo the compile!<br />
<br />
The easiest way to start using ccache is to make ''symbolic'' links to ccache<br />
from <code>/usr/local/bin</code>. Make sure that <code>/usr/local/bin</code> comes first in your <code>PATH</code>,<br />
before the real g++. Thus, as root and assuming you are using gcc/g++ (don't do this if you are using distcc, see below),<br />
<br />
<code><br />
% apt-get install ccache<br />
% cd /usr/local/bin<br />
% ln -s ../../bin/ccache gcc<br />
% ln -s ../../bin/ccache g++<br />
</code><br />
<br />
And then to test, as normal user (make sure you are not in /usr/local/bin anymore),<br />
<br />
<code><br />
% which g++<br />
</code><br />
<br />
This should print <code>/usr/local/bin/g++</code>, if not fix you <code>PATH</code>.<br />
<br />
Note that by default ccache puts the cache in <code>$HOME/.ccache</code> and will grow till about 1 GB, so make sure you have that diskspace there. Alternatively you can set the environment variable <code>CCACHE_DIR</code> to change the location of the cache.<br />
<br />
=== Using distcc ===<br />
<br />
If you have multiple PCs, you can speed up the build process by using distcc.<br />
You probably should ''still'' use ccache which has to be run before distcc, therefore<br />
both have to be specified in the <code>CXX</code> environment variable, by adding ccache to them.<br />
<br />
To use distcc, you need to pass an environment variable <code>CXX</code> containing the distcc command prefix to <code>develop.py</code> when configuring, e.g., <br />
<br />
CXX="ccache distcc g++" ./develop.py configure<br />
<br />
Or, if you are using a heterogeneous rows of PCs, you need to add a config prefix to <code>g++</code>, e.g. (in my case, as a Fedora user),<br />
<br />
CXX="ccache distcc i386-redhat-linux-g++" ./develop.py configure<br />
<br />
Once you did so, the generated makefiles contain instructions to use distcc. You don't need to specify anything special when invoking <code>develop.py</code> to build. The number of concurrent jobs (i.e., <code>-j</code> option to <code>make</code> command) to run is automatically determined by <code>develop.py</code>.<br />
<br />
If you invoke <code>make</code> command by yourself, don't forget to add the <code>-j</code> option with an appropriate number.<br />
<br />
= What to do if it doesn't work for you =<br />
<br />
* Ask for help on [[IRC]] (irc.freenode.net #opensl)<br />
* Find someone on the [[OpenSource-Dev|opensource-dev mailing list]]<br />
* Fix it: [[Modifying CMake Files]] (and please, submit a patch!)<br />
* If you are building on openSUSE 11.2 or newer, and your builds fail with lots of "undefined reference to ..." message: set the environment variable SUSE_ASNEEDED to 0 before building.<br />
<br />
= Submitting Patches =<br />
This is probably far down the road, but if you make changes to the source and want to submit them, see the page about [[Submitting patches|submitting patches]].<br />
<br />
----<br />
<br />
{{KBcaution|<br />
Everything below is probably outdated. It should be carefully sorted, cleaned up, updated and deleted (added 14/7/2010)<br />
}}<br />
<br />
= Prebuilt libraries vs. standalone builds =<br />
<br />
For standalone builds, we'd really like to beef up the checks for system libraries so that for example <code>cmake</code> will fail if a required library (such as OpenJPEG) isn't installed. We welcome all patches that help out with this.<br />
<br />
* [[Building_the_viewer_with_CMake/cmake-SL_script|cmake-SL]]: a script for standalone, pre-built and mixed libraries viewer builds under Linux.<br />
* [[Talk:CMake#Issues_when_compiling_a_standalone_Linux_viewer|Problems when compiling a standalone Linux viewer]]<br />
<br />
<br />
== Testing and packaging the client ==<br />
<br />
=== Testing the result from inside the tree ===<br />
<br />
You may find it simpler and less error-prone to follow the instructions in the [[Compiling_the_viewer_%28Linux%29#Packaging_the_client|Packaging the client]] section below to run the client under the same conditions as an end-user would.<br />
<br />
* 2008-05-29 (Ochi Wolfe): Compiling the 1.20.7 r88152 viewer, it seems like even when compiling as "release" the viewer is built ready-to-go inside the newview/packaged/ directory including the message_template.msg and message.xml in the right place. Try to cd to the newview/packaged/ directory and run SL from there with the ./secondlife command as you would normally do.<br />
<br />
Otherwise:<br />
<br />
* Preparing to run 'in-tree'<br />
** <i>ensure that you have indra/newview/app_settings/static_*.db2</i> - if not, you'll find it in the [[#slviewer-artwork-.3Cversion.3E.zip|slviewer-artwork]] download (a zip file).<br />
** now, from the indra directory:<br />
<code><br />
$ cp ../scripts/messages/message_template.msg newview/app_settings/<br />
$ cp ../etc/message.xml newview/app_settings/<br />
</code><br />
<br />
'''Important:''' Starting from version 1.18.0, copying message.xml is also required. Missing it will cause group IMs to fail to work, although the viewer will run fine otherwise.<br />
<br />
* Running it: The LD_LIBRARY_PATH stuff ensures that the binary looks for its libraries in the right places. From the indra directory:<br />
<code><br />
$ ( cd newview && LD_LIBRARY_PATH="`pwd`"/../../libraries/i686-linux/lib_release_client:"`pwd`"/app_settings/mozilla-runtime-linux-i686:${LD_LIBRARY_PATH}:/usr/local/lib ./secondlife-i686-bin )<br />
</code><br />
<br />
<br /><br />
==== The client seems kinda slow. ====<br />
<br />
By default, the open-source Second Life Viewer uses the open-source OpenJPEG library to decode the (many) JPEG-2000 texture images it receives from the servers. This isn't quite of comparable speed to the proprietary third-party library which the Linden Lab viewer builds have traditionally used, for which we are not permitted to redistribute the source.<br />
<br />
However, the [[#slviewer-linux-libs-.3Cversion.3E.tar.gz|slviewer-linux-libs]] package includes two pre-built libraries which facilitate the use of this slightly faster image decoding method: <b>libkdu_v42R.so</b> and <b>libllkdu.so</b>. These are provided for your testing; again, we are not permitted to grant you the right to re-distribute these libraries to downstream users, but the viewer will still work (albeit slightly slower) without them.<br />
<br />
To <b>use these faster image-decoding libraries</b>, they simply need to be put into the right places relative to the viewer runtime directory - nothing needs to be reconfigured or recompiled. If you're running the client from the source tree, the following will make the KDU libraries available:<br />
<code><br />
cp "$SLSRC/libraries/i686-linux/lib_release_client/libllkdu.so" "$SLSRC/indra/newview/libllkdu.so"<br />
mkdir "$SLSRC/indra/lib"<br />
cp "$SLSRC/libraries/i686-linux/lib_release_client/libkdu_v42R.so" "$SLSRC/indra/lib/libkdu_v42R.so"<br />
</code><br />
<br />
The file <b>indra/newview/viewer_manifest.py</b> contains some commented-out entries describing where these libraries belong; if you uncomment the two lines corresponding to libllkdu and libkdu then they will be automatically copied into the right place in the runtime directory when you follow the 'Packaging the client' instructions below.<br />
<br />
==== File Dialogs Don't Work on 64 bit system ====<br />
<br />
If you run a 64 bit system, and your file dialogs don't work, or they worked before and stopped after you installed an update, it may be due to a mismatch between the headers used to compile the viewer and the library it's using. The log will contain something like this:<br />
<code><br />
2007-06-21T01:28:35Z INFO: ll_try_gtk_init: Starting GTK Initialization.<br />
2007-06-21T01:28:36Z INFO: ll_try_gtk_init: GTK Initialized.<br />
2007-06-21T01:28:36Z INFO: ll_try_gtk_init: - Compiled against GTK version 2.10.11<br />
2007-06-21T01:28:36Z INFO: ll_try_gtk_init: - Running against GTK version 2.10.6<br />
2007-06-21T01:28:36Z WARNING: ll_try_gtk_init: - GTK COMPATIBILITY WARNING: Gtk+ version too old (micro mismatch)<br />
</code><br />
<br />
What happens here is that your distribution includes 32 bit GTK libraries, but the package only includes the libraries themselves and not the headers. When building, the SL client will build against the headers included with the main 64 bit GTK package. This will work if the 64 bit version of the library is the same or older than the 32 bit one. However, if your 32 bit library is older, then the viewer will detect the mismatch (built with headers for a newer version of GTK than it's using) and turn GTK off.<br />
<br />
Possible solutions:<br />
* Download the source for the version of the 32 bit GTK libraries your distribution comes with, and build your viewer against those headers.<br />
* Upgrade your 32 bit GTK package so that it's the same or newer as the 64 bit one.<br />
* Downgrade your 64 bit package (may not be a good idea).<br />
<br />
=== Packaging the client ===<br />
<br />
If you substitute 'BUILD=release' with '<b>BUILD=releasefordownload</b>' in the 'Compiling' section above, then packaging the resulting code, libraries, data and documentation into a tarball for the end-user will be done automatically as the final stage of the build process; the pristine end-user client distribution has been assembled into the directory <b>indra/newview/SecondLife_i686_1_X_Y_Z/</b> and has also been tarred into <b>indra/newview/SecondLife_i686_1_X_Y_Z.tar.bz2</b><br />
<br />
The file which controls what (and where) files go into the end-user runtime viewer directory is <b>indra/newview/viewer_manifest.py</b><br />
<br />
<br />
== Resident contributed instructions ==<br />
<br />
=== Automated libraries and headers adjustments, compilation and packaging ===<br />
<br />
Here are two scripts (one for v1.20 and older, and one for v1.21 and newer viewers) that basically do all what is described above, and more, and entitle you to compile a SL client very easily:<br />
<br />
* [[User:Henri Beauchamp/Automated Linux Build Script (1.20 and earlier)]]<br />
* [[User:Henri Beauchamp/Building the viewer with CMake/cmake-SL script]]<br />
<br />
* Please also see the (user contributed) instructions at [[User:Michelle2_Zenovka/cmake]]<br />
<br />
=== FreeBSD ===<br />
<br />
A list of patches is given for [[Compiling the viewer (FreeBSD)]]. They are obsolete, and no longer work.<br />
<br />
[[Category:Compiling viewer]]<br />
[[Category:Articles_in_need_of_updating]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Snowglobe/de&diff=1149944Snowglobe/de2011-07-30T09:17:13Z<p>Boroondas Gupte: Obsolete-Warnung umformuliert, einige Sätze in Vergangenheitform versetzt</p>
<hr />
<div>{{multi-lang|1=Snowglobe|2=/de}}[[Image:Snowglobe-snowflake-captioned.svg|right|192px|]]<br />
{{Obsolete|Snowglobe wird nicht mehr weiterentwickelt. Beiträge der OpenSource-Gemeinschaft fließen nun im Rahmen von [[Project Snowstorm]] direkt in den offiziellen Second Life Viewer ein.}}<br />
<br />
== Was ist Snowglobe? ==<br />
'''Snowglobe''' war ein Open-Source-Projekt, das Viewer entwickelte, die auf das Second Life Grid zugreifen. Seine Ziele waren unter Anderem:<br />
* Entwicklung alternativer Viewer fördern, damit Benutzer eine Auswahl haben<br />
* Zu Innovation und Ausprobieren im Bereich neuer Viewer-Funktionalität animieren<br />
* Mit der Community zusammenarbeiten, um Verbesserungen in den offiziellen Second Life Viewer zu integrieren.<br />
<br />
''Snowglobe'' (manchmal durch 'SG' abgekürzt) wird auch als Bezeichnung für die vom Projekt entwickelten Snowglobe-Viewer verwendet.<br />
<br />
== Downloads ==<br />
<br />
=== Release-Downloads ===<br />
Für den Alltagsgebrauch werden diese gut getesteten Versionen empfohlen.<br />
{{snowglobe-installers|de}}<br />
<br />
=== Entwicklungs-Versionen-Downloads ===<br />
Diese Versionen sind aktueller, aber können fehlerhaft und wenig getestet sein. Bitte melden Sie alle Probleme, die sie mit diesen Downloads haben, auf Englisch im [[Issue Tracker]] oder auf der [[OpenSource-Dev]] Mailing-Liste.<br />
{{snowglobe-installers-trunk}}<br />
{{snowglobe_2-installers}}<br />
{{snowglobe_2-installers-trunk}}<br />
<br />
Die Installations-Downloads der allerneusten Entwicklungs-Versionen sind jeweils auf der [https://lists.secondlife.com/cgi-bin/mailman/listinfo/sldev-commits sldev-commits Mailing-Liste] zu finden. (Entsprechende Mitteilungen beginnen mit "Successful Build for ".)<br />
<br />
== Links ==<br />
* '''Quelltext anschauen:''' [http://svn.secondlife.com/trac/linden/browser/projects/2009/snowglobe snowglobe branch in Trac] - Schauen Sie sich den Quelltext an, an dem wir arbeiten.<br />
** Die neuesten Downloads zum Installieren: Suchen Sie nach der letzten Version auf [https://lists.secondlife.com/cgi-bin/mailman/listinfo/sldev-commits sldev-commits mailing list]{{nnlink/de}}.<br />
** Schauen Sie auf [[Version control repository]]{{nnlink/de}} für Informationen zum Ausprobieren des Quelltexts mit SVN.<br />
* Die Seite [[Get source and compile]]{{nnlink/de}} hat allgemeine Informationen, wie man den Quellcode compilieren kann. <br />
* '''[[Snowglobe Current Cycle|Current Release Cycle]]'''{{nnlink/de}} - Informationen über Features und Patches, die im derzeitigen Freigabe-Zyklus anhängig sind.<br />
** [[HTTP Texture]]{{nnlink/de}} - Projekt für den Wechsel vom üblichen UDP - basierten Protokoll auf HTTP für die Übertragung von Texturen.<br />
** [[S3 based viewer map]]{{nnlink/de}} - Nutzung von HTTP Texturen für die Karte innerhalb des Viewers.<br />
* Mails mit eingereichten Codeänderungen und Ankündigungen zur Systementwicklung: [https://lists.secondlife.com/cgi-bin/mailman/listinfo/sldev-commits sldev-commits mailing list]{{nnlink/de}}.<br />
* Entwickler-Diskussionen: [https://lists.secondlife.com/cgi-bin/mailman/listinfo/sldev sldev mailing list]{{nnlink/de}}.<br />
* [[Snowglobe Committer List]]{{nnlink/de}} - Liste der Personen mit direktem Zugriff, die an diesem Viewer arbeiten.<br />
* [[Snowglobe Development Process]]{{nnlink/de}} - Entwicklungsverfahren für alle, die an dem Snowglobe Viewer arbeiten.<br />
* [[Snowglobe QA]]{{nnlink/de}} - Mehr Informationen über den Prozess, den wir zur Erhaltung hochqualitativer Releases nutzen werden.<br />
* [[Snowglobe Test Plans]]{{nnlink/de}}<br />
<br />
==Neues==<br />
<br />
* 2009-06-24 - '''[http://blogs.secondlife.com/community/technology/blog/2009/06/24/snowglobe-10-now-available Snowglobe 1.0 now available]''' - Der Ankündigungs-Blogbeitrag von Rob Linden.</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1149691Open Development User Group2011-07-27T17:44:27Z<p>Boroondas Gupte: (cleared agenda)</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Viewer_2_Microsoft_Windows_Builds&diff=1149555Viewer 2 Microsoft Windows Builds2011-07-25T22:23:43Z<p>Boroondas Gupte: /* Install required development tools */ made mercurial's 'l' bold, too</p>
<hr />
<div>{{multi-lang}}<br />
{{CompileNav}} <br />
<br />
Philosophy: to keep it brief, this page should only include steps we KNOW ARE NEEDED, not random hints. Extra details or open issues can go on the talk page.<br />
<br />
{{KBnote|Following this recipe will probably take 6 to 12 hours of wall-clock time, and 2 to 6 hours of your time, if you're starting from a fresh Windows XP/Vista/7 system.}}<br />
<br />
== Establish your programming environment ==<br />
<br />
This is needed for compiling any viewer based on the LL open source code and only needs to be done once.<br />
<br />
=== Install and update Visual Studio and SDKs ===<br />
<br />
# Install [http://www.microsoft.com/express/download/ Visual Studio 2010] (Express is okay)<br />
#* If you installed VS2010 Express also install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84&displaylang=en Microsoft Visual C++ 2010 Redistributable Package] or [http://www.microsoft.com/download/en/confirmation.aspx?id=14632 64-bit Windows] version.<br />
# Install [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35aeda01-421d-4ba5-b44b-543dc8c33a20 Windows SDK for Windows 7 and .NET Framework 4] (ISO) or [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6B6C21D2-2006-4AFA-9702-529FA782D63B Windows SDK for Windows 7 and .NET Framework 4] (Web Install)<br />
# Install [http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba DirectX SDK (June 2010)]<br />
# Run [http://www.update.microsoft.com/microsoftupdate/v6 Microsoft Update], and keep running it until no updates are needed. This may take 6~8 iterations on older versions of windows.<br />
#* '''Note''': ''For Windows Vista and Windows 7'', you need to select "Get updates from other Microsoft products" to get the updates for Visual Studio. <br />
#* For Windows XP, use the provided link above. The Windows Update menu item on your computer is not the correct updater to use.<br />
#* During the update cycles make sure you have picked up Microsoft Visual Studio 2010 Service Pack 1 [http://go.microsoft.com/fwlink/?LinkId=210710 (ISO)] or [http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5 (Web Install)]<br />
<br />
=== Install required development tools ===<br />
<br />
{{KBnote|The order of the following installations should not matter.}}<br />
{{KBnote|If the installer for a particular package does not update your PATH environment variable you will have to do this manually.}}<br />
<br />
# '''CMake''' ([http://www.cmake.org/HTML/Download.html download CMake])<br />
#* This should be version 2.8.4 (or above in the 2.8.x series).<br />
#*Add the <code>\bin</code> directory to your path.<br />
# '''Python''' (either [http://www.python.org/download/ Standard Python] or [http://www.activestate.com/activepython/downloads ActivePython])<br />
#* Version 2.5.X<br />
#* Later versions may work, but are not officially supported. Version 2.7.1 has been reported to work with the build scripts.<br />
# '''Mercurial''' (either [http://tortoisehg.bitbucket.org/ TortoiseHg] or [http://mercurial.selenic.com/ Mercurial Hg])<br />
# '''Cygwin''' ([http://www.cygwin.com/ download Cygwin])<br />
#* When you run the cygwin setup utility make sure you have selected to install '''unzip''' (under "Archives"), '''bison''', '''flex''', '''patchutils''' (all located under "devel"), and '''curl''' (under "Web"), which are not part of the default install. Do not install Cygwin Python or Mercurial. You won't need to use the Cygwin shell for anything.<br />
#* '''NOTE:''' '''DO NOT''' use the Cygwin version of CMake, Python, or Mercurial (hg). The Build will fail. (CMake specifically excludes the Cygwin version of Python, in the <code>Python.cmake</code> file)<br />
#*Add the <code>\bin</code> directory to the '''very end''' of your path and make sure it stays that way.<br />
<br />
=== Install optional development tools ===<br />
<br />
# [http://code.google.com/p/unsis/downloads/list Unicode NSIS (Nullsoft Scriptable Install System)]<br />
#* This is the package installer used to build <code>Second_Life_<version-code>_LindenDeveloper_Setup.exe</code>. You only need this package if you are going to distribute the viewer you compile or if you want to install it locally.<br />
#: In the [[#Configuring_the_Viewer|Configure VS2010 step]] below you will need to add a line in the '''Executable Directories''' section:<br />
#:* 64 bit systems use <code>%ProgramFiles(x86)%\NSIS\Unicode</code><br />
#:* 32 bit systems use <code>%ProgramFiles%\NSIS\Unicode</code><br />
# [http://notepadplusplus.org/ Notepad++]<br />
#* You need to use an editor that conforms to the [[Coding Standard]]. In particular, you must not check in files with DOS line endings except in very limited circumstances; see [[How to avoid DOS line endings in Windows tools]].<br />
<br />
=== Install Autobuild ===<br />
* Open up a DOS Command window<br />
* CD to where you want to install autobuild. Do not have any spaces in the path to this directory.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/autobuild</nowiki><br />
* Modify your path statement to include the autobuild <code>\bin</code> directory<br />
* Add an environment variable, so that autobuild doesn't default to using (or trying) VC 2003.<br />
** Find a "My Computer" icon, there are several ways to do this, which vary depending on which version of Windows you are using. Usually you can find one through the "Start" menu button or on your desktop.<br />
** Right-click the icon and select "Properties".<br />
** When the Properties dialogue opens, click the "Advanced" tab followed by the "Environmental Variables" button. This will open a new window with a list of System and User variables.<br />
** In the User section, click "New". Your "Variable Name" should be AUTOBUILD_VSVER and the "Variable Value" is 100.<br />
** Click the OK/Close buttons to close all the windows.<br />
<br />
=== Configure VC2010 ===<br />
While you may choose to use autobuild for all your compiling you still need to establish certain settings internal to VC2010.<br />
<br />
*Start the IDE<br />
<br />
*Navigate to '''Tools''' > '''Options''' > '''Projects and Solutions''' > '''Build and Run''' and set '''maximum number of parallel projects builds''' to <code>1</code>.<br />
<br />
* (VC Express only) Enable '''Tools''' > '''Settings''' > '''Expert Settings''' to get the '''Build''' (and other) menus. If you already have a '''Build''' menu you do not need to perform this step.<br />
<br />
{{KBnote|The following steps require an open visual studio project. It does not matter which project you use, as you will only change some global settings used by all projects when they are opened. The open project itself won't be changed.}}<br />
<br />
You need to set a number of paths. <br />
* Open any existing project you may have or make a New Project.<br />
<br />
At the bottom on the Solution Explorer you will see three tabs.<br />
*Click the one on the right labeled '''Property Manager'''. (The name may be somewhat truncated.)<br />
<br />
[[File:VS2010_Property_Manager.PNG|100px]]<br />
[[:File:VS2010_Property_Manager.PNG|Example image]]<br />
<br />
*On the left side click to expand any project and then click again to expand the '''Release''' folder.<br />
<br />
[[File:VS2010_Project_Config.PNG|100px]]<br />
[[:File:VS2010_Project_Config.PNG|Example image]]<br />
<br />
*Right click on '''Microsoft.Cpp.Win32.user'''.<br />
<br />
*Pick '''Properties''' > '''VC++ Directories'''.<br />
<br />
This is where the build environment is pulled together into a functional VC2010 build system and also where much hand wringing, hair pulling, and fist pounding frustration takes place.<br />
<br />
*Set '''Executable Directories''' to:<br />
<br />
$(ExecutablePath)<br />
$(DXSDK_DIR)<br />
$(WindowsSdkDir)\Bin<br />
C:\cygwin\bin<br />
$(SystemRoot)<br />
<br />
[[File:32BitExecutableDirectories.png|100px]]<br />
[[:File:32BitExecutableDirectories.png|32 bit Executable Directories example image]]<br />
<br />
*Set '''Include Directories''' to:<br />
<br />
$(WindowsSdkDir)\Include<br />
$(WindowsSdkDir)\Include\gl<br />
$(DXSDK_DIR)\Include<br />
<br />
[[File:32BitIncludeDirectories.png|100px]]<br />
[[:File:32BitIncludeDirectories.png|32 bit Include Directories example image]]<br />
<br />
*Set '''Library Directories''' to:<br />
<br />
$(WindowsSdkDir)\Lib<br />
$(DXSDK_DIR)<br />
<br />
[[File:32BitLibraryDirectories.png|100px]]<br />
[[:File:32BitLibraryDirectories.png|32 bit Library Directories example image]]<br />
<br />
== Set up your source code tree ==<br />
<br />
Plan your directory structure ahead of time. If you are going to be producing changes or patches you will be cloning a copy of an unaltered source code tree for every change or patch you make, so you might want to have all this work stored in it's own directory.<br />
<br />
To get a copy of the source code tree:<br />
* Open up a DOS Command window<br />
* CD to where you want to install viewer-development. Do not have any spaces in this path.<br />
* Do:<br />
hg clone <nowiki>http://hg.secondlife.com/viewer-development</nowiki><br />
<br />
Let's say some time has gone by since you have performed the previous steps and now you want to develop a change or work on a jira. You will update your clean local repository with all the changes committed to viewer-development since you last synchronized your files:<br />
* CD into <code>viewer-development</code><br />
* Do:<br />
hg pull -u<br />
<br />
* Move up one level from <code>viewer-development</code><br />
* Do:<br />
hg clone viewer-development VWR-nnnnn<br />
Note: <code>nnnnn</code> is the jira number. You can also clone to a name of your choosing if you are making changes not associated with the LL jira system.<br />
<br />
== Prepare third party libraries ==<br />
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during the [[#Configuring_the_Viewer|configuration step]] below. Some few need to be manually set up, though, when using an open source developer configuration (<code>Release'''OS'''</code>, <code>RelWithDebInfo'''OS'''</code> or <code>Debug'''OS'''</code>)<br />
<br />
=== Fmod method 1 (using autobuild) ===<br />
<br />
CD to where you want to install the 3p-fmod repository and do:<br />
hg clone <nowiki>https://bitbucket.org/lindenlab/3p-fmod</nowiki><br />
<br />
CD into the <code>3p-fmod</code> directory you created and build it:<br />
autobuild build --all<br />
<br />
Package the results:<br />
autobuild package <br />
<br />
Update autobuild with the filename and hash just displayed. CD to the directory where you cloned viewer-development and do:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=<hash> url=file:///<fmod-filespec><br />
<br />
Example:<br />
<br />
copy autobuild.xml my_autobuild.xml<br />
autobuild installables edit fmod platform=windows hash=0f196f00e7dff49f22252efb68525658 url=file:///C:/3p-fmod/fmod-3.75-windows-20110531.tar.bz2<br />
<br />
{{KBnote|Having to copy <code>autobuild.xml</code> and modify the copy from within a cloned repository is a lot of work for every repository you make, but this is the only way to guarantee you pick up upstream changes to <code>autobuild.xml</code> and do not send up a modified <code>autobuild.xml</code> when you do an hg push.}}<br />
<br />
=== Fmod method 2 (using switches) ===<br />
[To be written up]<br />
<br />
== Configuring the Viewer ==<br />
<br />
Fmod is the audio library the viewer uses. If you are compiling with Fmod you will need to do:<br />
set AUTOBUILD_CONFIG_FILE=my_autobuild.xml<br />
<br />
At the command line in the source tree's root directory (presumably a directory you have cloned from viewer-development, as it is not a good idea to work in viewer-development, unless you are only compiling for youself) e.g. <code>C:\linden\VWR-12345\</code>) run:<br />
autobuild configure -c [CONFIGURATION]<br />
where <code>[CONFIGURATION]</code> is one of those listed at [[Building the Viewer with Autobuild#Build a desired configuration]] (<code>ReleaseOS</code>, <code>RelWithDebInfoOS</code>, <code>DebugOS</code>)<br />
<br />
=== Configuration Switches ===<br />
There are a number of switches you can use to modify the configuration process. The name of each switch is followed by its type and then by the value you want to set.<br />
<br />
* '''FMOD''' (bool) controls if the Fmod package is incorporated into the viewer. You must have performed the Fmod installation steps in [[Viewer_2_Microsoft_Windows_Builds#Fmod_method_1_.28using_autobuild.29]] for this to work.<br />
* '''LL_TESTS''' (bool) controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.<br />
* '''PACKAGE''' (bool) controls if the package step is run. You must have installed NSIS described in [[Viewer_2_Microsoft_Windows_Builds#Install_optional_development_tools]] for this to work.<br />
<br />
{{KBnote|'''OFF''' and '''NO''' are the same as '''FALSE'''; anything else is considered to be '''TRUE'''.}}<br />
<br />
Example: <br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
<br />
== Compiling the Viewer ==<br />
=== Compiling the viewer with autobuild ===<br />
You can compile the viewer with either autobuild (the encouraged/supported method) or with the VS IDE.<br />
<br />
When compiling with autobuild you will have the best chance of success if you:<br />
*From '''All Programs''' Navigate into the VS2010 program menu<br />
*Click on '''Visual Studio Command Prompt (2010)'''<br />
<br />
{{KBcaution|If you are building with Fmod and have followed the previous Fmod setup instructions AND you are now using a new command window you will need to redo the <code>set AUTOBUILD_CONFIG_FILE{{=}}my_autobuild.xml</code>.}}<br />
<br />
*Run:<br />
autobuild build -c [CONFIGURATION] --no-configure<br />
<br />
There are some useful switches to know about, so your commands may look like this:<br />
autobuild configure -c ReleaseOS -- -DLL_TESTS:BOOL=FALSE -DPACKAGE:BOOL=FALSE -DFMOD:BOOL=TRUE<br />
autobuild build -c ReleaseOS --no-configure<br />
<br />
{{KBnote|It is possible to use autobuild to do both the configure step (only needed once) and the build step with one command. I find it is clearer and saves a bit of time if these steps are done separately.}}<br />
<br />
{{KBnote|Do not be alarmed if you see groups of messages with '''warning LNK4099: PDB''' in them.}}<br />
<br />
=== Compiling the viewer with the IDE ===<br />
<br />
The autobuild configure step created the <code>\build-vc100</code> directory at the root of the source tree. In here is the <code>SecondLife.sln</code> solution file.<br />
<br />
Start the IDE and open this solution.<br />
<br />
You might want to change the build type in the drop-down located in the toolbar from '''Debug''' to '''Release''' or '''RelWithDebInfo'''.<br />
<br />
[[File:VS2010BuildType.png|100px]]<br />
[[:File:VS2010BuildType.png|Changing build type example image]]<br />
<br />
You need to adjust the Platform Toolset setting.<br />
* Select all the projects in the Solution Explorer list on the left of the screen.<br />
** Click on the first project and scroll to the bottom of this list and {{K|shift}}-click on the last project.<br />
* Right click on the selected list<br />
* Navigate to '''Properties''' > '''Configuration Properties''' > '''General''' > '''Platform Toolset'''<br />
* Change this value to <code>Windows7.1SDK</code><br />
<br />
* Push {{K|F7}} to start the compiler.<br />
<br />
== Running your newly built viewer ==<br />
=== Running from a desktop shortcut ===<br />
* Make a desktop shortcut for <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
<br />
* Right-click the shortcut<br />
* Select '''Properties'''<br />
* Set '''Start in:''' to <code>Drive:\your-path\indra\newview</code><br />
<br />
=== Running from within the IDE ===<br />
* In the Solution Explorer pane right click on '''secondlife-bin'''<br />
** Click '''Set as StartUp Project'''<br />
** Pick '''Properties''' > '''Configuration Properties''' > '''Debugging'''<br />
*** Set '''Command''' to <code>Drive:\your-path\build-vc100\newview\Release\secondlife-bin.exe</code><br />
*** Set '''Working Directory''' to <code>..\..\indra\newview</code><br />
<br />
== Handling Problems ==<br />
<br />
If you encounter errors or run into problems following the instructions above, please first check whether someone else already had the same issue. A solution might be known already. See the [[#Common_Issues.2FBugs.2FGlitches_And_Solutions|issue list below]], check [[{{TALKPAGENAME}}|the talk page]] (and report useful experiences there) and search our [[issue tracker]]. Even when no description of your problem has been written down yet, someone might know about it, so get in touch with the community to [[#Getting_help|get help]].<br />
<br />
=== Getting help ===<br />
* Subscribe to [[OpenSource-Dev|OpenSource-Dev Mailing List]] ([https://lists.secondlife.com/cgi-bin/mailman/listinfo/opensource-dev subscribe]) and post your question there.<br />
* For faster response, join the general open source viewer discussion and development [[IRC]] channel [irc://irc.freenode.org/opensl #opensl on freenode]. Hopefully a helpful person is online when you ask your question.<br />
<br />
=== Common Issues/Bugs/Glitches And Solutions ===<br />
<br />
==== Not being able to find objidl.h in the Microsoft Windows SDK, when compiling llwindow ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006562.html<br />
* Can be caused by path problems or some installation conflicts with the DirectX SDK.<br />
<br />
==== stdint.h typedef conflicts between Quicktime and VS2010 ====<br />
https://lists.secondlife.com/pipermail/opensource-dev/2011-April/006565.html<br />
*: Can be solved by some small edits to header files to make sure the two don't bash on each other.<br />
<br />
==== Eliminate depreciated switches messages and use memory more efficiently ====<br />
<br />
The VS2010 compiler uses a lot of memory while compiling the viewer. If you run out of memory you will start to page heavily and your compile time will become much longer. The /Zm1000 switch affects compiler memory usage.<br />
<br />
You may see this message while compiling:<br />
use 'EHsc' instead of 'GX'<br />
<br />
Here is how to free up some memory the compiler allocates and to eliminate these messages:<br />
<br />
*Edit <code>\CMake 2.8\share\cmake-2.8\Modules\Platform\Windows-cl.cmake</code><br />
<br />
*Replace line 156 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 172 with: <br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
*Replace line 184 with:<br />
IF(MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /EHsc /GR")<br />
ELSEIF(NOT MSVC10)<br />
SET(CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR")<br />
ENDIF(MSVC10)<br />
<br />
== References ==<br />
<br />
Tip of the hat to Nicky_Perian for [[User:Nicky_Perian/Visual_Studio_10_Autobuild]]<br />
<br />
[[Category:Compiling viewer]]</div>Boroondas Guptehttps://wiki.secondlife.com/w/index.php?title=Open_Development_User_Group&diff=1149088Open Development User Group2011-07-20T19:52:17Z<p>Boroondas Gupte: OPEN-38</p>
<hr />
<div>{{Oz/User Group Page<br />
|purpose=<br />
Open Source Policies, Resources for Open Contributions, and progressing contributions through the Snowstorm process.<br />
|date-time=<br />
Every Monday&nbsp;07:00-08:00&nbsp;SLT and Wednesday&nbsp;13:30-14:30&nbsp;SLT<br />
|location={{SLurl|region=Hippotropolis|x=209|y=90|z=24|title=Oz's Raft}}<br />
|team=Chaired by [[User:Oz Linden|Oz Linden]] of the [[Snowstorm Team]].<br />
|agenda=<br />
<!--======================== Please do not edit above this line ======================<br />
<br />
Feel free to add any open development related topic to the end of this agenda<br />
by adding a numbered list entry; <br />
<br />
Copy the following line to the end of the list below and change 'topic' to your topic; the ~~~ will be replaced with your name:<br />
# topic (~~~)<br />
<br />
If you refer to a Jira issue, please use the template like this:<br />
{{JiraIssue|id|description}}<br />
<br />
--><br />
<br />
# Any chance the {{jira|OPEN-38}} fixes can get integrated? ([[User:Boroondas Gupte|Boroondas Gupte]])<br />
#[https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+%22Open+Development%22+AND+assignee+is+EMPTY+AND+status+%3D+%22Awaiting+Review%22++ORDER+BY+createdDate%2C+priority+DESC OPEN Issue Triage] ([[User:Oz Linden|Oz Linden]])<br />
<br />
<!--Add your topic before this line<br />
======================== Please do not edit below this line ======================<br />
--><br />
}}</div>Boroondas Gupte