<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SpacedOut+Frye</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SpacedOut+Frye"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/SpacedOut_Frye"/>
	<updated>2026-07-28T11:45:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Openjpeg_improvements&amp;diff=15727</id>
		<title>Openjpeg improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Openjpeg_improvements&amp;diff=15727"/>
		<updated>2007-03-20T02:20:54Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: VWR-123 is now in the source tree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
There are two main directions to improve [http://www.openjpeg.org OpenJPEG].&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Optimize the entropy coder (T1)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Optimize the wavelet transform (DWT)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the image characteristics, the complexity is distributed between these two blocks, as illustrated in the analysis below.&lt;br /&gt;
&lt;br /&gt;
Says bushing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Analysis on OSX/PPC showed:&lt;br /&gt;
&lt;br /&gt;
- 27.1% dwt_decode_1_real (OpenJPEG)&lt;br /&gt;
- 22.9% tcd_decode_tile (OpenJPEG)&lt;br /&gt;
- 5.6% t1_dec_sigpass_step (OpenJPEG)&lt;br /&gt;
- 5.4% t1_decode_cblks (OpenJPEG)&lt;br /&gt;
- 5.4% t1_dec_refpass_step (OpenJPEG)&lt;br /&gt;
- 4.7% mqc_decode (OpenJPEG)&lt;br /&gt;
&lt;br /&gt;
tcd_decode_tile is really just a call to dwt_decode_real, so half of the&lt;br /&gt;
time is spent in dwt_decode_real and dwt_decode_1_real.&lt;br /&gt;
&lt;br /&gt;
OpenJpeg: 1 min 25 sec&lt;br /&gt;
GeoJasPer: 1 min 34 sec&lt;br /&gt;
Kakadu: 19 sec (!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related issues/patches in JIRA ==&lt;br /&gt;
&lt;br /&gt;
* [https://jira.secondlife.com/browse/VWR-123 VWR-123: OpenJPEG meta decode, Second Life patches] -- included as of FL-1.13.3.59315&lt;br /&gt;
&lt;br /&gt;
= T1 Optimization=&lt;br /&gt;
Stefan Westerfeld has started to [http://space.twc.de/~stefan/quickOpenJPEG/ optimize the T1].&lt;br /&gt;
&lt;br /&gt;
= DWT Optimization=&lt;br /&gt;
&lt;br /&gt;
==GCC4 Vector Ops==&lt;br /&gt;
&lt;br /&gt;
GCC supports vectorization, and you can code general vector operations without any assembly. GCC4.0 will automatically convert the vector operations to machine instructions of the defined processor platform. This makes it easy to support several vector processors, like SSE, MMX, ALTIVEC, and simulated.&lt;br /&gt;
&lt;br /&gt;
Here is demo code to accomplish this task with the 9/7 encode; it should achieve at least a 2x speedup: [[User:Dzonatas_Sol/DEMO_DWT]]&lt;br /&gt;
&lt;br /&gt;
==SSE Implementation==&lt;br /&gt;
&lt;br /&gt;
From the author of the below code: Balatoni Denes, dbalatoni at programozo.hu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
I see that openjpeg uses a BSD licence. Yes you can use that code under BSD &lt;br /&gt;
licence, thanks for asking too  :) . I might not have time to do the &lt;br /&gt;
integration myself, but of course I can answer questions if needed.&lt;br /&gt;
&lt;br /&gt;
ps: this code can not do dwt on arbitrary size vectors. if you have k levels &lt;br /&gt;
of dwt, than you can only have IIRC vectorsizes of multiplies of 2^k. for &lt;br /&gt;
arbitrary size vectors, more coding is needed.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static float coeffs_cdf97_sse[12*4] __attribute__ ((__aligned__ (32))) = {&lt;br /&gt;
     -1.586134342,-1.586134342,-1.586134342,-1.586134342,&lt;br /&gt;
     -0.052980118,-0.052980118,-0.052980118,-0.052980118,&lt;br /&gt;
      0.882911075, 0.882911075, 0.882911075, 0.882911075,&lt;br /&gt;
      0.443506852, 0.443506852, 0.443506852, 0.443506852,&lt;br /&gt;
     -1.230174105,-1.230174105,-1.230174105,-1.230174105,&lt;br /&gt;
      0.812893066, 0.812893066, 0.812893066, 0.812893066,&lt;br /&gt;
      1.230174105, 1.230174105, 1.230174105, 1.230174105,&lt;br /&gt;
     -0.812893066,-0.812893066,-0.812893066,-0.812893066,&lt;br /&gt;
     -0.443506852,-0.443506852,-0.443506852,-0.443506852,&lt;br /&gt;
     -0.882911075,-0.882911075,-0.882911075,-0.882911075,&lt;br /&gt;
      0.052980118, 0.052980118, 0.052980118, 0.052980118,&lt;br /&gt;
      1.586134342, 1.586134342, 1.586134342, 1.586134342&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define HORIZ_LIFTING_STEP8(i1, i2, o1, o2, ofs, o2b) \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #ofs &amp;quot;(%2), %%xmm5   \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #i1 &amp;quot;, &amp;quot; #o2 &amp;quot;       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7   \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, &amp;quot; #o2 &amp;quot;, &amp;quot; #o2 &amp;quot; \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  %%xmm7, %%xmm0         \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  &amp;quot; #o2 &amp;quot;, %%xmm7        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  %%xmm0, &amp;quot; #o2 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #o2b &amp;quot;, &amp;quot; #o1 &amp;quot;      \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, &amp;quot; #o1 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #i2 &amp;quot;, &amp;quot; #o1 &amp;quot;       \n\t&amp;quot; &lt;br /&gt;
&lt;br /&gt;
#define HORIZ_LIFTING_STEP8_END(i1, i2, o1, o2, ofs, o2b) \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #ofs &amp;quot;(%2), %%xmm5   \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #i1 &amp;quot;, &amp;quot; #o2 &amp;quot;       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7   \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, &amp;quot; #o2 &amp;quot;, &amp;quot; #o2 &amp;quot; \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  %%xmm7, &amp;quot; #o2 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #o2b &amp;quot;, &amp;quot; #o1 &amp;quot;      \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, &amp;quot; #o1 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #i2 &amp;quot;, &amp;quot; #o1 &amp;quot;       \n\t&amp;quot; &lt;br /&gt;
&lt;br /&gt;
#define HORIZ_LIFTING_STEP8_BEGIN(i1, i2, o1, o2, ofs, o2b, shu) \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #ofs &amp;quot;(%2), %%xmm5       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #i1 &amp;quot;, &amp;quot; #o2 &amp;quot;           \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, &amp;quot; #o2 &amp;quot;, &amp;quot; #o2 &amp;quot;     \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  &amp;quot; #o2 &amp;quot;, %%xmm7            \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps &amp;quot; #shu &amp;quot;, &amp;quot; #o2 &amp;quot;, &amp;quot; #o2 &amp;quot; \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #o2b &amp;quot;, &amp;quot; #o1 &amp;quot;          \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, &amp;quot; #o1 &amp;quot;            \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #i2 &amp;quot;, &amp;quot; #o1 &amp;quot;           \n\t&amp;quot; &lt;br /&gt;
&lt;br /&gt;
#define HORIZ_LIFTING_STEP16(i1, i2, i3, i4, o1, o2, o3, o4, ofs, o3b, o4b) \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #i2 &amp;quot;, &amp;quot; #o4 &amp;quot;       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #i1 &amp;quot;, &amp;quot; #o3 &amp;quot;       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7   \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, &amp;quot; #o4 &amp;quot;, &amp;quot; #o4 &amp;quot; \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;shufps $147, &amp;quot; #o3 &amp;quot;, &amp;quot; #o3 &amp;quot; \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  %%xmm7, %%xmm0         \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  &amp;quot; #o4 &amp;quot;, %%xmm7        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  &amp;quot; #o3 &amp;quot;, &amp;quot; #o4 &amp;quot;       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movss  %%xmm0, &amp;quot; #o3 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #ofs &amp;quot;(%2), %%xmm0   \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #o3b &amp;quot;, &amp;quot; #o1 &amp;quot;      \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #o4b &amp;quot;, &amp;quot; #o2 &amp;quot;      \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, &amp;quot; #o1 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, &amp;quot; #o2 &amp;quot;        \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #i3 &amp;quot;, &amp;quot; #o1 &amp;quot;       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #i4 &amp;quot;, &amp;quot; #o2 &amp;quot;       \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
/* Calculate 4 lifting steps to get 2 samples vertical, xmm0-xmm3 : buffer&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#define VERT_MAIN(in1, in2, ofs) \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #ofs &amp;quot;(%2), %%xmm7          \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps &amp;quot; #in1 &amp;quot;, %%xmm4              \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps %%xmm0, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  &amp;quot; #in2 &amp;quot;, %%xmm5              \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps 16+&amp;quot; #ofs &amp;quot;(%2), %%xmm7       \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps %%xmm5, %%xmm6                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm1, %%xmm6                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm6                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm0, %%xmm6                \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps 32+&amp;quot; #ofs &amp;quot;(%2), %%xmm7       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm0                \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps %%xmm6, %%xmm4                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm2, %%xmm4                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm1, %%xmm4                \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps 48+&amp;quot; #ofs &amp;quot;(%2), %%xmm7       \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps %%xmm5, %%xmm1                \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm3, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;addps  %%xmm2, %%xmm5                \n\t&amp;quot; \&lt;br /&gt;
 \&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm3                \n\t&amp;quot; \&lt;br /&gt;
	&amp;quot;movaps %%xmm6, %%xmm2                \n\t&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static inline void analyze_inplace(float *in, float *coeffs, int step, int iter) {&lt;br /&gt;
    int lof1, lof2;&lt;br /&gt;
&lt;br /&gt;
    asm volatile(&lt;br /&gt;
// Anal_begin&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm7       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps   $1, %%xmm1, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps   $2, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps (%2), %%xmm5         \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss  %%xmm7, %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulss  %%xmm5, %%xmm0       \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addss  %%xmm1, %%xmm0       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss  %%xmm0, %%xmm7       \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;movaps 16(%2), %%xmm5       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss  %%xmm0, %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulss  %%xmm5, %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss  %%xmm2, %%xmm0       \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss  %%xmm0, %%xmm7       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps (%1, %5), %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 2), %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movups 12(%1), %%xmm4       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $221, %%xmm0, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $136, %%xmm0, %%xmm2 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm1, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss  %%xmm4, %%xmm1       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 0, %%xmm3)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm3, %%xmm2, %%xmm1, 16, %%xmm1)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 32, %%xmm3)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_BEGIN(%%xmm2, %%xmm3, %%xmm1, %%xmm1, 48, %%xmm2, $229)	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm6       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm6, %%xmm2       \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm5       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm1       \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1, (%1)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm2, (%1, %5)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;addl %5, %1                 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addl %5, %1                 \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Anal sse16&lt;br /&gt;
	&amp;quot;.balign 16                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;1:                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5), %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 2), %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %6), %%xmm4       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 4), %%xmm6       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm5       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $221, %%xmm0, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $221, %%xmm6, %%xmm4 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $136, %%xmm0, %%xmm2 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $136, %%xmm6, %%xmm5 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm1, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm4, %%xmm4 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movups 12(%1), %%xmm3       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss  %%xmm3, %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movups 12(%1, %5, 2), %%xmm3       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss  %%xmm3, %%xmm4       \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm1, %%xmm4, %%xmm2, %%xmm5, %%xmm3, %%xmm6, 0, %%xmm3, %%xmm6)	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm3, %%xmm6, %%xmm2, %%xmm5, %%xmm1, %%xmm4, 16, %%xmm1, %%xmm4)	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm1, %%xmm4, %%xmm2, %%xmm5, %%xmm3, %%xmm6, 32, %%xmm3, %%xmm6)	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm3, %%xmm6, %%xmm1, %%xmm4, %%xmm1, %%xmm4, 48, %%xmm2, %%xmm5)	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm6       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, %%xmm2       \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, %%xmm5       \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;mulps  %%xmm6, %%xmm1       \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;mulps  %%xmm6, %%xmm4       \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1, (%1)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm2, (%1, %5)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %5, 2)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm5, (%1, %6)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;addl %6, %1                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addl %5, %1                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;subl  $1, %0                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;jnz 1b                      \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Anal_end&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 16-16(%1, %5), %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 16-16(%1, %5), %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps  $6, %%xmm0, %%xmm0 \n\t&amp;quot; //27 volt&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movups 12(%1), %%xmm4       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $221, %%xmm0, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $136, %%xmm0, %%xmm2 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm1, %%xmm1 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss  %%xmm4, %%xmm1       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	HORIZ_LIFTING_STEP8_END(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 0, %%xmm3)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_END(%%xmm2, %%xmm3, %%xmm2, %%xmm1, 16, %%xmm1)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_END(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 32, %%xmm3)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_END(%%xmm2, %%xmm3, %%xmm1, %%xmm1, 48, %%xmm2)	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm7       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm2       \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm5       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm1       \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1,  0(%1)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm2, 16-16(%1, %5)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	: &amp;quot;=r&amp;quot; (lof1), &amp;quot;=r&amp;quot; (lof2)&lt;br /&gt;
	: &amp;quot;r&amp;quot; (coeffs), &amp;quot;1&amp;quot; (in), &amp;quot;0&amp;quot; (iter), &amp;quot;r&amp;quot; (step) , &amp;quot;r&amp;quot; (step*3)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static inline void synthetize_inplace(float *in, float *coeffs, int step, int iter) {&lt;br /&gt;
    int lof1, lof2;&lt;br /&gt;
&lt;br /&gt;
    asm volatile(&lt;br /&gt;
//Synth_begin&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm1         \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5), %%xmm2     \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;movaps 96(%2), %%xmm5       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 112(%2), %%xmm5      \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm2       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	HORIZ_LIFTING_STEP8_BEGIN(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 128, %%xmm3, $229)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_BEGIN(%%xmm2, %%xmm3, %%xmm2, %%xmm1, 128+16, %%xmm1, $230)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_BEGIN(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 128+32, %%xmm3, $228)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8_BEGIN(%%xmm2, %%xmm3, %%xmm2, %%xmm1, 128+48, %%xmm1, $228)	&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;unpckhps %%xmm2, %%xmm1     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm1, (%1)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;addl %5, %1                 \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Synth_sse16&lt;br /&gt;
	&amp;quot;.balign 16                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;1:                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5), %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 2), %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %6), %%xmm4       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 4), %%xmm5       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 96(%2), %%xmm0       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, %%xmm4       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 112(%2), %%xmm0      \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm0, %%xmm5       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm1, %%xmm4, %%xmm2, %%xmm5, %%xmm3, %%xmm6, 128, %%xmm3, %%xmm6)	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm3, %%xmm6, %%xmm2, %%xmm5, %%xmm1, %%xmm4, 128+16, %%xmm1, %%xmm4)	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm1, %%xmm4, %%xmm2, %%xmm5, %%xmm3, %%xmm6, 128+32, %%xmm3, %%xmm6)	&lt;br /&gt;
	HORIZ_LIFTING_STEP16(%%xmm2, %%xmm5, %%xmm3, %%xmm6, %%xmm2, %%xmm5, %%xmm1, %%xmm4, 128+48, %%xmm1, %%xmm4)	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm3       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm6       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;unpckhps %%xmm2, %%xmm3     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;unpcklps %%xmm2, %%xmm1     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;unpckhps %%xmm5, %%xmm6     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;unpcklps %%xmm5, %%xmm4     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm1, (%1)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm3, (%1, %5)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %5, 2)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm6, (%1, %6)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;addl %5, %1                 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addl %6, %1                 \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;subl  $1, %0                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;jnz 1b                      \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//Synthend_sse&lt;br /&gt;
	&amp;quot;movaps (%1, %5), %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 2), %%xmm2       \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;movaps 96(%2), %%xmm5       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm1       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 112(%2), %%xmm5      \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm2       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 128, %%xmm3)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm3, %%xmm2, %%xmm1, 128+16, %%xmm1)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm1, %%xmm2, %%xmm3, 128+32, %%xmm3)	&lt;br /&gt;
	HORIZ_LIFTING_STEP8(%%xmm2, %%xmm3, %%xmm2, %%xmm1, 128+48, %%xmm1)	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm3       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;unpckhps %%xmm2, %%xmm3     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;unpcklps %%xmm2, %%xmm1     \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm1, (%1)       \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm3, (%1, %5)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Vege&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm7, %%xmm1        \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm7, %%xmm2        \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;movss %%xmm7, %%xmm3        \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;movaps 128+16(%2), %%xmm5   \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm2, %%xmm2        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulss %%xmm5, %%xmm2        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm1, %%xmm2        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm7, %%xmm1        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm7, %%xmm4        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 128+32(%2), %%xmm5   \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm2, %%xmm4        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulss %%xmm5, %%xmm4        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm3, %%xmm4        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm7, %%xmm0        \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;addss %%xmm4, %%xmm0        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 128+48(%2), %%xmm5   \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulss %%xmm5, %%xmm0        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm1, %%xmm0        \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movss %%xmm4, %%xmm6        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm6, %%xmm6        \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;mulss %%xmm5, %%xmm6        \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addss %%xmm6, %%xmm2        \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm2, %%xmm7        \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm4, %%xmm7        \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movss %%xmm0, %%xmm7        \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;shufps $147, %%xmm7, %%xmm7 \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movups %%xmm7, (%1, %5, 2)       \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	: &amp;quot;=r&amp;quot; (lof1), &amp;quot;=r&amp;quot; (lof2)&lt;br /&gt;
	: &amp;quot;r&amp;quot; (coeffs), &amp;quot;1&amp;quot; (in), &amp;quot;0&amp;quot; (iter), &amp;quot;r&amp;quot; (step) , &amp;quot;r&amp;quot; (step*3)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static inline void analyze_inplace_vertical(float *in, float *coeffs, int step, int iter) {&lt;br /&gt;
    int lof1, lof2;&lt;br /&gt;
&lt;br /&gt;
    asm volatile(&lt;br /&gt;
// A_Start&lt;br /&gt;
	&amp;quot;movaps (%2), %%xmm7                  \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps (%1, %5, 4), %%xmm0           \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps  (%1, %5, 2), %%xmm1          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm0, %%xmm1                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm1                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  (%1, %6), %%xmm1              \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm4                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  (%1, %5, 2), %%xmm4           \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  (%1, %5), %%xmm4              \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 16(%2), %%xmm7                \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm2                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm2                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm2                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  (%1, %5, 2), %%xmm2           \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm5                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  (%1), %%xmm5                  \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 32(%2), %%xmm7                \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm5, %%xmm3                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm2, %%xmm3                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm3                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm3                \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 48(%2), %%xmm7                \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm3, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm3, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm6                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  %%xmm5, %%xmm6                \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm4                \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm5                \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;mulps  %%xmm3, %%xmm4                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm5, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm6, (%1)                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %5)              \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// A_Main&lt;br /&gt;
	&amp;quot;.balign 16                           \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;1:                                   \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	VERT_MAIN((%1, %5, 4), (%1, %6), 0)&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm7                \n\t&amp;quot; &lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm6                \n\t&amp;quot; &lt;br /&gt;
&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot; &lt;br /&gt;
	&amp;quot;mulps  %%xmm6, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm5, (%1)                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %5)              \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;subl  $2, %0                         \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;jnz 1b                               \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// A_End&lt;br /&gt;
	VERT_MAIN(%%xmm0, (%1, %6), 0)&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm7                \n\t&amp;quot; &lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm6                \n\t&amp;quot; &lt;br /&gt;
 &lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot; &lt;br /&gt;
	&amp;quot;mulps  %%xmm6, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;movaps (%1, %5), %%xmm6              \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %5)              \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps (%1), %%xmm4                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm5, (%1)                  \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	VERT_MAIN(%%xmm4, %%xmm6, 0)&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 64(%2), %%xmm7                \n\t&amp;quot; &lt;br /&gt;
	&amp;quot;movaps 80(%2), %%xmm6                \n\t&amp;quot; &lt;br /&gt;
 &lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot; &lt;br /&gt;
	&amp;quot;mulps  %%xmm6, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm5, (%1, %5, 2)           \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %6)              \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	: &amp;quot;=r&amp;quot; (lof1), &amp;quot;=r&amp;quot; (lof2)&lt;br /&gt;
	: &amp;quot;r&amp;quot; (coeffs), &amp;quot;1&amp;quot; (in), &amp;quot;0&amp;quot; (iter), &amp;quot;r&amp;quot; (step) , &amp;quot;r&amp;quot; (step*3)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static inline void synthetize_inplace_vertical(float *in, float *coeffs, int step, int iter) {&lt;br /&gt;
    int lof1, lof2;&lt;br /&gt;
&lt;br /&gt;
    asm volatile(&lt;br /&gt;
// S_Start&lt;br /&gt;
	&amp;quot;movaps 128(%2), %%xmm7               \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;movaps 112(%2), %%xmm5               \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;movaps 96(%2), %%xmm4                \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;movaps %%xmm5, %%xmm0                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  (%1, %5), %%xmm5              \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  (%1, %6), %%xmm0              \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  (%1, %5, 2), %%xmm4           \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  (%1), %%xmm6                  \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps  %%xmm5, %%xmm1               \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm0, %%xmm1                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm1                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm1                \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps  %%xmm5, %%xmm4               \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm4                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  %%xmm6, %%xmm4                \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 128+16(%2), %%xmm7            \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm2                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm2                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm2                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  %%xmm5, %%xmm2                \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps 128+32(%2), %%xmm7            \n\t&amp;quot;		&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm2, %%xmm3                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm3, %%xmm3                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm3                \n\t&amp;quot;	&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm3                \n\t&amp;quot;	&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm3, (%1)                  \n\t&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// S_Main&lt;br /&gt;
	&amp;quot;.balign 16                           \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;1:                                   \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	&amp;quot;movaps 96(%2), %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 112(%2), %%xmm4               \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;mulps (%1, %5, 4), %%xmm4            \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps (%1, %6), %%xmm6               \n\t&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
	VERT_MAIN(%%xmm4, %%xmm6, 128)&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm5, (%1)                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm4, (%1, %5)              \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addl %5, %1                          \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;subl  $2, %0                         \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;jnz 1b                               \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// S_End&lt;br /&gt;
	&amp;quot;movaps %%xmm1, %%xmm4                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 128+16(%2), %%xmm7            \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;addps  %%xmm1, %%xmm4                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm4                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm0, %%xmm4                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm2, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 128+32(%2), %%xmm7            \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm1, %%xmm5                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm3, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps 128+48(%2), %%xmm7            \n\t&amp;quot;		&lt;br /&gt;
	&amp;quot;addps  %%xmm5, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm2, %%xmm6                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm5, %%xmm0                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm5, %%xmm0                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;mulps  %%xmm7, %%xmm0                \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;addps  %%xmm4, %%xmm0                \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;movaps %%xmm6, (%1)                  \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm5, (%1, %5)              \n\t&amp;quot;&lt;br /&gt;
	&amp;quot;movaps %%xmm0, (%1, %5, 2)           \n\t&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	: &amp;quot;=r&amp;quot; (lof1), &amp;quot;=r&amp;quot; (lof2)&lt;br /&gt;
	: &amp;quot;r&amp;quot; (coeffs), &amp;quot;1&amp;quot; (in), &amp;quot;0&amp;quot; (iter), &amp;quot;r&amp;quot; (step) , &amp;quot;r&amp;quot; (step*3)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int dwt1d(float *pict, int width, int height, int it) {&lt;br /&gt;
    int h;&lt;br /&gt;
&lt;br /&gt;
    for(h=1;h&amp;lt;(1&amp;lt;&amp;lt;it);h&amp;lt;&amp;lt;=1) &lt;br /&gt;
	analyze_inplace(pict, coeffs_cdf97_sse, 16*h, (width/16/h)-1);    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int idwt1d(float *pict, int width, int height, int it) {&lt;br /&gt;
    int h;&lt;br /&gt;
&lt;br /&gt;
    for(h=(1&amp;lt;&amp;lt;(it-1));h&amp;gt;0;h&amp;gt;&amp;gt;=1) &lt;br /&gt;
	synthetize_inplace(pict, coeffs_cdf97_sse, 16*h, (width/h/16)-1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int dwt2d(float *pict, int width, int height, int it) {&lt;br /&gt;
    int i,h;&lt;br /&gt;
    float *p;&lt;br /&gt;
&lt;br /&gt;
    for(h=1;h&amp;lt;(1&amp;lt;&amp;lt;it);h&amp;lt;&amp;lt;=1) {&lt;br /&gt;
    &lt;br /&gt;
	for(p=pict,i=0;i&amp;lt;height;i+=h, p+=width*h)&lt;br /&gt;
	    analyze_inplace(p, coeffs_cdf97_sse, 16*h, (width/16/h)-1);&lt;br /&gt;
&lt;br /&gt;
	for(p=pict, i=0;i&amp;lt;width;i+=4*h, p+=4*h)&lt;br /&gt;
	    analyze_inplace_vertical(p, coeffs_cdf97_sse, width*4*h, (height/h)-6);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int idwt2d(float *pict, int width, int height, int it) {&lt;br /&gt;
    int i, h;&lt;br /&gt;
    float *p;&lt;br /&gt;
&lt;br /&gt;
    for(h=(1&amp;lt;&amp;lt;(it-1));h&amp;gt;0;h&amp;gt;&amp;gt;=1) {&lt;br /&gt;
        for(p=pict, i=0;i&amp;lt;width;i+=4*h, p+=4*h)&lt;br /&gt;
	    synthetize_inplace_vertical(p, coeffs_cdf97_sse, width*4*h, (height/h)-4);&lt;br /&gt;
    &lt;br /&gt;
	for(p=pict,i=0;i&amp;lt;height;i+=h, p+=width*h)&lt;br /&gt;
	    synthetize_inplace(p, coeffs_cdf97_sse, 16*h, (width/h/16)-1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Requests]]&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SLDev-Traffic_1&amp;diff=14446</id>
		<title>SLDev-Traffic 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SLDev-Traffic_1&amp;diff=14446"/>
		<updated>2007-03-03T18:01:05Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: self correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sldev-traffic no 1&lt;br /&gt;
&lt;br /&gt;
[[Image:sldev-traffic.gif|SLDev Traffic]]&lt;br /&gt;
&lt;br /&gt;
sldev discussions through March 2, 2007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Executable Switcher ==&lt;br /&gt;
&lt;br /&gt;
Noting that plugins will take a while to mature and that distributing new features for testing was desirable, Dale Glass proposed a system for selecting among multiple viewer versions at launch time:&lt;br /&gt;
   Since most people don&#039;t have nearly the bandwidth capabilities of&lt;br /&gt;
   LL, making things compact is important. For that reason, alternative&lt;br /&gt;
   clients will be distributed in say, NSIS packages, but include only&lt;br /&gt;
   the changed files, as well as some metadata. The metadata indicates&lt;br /&gt;
   among other things on which LL release it&#039;s based.&lt;br /&gt;
   &lt;br /&gt;
   Switcher will assemble a working SL install based on the original&lt;br /&gt;
   files and the modifications from the installed package, then run&lt;br /&gt;
   that.&lt;br /&gt;
   &lt;br /&gt;
   If the third party client is based on a SL version that&#039;s not&lt;br /&gt;
   installed (say, firstlook based and user is running the stable&lt;br /&gt;
   client), then the switcher will try to automatically download the &lt;br /&gt;
   official version to use as a base.&lt;br /&gt;
&lt;br /&gt;
Peekay Semyorka wondered at why a user couldn&#039;t install multiple EXEs in the viewer directory. Dale Glass noted that viewers may have different and incompatible data, such as the modified XML menus in his own scanner.&lt;br /&gt;
&lt;br /&gt;
Dale Glass emphasized that this is a temporary solution until plugins are ready.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viewer Manifest ==&lt;br /&gt;
&lt;br /&gt;
In the Executable Switcher thread, Ryan Williams noted that he would introduce a Python-based installer packaging script in the next release, which came with the beta release this week. The documentation is here:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Viewer_Manifest&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier invited feedback on Ryan Williams&#039; script, noting that engaging Lindens productively (Ryan Williams is a Linden) is a good way to encourage Lindens to reciprocate.&lt;br /&gt;
&lt;br /&gt;
Christian Westbrook inquired about whether the packaging script would be GPL&#039;d, noting current work in deploying OpenSL with the NullSoft packaging system. Yes on the GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LLMozLib ==&lt;br /&gt;
&lt;br /&gt;
Tofu Linden announced the upload of LLMozLib/uBrowser&lt;br /&gt;
   LLMozLib is a library (and set of Mozilla patches) written by Callum&lt;br /&gt;
   and others which we use to create our embedded Mozilla widgets inside&lt;br /&gt;
   the Second Life viewer (for web profiles, F1 Help, and the login&lt;br /&gt;
   screen currently) with a simplified API.  It does not depend upon the&lt;br /&gt;
   Second Life source and can be used in your own programs.&lt;br /&gt;
   &lt;br /&gt;
   For more info about LLMozLib and uBrowser, see http://ubrowser.com/&lt;br /&gt;
&lt;br /&gt;
Linux users had some remaining trouble building Second Life with Mozilla enabled, and Signore Iredell posted instructions for building without browser support: https://lists.secondlife.com/pipermail/sldev/2007-February/000532.html&lt;br /&gt;
&lt;br /&gt;
Tofu Linden noted that he had committed a change to make disabling LLMozLib easier, and that it should reach the open source release soon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C++ bindings Prototype versus C ==&lt;br /&gt;
&lt;br /&gt;
Tim Shephard posted a C++ prototype which proved that it was possible to develop a plugin API which interfaced via C++ and inheritance.   However, the issues he ran into were that you would need to build with the same compiler (both client and plugin) in order to develop compatible binaries.   This was a significant non starter.&lt;br /&gt;
&lt;br /&gt;
He also discussed the NPAPI API as a simple model for plugins. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C++ motivated Plugin Bindings ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel posted C++ motivated bindings that could be used as a plugin prototype.   It can load plugins as libraries and negotiate multiple versions of an interface for later compatibility. The first version is Intel Mac only, but includes work toward other architectures.&lt;br /&gt;
&lt;br /&gt;
The significant concern as pointed out by Tim Shephard in an earlier posting as mentioned above, is that C++ has significant Application Binary Issues on the Windows platform.   (Microsoft has not guaranteed that they will support the C++ ABI from one release to the next (in fact, it changed in VS2003 -&amp;gt; VS2005)).  This will make it difficult to support people who build their plugins with a different compiler than what Linden Lab is using.&lt;br /&gt;
&lt;br /&gt;
Argent Stonecutter suggested that the bindings should be as language-neutral as possible, noting that targeting C was targeting the lowest common denominator of all languages. Soft Noel is reworking the posted system to offer a C interface instead of C++. Argent Stonecutter voiced concern about the anonymous pointers C would introduce in the plugin API and referenced an older thread. In that thread, he laid out one scheme for encoding plugin parameter formats and described the behavior plugins would follow in validating such a plugin interface. Ryan Williams suggested that the already existent LLSD would work for a plugin interface with this design and noted likely similarity between a plugin API and the messaging system.&lt;br /&gt;
&lt;br /&gt;
== Keep It Simple ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel suggested the ability for plugins to unload on request from a sim, should a plugin malfunction and create problems for the grid. There was much discussion about the non-desirability of such a feature, and Kelly Washington reiterated Rob Lanphier&#039;s call to keep things simple up front. Rob Lanphier linked to http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html and Kelly Washington wrote:&lt;br /&gt;
   There will have to be a line drawn somewhere between what can be a&lt;br /&gt;
   plugin and what requires a separate client or re-compile.  This&lt;br /&gt;
   line does not need to be fixed in stone at the creation of the&lt;br /&gt;
   plugin system.  In fact the best approach may be to start&lt;br /&gt;
   conservatively with very little on the plugin side.  This would&lt;br /&gt;
   allow the system to get out, get tested, get used and get&lt;br /&gt;
   refined quicker than building an all-encompassing plugin system&lt;br /&gt;
   from the start.&lt;br /&gt;
   ...&lt;br /&gt;
   what is the minimal needed to create a plugin system that can at&lt;br /&gt;
   least make some useful plugins?&lt;br /&gt;
   &lt;br /&gt;
   My guess is the following:&lt;br /&gt;
   - create a floater, be able to populate and update data in the&lt;br /&gt;
   floater.  By this I just mean set text, set images, add/remove&lt;br /&gt;
   items from scroll lists.&lt;br /&gt;
   - add UI to bring up the floater.  As a first pass even just a&lt;br /&gt;
   &#039;plugins&#039; menu with a menu item for each loaded plug in. &lt;br /&gt;
   - access to specific internal data - ie the list of visible avatars,&lt;br /&gt;
   region name, current location etc &lt;br /&gt;
   &lt;br /&gt;
   Now that won&#039;t let you create just any plugin, it won&#039;t even let you&lt;br /&gt;
   create most plugins (I&#039;m sure everyone noticed there is nothing about&lt;br /&gt;
   handling messages at all), but that is my guess as to the minimal&lt;br /&gt;
   needed by a plugin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Autoupdater == &lt;br /&gt;
&lt;br /&gt;
A developer suggested that the plugin system should support automatic updates from plugin authors&#039; sites. The primary reason given was the headache of supporting thousands of users who might seek help from the plugin author every time a Viewer update broke old plugins.&lt;br /&gt;
&lt;br /&gt;
Soft Noel expressed concern that this would be a hard sell to LL as it makes the Viewer a potential vector for malware should plugin authors&#039; update sites be hacked. On #opensl, Soft Noel suggested that, to head off anticipated LL liability concerns, a general purpose plugin updater could be written as a plugin and distributed with other plugins that used the updater.&lt;br /&gt;
&lt;br /&gt;
== Two Source Releases ==&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier announced the release of the First Look 1.13.3.58390 source on Feb 24 and the 1.13.4.3 viewer beta on Feb 28:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Source_downloads&lt;br /&gt;
&lt;br /&gt;
Soft Noel noted build problems on the Mac, filing several bug reports and workarounds, however a texture bug continues to make 1.13.4.3 open source builds unusable on an Intel Mac. Others reported similar problems with the Linux build on SLDev and #opensl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Second Life viewer packaged for Fedora ==&lt;br /&gt;
&lt;br /&gt;
Callum Lerwick announced an RPM-packaged viewer for Second Life, including library dependencies. He indicated that he had found another user doing duplicate work and suggested they had some merging to do. Packages are here:&lt;br /&gt;
http://www.haxxed.com/rpms/secondlife/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lip Sync and Gesture Motions ==&lt;br /&gt;
&lt;br /&gt;
One plugin feature discussed was lip sync and gesture motions. Phoenix Linden wrote:&lt;br /&gt;
   Just so everyone knows, we are already working on lip and gesture&lt;br /&gt;
   motions for the avatar. This is no promise of functionality or&lt;br /&gt;
   when it will be available, but it is in the pipeline and under&lt;br /&gt;
   active development.&lt;br /&gt;
&lt;br /&gt;
Later in the week, Mike Monkowski noted a C|Net article regarding Linden Lab&#039;s announcement of Vivox voice support:&lt;br /&gt;
http://news.com.com/Integrated+voice+coming+to+Second+Life/2100-1043_3-6162410.html?tag=nefd.top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stereoscopic Viewer ==&lt;br /&gt;
&lt;br /&gt;
Eric Maslowski noted that the University of Michigan 3D lab was working on a stereoscopic 3D viewer:&lt;br /&gt;
http://um3d.dc.umich.edu/&lt;br /&gt;
&lt;br /&gt;
Many of the questions in his announcement remained unanswered:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000612.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agni, Aditi, and Uma ==&lt;br /&gt;
&lt;br /&gt;
Dale Glass inquired about the grids available for Viewer developers. Joshua Bell replied, listing the three grids as Agni (live grid), Aditi (beta) and Uma (open source developers). Fuller details were included in Joshua Bell&#039;s response:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000618.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LSL Instantiated Prim Metadata ==&lt;br /&gt;
&lt;br /&gt;
There has been a continuing discussion about the desirability of a custom data field that LSL could set on prims, and which Viewer developers could use for representing features not yet implemented on the server. Jason Giglio summarized the feature with an example use:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000644.html&lt;br /&gt;
&lt;br /&gt;
The original Wiki proposal is here:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Extensible_Prim_Attributes_from_LSL&lt;br /&gt;
&lt;br /&gt;
There was further discussion about whether an arbitrary named attribute system was desirable. In #opensl discussions it was noted that named parameters could already be set when communicating with the sim, but nobody voiced any guarantee that the data would persist, or suggested that this data could be set or directly accessed from LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LSL to Viewer Communications ==&lt;br /&gt;
&lt;br /&gt;
Initially mentioned in the prior thread, Dale Glass mentioned a different system that allowed dynamic communication between a custom viewer and LSL. His details and a pointer to the Viewer source patch are laid out in his message:&lt;br /&gt;
&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000582.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unit Testing Feedback Requested ==&lt;br /&gt;
&lt;br /&gt;
Gaurav Sharma requested feedback on what parts of the viewer should be covered by unit testing. Rob Lanphier noted that Gaurav Sharma was working for Adroit, which had been hired for this task. John Hurliman suggested that the LLJoint class has been problematc, but there has been little other relevant feedback. Gaurav Sharma updated the patch with a second version later in the week. That version is here:&lt;br /&gt;
http://lists.secondlife.com/pipermail/sldev/attachments/20070302/d8809402/unittest-2-0001.obj&lt;br /&gt;
&lt;br /&gt;
Gaurav Sharma&#039;s repeated request for unit test suggestions is here:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-March/000695.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Linux Viewers and 3D Acceleration ==&lt;br /&gt;
&lt;br /&gt;
Truxpin was having difficulty making Second Life run on his machine using open source nVidia drivers.  David Fries states that Linden Lab currently requires a 24 bit depth buffer, while Mesa only supports 16 bit depth.  David Fries (SpacedOut Frye) offered a patch that would request an OpenGL context with a 16 bit depth buffer if the 24 bit depth buffer request failed.&lt;br /&gt;
&lt;br /&gt;
Truxpin posted an e-mail including glxinfo which showed,&lt;br /&gt;
  direct rendering: No&lt;br /&gt;
  server glx vendor string: SGI&lt;br /&gt;
Indicating he only had software OpenGL rendering available.  The patch allowed the Second Life viewer to run with a 0.7 frame rate which also indicated software rendering.&lt;br /&gt;
&lt;br /&gt;
Truxpin later posted (off list) that he was able to get the nVidia driver installed and running at about the same speed under Linux as Windows on that computer.&lt;br /&gt;
&lt;br /&gt;
nVidia users currently require the closed source driver for 3D OpenGL acceleration.&lt;br /&gt;
&lt;br /&gt;
== Linden Lab and Open Source ==&lt;br /&gt;
&lt;br /&gt;
Christian Westbrook stated that Linden Lab had not yet completely accepted open source development. Rob Lanphier posted a response detailing the extent of Linden Lab&#039;s contributions and some of the remaining legal and business hurdles Linden Lab is working to move out of the way.&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier repeats emphasis on the necessity for list contributors to sign contributor agreements in order to free Linden Lab employees to more directly interact with SLDev members.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Source Licensing ==&lt;br /&gt;
&lt;br /&gt;
SLDev members inquired through the list and IRC channel about whether GPL must be used for the plugin system. Developers have concerns about whether non-free plugins can be developed without complex circumvention measures. Rob Lanphier indicated that the issue is being pressed internally.&lt;br /&gt;
&lt;br /&gt;
== OpenJPEG patch (see VWR-123) still not merged ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel ran into the known buffer overflow in LLImageJ2COJ::decodeImpl() using source version beta-1.13.4.3 on Intel Mac.  She disabled jpeg decoding to continue to make progress.&lt;br /&gt;
David Fries (SpacedOut Frye) (March 3rd) pointed out the fix in VWR-123 on jira which was first posted February 11th, and again asked why it hasn&#039;t made it into the source code release.&lt;br /&gt;
&lt;br /&gt;
David Fries posted a correction to his response.  VWR-94 was the earlier patch to fix this buffer overflow which was posted a full month ago on February 3rd.  It has been obsoleted by VWR-123 though.&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SLDev-Traffic_1&amp;diff=14445</id>
		<title>SLDev-Traffic 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SLDev-Traffic_1&amp;diff=14445"/>
		<updated>2007-03-03T17:29:16Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: added OpenJPEG patch (see VWR-123) still not merged&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sldev-traffic no 1&lt;br /&gt;
&lt;br /&gt;
[[Image:sldev-traffic.gif|SLDev Traffic]]&lt;br /&gt;
&lt;br /&gt;
sldev discussions through March 2, 2007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Executable Switcher ==&lt;br /&gt;
&lt;br /&gt;
Noting that plugins will take a while to mature and that distributing new features for testing was desirable, Dale Glass proposed a system for selecting among multiple viewer versions at launch time:&lt;br /&gt;
   Since most people don&#039;t have nearly the bandwidth capabilities of&lt;br /&gt;
   LL, making things compact is important. For that reason, alternative&lt;br /&gt;
   clients will be distributed in say, NSIS packages, but include only&lt;br /&gt;
   the changed files, as well as some metadata. The metadata indicates&lt;br /&gt;
   among other things on which LL release it&#039;s based.&lt;br /&gt;
   &lt;br /&gt;
   Switcher will assemble a working SL install based on the original&lt;br /&gt;
   files and the modifications from the installed package, then run&lt;br /&gt;
   that.&lt;br /&gt;
   &lt;br /&gt;
   If the third party client is based on a SL version that&#039;s not&lt;br /&gt;
   installed (say, firstlook based and user is running the stable&lt;br /&gt;
   client), then the switcher will try to automatically download the &lt;br /&gt;
   official version to use as a base.&lt;br /&gt;
&lt;br /&gt;
Peekay Semyorka wondered at why a user couldn&#039;t install multiple EXEs in the viewer directory. Dale Glass noted that viewers may have different and incompatible data, such as the modified XML menus in his own scanner.&lt;br /&gt;
&lt;br /&gt;
Dale Glass emphasized that this is a temporary solution until plugins are ready.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viewer Manifest ==&lt;br /&gt;
&lt;br /&gt;
In the Executable Switcher thread, Ryan Williams noted that he would introduce a Python-based installer packaging script in the next release, which came with the beta release this week. The documentation is here:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Viewer_Manifest&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier invited feedback on Ryan Williams&#039; script, noting that engaging Lindens productively (Ryan Williams is a Linden) is a good way to encourage Lindens to reciprocate.&lt;br /&gt;
&lt;br /&gt;
Christian Westbrook inquired about whether the packaging script would be GPL&#039;d, noting current work in deploying OpenSL with the NullSoft packaging system. Yes on the GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LLMozLib ==&lt;br /&gt;
&lt;br /&gt;
Tofu Linden announced the upload of LLMozLib/uBrowser&lt;br /&gt;
   LLMozLib is a library (and set of Mozilla patches) written by Callum&lt;br /&gt;
   and others which we use to create our embedded Mozilla widgets inside&lt;br /&gt;
   the Second Life viewer (for web profiles, F1 Help, and the login&lt;br /&gt;
   screen currently) with a simplified API.  It does not depend upon the&lt;br /&gt;
   Second Life source and can be used in your own programs.&lt;br /&gt;
   &lt;br /&gt;
   For more info about LLMozLib and uBrowser, see http://ubrowser.com/&lt;br /&gt;
&lt;br /&gt;
Linux users had some remaining trouble building Second Life with Mozilla enabled, and Signore Iredell posted instructions for building without browser support: https://lists.secondlife.com/pipermail/sldev/2007-February/000532.html&lt;br /&gt;
&lt;br /&gt;
Tofu Linden noted that he had committed a change to make disabling LLMozLib easier, and that it should reach the open source release soon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C++ bindings Prototype versus C ==&lt;br /&gt;
&lt;br /&gt;
Tim Shephard posted a C++ prototype which proved that it was possible to develop a plugin API which interfaced via C++ and inheritance.   However, the issues he ran into were that you would need to build with the same compiler (both client and plugin) in order to develop compatible binaries.   This was a significant non starter.&lt;br /&gt;
&lt;br /&gt;
He also discussed the NPAPI API as a simple model for plugins. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C++ motivated Plugin Bindings ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel posted C++ motivated bindings that could be used as a plugin prototype.   It can load plugins as libraries and negotiate multiple versions of an interface for later compatibility. The first version is Intel Mac only, but includes work toward other architectures.&lt;br /&gt;
&lt;br /&gt;
The significant concern as pointed out by Tim Shephard in an earlier posting as mentioned above, is that C++ has significant Application Binary Issues on the Windows platform.   (Microsoft has not guaranteed that they will support the C++ ABI from one release to the next (in fact, it changed in VS2003 -&amp;gt; VS2005)).  This will make it difficult to support people who build their plugins with a different compiler than what Linden Lab is using.&lt;br /&gt;
&lt;br /&gt;
Argent Stonecutter suggested that the bindings should be as language-neutral as possible, noting that targeting C was targeting the lowest common denominator of all languages. Soft Noel is reworking the posted system to offer a C interface instead of C++. Argent Stonecutter voiced concern about the anonymous pointers C would introduce in the plugin API and referenced an older thread. In that thread, he laid out one scheme for encoding plugin parameter formats and described the behavior plugins would follow in validating such a plugin interface. Ryan Williams suggested that the already existent LLSD would work for a plugin interface with this design and noted likely similarity between a plugin API and the messaging system.&lt;br /&gt;
&lt;br /&gt;
== Keep It Simple ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel suggested the ability for plugins to unload on request from a sim, should a plugin malfunction and create problems for the grid. There was much discussion about the non-desirability of such a feature, and Kelly Washington reiterated Rob Lanphier&#039;s call to keep things simple up front. Rob Lanphier linked to http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html and Kelly Washington wrote:&lt;br /&gt;
   There will have to be a line drawn somewhere between what can be a&lt;br /&gt;
   plugin and what requires a separate client or re-compile.  This&lt;br /&gt;
   line does not need to be fixed in stone at the creation of the&lt;br /&gt;
   plugin system.  In fact the best approach may be to start&lt;br /&gt;
   conservatively with very little on the plugin side.  This would&lt;br /&gt;
   allow the system to get out, get tested, get used and get&lt;br /&gt;
   refined quicker than building an all-encompassing plugin system&lt;br /&gt;
   from the start.&lt;br /&gt;
   ...&lt;br /&gt;
   what is the minimal needed to create a plugin system that can at&lt;br /&gt;
   least make some useful plugins?&lt;br /&gt;
   &lt;br /&gt;
   My guess is the following:&lt;br /&gt;
   - create a floater, be able to populate and update data in the&lt;br /&gt;
   floater.  By this I just mean set text, set images, add/remove&lt;br /&gt;
   items from scroll lists.&lt;br /&gt;
   - add UI to bring up the floater.  As a first pass even just a&lt;br /&gt;
   &#039;plugins&#039; menu with a menu item for each loaded plug in. &lt;br /&gt;
   - access to specific internal data - ie the list of visible avatars,&lt;br /&gt;
   region name, current location etc &lt;br /&gt;
   &lt;br /&gt;
   Now that won&#039;t let you create just any plugin, it won&#039;t even let you&lt;br /&gt;
   create most plugins (I&#039;m sure everyone noticed there is nothing about&lt;br /&gt;
   handling messages at all), but that is my guess as to the minimal&lt;br /&gt;
   needed by a plugin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Autoupdater == &lt;br /&gt;
&lt;br /&gt;
A developer suggested that the plugin system should support automatic updates from plugin authors&#039; sites. The primary reason given was the headache of supporting thousands of users who might seek help from the plugin author every time a Viewer update broke old plugins.&lt;br /&gt;
&lt;br /&gt;
Soft Noel expressed concern that this would be a hard sell to LL as it makes the Viewer a potential vector for malware should plugin authors&#039; update sites be hacked. On #opensl, Soft Noel suggested that, to head off anticipated LL liability concerns, a general purpose plugin updater could be written as a plugin and distributed with other plugins that used the updater.&lt;br /&gt;
&lt;br /&gt;
== Two Source Releases ==&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier announced the release of the First Look 1.13.3.58390 source on Feb 24 and the 1.13.4.3 viewer beta on Feb 28:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Source_downloads&lt;br /&gt;
&lt;br /&gt;
Soft Noel noted build problems on the Mac, filing several bug reports and workarounds, however a texture bug continues to make 1.13.4.3 open source builds unusable on an Intel Mac. Others reported similar problems with the Linux build on SLDev and #opensl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Second Life viewer packaged for Fedora ==&lt;br /&gt;
&lt;br /&gt;
Callum Lerwick announced an RPM-packaged viewer for Second Life, including library dependencies. He indicated that he had found another user doing duplicate work and suggested they had some merging to do. Packages are here:&lt;br /&gt;
http://www.haxxed.com/rpms/secondlife/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lip Sync and Gesture Motions ==&lt;br /&gt;
&lt;br /&gt;
One plugin feature discussed was lip sync and gesture motions. Phoenix Linden wrote:&lt;br /&gt;
   Just so everyone knows, we are already working on lip and gesture&lt;br /&gt;
   motions for the avatar. This is no promise of functionality or&lt;br /&gt;
   when it will be available, but it is in the pipeline and under&lt;br /&gt;
   active development.&lt;br /&gt;
&lt;br /&gt;
Later in the week, Mike Monkowski noted a C|Net article regarding Linden Lab&#039;s announcement of Vivox voice support:&lt;br /&gt;
http://news.com.com/Integrated+voice+coming+to+Second+Life/2100-1043_3-6162410.html?tag=nefd.top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stereoscopic Viewer ==&lt;br /&gt;
&lt;br /&gt;
Eric Maslowski noted that the University of Michigan 3D lab was working on a stereoscopic 3D viewer:&lt;br /&gt;
http://um3d.dc.umich.edu/&lt;br /&gt;
&lt;br /&gt;
Many of the questions in his announcement remained unanswered:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000612.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agni, Aditi, and Uma ==&lt;br /&gt;
&lt;br /&gt;
Dale Glass inquired about the grids available for Viewer developers. Joshua Bell replied, listing the three grids as Agni (live grid), Aditi (beta) and Uma (open source developers). Fuller details were included in Joshua Bell&#039;s response:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000618.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LSL Instantiated Prim Metadata ==&lt;br /&gt;
&lt;br /&gt;
There has been a continuing discussion about the desirability of a custom data field that LSL could set on prims, and which Viewer developers could use for representing features not yet implemented on the server. Jason Giglio summarized the feature with an example use:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000644.html&lt;br /&gt;
&lt;br /&gt;
The original Wiki proposal is here:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Extensible_Prim_Attributes_from_LSL&lt;br /&gt;
&lt;br /&gt;
There was further discussion about whether an arbitrary named attribute system was desirable. In #opensl discussions it was noted that named parameters could already be set when communicating with the sim, but nobody voiced any guarantee that the data would persist, or suggested that this data could be set or directly accessed from LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LSL to Viewer Communications ==&lt;br /&gt;
&lt;br /&gt;
Initially mentioned in the prior thread, Dale Glass mentioned a different system that allowed dynamic communication between a custom viewer and LSL. His details and a pointer to the Viewer source patch are laid out in his message:&lt;br /&gt;
&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000582.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unit Testing Feedback Requested ==&lt;br /&gt;
&lt;br /&gt;
Gaurav Sharma requested feedback on what parts of the viewer should be covered by unit testing. Rob Lanphier noted that Gaurav Sharma was working for Adroit, which had been hired for this task. John Hurliman suggested that the LLJoint class has been problematc, but there has been little other relevant feedback. Gaurav Sharma updated the patch with a second version later in the week. That version is here:&lt;br /&gt;
http://lists.secondlife.com/pipermail/sldev/attachments/20070302/d8809402/unittest-2-0001.obj&lt;br /&gt;
&lt;br /&gt;
Gaurav Sharma&#039;s repeated request for unit test suggestions is here:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-March/000695.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Linux Viewers and 3D Acceleration ==&lt;br /&gt;
&lt;br /&gt;
Truxpin was having difficulty making Second Life run on his machine using open source nVidia drivers.  David Fries states that Linden Lab currently requires a 24 bit depth buffer, while Mesa only supports 16 bit depth.  David Fries (SpacedOut Frye) offered a patch that would request an OpenGL context with a 16 bit depth buffer if the 24 bit depth buffer request failed.&lt;br /&gt;
&lt;br /&gt;
Truxpin posted an e-mail including glxinfo which showed,&lt;br /&gt;
  direct rendering: No&lt;br /&gt;
  server glx vendor string: SGI&lt;br /&gt;
Indicating he only had software OpenGL rendering available.  The patch allowed the Second Life viewer to run with a 0.7 frame rate which also indicated software rendering.&lt;br /&gt;
&lt;br /&gt;
Truxpin later posted (off list) that he was able to get the nVidia driver installed and running at about the same speed under Linux as Windows on that computer.&lt;br /&gt;
&lt;br /&gt;
nVidia users currently require the closed source driver for 3D OpenGL acceleration.&lt;br /&gt;
&lt;br /&gt;
== Linden Lab and Open Source ==&lt;br /&gt;
&lt;br /&gt;
Christian Westbrook stated that Linden Lab had not yet completely accepted open source development. Rob Lanphier posted a response detailing the extent of Linden Lab&#039;s contributions and some of the remaining legal and business hurdles Linden Lab is working to move out of the way.&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier repeats emphasis on the necessity for list contributors to sign contributor agreements in order to free Linden Lab employees to more directly interact with SLDev members.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Source Licensing ==&lt;br /&gt;
&lt;br /&gt;
SLDev members inquired through the list and IRC channel about whether GPL must be used for the plugin system. Developers have concerns about whether non-free plugins can be developed without complex circumvention measures. Rob Lanphier indicated that the issue is being pressed internally.&lt;br /&gt;
&lt;br /&gt;
== OpenJPEG patch (see VWR-123) still not merged ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel ran into the known buffer overflow in LLImageJ2COJ::decodeImpl() using source version beta-1.13.4.3 on Intel Mac.  She disabled jpeg decoding to continue to make progress.&lt;br /&gt;
David Fries (SpacedOut Frye) (March 3rd) pointed out the fix in VWR-123 on jira, and again asked why it hasn&#039;t made it into the source code release.&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SLDev-Traffic_1&amp;diff=14444</id>
		<title>SLDev-Traffic 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SLDev-Traffic_1&amp;diff=14444"/>
		<updated>2007-03-03T17:18:27Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: corrected and expanded entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sldev-traffic no 1&lt;br /&gt;
&lt;br /&gt;
[[Image:sldev-traffic.gif|SLDev Traffic]]&lt;br /&gt;
&lt;br /&gt;
sldev discussions through March 2, 2007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Executable Switcher ==&lt;br /&gt;
&lt;br /&gt;
Noting that plugins will take a while to mature and that distributing new features for testing was desirable, Dale Glass proposed a system for selecting among multiple viewer versions at launch time:&lt;br /&gt;
   Since most people don&#039;t have nearly the bandwidth capabilities of&lt;br /&gt;
   LL, making things compact is important. For that reason, alternative&lt;br /&gt;
   clients will be distributed in say, NSIS packages, but include only&lt;br /&gt;
   the changed files, as well as some metadata. The metadata indicates&lt;br /&gt;
   among other things on which LL release it&#039;s based.&lt;br /&gt;
   &lt;br /&gt;
   Switcher will assemble a working SL install based on the original&lt;br /&gt;
   files and the modifications from the installed package, then run&lt;br /&gt;
   that.&lt;br /&gt;
   &lt;br /&gt;
   If the third party client is based on a SL version that&#039;s not&lt;br /&gt;
   installed (say, firstlook based and user is running the stable&lt;br /&gt;
   client), then the switcher will try to automatically download the &lt;br /&gt;
   official version to use as a base.&lt;br /&gt;
&lt;br /&gt;
Peekay Semyorka wondered at why a user couldn&#039;t install multiple EXEs in the viewer directory. Dale Glass noted that viewers may have different and incompatible data, such as the modified XML menus in his own scanner.&lt;br /&gt;
&lt;br /&gt;
Dale Glass emphasized that this is a temporary solution until plugins are ready.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viewer Manifest ==&lt;br /&gt;
&lt;br /&gt;
In the Executable Switcher thread, Ryan Williams noted that he would introduce a Python-based installer packaging script in the next release, which came with the beta release this week. The documentation is here:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Viewer_Manifest&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier invited feedback on Ryan Williams&#039; script, noting that engaging Lindens productively (Ryan Williams is a Linden) is a good way to encourage Lindens to reciprocate.&lt;br /&gt;
&lt;br /&gt;
Christian Westbrook inquired about whether the packaging script would be GPL&#039;d, noting current work in deploying OpenSL with the NullSoft packaging system. Yes on the GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LLMozLib ==&lt;br /&gt;
&lt;br /&gt;
Tofu Linden announced the upload of LLMozLib/uBrowser&lt;br /&gt;
   LLMozLib is a library (and set of Mozilla patches) written by Callum&lt;br /&gt;
   and others which we use to create our embedded Mozilla widgets inside&lt;br /&gt;
   the Second Life viewer (for web profiles, F1 Help, and the login&lt;br /&gt;
   screen currently) with a simplified API.  It does not depend upon the&lt;br /&gt;
   Second Life source and can be used in your own programs.&lt;br /&gt;
   &lt;br /&gt;
   For more info about LLMozLib and uBrowser, see http://ubrowser.com/&lt;br /&gt;
&lt;br /&gt;
Linux users had some remaining trouble building Second Life with Mozilla enabled, and Signore Iredell posted instructions for building without browser support: https://lists.secondlife.com/pipermail/sldev/2007-February/000532.html&lt;br /&gt;
&lt;br /&gt;
Tofu Linden noted that he had committed a change to make disabling LLMozLib easier, and that it should reach the open source release soon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C++ bindings Prototype versus C ==&lt;br /&gt;
&lt;br /&gt;
Tim Shephard posted a C++ prototype which proved that it was possible to develop a plugin API which interfaced via C++ and inheritance.   However, the issues he ran into were that you would need to build with the same compiler (both client and plugin) in order to develop compatible binaries.   This was a significant non starter.&lt;br /&gt;
&lt;br /&gt;
He also discussed the NPAPI API as a simple model for plugins. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C++ motivated Plugin Bindings ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel posted C++ motivated bindings that could be used as a plugin prototype.   It can load plugins as libraries and negotiate multiple versions of an interface for later compatibility. The first version is Intel Mac only, but includes work toward other architectures.&lt;br /&gt;
&lt;br /&gt;
The significant concern as pointed out by Tim Shephard in an earlier posting as mentioned above, is that C++ has significant Application Binary Issues on the Windows platform.   (Microsoft has not guaranteed that they will support the C++ ABI from one release to the next (in fact, it changed in VS2003 -&amp;gt; VS2005)).  This will make it difficult to support people who build their plugins with a different compiler than what Linden Lab is using.&lt;br /&gt;
&lt;br /&gt;
Argent Stonecutter suggested that the bindings should be as language-neutral as possible, noting that targeting C was targeting the lowest common denominator of all languages. Soft Noel is reworking the posted system to offer a C interface instead of C++. Argent Stonecutter voiced concern about the anonymous pointers C would introduce in the plugin API and referenced an older thread. In that thread, he laid out one scheme for encoding plugin parameter formats and described the behavior plugins would follow in validating such a plugin interface. Ryan Williams suggested that the already existent LLSD would work for a plugin interface with this design and noted likely similarity between a plugin API and the messaging system.&lt;br /&gt;
&lt;br /&gt;
== Keep It Simple ==&lt;br /&gt;
&lt;br /&gt;
Soft Noel suggested the ability for plugins to unload on request from a sim, should a plugin malfunction and create problems for the grid. There was much discussion about the non-desirability of such a feature, and Kelly Washington reiterated Rob Lanphier&#039;s call to keep things simple up front. Rob Lanphier linked to http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html and Kelly Washington wrote:&lt;br /&gt;
   There will have to be a line drawn somewhere between what can be a&lt;br /&gt;
   plugin and what requires a separate client or re-compile.  This&lt;br /&gt;
   line does not need to be fixed in stone at the creation of the&lt;br /&gt;
   plugin system.  In fact the best approach may be to start&lt;br /&gt;
   conservatively with very little on the plugin side.  This would&lt;br /&gt;
   allow the system to get out, get tested, get used and get&lt;br /&gt;
   refined quicker than building an all-encompassing plugin system&lt;br /&gt;
   from the start.&lt;br /&gt;
   ...&lt;br /&gt;
   what is the minimal needed to create a plugin system that can at&lt;br /&gt;
   least make some useful plugins?&lt;br /&gt;
   &lt;br /&gt;
   My guess is the following:&lt;br /&gt;
   - create a floater, be able to populate and update data in the&lt;br /&gt;
   floater.  By this I just mean set text, set images, add/remove&lt;br /&gt;
   items from scroll lists.&lt;br /&gt;
   - add UI to bring up the floater.  As a first pass even just a&lt;br /&gt;
   &#039;plugins&#039; menu with a menu item for each loaded plug in. &lt;br /&gt;
   - access to specific internal data - ie the list of visible avatars,&lt;br /&gt;
   region name, current location etc &lt;br /&gt;
   &lt;br /&gt;
   Now that won&#039;t let you create just any plugin, it won&#039;t even let you&lt;br /&gt;
   create most plugins (I&#039;m sure everyone noticed there is nothing about&lt;br /&gt;
   handling messages at all), but that is my guess as to the minimal&lt;br /&gt;
   needed by a plugin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Autoupdater == &lt;br /&gt;
&lt;br /&gt;
A developer suggested that the plugin system should support automatic updates from plugin authors&#039; sites. The primary reason given was the headache of supporting thousands of users who might seek help from the plugin author every time a Viewer update broke old plugins.&lt;br /&gt;
&lt;br /&gt;
Soft Noel expressed concern that this would be a hard sell to LL as it makes the Viewer a potential vector for malware should plugin authors&#039; update sites be hacked. On #opensl, Soft Noel suggested that, to head off anticipated LL liability concerns, a general purpose plugin updater could be written as a plugin and distributed with other plugins that used the updater.&lt;br /&gt;
&lt;br /&gt;
== Two Source Releases ==&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier announced the release of the First Look 1.13.3.58390 source on Feb 24 and the 1.13.4.3 viewer beta on Feb 28:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Source_downloads&lt;br /&gt;
&lt;br /&gt;
Soft Noel noted build problems on the Mac, filing several bug reports and workarounds, however a texture bug continues to make 1.13.4.3 open source builds unusable on an Intel Mac. Others reported similar problems with the Linux build on SLDev and #opensl.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Second Life viewer packaged for Fedora ==&lt;br /&gt;
&lt;br /&gt;
Callum Lerwick announced an RPM-packaged viewer for Second Life, including library dependencies. He indicated that he had found another user doing duplicate work and suggested they had some merging to do. Packages are here:&lt;br /&gt;
http://www.haxxed.com/rpms/secondlife/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lip Sync and Gesture Motions ==&lt;br /&gt;
&lt;br /&gt;
One plugin feature discussed was lip sync and gesture motions. Phoenix Linden wrote:&lt;br /&gt;
   Just so everyone knows, we are already working on lip and gesture&lt;br /&gt;
   motions for the avatar. This is no promise of functionality or&lt;br /&gt;
   when it will be available, but it is in the pipeline and under&lt;br /&gt;
   active development.&lt;br /&gt;
&lt;br /&gt;
Later in the week, Mike Monkowski noted a C|Net article regarding Linden Lab&#039;s announcement of Vivox voice support:&lt;br /&gt;
http://news.com.com/Integrated+voice+coming+to+Second+Life/2100-1043_3-6162410.html?tag=nefd.top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stereoscopic Viewer ==&lt;br /&gt;
&lt;br /&gt;
Eric Maslowski noted that the University of Michigan 3D lab was working on a stereoscopic 3D viewer:&lt;br /&gt;
http://um3d.dc.umich.edu/&lt;br /&gt;
&lt;br /&gt;
Many of the questions in his announcement remained unanswered:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000612.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agni, Aditi, and Uma ==&lt;br /&gt;
&lt;br /&gt;
Dale Glass inquired about the grids available for Viewer developers. Joshua Bell replied, listing the three grids as Agni (live grid), Aditi (beta) and Uma (open source developers). Fuller details were included in Joshua Bell&#039;s response:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000618.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LSL Instantiated Prim Metadata ==&lt;br /&gt;
&lt;br /&gt;
There has been a continuing discussion about the desirability of a custom data field that LSL could set on prims, and which Viewer developers could use for representing features not yet implemented on the server. Jason Giglio summarized the feature with an example use:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000644.html&lt;br /&gt;
&lt;br /&gt;
The original Wiki proposal is here:&lt;br /&gt;
https://wiki.secondlife.com/wiki/Extensible_Prim_Attributes_from_LSL&lt;br /&gt;
&lt;br /&gt;
There was further discussion about whether an arbitrary named attribute system was desirable. In #opensl discussions it was noted that named parameters could already be set when communicating with the sim, but nobody voiced any guarantee that the data would persist, or suggested that this data could be set or directly accessed from LSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LSL to Viewer Communications ==&lt;br /&gt;
&lt;br /&gt;
Initially mentioned in the prior thread, Dale Glass mentioned a different system that allowed dynamic communication between a custom viewer and LSL. His details and a pointer to the Viewer source patch are laid out in his message:&lt;br /&gt;
&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-February/000582.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unit Testing Feedback Requested ==&lt;br /&gt;
&lt;br /&gt;
Gaurav Sharma requested feedback on what parts of the viewer should be covered by unit testing. Rob Lanphier noted that Gaurav Sharma was working for Adroit, which had been hired for this task. John Hurliman suggested that the LLJoint class has been problematc, but there has been little other relevant feedback. Gaurav Sharma updated the patch with a second version later in the week. That version is here:&lt;br /&gt;
http://lists.secondlife.com/pipermail/sldev/attachments/20070302/d8809402/unittest-2-0001.obj&lt;br /&gt;
&lt;br /&gt;
Gaurav Sharma&#039;s repeated request for unit test suggestions is here:&lt;br /&gt;
https://lists.secondlife.com/pipermail/sldev/2007-March/000695.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Linux Viewers and 3D Acceleration ==&lt;br /&gt;
&lt;br /&gt;
Truxpin was having difficulty making Second Life run on his machine using open source nVidia drivers.  David Fries states that Linden Lab currently requires a 24 bit depth buffer, while Mesa only supports 16 bit depth.  David Fries (SpacedOut Frye) offered a patch that would request an OpenGL context with a 16 bit depth buffer if the 24 bit depth buffer request failed.&lt;br /&gt;
&lt;br /&gt;
Truxpin posted an e-mail including glxinfo which showed,&lt;br /&gt;
  direct rendering: No&lt;br /&gt;
  server glx vendor string: SGI&lt;br /&gt;
Indicating he only had software OpenGL rendering available.  The patch allowed the Second Life viewer to run with a 0.7 frame rate which also indicated software rendering.&lt;br /&gt;
&lt;br /&gt;
Truxpin later posted (off list) that he was able to get the nVidia driver installed and running at about the same speed under Linux as Windows on that computer.&lt;br /&gt;
&lt;br /&gt;
nVidia users currently require the closed source driver for 3D OpenGL acceleration.&lt;br /&gt;
&lt;br /&gt;
== Linden Lab and Open Source ==&lt;br /&gt;
&lt;br /&gt;
Christian Westbrook stated that Linden Lab had not yet completely accepted open source development. Rob Lanphier posted a response detailing the extent of Linden Lab&#039;s contributions and some of the remaining legal and business hurdles Linden Lab is working to move out of the way.&lt;br /&gt;
&lt;br /&gt;
Rob Lanphier repeats emphasis on the necessity for list contributors to sign contributor agreements in order to free Linden Lab employees to more directly interact with SLDev members.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Source Licensing ==&lt;br /&gt;
&lt;br /&gt;
SLDev members inquired through the list and IRC channel about whether GPL must be used for the plugin system. Developers have concerns about whether non-free plugins can be developed without complex circumvention measures. Rob Lanphier indicated that the issue is being pressed internally.&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Build_the_Viewer_on_Linux&amp;diff=13239</id>
		<title>Build the Viewer on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Build_the_Viewer_on_Linux&amp;diff=13239"/>
		<updated>2007-02-27T04:32:20Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: OpenJPEG 1.1.1 update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CompileNav}}&lt;br /&gt;
&lt;br /&gt;
The following are instructions for building the Second Life viewer on linux. This process has only been used on [http://www.debian.org/ debian] and debian based systems like [http://www.ubuntu.com/ ubuntu]. For other platforms, see [[Get source and compile]].&lt;br /&gt;
&lt;br /&gt;
== Installing the required dependencies ==&lt;br /&gt;
&lt;br /&gt;
The Second Life Viewer has a number of compile/link dependencies on external libraries which need to be put in place first - to help you, the source download page contains a link to a &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; package which you unpack over the source tree to fill most of the dependancies (and thus avoid most of the fiddly work described on this page).  The Second Life Viewer is not a trivial build, and experience with building large software packages will help you greatly - but don&#039;t be daunted, it should be simple once the dependencies are in the right place the first time.&lt;br /&gt;
&lt;br /&gt;
Paths and package names given here are based on Ubuntu 6.06 and may vary according to your Linux distribution.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
{{vital-info|How to compile [[Source_archive#2007-Feb-20|FL-1.13.3.58185]] and [[Source_archive#2007-Feb-24|FL-1.13.3.58390]] &#039;&#039;&#039;with&#039;&#039;&#039; and/or &#039;&#039;&#039;without&#039;&#039;&#039; llmozlib (see [[Talk:Compiling_the_viewer_%28Linux%29#llmozlib|discussion]])}}&lt;br /&gt;
* You will need the &amp;lt;b&amp;gt;SCons&amp;lt;/b&amp;gt; build tool [package: scons]&lt;br /&gt;
* You should use the &amp;lt;b&amp;gt;GCC 3.4&amp;lt;/b&amp;gt; C/C++ compiler [package: g++-3.4]; other GCC versions are not well-tested; GCC 4.x will NOT currently build the viewer without some code adjustments.&lt;br /&gt;
&lt;br /&gt;
* fetch and unpack &amp;lt;b&amp;gt;FMOD 3.75&amp;lt;/b&amp;gt; &amp;lt;http://www.fmod.org/&amp;gt;&lt;br /&gt;
** FMOD provides audio output, but (although &#039;free&#039; in some senses) is not itself open-source.  &amp;lt;b&amp;gt;If&amp;lt;/b&amp;gt; you wish to avoid FMOD, thus disabling audio, you may make these changes:&lt;br /&gt;
*** Remove the reference to &#039;&amp;lt;b&amp;gt;fmod-3.75&amp;lt;/b&amp;gt;&#039; in indra/SConstruct&lt;br /&gt;
*** Replace &#039;&amp;lt;b&amp;gt;-DLL_SDL=1&amp;lt;/b&amp;gt;&#039; with &#039;&amp;lt;b&amp;gt;-DLL_SDL=1 -DLL_FMOD=0&amp;lt;/b&amp;gt;&#039; in indra/SConstruct&lt;br /&gt;
*** Comment-out the libfmod line in indra/newview/linux_tools/client-manifest-i686&lt;br /&gt;
&lt;br /&gt;
* You will need the &amp;lt;b&amp;gt;Curl&amp;lt;/b&amp;gt; library [package: libcurl-dev] - at least version 7.15.4 is recommended, 7.16.x is ideal.&lt;br /&gt;
** If you are compiling your own version of &amp;lt;b&amp;gt;Curl&amp;lt;/b&amp;gt;, then you should consider configuring it to use the &amp;lt;b&amp;gt;c-ares&amp;lt;/b&amp;gt; library so that DNS lookups will be asynchronous.&lt;br /&gt;
&lt;br /&gt;
* You will need some development headers for OpenGL and X11: gl.h, glext.h, glu.h, Xlib.h, and Xutil.h [packages: mesa-common-dev, libglu1-mesa-dev, libx11-dev]&lt;br /&gt;
&lt;br /&gt;
* You will need &amp;lt;b&amp;gt;GTK 2.x development headers&amp;lt;/b&amp;gt; [libgtk2.0-dev]&lt;br /&gt;
&lt;br /&gt;
* You will need &amp;lt;b&amp;gt;yacc&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;lex&amp;lt;/b&amp;gt; [suggest packages: bison, flex]&lt;br /&gt;
&lt;br /&gt;
* You may &amp;lt;b&amp;gt;either&amp;lt;/b&amp;gt; use our easy &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; bundle of pre-built libraries and headers unpacked into the Second Life Viewer source tree, &amp;lt;b&amp;gt;or&amp;lt;/b&amp;gt; (for example if you are porting to a new architecture or wish to make a package tailored to your Linux distribution&#039;s own libraries) you will have to install the following additional dependencies:&lt;br /&gt;
** &amp;lt;b&amp;gt;boost&amp;lt;/b&amp;gt; [libboost-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;boost-regex&amp;lt;/b&amp;gt; [libboost-regex-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;apr-1&amp;lt;/b&amp;gt; [libapr1.0-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;aprutil-1&amp;lt;/b&amp;gt; [libaprutil1.0-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;xmlrpc-epi 0.51&amp;lt;/b&amp;gt; &amp;lt;http://xmlrpc-epi.sourceforge.net/&amp;gt;&lt;br /&gt;
*** note: not xmlrpc-c (xmlrpc-c has a library and headers with the same name but is not compatible)&lt;br /&gt;
*** Apply patches from the instructions in [[patch xmlrpc-epi]].&lt;br /&gt;
*** Build with ./configure --prefix=/usr --includedir=/usr/include/xmlrpc-epi  --[[User:Caelum Lewellen|Caelum Lewellen]] 15:47, 11 January 2007 (PST)&lt;br /&gt;
** &amp;lt;b&amp;gt;jpeglib&amp;lt;/b&amp;gt; [libjpeg62-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;SDL&amp;lt;/b&amp;gt; [libsdl1.2-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;Vorbis&amp;lt;/b&amp;gt; [libvorbis-dev]&lt;br /&gt;
** build &amp;lt;b&amp;gt;ELFIO&amp;lt;/b&amp;gt; &amp;lt;http://sourceforge.net/projects/elfio/&amp;gt;&lt;br /&gt;
*** This wants to build a static library by default.  Afterwards, to create a dynamic libelfio.so: &amp;lt;code&amp;gt;cd ELFIO &amp;amp;&amp;amp; g++-3.4 -shared *.o -o libelfio.so&amp;lt;/code&amp;gt;&lt;br /&gt;
** build &amp;lt;b&amp;gt;OpenJPEG&amp;lt;/b&amp;gt; &amp;lt;http://www.openjpeg.org/&amp;gt;&lt;br /&gt;
*** note: OpenJPEG 1.1.1 or greater is required which has the macro OPJ_PATH_LEN, if the header has MAX_PATH, then upgrade or it will crash with a divide by zero error as the structures would be two different sizes.&lt;br /&gt;
*** 02-26-2007, another set of patches is required to Second Life to make it usable, that is fix a crash, make it look good, and speed it up.  See https://jira.secondlife.com:443/browse/VWR-123&lt;br /&gt;
** &amp;lt;b&amp;gt;expat&amp;lt;/b&amp;gt; [libexpat1-dev]&lt;br /&gt;
&lt;br /&gt;
=== Copy headers and libraries into the source tree ===&lt;br /&gt;
&lt;br /&gt;
Here is a guide to the sequence of shell commands needed to copy the required headers and libraries into the Second Life Viewer source tree for building.  Actual paths to system headers may vary according to Linux distribution.&lt;br /&gt;
* ${SLSRC} refers to the top-level directory of the Second Life Viewer source tree.&lt;br /&gt;
* ${FMOD} refers to the top-level directory into which you unpacked FMOD 3.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cp ${FMOD}/api/inc/* ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp ${FMOD}/api/libfmod-3.75.so ${SLSRC}/libraries/i686-linux/lib_release_client/&lt;br /&gt;
&lt;br /&gt;
 cp -a /usr/include/atk-1.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp -a /usr/include/gtk-2.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp -a /usr/lib/gtk-2.0/include/* ${SLSRC}/libraries/i686-linux/include/gtk-2.0/&lt;br /&gt;
 cp -a /usr/include/glib-2.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp -a /usr/lib/glib-2.0/include/* ${SLSRC}/libraries/i686-linux/include/glib-2.0/&lt;br /&gt;
 cp -a /usr/include/pango-1.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
&lt;br /&gt;
if your GTK is fairly recent and thus needs Cairo:&lt;br /&gt;
 cp -a /usr/include/cairo/* ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using our easy &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; bundle then you can skip the rest of this section, &amp;lt;b&amp;gt;otherwise&amp;lt;/b&amp;gt; you will also need to perform the following:&lt;br /&gt;
* ${OPENJPEG} refers to the top-level directory of your completed OpenJPEG build.&lt;br /&gt;
* ${ELFIO} refers to the top-level directory of your completed ELFIO build.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cp -a /usr/include/apr-1.0/ ${SLSRC}/libraries/i686-linux/include/apr-1&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/expat&lt;br /&gt;
 cp -a /usr/include/expat*.h ${SLSRC}/libraries/i686-linux/include/expat/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/zlib&lt;br /&gt;
 cp -a /usr/include/zlib*.h ${SLSRC}/libraries/i686-linux/include/zlib/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/openjpeg&lt;br /&gt;
 cp ${OPENJPEG}/libopenjpeg/openjpeg.h ${SLSRC}/libraries/i686-linux/include/openjpeg/&lt;br /&gt;
 cp ${OPENJPEG}/libopenjpeg.a ${SLSRC}/libraries/i686-linux/lib_release_client/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/ELFIO&lt;br /&gt;
 cp ${ELFIO}/ELFIO/*.h ${SLSRC}/libraries/i686-linux/include/ELFIO/&lt;br /&gt;
 cp ${ELFIO}/ELFIO/libelfio.so ${SLSRC}/libraries/i686-linux/lib_release_client/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/jpeglib&lt;br /&gt;
 cp -a /usr/include/j*.h ${SLSRC}/libraries/i686-linux/include/jpeglib/&lt;br /&gt;
 touch ${SLSRC}/libraries/i686-linux/include/jpeglib/jinclude.h&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/llfreetype2&lt;br /&gt;
 cp -a /usr/include/freetype2/freetype/ ${SLSRC}/libraries/i686-linux/include/llfreetype2/&lt;br /&gt;
 cp -a /usr/include/ft2build.h ${SLSRC}/libraries/i686-linux/include/llfreetype2/freetype/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compiling ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cd indra&lt;br /&gt;
 $ scons DISTCC=no BTARGET=client BUILD=release&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Expect a build time of a couple of hours.  The resulting unstripped Second Life Viewer binary is &amp;lt;b&amp;gt;newview/secondlife-i686-bin&amp;lt;/b&amp;gt;. Note that temporary object code is compiled into &amp;lt;b&amp;gt;/tmp/$USER&amp;lt;/b&amp;gt; by default (where $USER is your username) - this can be changed by prefixing the &amp;lt;b&amp;gt;scons&amp;lt;/b&amp;gt; command above with &amp;lt;b&amp;gt;TEMP_BUILD_DIR=&amp;quot;&amp;lt;i&amp;gt;[full directory path]&amp;lt;/i&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ TEMP_BUILD_DIR=&amp;quot;/home/fred/secondlife/temp-build&amp;quot; scons DISTCC=no BTARGET=client BUILD=release&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To build a release that has all of the shaders and optimizations enabled and resembles the official shipped Linux alpha client, use BUILD=releasefordownload&lt;br /&gt;
&lt;br /&gt;
Be sure to read the [[Common compilation problems]] page if you have problems - we&#039;ll try to keep the page up to date with known problems and solutions.&lt;br /&gt;
&lt;br /&gt;
== Testing and packaging the client ==&lt;br /&gt;
&lt;br /&gt;
=== Testing the result from inside the tree ===&lt;br /&gt;
&lt;br /&gt;
You may find it simpler to follow the instructions in the &#039;Packaging the client&#039; section below to run the client under the same conditions as an end-user would.  Otherwise:&lt;br /&gt;
&lt;br /&gt;
* Preparing to run &#039;in-tree&#039;&lt;br /&gt;
** &amp;lt;i&amp;gt;ensure that you have indra/newview/app_settings/static_*.db2&amp;lt;/i&amp;gt; - if not, you&#039;ll find it in the &#039;slviewer-artwork&#039; download (a zip file).&lt;br /&gt;
** now, from the indra directory:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cp ../scripts/messages/message_template.msg newview/app_settings/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Running it: The LD_LIBRARY_PATH stuff ensures that the binary looks for its libraries in the right places.  From the indra directory:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ ( cd newview &amp;amp;&amp;amp; LD_LIBRARY_PATH=../../libraries/i686-linux/lib_release_client:${LD_LIBRARY_PATH}:/usr/local/lib  ./secondlife-i686-bin )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** For version &#039;&#039;&#039;20070117a&#039;&#039;&#039; the binary name seems to have changed to &#039;&#039;&#039;secondlife-i686-bin-globalsyms&#039;&#039;&#039;, so the command would be&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ ( cd newview &amp;amp;&amp;amp; LD_LIBRARY_PATH=../../libraries/i686-linux/lib_release_client:${LD_LIBRARY_PATH}:/usr/local/lib  ./secondlife-i686-bin-globalsyms )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Augh!!  The client seems REALLY slow!! ====&lt;br /&gt;
&lt;br /&gt;
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.  Unfortunately this isn&#039;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.&lt;br /&gt;
&lt;br /&gt;
However, the &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; package includes two pre-built libraries which facilitate the use of this smoother image decoding method: &amp;lt;b&amp;gt;libkdu_v42R.so&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;libllkdu.so&amp;lt;/b&amp;gt;.  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 slower) without them.&lt;br /&gt;
&lt;br /&gt;
To &amp;lt;b&amp;gt;use these faster image-decoding libraries&amp;lt;/b&amp;gt;, 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&#039;re running the client from the source tree, the following will make the KDU libraries available:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cp &amp;quot;$SLSRC/libraries/i686-linux/lib_release_client/libllkdu.so&amp;quot; &amp;quot;$SLSRC/indra/newview/libllkdu.so&amp;quot;&lt;br /&gt;
 mkdir &amp;quot;$SLSRC/indra/lib&amp;quot;&lt;br /&gt;
 cp &amp;quot;$SLSRC/libraries/i686-linux/lib_release_client/libkdu_v42R.so&amp;quot; &amp;quot;$SLSRC/indra/lib/libkdu_v42R.so&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file &amp;lt;b&amp;gt;indra/newview/linux_tools/client-manifest-i686&amp;lt;/b&amp;gt; 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 &#039;Packaging the client&#039; instructions below.&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Unable to initialize communications&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
If the viewer just displays the error message &amp;quot; Unable to initialize communications&amp;quot; and exits, it can&#039;t find message_template.msg. You did remember to copy it over, right?&lt;br /&gt;
&lt;br /&gt;
=== Packaging the client ===&lt;br /&gt;
&lt;br /&gt;
If you substitute &#039;BUILD=release&#039; with &#039;&amp;lt;b&amp;gt;BUILD=releasefordownload&amp;lt;/b&amp;gt;&#039; in the &#039;Compiling&#039; 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 &amp;lt;b&amp;gt;indra/newview/SecondLife_i686_1_X_Y_Z/&amp;lt;/b&amp;gt; and has also been tarred into &amp;lt;b&amp;gt;indra/newview/SecondLife_i686_1_X_Y_Z.tar.bz2&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file which controls what (and where) files go into the end-user runtime viewer directory is &amp;lt;b&amp;gt;indra/newview/linux_tools/client-manifest-i686&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Packaging errors ====&lt;br /&gt;
&lt;br /&gt;
The final packaging step may fail with errors about the manifest if you are not using the &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; bundle; in this case, if you still wish to end up with an end-user viewer package incorporating your own libraries, you can edit the manifest file found at &amp;lt;b&amp;gt;indra/newview/linux_tools/client-manifest-i686&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD ====&lt;br /&gt;
&lt;br /&gt;
A list of patches is given for [[Compiling the viewer FreeBSD]].&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_(Mac_OS_X)&amp;diff=13238</id>
		<title>Compiling the viewer (Mac OS X)</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_(Mac_OS_X)&amp;diff=13238"/>
		<updated>2007-02-27T04:32:16Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: OpenJPEG 1.1.1 update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CompileNav}}&lt;br /&gt;
&lt;br /&gt;
The following are instructions for building the Second Life viewer on Mac OS X.  For other platforms, see [[Compiling the viewer]]&lt;br /&gt;
&lt;br /&gt;
= Development Environment =&lt;br /&gt;
We use XCode 2.4.1 for building on Macintosh computers. For simplicity, we suggest installing everything from the mpkg.&lt;br /&gt;
&lt;br /&gt;
You will need to install the proprietary libraries as well as all of the other third party libraries below. For convenience, we package up the libraries we are allowed to distribute so you can either download that package and unpack it into your development working directory or install all of the libraries from scratch.&lt;br /&gt;
&lt;br /&gt;
= Installing Proprietary Libraries =&lt;br /&gt;
&lt;br /&gt;
We do not distribute these libraries, so you will need to fetch and install these even if you download the libraries packages.  (This is due to licensing restrictions.  Don&#039;t ask, we already did, and can&#039;t get permission.  So you do have to get them yourself.)&lt;br /&gt;
&lt;br /&gt;
== Fmod ==&lt;br /&gt;
* Download &amp;amp; extract [http://www.fmod.org/ifmoddownload.html fmod 3.75 programmers api for macintosh].&lt;br /&gt;
* (You do *not* want the latest version, instead scroll down to v3.75)&lt;br /&gt;
* Copy the extracted files. &amp;lt;em&amp;gt;Note the name change for the x86 library.&amp;lt;/em&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cp -p fmodapi375mac/api/inc/*.h linden/libraries/include&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmod.a linden/libraries/powerpc-darwin/lib_debug&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmod.a linden/libraries/powerpc-darwin/lib_release&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmodx86.a linden/libraries/i386-darwin/lib_debug/libfmod.a&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmodx86.a linden/libraries/i386-darwin/lib_release/libfmod.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installing Libraries =&lt;br /&gt;
We supply a package of the required libraries and binaries on the [[compiling the viewer]] page.&lt;br /&gt;
&lt;br /&gt;
From the directory where you downloaded the tarballs:&lt;br /&gt;
&lt;br /&gt;
 tar xvfz sl-source.tar.gz&lt;br /&gt;
 tar xvfz sl-libraries.tar.gz&lt;br /&gt;
&lt;br /&gt;
Your filenames may vary. If you open them with the double click file extract, remember that dragging folders on top of each other will overwrite the original contents, not merge them as in windows.&lt;br /&gt;
&lt;br /&gt;
= Installing Libraries From Scratch =&lt;br /&gt;
We recommend creating a separate third party library directory named &#039;lindenlib&#039; on the same level as the &#039;linden&#039; tree in your directory structure. Download, unpack, and build from there and copy the files specified to their final location.&lt;br /&gt;
&lt;br /&gt;
Most of the libs built here are architecture specific, so these instructions will refer to &amp;lt;em&amp;gt;$PLATFORM&amp;lt;/em&amp;gt; to denote that. You can set an environment variable to make it so copy &amp;amp; paste from these instructions will work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ PLATFORM=`uname -p`-darwin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Building the Universal target requires that you have built both the i386 and ppc libraries.  (Please see [http://developer.apple.com/technotes/tn2005/tn2137.html] for more background information.)&lt;br /&gt;
&lt;br /&gt;
Using gcc 4.0 on a ppc box when building many of these libraries will insert an undefined reference to _fprintf$LBDLStub which then fails to link later. Until we have a better solution to this issue, you will need to use an earlier version of gcc. Some of the instructions below will include a call to &amp;lt;em&amp;gt;gcc_select&amp;lt;/em&amp;gt; which is only necessary if you are building on a ppc box.&lt;br /&gt;
&lt;br /&gt;
== Boost ==&lt;br /&gt;
Download &amp;amp; extract [http://sourceforge.net/project/showfiles.php?group_id=7586&amp;amp;package_id=8041 Boost] source.&lt;br /&gt;
The viewer does not link to the boost libraries, so much of this is not necessary. You can simply copy the header files if you have problems getting the boost package to build.&lt;br /&gt;
=== Copy the Headers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cp -r lindenlib/boost-1.33.0/boost linden/libraries/include/boost&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Build Boost.Jam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd boost-1.33.0/tools/build/jam_src&lt;br /&gt;
$ ./build.sh&lt;br /&gt;
$ if [ $PLATFORM = &amp;quot;i386-darwin&amp;quot; ] then PLATDIR=bin.macosxx86; else PLATDIR=bin.macosxppc; fi&lt;br /&gt;
$ cp $PLATDIR/bjam ../../..&lt;br /&gt;
$ unset PLATDIR&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Build Boost ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd boost-1.33.0&lt;br /&gt;
$ export PYTHON_ROOT=/System/Library/Frameworks/Python.framework/Versions/2.3/&lt;br /&gt;
$ export PYTHON_VERSION=2.3&lt;br /&gt;
$ ./bjam stage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy the Libraries ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 4.0&lt;br /&gt;
$ cd boost-1.33.0&lt;br /&gt;
$ export PLATFORM=`uname -p`-darwin&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc-d.a \ &lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_python-gcc.a&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc-mt.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc-mt-d.a \&lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_python-gcc-mt.a&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc-d.a \&lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_regex-gcc.a&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc-mt.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc-mt-d.a \&lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_regex-gcc-mt.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Apache Portable Runtime ==&lt;br /&gt;
* Download &amp;amp; extract [http://apr.apache.org/download.cgi apr and apr-util].&lt;br /&gt;
* Build and install the headers and lib files using a terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd lindenlib/apr-1.2.8&lt;br /&gt;
$ ./configure --disable-shared --disable-lfs --prefix=/tmp/apr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/apr/include/apr-1 linden/libraries/$PLATFORM/include&lt;br /&gt;
$ cp /tmp/apr/lib/libapr-1.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp /tmp/apr/lib/libapr-1.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&lt;br /&gt;
$ cd lindenlib/apr-util-1.2.8&lt;br /&gt;
$ ./configure --disable-shared --disable-lfs --with-apr=/tmp/apr --prefix=/tmp/apr-util&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/apr-util/include/apr-1 linden/libraries/$PLATFORM/include&lt;br /&gt;
$ cp /tmp/apr-util/lib/*.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp /tmp/apr-util/lib/*.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
$ sudo gcc_select 4.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== zlib ==&lt;br /&gt;
* Download and extract [http://www.zlib.net/ zlib].&lt;br /&gt;
* Build and install it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd zlib-1.2.3&lt;br /&gt;
$ ./configure --prefix=/tmp/zlib&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -Rp /tmp/zlib/include linden/libraries/include/zlib&lt;br /&gt;
$ cp -p /tmp/zlib/lib/libz.a linden/libraries/$PLATFORM/lib_debug/libllz.a&lt;br /&gt;
$ cp -p /tmp/zlib/lib/libz.a linden/libraries/$PLATFORM/lib_release/libllz.a&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Note that the library has a different name in the libraries directory.&lt;br /&gt;
&lt;br /&gt;
== Expat ==&lt;br /&gt;
* Download an extract the 1.95.8 version of [http://sourceforge.net/projects/expat/ expat].&lt;br /&gt;
* Build and install the library&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd expat-1.95.8&lt;br /&gt;
$ ./configure --prefix=/tmp/expat&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/expat/include linden/libraries/include/expat&lt;br /&gt;
$ cp -p /tmp/expat/lib/libexpat.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp -p /tmp/expat/lib/libexpat.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XMLRPC-epi ==&lt;br /&gt;
* Download a source package for [http://xmlrpc-epi.sourceforge.net/ xmlrpc-epi].&lt;br /&gt;
* Apply patch 1 and 2 from the instructions in [[patch xmlrpc-epi]].&lt;br /&gt;
* Configure the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd xmlrpc-epi-0.51&lt;br /&gt;
$ ./configure --disable-shared --prefix=/tmp/xmlrpc-epi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Apply patch 3 from the instructions in [[patch xmlrpc-epi]].&lt;br /&gt;
* Finish the removal of expat, build, and install&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ rm -rf expat&lt;br /&gt;
$ mkdir expat&lt;br /&gt;
$ cp /tmp/expat/include/* expat&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/xmlrpc-epi/include linden/libraries/include/xmlrpc-epi&lt;br /&gt;
$ cp -p /tmp/xmlrpc-epi/lib/libxmlrpc.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp -p /tmp/xmlrpc-epi/lib/libxmlrpc.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JPEGlib ==&lt;br /&gt;
* Download &amp;amp; extract [http://www.ijg.org/ jpeglib]. You will minimally need jpegsrc.v6b.tar.gz.&lt;br /&gt;
* Build and install the library:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd jpeg-6b&lt;br /&gt;
$ ./configure&lt;br /&gt;
$ make&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ mkdir linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jconfig.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jerror.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jinclude.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jmorecfg.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jpeglib.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/libjpeg.a linden/libraries/$PLATFORM/lib_debug/liblljpeg.a&lt;br /&gt;
$ cp lindenlib/jpeg-6b/libjpeg.a linden/libraries/$PLATFORM/lib_release/liblljpeg.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note that the library has a different name in the libraries directory.&lt;br /&gt;
* If you plan to use the header file from windows, you will need to [[patch jpeglib]] using any terminal.&lt;br /&gt;
&lt;br /&gt;
== OpenJPEG ==&lt;br /&gt;
* Download and extract version 1.1.1 [http://www.openjpeg.org/index.php?menu=download openjpeg] source.&lt;br /&gt;
* Copy the [[make openjpeg|linden openjpeg makefiles]] into the openjpeg source top level directory. We do this to maintain 10.3.9 compatibility.&lt;br /&gt;
* Build and install the library&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ mkdir ../../linden/libraries/include/openjpeg&lt;br /&gt;
$ cp -p libopenjpeg/openjpeg.h ../../linden/libraries/include/openjpeg&lt;br /&gt;
$ make -f Makefile-i386.ppc libopenjpeg.a&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/ppc-darwin/lib_debug&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/ppc-darwin/lib_release&lt;br /&gt;
$ make -f Makefile-i386.ppc clean&lt;br /&gt;
$ make -f Makefile-i386.osx libopenjpeg.a&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/i386-darwin/lib_debug&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/i386-darwin/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 02-26-2007, another set of patches is required to Second Life to make it usable, that is fix a crash, make it look good, and speed it up.  See https://jira.secondlife.com:443/browse/VWR-123&lt;br /&gt;
&lt;br /&gt;
== Freetype ==&lt;br /&gt;
* Download and extract [http://freetype.sourceforge.net/download.html#stable FreeType].&lt;br /&gt;
* Build and install the FreeType library:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd freetype-2.2.1&lt;br /&gt;
$ ./configure --prefix=/tmp/freetype&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/freetype/include/freetype2/freetype linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/freetype/include/freetype2/ft2build.h linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/freetype/lib/libfreetype.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp -p /tmp/freetype/lib/libfreetype.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbis &amp;amp; Ogg ==&lt;br /&gt;
* Download &amp;amp; extract [http://www.xiph.org/downloads/ libvorbis].&lt;br /&gt;
* Download &amp;amp; extract [http://www.xiph.org/downloads/ libogg].&lt;br /&gt;
* Build &amp;amp; copy libogg first:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd libogg-1.1.3&lt;br /&gt;
$ ./configure --prefix=/tmp/ogg&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/ogg/include/ogg linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/ogg/lib/libogg.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
$ cp -p /tmp/ogg/lib/libogg.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Build &amp;amp; copy libvorbis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd libvorbis-1.1.2&lt;br /&gt;
$ ./configure --prefix=/tmp/vorbis --with-ogg=/tmp/ogg&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ ../..&lt;br /&gt;
$ cp -pR /tmp/vorbis/include/vorbis linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/vorbis/lib/libvorbis*.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
$ cp -p /tmp/vorbis/lib/libvorbis*.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CURL ==&lt;br /&gt;
* Make a sub-directory in lindenlib called curl; cd into it&lt;br /&gt;
* Download [http://curl.haxx.se/download.html  libcurl]; untar; rename the expanded tree src-curl&lt;br /&gt;
* Download [http://daniel.haxx.se/projects/c-ares/ c-ares]; untar; rename the expanded tree src-c-ares&lt;br /&gt;
* Run the following commands (you may find it convenient to put this in a shell script file):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
BUILD_C_ARES=$PWD/build-c-ares&lt;br /&gt;
BUILD_CURL=$PWD/build-curl&lt;br /&gt;
&lt;br /&gt;
mkdir build-c-ares || true&lt;br /&gt;
mkdir build-curl || true&lt;br /&gt;
&lt;br /&gt;
case `arch` in&lt;br /&gt;
    (i386)  export CFLAGS=&amp;quot;-O2 -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk&amp;quot;;;&lt;br /&gt;
    (ppc)   export CFLAGS=&amp;quot;-O2 -g -isysroot /Developer/SDKs/MacOSX10.3.9.sdk&amp;quot;;;&lt;br /&gt;
    (*)     echo &amp;quot;unknown architecture&amp;quot;; exit 1;;&lt;br /&gt;
esac&lt;br /&gt;
    &lt;br /&gt;
#export CFLAGS=&amp;quot;$CFLAGS -arch i386 -arch ppc&amp;quot;&lt;br /&gt;
#export LDFLAGS=&amp;quot;-arch i386 -arch ppc&amp;quot;&lt;br /&gt;
	# this won&#039;t work until we abandon 10.3.9&lt;br /&gt;
&lt;br /&gt;
cd src-c-ares&lt;br /&gt;
./configure --prefix=$BUILD_C_ARES --disable-dependency-tracking&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
cd src-curl&lt;br /&gt;
./configure --prefix=$BUILD_CURL \&lt;br /&gt;
    --disable-dependency-tracking \&lt;br /&gt;
	--disable-shared \&lt;br /&gt;
	--enable-http \&lt;br /&gt;
	--disable-ftp \&lt;br /&gt;
	--disable-file \&lt;br /&gt;
	--disable-ldap \&lt;br /&gt;
	--disable-dict \&lt;br /&gt;
	--disable-telnet \&lt;br /&gt;
	--disable-tftp \&lt;br /&gt;
	--disable-manual \&lt;br /&gt;
	--disable-ipv6 \&lt;br /&gt;
	--enable-nonblocking \&lt;br /&gt;
	--enable-ares=$BUILD_C_ARES \&lt;br /&gt;
	--enable-verbose \&lt;br /&gt;
	--disable-cookies \&lt;br /&gt;
	--without-libidn \&lt;br /&gt;
	--with-ca-bundle=`curl-config --ca`&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
make install -k&lt;br /&gt;
	# because you won&#039;t be able to overwrite the ca-bundle in your system&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
cp $BUILD_C_ARES/lib/libcares.a .&lt;br /&gt;
cp $BUILD_CURL/lib/libcurl.a libllcurl.a&lt;br /&gt;
    # note the name change&lt;br /&gt;
&lt;br /&gt;
tar cvzf libs-curl-`arch`.tgz libcares.a libllcurl.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This builds a tar file called libs-curl-&amp;lt;arch&amp;gt;.tgz, where &amp;lt;arch&amp;gt; is either i386 or ppc&lt;br /&gt;
* Expand this tar file into linden/libraries/&amp;lt;arch&amp;gt;-darwin/lib_release and linden/libraries/&amp;lt;arch&amp;gt;-darwin/lib_debug&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TUT ==&lt;br /&gt;
* Download [http://tut-framework.sourceforge.net/download/ tut] into lindenlib&lt;br /&gt;
* Move it into a sub-directory, extract, and copy the headers&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir tut&lt;br /&gt;
$ mv TUT-2006-11-04.tar.gz tut&lt;br /&gt;
$ cd tut&lt;br /&gt;
$ tar xvzf TUT-2006-11-04.tar.gz&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ mkdir linden/libraries/include/tut&lt;br /&gt;
$ cp -p lindenlib/tut/tut.h lindenlib/tut/tut_reporter.h lindenlib/tut/tut_restartable.h linden/libraries/include/tut&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mozilla ==&lt;br /&gt;
&lt;br /&gt;
Download the llmozlib source tarball and extract it (it doesn&#039;t need to be in any particular place relative to the linden tree)&lt;br /&gt;
&lt;br /&gt;
Note: The llmozlib tarball is not currently linked from the main source download page.  There&#039;s a link to it on the [http://secondlife.com/developers/opensource/wiki/Source_archive Source archive] page.&lt;br /&gt;
&lt;br /&gt;
=== Build libxul from the mozilla source ===&lt;br /&gt;
&lt;br /&gt;
If you have a multiprocessor machine, you may wish to enable parallel make for the mozilla build by adding the following line to  llmozlib/build_mozilla/mac-universal-libxul-bits/mozconfig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_add_options MOZ_MAKE_FLAGS=-j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I use -j4 on a 4-core machine.  Adjust to taste.&lt;br /&gt;
&lt;br /&gt;
Run the shell script that checks out the mozilla source, applies a few patches, configures and builds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib/build_mozilla&lt;br /&gt;
$ ./mac-checkout_patch_build.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll have to answer a CVS password prompt immediately after starting the script (use password &amp;quot;anonymous&amp;quot;), but the rest should complete without any intevention.&lt;br /&gt;
&lt;br /&gt;
This will take some time.  I usually go for a cup of coffee or a nice dinner.&lt;br /&gt;
&lt;br /&gt;
If the build completes without errors, you&#039;ve got the hard part done.&lt;br /&gt;
&lt;br /&gt;
=== Copy headers and libraries needed to build  llmozlib ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib&lt;br /&gt;
$ ./copy_products_mac.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This copies certain of the headers and libraries created by the mozilla build into llmozlib/libraries.  It also pulls the files needed by libxul at runtime into a .tgz file in the llmozlib directory.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve done this, you can safely delete the intermediate results created by step 1.  These are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llmozlib/build_mozilla/mozilla/&lt;br /&gt;
llmozlib/build_mozilla/objdir-mozilla-universal/&lt;br /&gt;
llmozlib/build_mozilla/cvsco.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build llmozlib ===&lt;br /&gt;
&lt;br /&gt;
Open llmozlib/llmozlib.xcodeproj and build the &amp;quot;Release&amp;quot; configuration of the &amp;quot;llmozlib&amp;quot; target.  &lt;br /&gt;
&lt;br /&gt;
There&#039;s a problem which sometimes causes XCode to not be able to find some of the mozilla headers the first time you build after a clean checkout or download of llmozlib.  Close the project, re-open it, and build again and it should work.&lt;br /&gt;
&lt;br /&gt;
Alternately, if you&#039;d rather stay on the command line, you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib&lt;br /&gt;
$ xcodebuild -project llmozlib.xcodeproj -target llmozlib -configuration Release build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy build results into the linden tree ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib&lt;br /&gt;
$ ./repackage_runtime_mac.sh ../path/to/linden/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will copy the necessary libraries and runtime files to the linden source tree.&lt;br /&gt;
&lt;br /&gt;
The argument to the script should be either a relative or absolute path to the root of the tree (i.e. the directory that contains &#039;indra&#039;).&lt;br /&gt;
&lt;br /&gt;
= Building the Viewer =&lt;br /&gt;
Launch XCode, open the project file &#039;linden/indra/newview/macview.xcodeproj&#039;, set &#039;newview&#039; as the active target, select an active build configuration, and build the project.&lt;br /&gt;
&lt;br /&gt;
If you had to change gcc versions for a ppc build, restore gcc back to 4.0.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 4.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build Configurations ==&lt;br /&gt;
* &amp;lt;em&amp;gt;Development&amp;lt;/em&amp;gt;: This configuration is more suitable for debugging. The build process will create the SecondLife application targeted for your host architecture.&lt;br /&gt;
* &amp;lt;em&amp;gt;Deployment&amp;lt;/em&amp;gt;: This configuration is faster than the development version at the cost of some ability to debug. The build process will create the SecondLife application targeted for your host architecture.&lt;br /&gt;
* &amp;lt;em&amp;gt;Universal&amp;lt;/em&amp;gt;: This configuration is the same as the Deployment target except that all supported architectures - ppc and i386 - are built.&lt;br /&gt;
&lt;br /&gt;
= Building the Unit Tests =&lt;br /&gt;
From XCode, open the project &#039;linden/indra/test/MacTester.xcodeproj&#039;, set &#039;MacTester&#039; as the active target, and build.&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_(Mac_OS_X)&amp;diff=10575</id>
		<title>Compiling the viewer (Mac OS X)</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_(Mac_OS_X)&amp;diff=10575"/>
		<updated>2007-02-16T05:02:16Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: OpenJPEG patch note and fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CompileNav}}&lt;br /&gt;
&lt;br /&gt;
The following are instructions for building the Second Life viewer on Mac OS X.  For other platforms, see [[Compiling the viewer]]&lt;br /&gt;
&lt;br /&gt;
= Development Environment =&lt;br /&gt;
We use XCode 2.4.1 for building on Macintosh computers. For simplicity, we suggest installing everything from the mpkg.&lt;br /&gt;
&lt;br /&gt;
You will need to install the proprietary libraries as well as all of the other third party libraries below. For convenience, we package up the libraries we are allowed to distribute so you can either download that package and unpack it into your development working directory or install all of the libraries from scratch.&lt;br /&gt;
&lt;br /&gt;
= Installing Proprietary Libraries =&lt;br /&gt;
&lt;br /&gt;
We do not distribute these libraries, so you will need to fetch and install these even if you download the libraries packages.  (This is due to licensing restrictions.  Don&#039;t ask, we already did, and can&#039;t get permission.  So you do have to get them yourself.)&lt;br /&gt;
&lt;br /&gt;
== Fmod ==&lt;br /&gt;
* Download &amp;amp; extract [http://www.fmod.org/ifmoddownload.html fmod 3.75 programmers api for macintosh].&lt;br /&gt;
* (You do *not* want the latest version, instead scroll down to v3.75)&lt;br /&gt;
* Copy the extracted files. &amp;lt;em&amp;gt;Note the name change for the x86 library.&amp;lt;/em&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cp -p fmodapi375mac/api/inc/*.h linden/libraries/include&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmod.a linden/libraries/powerpc-darwin/lib_debug&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmod.a linden/libraries/powerpc-darwin/lib_release&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmodx86.a linden/libraries/i386-darwin/lib_debug&lt;br /&gt;
$ cp -p fmodapi375mac/api/lib/libfmodx86.a linden/libraries/i386-darwin/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installing Libraries =&lt;br /&gt;
We supply a package of the required libraries and binaries on the [[compiling the viewer]] page.&lt;br /&gt;
&lt;br /&gt;
From the directory where you downloaded the tarballs:&lt;br /&gt;
&lt;br /&gt;
 tar xvfz sl-source.tar.gz&lt;br /&gt;
 tar xvfz sl-libraries.tar.gz&lt;br /&gt;
&lt;br /&gt;
Your filenames may vary. If you open them with the double click file extract, remember that dragging folders on top of each other will overwrite the original contents, not merge them as in windows.&lt;br /&gt;
&lt;br /&gt;
= Installing Libraries From Scratch =&lt;br /&gt;
We recommend creating a separate third party library directory named &#039;lindenlib&#039; on the same level as the &#039;linden&#039; tree in your directory structure. Download, unpack, and build from there and copy the files specified to their final location.&lt;br /&gt;
&lt;br /&gt;
Most of the libs built here are architecture specific, so these instructions will refer to &amp;lt;em&amp;gt;$PLATFORM&amp;lt;/em&amp;gt; to denote that. You can set an environment variable to make it so copy &amp;amp; paste from these instructions will work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ PLATFORM=`uname -p`-darwin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Building the Universal target requires that you have built both the i386 and ppc libraries.  (Please see [http://developer.apple.com/technotes/tn2005/tn2137.html] for more background information.)&lt;br /&gt;
&lt;br /&gt;
Using gcc 4.0 on a ppc box when building many of these libraries will insert an undefined reference to _fprintf$LBDLStub which then fails to link later. Until we have a better solution to this issue, you will need to use an earlier version of gcc. Some of the instructions below will include a call to &amp;lt;em&amp;gt;gcc_select&amp;lt;/em&amp;gt; which is only necessary if you are building on a ppc box.&lt;br /&gt;
&lt;br /&gt;
== Boost ==&lt;br /&gt;
Download &amp;amp; extract [http://sourceforge.net/project/showfiles.php?group_id=7586&amp;amp;package_id=8041 Boost] source.&lt;br /&gt;
The viewer does not link to the boost libraries, so much of this is not necessary. You can simply copy the header files if you have problems getting the boost package to build.&lt;br /&gt;
=== Copy the Headers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cp -r lindenlib/boost-1.33.0/boost linden/libraries/include/boost&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Build Boost.Jam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd boost-1.33.0/tools/build/jam_src&lt;br /&gt;
$ ./build.sh&lt;br /&gt;
$ if [ $PLATFORM = &amp;quot;i386-darwin&amp;quot; ] then PLATDIR=bin.macosxx86; else PLATDIR=bin.macosxppc; fi&lt;br /&gt;
$ cp $PLATDIR/bjam ../../..&lt;br /&gt;
$ unset PLATDIR&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Build Boost ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd boost-1.33.0&lt;br /&gt;
$ export PYTHON_ROOT=/System/Library/Frameworks/Python.framework/Versions/2.3/&lt;br /&gt;
$ export PYTHON_VERSION=2.3&lt;br /&gt;
$ ./bjam stage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy the Libraries ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 4.0&lt;br /&gt;
$ cd boost-1.33.0&lt;br /&gt;
$ export PLATFORM=`uname -p`-darwin&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc-d.a \ &lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_python-gcc.a&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc-mt.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_python-gcc-mt-d.a \&lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_python-gcc-mt.a&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc-d.a \&lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_regex-gcc.a&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc-mt.a \&lt;br /&gt;
libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp src/stage/lib/libboost_regex-gcc-mt-d.a \&lt;br /&gt;
libraries/$PLATFORM/lib_debug/libboost_regex-gcc-mt.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Apache Portable Runtime ==&lt;br /&gt;
* Download &amp;amp; extract [http://apr.apache.org/download.cgi apr and apr-util].&lt;br /&gt;
* Build and install the headers and lib files using a terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd lindenlib/apr-1.2.8&lt;br /&gt;
$ ./configure --disable-shared --disable-lfs --prefix=/tmp/apr&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/apr/include/apr-1 linden/libraries/$PLATFORM/include&lt;br /&gt;
$ cp /tmp/apr/lib/libapr-1.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp /tmp/apr/lib/libapr-1.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&lt;br /&gt;
$ cd lindenlib/apr-util-1.2.8&lt;br /&gt;
$ ./configure --disable-shared --disable-lfs --with-apr=/tmp/apr --prefix=/tmp/apr-util&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/apr-util/include/apr-1 linden/libraries/$PLATFORM/include&lt;br /&gt;
$ cp /tmp/apr-util/lib/*.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp /tmp/apr-util/lib/*.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
$ sudo gcc_select 4.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== zlib ==&lt;br /&gt;
* Download and extract [http://www.zlib.net/ zlib].&lt;br /&gt;
* Build and install it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd zlib-1.2.3&lt;br /&gt;
$ ./configure --prefix=/tmp/zlib&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -Rp /tmp/zlib/include linden/libraries/include/zlib&lt;br /&gt;
$ cp -p /tmp/zlib/lib/libz.a linden/libraries/$PLATFORM/lib_debug/libllz.a&lt;br /&gt;
$ cp -p /tmp/zlib/lib/libz.a linden/libraries/$PLATFORM/lib_release/libllz.a&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Note that the library has a different name in the libraries directory.&lt;br /&gt;
&lt;br /&gt;
== Expat ==&lt;br /&gt;
* Download an extract the 1.95.8 version of [http://sourceforge.net/projects/expat/ expat].&lt;br /&gt;
* Build and install the library&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd expat-1.95.8&lt;br /&gt;
$ ./configure --prefix=/tmp/expat&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/expat/include linden/libraries/include/expat&lt;br /&gt;
$ cp -p /tmp/expat/lib/libexpat.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp -p /tmp/expat/lib/libexpat.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XMLRPC-epi ==&lt;br /&gt;
* Download a source package for [http://xmlrpc-epi.sourceforge.net/ xmlrpc-epi].&lt;br /&gt;
* Apply patch 1 and 2 from the instructions in [[patch xmlrpc-epi]].&lt;br /&gt;
* Configure the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd xmlrpc-epi-0.51&lt;br /&gt;
$ ./configure --disable-shared --prefix=/tmp/xmlrpc-epi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Apply patch 3 from the instructions in [[patch xmlrpc-epi]].&lt;br /&gt;
* Finish the removal of expat, build, and install&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ rm -rf expat&lt;br /&gt;
$ mkdir expat&lt;br /&gt;
$ cp /tmp/expat/include/* expat&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/xmlrpc-epi/include linden/libraries/include/xmlrpc-epi&lt;br /&gt;
$ cp -p /tmp/xmlrpc-epi/lib/libxmlrpc.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp -p /tmp/xmlrpc-epi/lib/libxmlrpc.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JPEGlib ==&lt;br /&gt;
* Download &amp;amp; extract [http://www.ijg.org/ jpeglib]. You will minimally need jpegsrc.v6b.tar.gz.&lt;br /&gt;
* Build and install the library:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd jpeg-6b&lt;br /&gt;
$ ./configure&lt;br /&gt;
$ make&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ mkdir linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jconfig.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jerror.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jinclude.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jmorecfg.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/jpeglib.h linden/libraries/include/jpeglib&lt;br /&gt;
$ cp lindenlib/jpeg-6b/libjpeg.a linden/libraries/$PLATFORM/lib_debug/liblljpeg.a&lt;br /&gt;
$ cp lindenlib/jpeg-6b/libjpeg.a linden/libraries/$PLATFORM/lib_release/liblljpeg.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note that the library has a different name in the libraries directory.&lt;br /&gt;
* If you plan to use the header file from windows, you will need to [[patch jpeglib]] using any terminal.&lt;br /&gt;
&lt;br /&gt;
== OpenJPEG ==&lt;br /&gt;
* Download and extract version 1.0 [http://www.openjpeg.org/index.php?menu=download openjpeg] source.&lt;br /&gt;
* Copy the [[make openjpeg|linden openjpeg makefiles]] into the openjpeg source top level directory. We do this to maintain 10.3.9 compatibility.&lt;br /&gt;
* Build and install the library&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ mkdir ../../linden/libraries/include/openjpeg&lt;br /&gt;
$ cp -p libopenjpeg/openjpeg.h ../../linden/libraries/include/openjpeg&lt;br /&gt;
$ make -f Makefile-i386.ppc libopenjpeg.a&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/ppc-darwin/lib_debug&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/ppc-darwin/lib_release&lt;br /&gt;
$ make -f Makefile-i386.ppc clean&lt;br /&gt;
$ make -f Makefile-i386.osx libopenjpeg.a&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/i386-darwin/lib_debug&lt;br /&gt;
$ cp libopenjpeg.a ../../linden/libraries/i386-darwin/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 02-15-2007, another set of patches is required to both OpenJPEG and Second Life to make it usable, that is fix a crash, make it look good, and speed it up.  https://jira.secondlife.com:443/browse/VWR-123&lt;br /&gt;
&lt;br /&gt;
== Freetype ==&lt;br /&gt;
* Download and extract [http://freetype.sourceforge.net/download.html#stable FreeType].&lt;br /&gt;
* Build and install the FreeType library:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd freetype-2.2.1&lt;br /&gt;
$ ./configure --prefix=/tmp/freetype&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/freetype/include/freetype2/freetype linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/freetype/include/freetype2/ft2build.h linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/freetype/lib/libfreetype.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
$ cp -p /tmp/freetype/lib/libfreetype.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vorbis &amp;amp; Ogg ==&lt;br /&gt;
* Download &amp;amp; extract [http://www.xiph.org/downloads/ libvorbis].&lt;br /&gt;
* Download &amp;amp; extract [http://www.xiph.org/downloads/ libogg].&lt;br /&gt;
* Build &amp;amp; copy libogg first:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd libogg-1.1.3&lt;br /&gt;
$ ./configure --prefix=/tmp/ogg&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ cp -pR /tmp/ogg/include/ogg linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/ogg/lib/libogg.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
$ cp -p /tmp/ogg/lib/libogg.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Build &amp;amp; copy libvorbis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 3.3&lt;br /&gt;
$ cd libvorbis-1.1.2&lt;br /&gt;
$ ./configure --prefix=/tmp/vorbis --with-ogg=/tmp/ogg&lt;br /&gt;
$ make&lt;br /&gt;
$ make install&lt;br /&gt;
$ ../..&lt;br /&gt;
$ cp -pR /tmp/vorbis/include/vorbis linden/libraries/include&lt;br /&gt;
$ cp -p /tmp/vorbis/lib/libvorbis*.a linden/libraries/$PLATFORM/lib_debug&lt;br /&gt;
$ cp -p /tmp/vorbis/lib/libvorbis*.a linden/libraries/$PLATFORM/lib_release&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CURL ==&lt;br /&gt;
* Make a sub-directory in lindenlib called curl; cd into it&lt;br /&gt;
* Download [http://curl.haxx.se/download.html  libcurl]; untar; rename the expanded tree src-curl&lt;br /&gt;
* Download [http://daniel.haxx.se/projects/c-ares/ c-ares]; untar; rename the expanded tree src-c-ares&lt;br /&gt;
* Run the following commands (you may find it convenient to put this in a shell script file):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
BUILD_C_ARES=$PWD/build-c-ares&lt;br /&gt;
BUILD_CURL=$PWD/build-curl&lt;br /&gt;
&lt;br /&gt;
mkdir build-c-ares || true&lt;br /&gt;
mkdir build-curl || true&lt;br /&gt;
&lt;br /&gt;
case `arch` in&lt;br /&gt;
    (i386)  export CFLAGS=&amp;quot;-O2 -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk&amp;quot;;;&lt;br /&gt;
    (ppc)   export CFLAGS=&amp;quot;-O2 -g -isysroot /Developer/SDKs/MacOSX10.3.9.sdk&amp;quot;;;&lt;br /&gt;
    (*)     echo &amp;quot;unknown architecture&amp;quot;; exit 1;;&lt;br /&gt;
esac&lt;br /&gt;
    &lt;br /&gt;
#export CFLAGS=&amp;quot;$CFLAGS -arch i386 -arch ppc&amp;quot;&lt;br /&gt;
#export LDFLAGS=&amp;quot;-arch i386 -arch ppc&amp;quot;&lt;br /&gt;
	# this won&#039;t work until we abandon 10.3.9&lt;br /&gt;
&lt;br /&gt;
cd src-c-ares&lt;br /&gt;
./configure --prefix=$BUILD_C_ARES --disable-dependency-tracking&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
cd src-curl&lt;br /&gt;
./configure --prefix=$BUILD_CURL \&lt;br /&gt;
    --disable-dependency-tracking \&lt;br /&gt;
	--disable-shared \&lt;br /&gt;
	--enable-http \&lt;br /&gt;
	--disable-ftp \&lt;br /&gt;
	--disable-file \&lt;br /&gt;
	--disable-ldap \&lt;br /&gt;
	--disable-dict \&lt;br /&gt;
	--disable-telnet \&lt;br /&gt;
	--disable-tftp \&lt;br /&gt;
	--disable-manual \&lt;br /&gt;
	--disable-ipv6 \&lt;br /&gt;
	--enable-nonblocking \&lt;br /&gt;
	--enable-ares=$BUILD_C_ARES \&lt;br /&gt;
	--enable-verbose \&lt;br /&gt;
	--disable-cookies \&lt;br /&gt;
	--without-libidn \&lt;br /&gt;
	--with-ca-bundle=`curl-config --ca`&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
make install -k&lt;br /&gt;
	# because you won&#039;t be able to overwrite the ca-bundle in your system&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
cp $BUILD_C_ARES/lib/libcares.a .&lt;br /&gt;
cp $BUILD_CURL/lib/libcurl.a libllcurl.a&lt;br /&gt;
    # note the name change&lt;br /&gt;
&lt;br /&gt;
tar cvzf libs-curl-`arch`.tgz libcares.a libllcurl.a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This builds a tar file called libs-curl-&amp;lt;arch&amp;gt;.tgz, where &amp;lt;arch&amp;gt; is either i386 or ppc&lt;br /&gt;
* Expand this tar file into linden/libraries/&amp;lt;arch&amp;gt;-darwin/lib_release and linden/libraries/&amp;lt;arch&amp;gt;-darwin/lib_debug&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TUT ==&lt;br /&gt;
* Download [http://tut-framework.sourceforge.net/download/ tut] into lindenlib&lt;br /&gt;
* Move it into a sub-directory, extract, and copy the headers&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir tut&lt;br /&gt;
$ mv TUT-2006-11-04.tar.gz tut&lt;br /&gt;
$ cd tut&lt;br /&gt;
$ tar xvzf TUT-2006-11-04.tar.gz&lt;br /&gt;
$ cd ../..&lt;br /&gt;
$ mkdir linden/libraries/include/tut&lt;br /&gt;
$ cp -p lindenlib/tut/tut.h lindenlib/tut/tut_reporter.h lindenlib/tut/tut_restartable.h linden/libraries/include/tut&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mozilla ==&lt;br /&gt;
&lt;br /&gt;
Download the llmozlib source tarball and extract it (it doesn&#039;t need to be in any particular place relative to the linden tree)&lt;br /&gt;
&lt;br /&gt;
Note: The llmozlib tarball is not currently linked from the main source download page.  There&#039;s a link to it on the [http://secondlife.com/developers/opensource/wiki/Source_archive Source archive] page.&lt;br /&gt;
&lt;br /&gt;
=== Build libxul from the mozilla source ===&lt;br /&gt;
&lt;br /&gt;
If you have a multiprocessor machine, you may wish to enable parallel make for the mozilla build by adding the following line to  llmozlib/build_mozilla/mac-universal-libxul-bits/mozconfig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_add_options MOZ_MAKE_FLAGS=-j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I use -j4 on a 4-core machine.  Adjust to taste.&lt;br /&gt;
&lt;br /&gt;
Run the shell script that checks out the mozilla source, applies a few patches, configures and builds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib/build_mozilla&lt;br /&gt;
$ ./mac-checkout_patch_build.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll have to answer a CVS password prompt immediately after starting the script (use password &amp;quot;anonymous&amp;quot;), but the rest should complete without any intevention.&lt;br /&gt;
&lt;br /&gt;
This will take some time.  I usually go for a cup of coffee or a nice dinner.&lt;br /&gt;
&lt;br /&gt;
If the build completes without errors, you&#039;ve got the hard part done.&lt;br /&gt;
&lt;br /&gt;
=== Copy headers and libraries needed to build  llmozlib ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib&lt;br /&gt;
$ ./copy_products_mac.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This copies certain of the headers and libraries created by the mozilla build into llmozlib/libraries.  It also pulls the files needed by libxul at runtime into a .tgz file in the llmozlib directory.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve done this, you can safely delete the intermediate results created by step 1.  These are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llmozlib/build_mozilla/mozilla/&lt;br /&gt;
llmozlib/build_mozilla/objdir-mozilla-universal/&lt;br /&gt;
llmozlib/build_mozilla/cvsco.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build llmozlib ===&lt;br /&gt;
&lt;br /&gt;
Open llmozlib/llmozlib.xcodeproj and build the &amp;quot;Release&amp;quot; configuration of the &amp;quot;llmozlib&amp;quot; target.  &lt;br /&gt;
&lt;br /&gt;
There&#039;s a problem which sometimes causes XCode to not be able to find some of the mozilla headers the first time you build after a clean checkout or download of llmozlib.  Close the project, re-open it, and build again and it should work.&lt;br /&gt;
&lt;br /&gt;
Alternately, if you&#039;d rather stay on the command line, you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib&lt;br /&gt;
$ xcodebuild -project llmozlib.xcodeproj -target llmozlib -configuration Release build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy build results into the linden tree ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd llmozlib&lt;br /&gt;
$ ./repackage_runtime_mac.sh ../path/to/linden/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will copy the necessary libraries and runtime files to the linden source tree.&lt;br /&gt;
&lt;br /&gt;
The argument to the script should be either a relative or absolute path to the root of the tree (i.e. the directory that contains &#039;indra&#039;).&lt;br /&gt;
&lt;br /&gt;
= Building the Viewer =&lt;br /&gt;
Launch XCode, open the project file &#039;linden/indra/newview/macview.xcodeproj&#039;, set &#039;newview&#039; as the active target, select an active build configuration, and build the project.&lt;br /&gt;
&lt;br /&gt;
If you had to change gcc versions for a ppc build, restore gcc back to 4.0.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo gcc_select 4.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build Configurations ==&lt;br /&gt;
* &amp;lt;em&amp;gt;Development&amp;lt;/em&amp;gt;: This configuration is more suitable for debugging. The build process will create the SecondLife application targeted for your host architecture.&lt;br /&gt;
* &amp;lt;em&amp;gt;Deployment&amp;lt;/em&amp;gt;: This configuration is faster than the development version at the cost of some ability to debug. The build process will create the SecondLife application targeted for your host architecture.&lt;br /&gt;
* &amp;lt;em&amp;gt;Universal&amp;lt;/em&amp;gt;: This configuration is the same as the Deployment target except that all supported architectures - ppc and i386 - are built.&lt;br /&gt;
&lt;br /&gt;
= Building the Unit Tests =&lt;br /&gt;
From XCode, open the project &#039;linden/indra/test/MacTester.xcodeproj&#039;, set &#039;MacTester&#039; as the active target, and build.&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Build_the_Viewer_on_Linux&amp;diff=10574</id>
		<title>Build the Viewer on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Build_the_Viewer_on_Linux&amp;diff=10574"/>
		<updated>2007-02-16T04:52:18Z</updated>

		<summary type="html">&lt;p&gt;SpacedOut Frye: Expand on OpenJPEG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CompileNav}}&lt;br /&gt;
&lt;br /&gt;
The following are instructions for building the Second Life viewer on linux. This process has only been used on [http://www.debian.org/ debian] and debian based systems like [http://www.ubuntu.com/ ubuntu]. For other platforms, see [[Get source and compile]].&lt;br /&gt;
&lt;br /&gt;
== Installing the required dependencies ==&lt;br /&gt;
&lt;br /&gt;
The Second Life Viewer has a number of compile/link dependencies on external libraries which need to be put in place first - to help you, the source download page contains a link to a &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; package which you unpack over the source tree to fill most of the dependancies (and thus avoid most of the fiddly work described on this page).  The Second Life Viewer is not a trivial build, and experience with building large software packages will help you greatly - but don&#039;t be daunted, it should be simple once the dependencies are in the right place the first time.&lt;br /&gt;
&lt;br /&gt;
Paths and package names given here are based on Ubuntu 6.06 and may vary according to your Linux distribution.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
* You will need the &amp;lt;b&amp;gt;SCons&amp;lt;/b&amp;gt; build tool [package: scons]&lt;br /&gt;
* You should use the &amp;lt;b&amp;gt;GCC 3.4&amp;lt;/b&amp;gt; C/C++ compiler [package: g++-3.4]; other GCC versions are not well-tested; GCC 4.x will NOT currently build the viewer without some code adjustments.&lt;br /&gt;
&lt;br /&gt;
* fetch and unpack &amp;lt;b&amp;gt;FMOD 3.75&amp;lt;/b&amp;gt; &amp;lt;http://www.fmod.org/&amp;gt;&lt;br /&gt;
** FMOD provides audio output, but (although &#039;free&#039; in some senses) is not itself open-source.  &amp;lt;b&amp;gt;If&amp;lt;/b&amp;gt; you wish to avoid FMOD, thus disabling audio, you may make these changes:&lt;br /&gt;
*** Remove the reference to &#039;&amp;lt;b&amp;gt;fmod-3.75&amp;lt;/b&amp;gt;&#039; in indra/SConstruct&lt;br /&gt;
*** Replace &#039;&amp;lt;b&amp;gt;-DLL_SDL=1&amp;lt;/b&amp;gt;&#039; with &#039;&amp;lt;b&amp;gt;-DLL_SDL=1 -DLL_FMOD=0&amp;lt;/b&amp;gt;&#039; in indra/SConstruct&lt;br /&gt;
*** Comment-out the libfmod line in indra/newview/linux_tools/client-manifest-i686&lt;br /&gt;
&lt;br /&gt;
* You will need the &amp;lt;b&amp;gt;Curl&amp;lt;/b&amp;gt; library [package: libcurl-dev] - at least version 7.15.4 is recommended, 7.16.x is ideal.&lt;br /&gt;
** If you are compiling your own version of &amp;lt;b&amp;gt;Curl&amp;lt;/b&amp;gt;, then you should consider configuring it to use the &amp;lt;b&amp;gt;c-ares&amp;lt;/b&amp;gt; library so that DNS lookups will be asynchronous.&lt;br /&gt;
&lt;br /&gt;
* You will need some development headers for OpenGL and X11: gl.h, glext.h, glu.h, Xlib.h, and Xutil.h [packages: mesa-common-dev, libglu1-mesa-dev, libx11-dev]&lt;br /&gt;
&lt;br /&gt;
* You will need &amp;lt;b&amp;gt;GTK 2.x development headers&amp;lt;/b&amp;gt; [libgtk2.0-dev]&lt;br /&gt;
&lt;br /&gt;
* You will need &amp;lt;b&amp;gt;yacc&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;lex&amp;lt;/b&amp;gt; [suggest packages: bison, flex]&lt;br /&gt;
&lt;br /&gt;
* You may &amp;lt;b&amp;gt;either&amp;lt;/b&amp;gt; use our easy &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; bundle of pre-built libraries and headers unpacked into the Second Life Viewer source tree, &amp;lt;b&amp;gt;or&amp;lt;/b&amp;gt; (for example if you are porting to a new architecture or wish to make a package tailored to your Linux distribution&#039;s own libraries) you will have to install the following additional dependencies:&lt;br /&gt;
** &amp;lt;b&amp;gt;boost&amp;lt;/b&amp;gt; [libboost-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;boost-regex&amp;lt;/b&amp;gt; [libboost-regex-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;apr-1&amp;lt;/b&amp;gt; [libapr1.0-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;aprutil-1&amp;lt;/b&amp;gt; [libaprutil1.0-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;xmlrpc-epi 0.51&amp;lt;/b&amp;gt; &amp;lt;http://xmlrpc-epi.sourceforge.net/&amp;gt;&lt;br /&gt;
*** note: not xmlrpc-c (xmlrpc-c has a library and headers with the same name but is not compatible)&lt;br /&gt;
*** Apply patches from the instructions in [[patch xmlrpc-epi]].&lt;br /&gt;
*** Build with ./configure --prefix=/usr --includedir=/usr/include/xmlrpc-epi  --[[User:Caelum Lewellen|Caelum Lewellen]] 15:47, 11 January 2007 (PST)&lt;br /&gt;
** &amp;lt;b&amp;gt;jpeglib&amp;lt;/b&amp;gt; [libjpeg62-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;SDL&amp;lt;/b&amp;gt; [libsdl1.2-dev]&lt;br /&gt;
** &amp;lt;b&amp;gt;Vorbis&amp;lt;/b&amp;gt; [libvorbis-dev]&lt;br /&gt;
** build &amp;lt;b&amp;gt;ELFIO&amp;lt;/b&amp;gt; &amp;lt;http://sourceforge.net/projects/elfio/&amp;gt;&lt;br /&gt;
*** This wants to build a static library by default.  Afterwards, to create a dynamic libelfio.so: &amp;lt;code&amp;gt;cd ELFIO &amp;amp;&amp;amp; g++-3.4 -shared *.o -o libelfio.so&amp;lt;/code&amp;gt;&lt;br /&gt;
** build &amp;lt;b&amp;gt;OpenJPEG&amp;lt;/b&amp;gt; &amp;lt;http://www.openjpeg.org/&amp;gt;&lt;br /&gt;
*** note: OpenJPEG greater than 1.1 is required which hash the macro OPJ_PATH_LEN.  Version 1.1 and before would crash with a divide by zero with Second Life.  Get the source with svn until 1.2 comes out.&lt;br /&gt;
*** 02-15-2007, another set of patches is required to both OpenJPEG and Second Life to make it usable, that is fix a crash, make it look good, and speed it up.  https://jira.secondlife.com:443/browse/VWR-123&lt;br /&gt;
** &amp;lt;b&amp;gt;expat&amp;lt;/b&amp;gt; [libexpat1-dev]&lt;br /&gt;
&lt;br /&gt;
=== Copy headers and libraries into the source tree ===&lt;br /&gt;
&lt;br /&gt;
Here is a guide to the sequence of shell commands needed to copy the required headers and libraries into the Second Life Viewer source tree for building.  Actual paths to system headers may vary according to Linux distribution.&lt;br /&gt;
* ${SLSRC} refers to the top-level directory of the Second Life Viewer source tree.&lt;br /&gt;
* ${FMOD} refers to the top-level directory into which you unpacked FMOD 3.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cp ${FMOD}/api/inc/* ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp ${FMOD}/api/libfmod-3.75.so ${SLSRC}/libraries/i686-linux/lib_release_client/&lt;br /&gt;
&lt;br /&gt;
 cp -a /usr/include/atk-1.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp -a /usr/include/gtk-2.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp -a /usr/lib/gtk-2.0/include/* ${SLSRC}/libraries/i686-linux/include/gtk-2.0/&lt;br /&gt;
 cp -a /usr/include/glib-2.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
 cp -a /usr/lib/glib-2.0/include/* ${SLSRC}/libraries/i686-linux/include/glib-2.0/&lt;br /&gt;
 cp -a /usr/include/pango-1.0 ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
&lt;br /&gt;
if your GTK is fairly recent and thus needs Cairo:&lt;br /&gt;
 cp -a /usr/include/cairo/* ${SLSRC}/libraries/i686-linux/include/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using our easy &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; bundle then you can skip the rest of this section, &amp;lt;b&amp;gt;otherwise&amp;lt;/b&amp;gt; you will also need to perform the following:&lt;br /&gt;
* ${OPENJPEG} refers to the top-level directory of your completed OpenJPEG build.&lt;br /&gt;
* ${ELFIO} refers to the top-level directory of your completed ELFIO build.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cp -a /usr/include/apr-1.0/ ${SLSRC}/libraries/i686-linux/include/apr-1&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/expat&lt;br /&gt;
 cp -a /usr/include/expat*.h ${SLSRC}/libraries/i686-linux/include/expat/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/zlib&lt;br /&gt;
 cp -a /usr/include/zlib*.h ${SLSRC}/libraries/i686-linux/include/zlib/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/openjpeg&lt;br /&gt;
 cp ${OPENJPEG}/libopenjpeg/openjpeg.h ${SLSRC}/libraries/i686-linux/include/openjpeg/&lt;br /&gt;
 cp ${OPENJPEG}/libopenjpeg.a ${SLSRC}/libraries/i686-linux/lib_release_client/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/ELFIO&lt;br /&gt;
 cp ${ELFIO}/ELFIO/*.h ${SLSRC}/libraries/i686-linux/include/ELFIO/&lt;br /&gt;
 cp ${ELFIO}/ELFIO/libelfio.so ${SLSRC}/libraries/i686-linux/lib_release_client/&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/jpeglib&lt;br /&gt;
 cp -a /usr/include/j*.h ${SLSRC}/libraries/i686-linux/include/jpeglib/&lt;br /&gt;
 touch ${SLSRC}/libraries/i686-linux/include/jpeglib/jinclude.h&lt;br /&gt;
&lt;br /&gt;
 mkdir ${SLSRC}/libraries/i686-linux/include/llfreetype2&lt;br /&gt;
 cp -a /usr/include/freetype2/freetype/ ${SLSRC}/libraries/i686-linux/include/llfreetype2/&lt;br /&gt;
 cp -a /usr/include/ft2build.h ${SLSRC}/libraries/i686-linux/include/llfreetype2/freetype/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Compiling ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cd indra&lt;br /&gt;
 $ scons DISTCC=no BTARGET=client BUILD=release&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Expect a build time of a couple of hours.  The resulting unstripped Second Life Viewer binary is &amp;lt;b&amp;gt;newview/secondlife-i686-bin&amp;lt;/b&amp;gt;. Note that temporary object code is compiled into &amp;lt;b&amp;gt;/tmp/$USER&amp;lt;/b&amp;gt; by default (where $USER is your username) - this can be changed by prefixing the &amp;lt;b&amp;gt;scons&amp;lt;/b&amp;gt; command above with &amp;lt;b&amp;gt;TEMP_BUILD_DIR=&amp;quot;&amp;lt;i&amp;gt;[full directory path]&amp;lt;/i&amp;gt;&amp;quot;&amp;lt;/b&amp;gt;. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ TEMP_BUILD_DIR=&amp;quot;/home/fred/secondlife/temp-build&amp;quot; scons DISTCC=no BTARGET=client BUILD=release&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To build a release that has all of the shaders and optimizations enabled and resembles the official shipped Linux alpha client, use BUILD=releasefordownload&lt;br /&gt;
&lt;br /&gt;
Be sure to read the [[Common compilation problems]] page if you have problems - we&#039;ll try to keep the page up to date with known problems and solutions.&lt;br /&gt;
&lt;br /&gt;
== Testing and packaging the client ==&lt;br /&gt;
&lt;br /&gt;
=== Testing the result from inside the tree ===&lt;br /&gt;
&lt;br /&gt;
You may find it simpler to follow the instructions in the &#039;Packaging the client&#039; section below to run the client under the same conditions as an end-user would.  Otherwise:&lt;br /&gt;
&lt;br /&gt;
* Preparing to run &#039;in-tree&#039;&lt;br /&gt;
** &amp;lt;i&amp;gt;ensure that you have indra/newview/app_settings/static_*.db2&amp;lt;/i&amp;gt; - if not, you&#039;ll find it in the &#039;slviewer-artwork&#039; download (a zip file).&lt;br /&gt;
** now, from the indra directory:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cp ../scripts/messages/message_template.msg newview/app_settings/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Running it: The LD_LIBRARY_PATH stuff ensures that the binary looks for its libraries in the right places.  From the indra directory:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ ( cd newview &amp;amp;&amp;amp; LD_LIBRARY_PATH=../../libraries/i686-linux/lib_release_client:${LD_LIBRARY_PATH}:/usr/local/lib  ./secondlife-i686-bin )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** For version &#039;&#039;&#039;20070117a&#039;&#039;&#039; the binary name seems to have changed to &#039;&#039;&#039;secondlife-i686-bin-globalsyms&#039;&#039;&#039;, so the command would be&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ ( cd newview &amp;amp;&amp;amp; LD_LIBRARY_PATH=../../libraries/i686-linux/lib_release_client:${LD_LIBRARY_PATH}:/usr/local/lib  ./secondlife-i686-bin-globalsyms )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Augh!!  The client seems REALLY slow!! ====&lt;br /&gt;
&lt;br /&gt;
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.  Unfortunately this isn&#039;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.&lt;br /&gt;
&lt;br /&gt;
However, the &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; package includes two pre-built libraries which facilitate the use of this smoother image decoding method: &amp;lt;b&amp;gt;libkdu_v42R.so&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;libllkdu.so&amp;lt;/b&amp;gt;.  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 slower) without them.&lt;br /&gt;
&lt;br /&gt;
To &amp;lt;b&amp;gt;use these faster image-decoding libraries&amp;lt;/b&amp;gt;, 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&#039;re running the client from the source tree, the following will make the KDU libraries available:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cp &amp;quot;$SLSRC/libraries/i686-linux/lib_release_client/libllkdu.so&amp;quot; &amp;quot;$SLSRC/indra/newview/libllkdu.so&amp;quot;&lt;br /&gt;
 mkdir &amp;quot;$SLSRC/indra/lib&amp;quot;&lt;br /&gt;
 cp &amp;quot;$SLSRC/libraries/i686-linux/lib_release_client/libkdu_v42R.so&amp;quot; &amp;quot;$SLSRC/indra/lib/libkdu_v42R.so&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file &amp;lt;b&amp;gt;indra/newview/linux_tools/client-manifest-i686&amp;lt;/b&amp;gt; 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 &#039;Packaging the client&#039; instructions below.&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Unable to initialize communications&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
If the viewer just displays the error message &amp;quot; Unable to initialize communications&amp;quot; and exits, it can&#039;t find message_template.msg. You did remember to copy it over, right?&lt;br /&gt;
&lt;br /&gt;
=== Packaging the client ===&lt;br /&gt;
&lt;br /&gt;
If you substitute &#039;BUILD=release&#039; with &#039;&amp;lt;b&amp;gt;BUILD=releasefordownload&amp;lt;/b&amp;gt;&#039; in the &#039;Compiling&#039; 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 &amp;lt;b&amp;gt;indra/newview/SecondLife_i686_1_X_Y_Z/&amp;lt;/b&amp;gt; and has also been tarred into &amp;lt;b&amp;gt;indra/newview/SecondLife_i686_1_X_Y_Z.tar.bz2&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file which controls what (and where) files go into the end-user runtime viewer directory is &amp;lt;b&amp;gt;indra/newview/linux_tools/client-manifest-i686&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Packaging errors ====&lt;br /&gt;
&lt;br /&gt;
The final packaging step may fail with errors about the manifest if you are not using the &amp;lt;i&amp;gt;slviewer-linux-libs&amp;lt;/i&amp;gt; bundle; in this case, if you still wish to end up with an end-user viewer package incorporating your own libraries, you can edit the manifest file found at &amp;lt;b&amp;gt;indra/newview/linux_tools/client-manifest-i686&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD ====&lt;br /&gt;
&lt;br /&gt;
A list of patches is given for [[Compiling the viewer FreeBSD]].&lt;/div&gt;</summary>
		<author><name>SpacedOut Frye</name></author>
	</entry>
</feed>