Compiling the viewer (FreeBSD)

From Second Life Wiki
Jump to navigation Jump to search

NOTE: This page is wildly obsolete. For the ports below, none of the distfiles remain available. It may have worked in 2007, but it certainly doesn't now. If you are interested in running the SecondLife client in FreeBSD, please make your interest known to Linden Research.

FreeBSD Port

A preliminary port of the Second Life viewer exists, but isn't included in the official ports collection, since it's not actively maintained. The latest port version is currently 1.18.1.2, which is not compatible with the current grid. However, this port is probably the best starting point if you're planning to compile the Second Life viewer for FreeBSD. Please edit this page if you update the port to work with a later viewer version!

These are the files you need for version 1.18.1.2:

net/secondlife - Second Life viewer
www/llmozlib - LLMozLib library (for browser support)

Depending on your version of FreeBSD, these may depend on other ports that are not yet included in the ports tree. Don't let this bother you! They should all be easy to locate with a quick web search.

Other caveats:

  • The LLMozLib port will try to fetch the right Mozilla source via CVS, so you may have to configure your firewall to allow this.
  • The Second Life viewer port will most likely only work for an x86 architecture; I doubt anyone will try anything else, though.
  • There is currently no sound support, since sound depends on a closed-source module, but it should be fairly easy to add the basics.
  • It takes a long time to build these ports and linking consumes a lot of memory; you will probably need at least 1 GB of RAM.
  • These patches have not been extensively tested and would probably benefit from a decent code review.

For questions about these ports, feel free to contact Henrik Gulbrandsen.

Old Instructions

The viewer has been compiled under FreeBSD 6.2. In this case, the viewer source and the artwork file were saved in /tmp, slviewer-src-FL-1.13.3.57876.tar.gz and slviewer-artwork-FL-1.13.3.57876.zip. The directions were followed for compiling under linux. All of the libraries were available under the ports system with the exception of xmlrpc-epi. In this case the source files were saved in /tmp/linden/xmlrpc-epi-0.51 where they were compiled. There was an additional problem with the openjpeg port. One of the include files was not available, so the sources from /usr/ports/distfiles were untarred into the directory /tmp/linden/OpenJPEG. A symbolic link, /tmp/linden/OpenJPEG/include, was created that points to /tmp/linden/OpenJPEG/dist.

The path for the dynamic libraries must be set:

export LD_LIBRARY_PATH=../../libraries/i686-linux/lib_release_client:/usr/local/lib:/tmp/linden/xmlrpc-epi-0.51/src/.libs

Then the compilation was started using the command:

scons DISTCC=no BTARGET=client BUILD=release

A number of small problems arose during the compilation process. A list of the changes are given below. These changes were found by untarring the original source in a directory called /tmp/virgin. Then a perl script was used to compare every file using "diff -C 5". The output from the differences is given below.

*** ./linden/indra/SConstruct	Sat Feb 10 00:49:19 2007
--- /tmp/linden/indra/SConstruct	Tue Feb 13 13:38:58 2007
***************
*** 21,30 ****
--- 21,31 ----
  import glob
  
  platform = sys.platform
  if platform == 'linux2':
  	platform = 'linux'
+ platform = 'linux'
  
  ######################
  # GET VERSION        #
  ######################
  
***************
*** 114,123 ****
--- 115,135 ----
  		./llcommon ./llmath ./llwindow ./llaudio ./llcharacter
  		./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage
  		./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow
  		./llxml ./lscript
  		../libraries/include
+ 		/usr/local/include
+ 		/usr/local/include/boost
+ 		/tmp/linden/OpenJPEG
+ 		/usr/local/include/pango-1.0
+ 		/usr/local/include/atk-1.0
+ 		/usr/local/include/glib-2.0
+ 		/usr/local/include/cairo
+ 		/usr/X11R6/include
+ 		/usr/local/include/freetype2
+ 		 /usr/local/include/gtk-2.0
+ 		/tmp/linden/xmlrpc-epi-0.51
  		../libraries/include/havok
  		""" +
  		'../libraries/' + system_str + '/include' )
  
  	client_external_libs = []
***************
*** 178,199 ****
  
  	if platform == 'linux':
  		# Linux-only flags
  		flags += '-DLL_LINUX=1 '
  		if build_target == 'client':
! 			flags += '-DAPPID=secondlife -DLL_SDL=1 -DLL_X11=1 '
  			flags += '-DLL_GTK=1 '
! 			client_external_libs += [ 'gtk-x11-2.0', 'elfio' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0']
  			include_dirs += [ '../libraries/' + system_str + '/include/pango-1.0' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/atk-1.0' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/ELFIO' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/llfreetype2' ]
  	else:
  		# Mac-only flags
! 		flags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -O2 -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -DLL_DARWIN=1 -Wmost -Wno-sign-compare -Wno-switch -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -ffor-scope -Wno-reorder -isysroot /Developer/SDKs/MacOSX10.3.9.sdk '
  
  	### Build type-specific flags ###
  
  	debug_opts = flags + '-fno-inline -O0 -D_DEBUG -DLL_DEBUG=1 '
  	release_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 '
--- 190,212 ----
  
  	if platform == 'linux':
  		# Linux-only flags
  		flags += '-DLL_LINUX=1 '
  		if build_target == 'client':
! 			flags += '-DAPPID=secondlife -DLL_SDL=1  -DLL_FMOD=0 -DLL_X11=1 '
  			flags += '-DLL_GTK=1 '
! 			# client_external_libs += [ 'gtk-x11-2.0', 'elfio' ]
! 			client_external_libs += [ 'gtk-x11-2.0', 'ELFIO' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0']
  			include_dirs += [ '../libraries/' + system_str + '/include/pango-1.0' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/atk-1.0' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/ELFIO' ]
  			include_dirs += [ '../libraries/' + system_str + '/include/llfreetype2' ]
  	else:
  		# Mac-only flags
! 		flags += ' '
  
  	### Build type-specific flags ###
  
  	debug_opts = flags + '-fno-inline -O0 -D_DEBUG -DLL_DEBUG=1 '
  	release_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 '
***************
*** 202,212 ****
  
  	################
  	# ENVIRONMENT  #
  	################
  
! 	gcc_bin = 'g++-3.4'
  	# If you strip more aggressively than -S then the quality of crash-
  	# logger backtraces deteriorates.
  	strip_cmd = 'strip -S -o $TARGET $SOURCE'
  
  	# hidesyms_cmd is something which copies an executable while 'hiding'
--- 215,226 ----
  
  	################
  	# ENVIRONMENT  #
  	################
  
! 	# gcc_bin = 'g++-3.4'
! 	gcc_bin = 'g++'
  	# If you strip more aggressively than -S then the quality of crash-
  	# logger backtraces deteriorates.
  	strip_cmd = 'strip -S -o $TARGET $SOURCE'
  
  	# hidesyms_cmd is something which copies an executable while 'hiding'
***************
*** 219,229 ****
  		hidesyms_cmd = 'objcopy --keep-global-symbols ' + exposed_symbols_file + ' $SOURCE $TARGET'
  	else:
  		hidesyms_cmd = 'cp -f $SOURCE $TARGET'
  
  	if build_target != 'client':
! 		gcc_bin = 'g++-3.3'
  
  	if arch == 'x86_64':
  		gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
  		strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
  
--- 233,244 ----
  		hidesyms_cmd = 'objcopy --keep-global-symbols ' + exposed_symbols_file + ' $SOURCE $TARGET'
  	else:
  		hidesyms_cmd = 'cp -f $SOURCE $TARGET'
  
  	if build_target != 'client':
! 		#gcc_bin = 'g++-3.3'
! 		gcc_bin = 'g++'
  
  	if arch == 'x86_64':
  		gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
  		strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
  
***************
*** 232,242 ****
  	if enable_distcc == 'yes':
  		compiler = 'distcc ' + gcc_bin
  
  	base_env = Environment(CXX = compiler,
  			CPPPATH = include_dirs,
! 			LIBPATH = [lib_dir] + [system_lib_dir],
  			LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
  
  	### Environments for various build types ###
  
  	env = base_env.Copy(CPPFLAGS = releasefordownload_opts)
--- 247,257 ----
  	if enable_distcc == 'yes':
  		compiler = 'distcc ' + gcc_bin
  
  	base_env = Environment(CXX = compiler,
  			CPPPATH = include_dirs,
! 			LIBPATH = [lib_dir] + [system_lib_dir] + ['/usr/local/lib'] +['/tmp/linden/xmlrpc-epi-0.51/src/.libs'] + ['/usr/X11R6/lib'],
  			LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
  
  	### Environments for various build types ###
  
  	env = base_env.Copy(CPPFLAGS = releasefordownload_opts)
***************
*** 372,382 ****
  		if platform == 'linux':
  			#############################
  			# BUILD LINUX_CRASH_LOGGER  #
  			#############################
  			output_crashlogger_bin = 'linux_crash_logger/linux-crash-logger-' + arch + '-bin'
! 			external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
  			external_libs.remove('cares')
  			internal_libs = [ 'llvfs', 'llmath', 'llcommon' ]
  			create_executable(output_crashlogger_bin + '-globalsyms', 'linux_crash_logger', internal_libs + external_libs)
  			env.Command(output_crashlogger_bin, output_crashlogger_bin + '-globalsyms', hidesyms_cmd)
  
--- 387,398 ----
  		if platform == 'linux':
  			#############################
  			# BUILD LINUX_CRASH_LOGGER  #
  			#############################
  			output_crashlogger_bin = 'linux_crash_logger/linux-crash-logger-' + arch + '-bin'
! 			#external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
! 			external_libs = net_external_libs + [ 'db41', 'gtk-x11-2.0' ]
  			external_libs.remove('cares')
  			internal_libs = [ 'llvfs', 'llmath', 'llcommon' ]
  			create_executable(output_crashlogger_bin + '-globalsyms', 'linux_crash_logger', internal_libs + external_libs)
  			env.Command(output_crashlogger_bin, output_crashlogger_bin + '-globalsyms', hidesyms_cmd)
  
***************
*** 391,401 ****
  		##################
  		# BUILD NEWVIEW  #
  		##################
  		output_bin = 'newview/secondlife-' + arch + '-bin'
  
! 		external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'fmod-3.75', 'db-4.2', 'openjpeg' ]
  		external_libs.remove('cares')
  
  		internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive',
  				 'llmedia', 'llinventory', 
  				 'llimage',  'llimagej2coj', 
--- 407,418 ----
  		##################
  		# BUILD NEWVIEW  #
  		##################
  		output_bin = 'newview/secondlife-' + arch + '-bin'
  
! 		#external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'fmod-3.75', 'db-4.2', 'openjpeg' ]
! 		external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'db41', 'openjpeg' ]
  		external_libs.remove('cares')
  
  		internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive',
  				 'llmedia', 'llinventory', 
  				 'llimage',  'llimagej2coj', 
*** ./linden/indra/llcommon/llpagemem.h	Sat Feb 10 00:49:20 2007
--- /tmp/linden/indra/llcommon/llpagemem.h	Tue Feb 13 10:51:48 2007
***************
*** 25,35 ****
   */
  #ifndef LL_LLPAGEMEM_H
  #define LL_LLPAGEMEM_H
  
  #if !LL_DARWIN
! #include "malloc.h"
  #endif
  
  #include "llrand.h"
  
  
--- 25,36 ----
   */
  #ifndef LL_LLPAGEMEM_H
  #define LL_LLPAGEMEM_H
  
  #if !LL_DARWIN
! /* #include "malloc.h" */
! #include <stdlib.h>
  #endif
  
  #include "llrand.h"
  
  
*** ./linden/indra/llcommon/llpreprocessor.h	Sat Feb 10 00:49:20 2007
--- /tmp/linden/indra/llcommon/llpreprocessor.h	Tue Feb 13 08:40:00 2007
***************
*** 30,40 ****
  #define LLPREPROCESSOR_H
  
  // Figure out endianness of platform
  #ifdef LL_LINUX
  #define __ENABLE_WSTRING
! #include <endian.h>
  #endif	//	LL_LINUX
  
  #if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)))
  #define LL_LITTLE_ENDIAN 1
  #else
--- 30,40 ----
  #define LLPREPROCESSOR_H
  
  // Figure out endianness of platform
  #ifdef LL_LINUX
  #define __ENABLE_WSTRING
! /* #include <endian.h> */
  #endif	//	LL_LINUX
  
  #if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)))
  #define LL_LITTLE_ENDIAN 1
  #else
*** ./linden/indra/llcommon/llsdserialize_xml.cpp	Sat Feb 10 00:49:20 2007
--- /tmp/linden/indra/llcommon/llsdserialize_xml.cpp	Tue Feb 13 08:41:26 2007
***************
*** 33,43 ****
  
  #include "apr-1/apr_base64.h"
  
  extern "C"
  {
! #include "expat/expat.h"
  }
  
  /**
   * LLSDXMLFormatter
   */
--- 33,43 ----
  
  #include "apr-1/apr_base64.h"
  
  extern "C"
  {
! #include "expat.h"
  }
  
  /**
   * LLSDXMLFormatter
   */
*** ./linden/indra/llcommon/llsys.cpp	Sat Feb 10 00:49:20 2007
--- /tmp/linden/indra/llcommon/llsys.cpp	Tue Feb 13 08:52:44 2007
***************
*** 28,47 ****
  #include "linden_common.h"
  
  #include "llsys.h"
  
  #include <iostream>
! #include <zlib/zlib.h>
  #include "processor.h"
  
  #if LL_WINDOWS
  #	define WIN32_LEAN_AND_MEAN
  #	include <winsock2.h>
  #	include <windows.h>
  #elif LL_DARWIN
! #	include <sys/sysctl.h>
! #	include <sys/utsname.h>
  #elif LL_LINUX
  #	include <sys/utsname.h>
  const char MEMINFO_FILE[] = "/proc/meminfo";
  const char CPUINFO_FILE[] = "/proc/cpuinfo";
  #endif
--- 28,47 ----
  #include "linden_common.h"
  
  #include "llsys.h"
  
  #include <iostream>
! #include <zlib.h>
  #include "processor.h"
  
  #if LL_WINDOWS
  #	define WIN32_LEAN_AND_MEAN
  #	include <winsock2.h>
  #	include <windows.h>
  #elif LL_DARWIN
! 	include <sys/sysctl.h>
! 	include <sys/utsname.h>
  #elif LL_LINUX
  #	include <sys/utsname.h>
  const char MEMINFO_FILE[] = "/proc/meminfo";
  const char CPUINFO_FILE[] = "/proc/cpuinfo";
  #endif
***************
*** 393,403 ****
  {
  }
  
  #if LL_LINUX
  #include <unistd.h>
! #include <sys/sysinfo.h>
  #endif
  
  U32 LLMemoryInfo::getPhysicalMemory() const
  {
  #if LL_WINDOWS
--- 393,404 ----
  {
  }
  
  #if LL_LINUX
  #include <unistd.h>
! /* #include <sys/sysinfo.h> */
! #include <sys/sysctl.h> 
  #endif
  
  U32 LLMemoryInfo::getPhysicalMemory() const
  {
  #if LL_WINDOWS
***************
*** 405,426 ****
  	state.dwLength = sizeof(state);
  	GlobalMemoryStatus(&state);
  
  	return (U32)state.dwTotalPhys;
  
! #elif LL_DARWIN
  	// This might work on Linux as well.  Someone check...
  	unsigned int phys = 0;
  	int mib[2] = { CTL_HW, HW_PHYSMEM };
  
  	size_t len = sizeof(phys);	
  	sysctl(mib, 2, &phys, &len, NULL, 0);
  	
  	return phys;
  #elif LL_LINUX
  
! 	return getpagesize() * get_phys_pages();
  
  #else
  	return 0;
  
  #endif
--- 406,435 ----
  	state.dwLength = sizeof(state);
  	GlobalMemoryStatus(&state);
  
  	return (U32)state.dwTotalPhys;
  
!  #elif LL_DARWIN
  	// This might work on Linux as well.  Someone check...
  	unsigned int phys = 0;
  	int mib[2] = { CTL_HW, HW_PHYSMEM };
  
  	size_t len = sizeof(phys);	
  	sysctl(mib, 2, &phys, &len, NULL, 0);
  	
  	return phys;
  #elif LL_LINUX
+ 	// This might work on Linux as well.  Someone check...
+ 	unsigned int phys = 0;
+ 	int mib[2] = { CTL_HW, HW_PHYSMEM };
+ 
+ 	size_t len = sizeof(phys);	
+ 	sysctl(mib, 2, &phys, &len, NULL, 0);
+ 	
+ 	return phys;
  
! 	/* return getpagesize() * get_phys_pages(); */
  
  #else
  	return 0;
  
  #endif
*** ./linden/indra/llimage/llimagejpeg.h	Sat Feb 10 00:49:20 2007
--- /tmp/linden/indra/llimage/llimagejpeg.h	Tue Feb 13 09:02:04 2007
***************
*** 31,43 ****
  #include <setjmp.h>
  
  #include "llimage.h"
  
  extern "C" {
! #include "jpeglib/jinclude.h"
! #include "jpeglib/jpeglib.h"
! #include "jpeglib/jerror.h"
  }
  
  class LLImageJPEG : public LLImageFormatted
  {
  protected:
--- 31,43 ----
  #include <setjmp.h>
  
  #include "llimage.h"
  
  extern "C" {
! #include "jinclude.h"
! #include "jpeglib.h"
! #include "jerror.h"
  }
  
  class LLImageJPEG : public LLImageFormatted
  {
  protected:
*** ./linden/indra/llmath/lluuid.cpp	Sat Feb 10 00:49:21 2007
--- /tmp/linden/indra/llmath/lluuid.cpp	Tue Feb 13 08:53:49 2007
***************
*** 606,616 ****
  #include <net/if.h>
  #define HAVE_NETINET_IN_H
  #ifdef HAVE_NETINET_IN_H
  #include <netinet/in.h>
  #if !LL_DARWIN
! #include <linux/sockios.h>
  #endif
  #endif
  
  // static
  S32 LLUUID::getNodeID(unsigned char *node_id)
--- 606,616 ----
  #include <net/if.h>
  #define HAVE_NETINET_IN_H
  #ifdef HAVE_NETINET_IN_H
  #include <netinet/in.h>
  #if !LL_DARWIN
! /* #include <linux/sockios.h> */
  #endif
  #endif
  
  // static
  S32 LLUUID::getNodeID(unsigned char *node_id)
*** ./linden/indra/llmessage/message.h	Sat Feb 10 00:49:22 2007
--- /tmp/linden/indra/llmessage/message.h	Tue Feb 13 08:55:29 2007
***************
*** 32,42 ****
  #include <stdio.h>
  #include <map>
  #include <set>
  
  #if LL_LINUX
! #include <endian.h>
  #include <netinet/in.h>
  #endif
  
  #if LL_WINDOWS
  #include "winsock2.h" // htons etc.
--- 32,42 ----
  #include <stdio.h>
  #include <map>
  #include <set>
  
  #if LL_LINUX
! #include <sys/endian.h>
  #include <netinet/in.h>
  #endif
  
  #if LL_WINDOWS
  #include "winsock2.h" // htons etc.
*** ./linden/indra/llmessage/llhttpassetstorage.cpp	Sat Feb 10 00:49:22 2007
--- /tmp/linden/indra/llmessage/llhttpassetstorage.cpp	Tue Feb 13 08:58:34 2007
***************
*** 32,42 ****
  
  #include "indra_constants.h"
  #include "llvfile.h"
  #include "llvfs.h"
  
! #include "zlib/zlib.h"
  
  const F32 MAX_PROCESSING_TIME = 0.005f;
  const S32 CURL_XFER_BUFFER_SIZE = 65536;
  // Try for 30 minutes for now.
  const F32 GET_URL_TO_FILE_TIMEOUT = 1800.0f;
--- 32,42 ----
  
  #include "indra_constants.h"
  #include "llvfile.h"
  #include "llvfs.h"
  
! #include "zlib.h"
  
  const F32 MAX_PROCESSING_TIME = 0.005f;
  const S32 CURL_XFER_BUFFER_SIZE = 65536;
  // Try for 30 minutes for now.
  const F32 GET_URL_TO_FILE_TIMEOUT = 1800.0f;
*** ./linden/indra/llrender/llfont.cpp	Sat Feb 10 00:49:23 2007
--- /tmp/linden/indra/llrender/llfont.cpp	Tue Feb 13 09:25:00 2007
***************
*** 29,56 ****
  
  #include "llfont.h"
  
  // Freetype stuff
  #if LL_LINUX   // I had to do some work to avoid the system-installed FreeType headers... --ryan.
! #include "llfreetype2/freetype/ft2build.h"
  #else
  #include <ft2build.h>
  #endif
  
  // For some reason, this won't work if it's not wrapped in the ifdef
  #ifdef FT_FREETYPE_H
! #include FT_FREETYPE_H
  #endif
  
  #include "llerror.h"
  #include "llimage.h"
  //#include "llimagej2c.h"
  #include "llmath.h"	// Linden math
  #include "llstring.h"
  //#include "imdebug.h"
  
! FT_Render_Mode gFontRenderMode = FT_RENDER_MODE_NORMAL;
  
  LLFontManager *gFontManagerp = NULL;
  
  FT_Library gFTLibrary = NULL;
  
--- 29,58 ----
  
  #include "llfont.h"
  
  // Freetype stuff
  #if LL_LINUX   // I had to do some work to avoid the system-installed FreeType headers... --ryan.
! /* #include "llfreetype2/freetype/ft2build.h" */
! #include <ft2build.h>
  #else
  #include <ft2build.h>
  #endif
  
  // For some reason, this won't work if it's not wrapped in the ifdef
  #ifdef FT_FREETYPE_H
! /* #include FT_FREETYPE_H  */
! #include <freetype/freetype.h> 
  #endif
  
  #include "llerror.h"
  #include "llimage.h"
  //#include "llimagej2c.h"
  #include "llmath.h"	// Linden math
  #include "llstring.h"
  //#include "imdebug.h"
  
! FT_Render_Mode_ gFontRenderMode = FT_RENDER_MODE_NORMAL;
  
  LLFontManager *gFontManagerp = NULL;
  
  FT_Library gFTLibrary = NULL;
  
*** ./linden/indra/llxml/llxmlnode.h	Sat Feb 10 00:49:24 2007
--- /tmp/linden/indra/llxml/llxmlnode.h	Tue Feb 13 09:02:45 2007
***************
*** 27,37 ****
  
  #ifndef LL_LLXMLNODE_H
  #define LL_LLXMLNODE_H
  
  #define XML_STATIC
! #include "expat/expat.h"
  #include <map>
  
  #include "indra_constants.h"
  #include "llmemory.h"
  #include "llthread.h"
--- 27,37 ----
  
  #ifndef LL_LLXMLNODE_H
  #define LL_LLXMLNODE_H
  
  #define XML_STATIC
! #include "expat.h"
  #include <map>
  
  #include "indra_constants.h"
  #include "llmemory.h"
  #include "llthread.h"
*** ./linden/indra/llxml/llxmlparser.h	Sat Feb 10 00:49:24 2007
--- /tmp/linden/indra/llxml/llxmlparser.h	Tue Feb 13 09:04:17 2007
***************
*** 27,37 ****
  
  #ifndef LL_LLXMLPARSER_H
  #define LL_LLXMLPARSER_H
  
  #define XML_STATIC
! #include "expat/expat.h"
  
  class LLXmlParser
  {
  public:
  	LLXmlParser();
--- 27,37 ----
  
  #ifndef LL_LLXMLPARSER_H
  #define LL_LLXMLPARSER_H
  
  #define XML_STATIC
! #include "expat.h"
  
  class LLXmlParser
  {
  public:
  	LLXmlParser();
*** ./linden/indra/linux_crash_logger/linux_crash_logger.cpp	Sat Feb 10 00:49:25 2007
--- /tmp/linden/indra/linux_crash_logger/linux_crash_logger.cpp	Tue Feb 13 10:02:37 2007
***************
*** 454,464 ****
  //		llinfos << "File " << mFilename << " is present..." << llendl;
  
  		if(!gCrashInPreviousExec && isCrashLog)
  		{
  			// Make sure the file isn't too old.
! 			double age = difftime(gLaunchTime, stat_data.st_mtim.tv_sec);
  
  //			llinfos << "age is " << age << llendl;
  
  			if(age > 60.0)
  			{
--- 454,465 ----
  //		llinfos << "File " << mFilename << " is present..." << llendl;
  
  		if(!gCrashInPreviousExec && isCrashLog)
  		{
  			// Make sure the file isn't too old.
! 			// double age = difftime(gLaunchTime, stat_data.st_mtime.tv_sec);
! 			double age = difftime(gLaunchTime, stat_data.st_mtime);
  
  //			llinfos << "age is " << age << llendl;
  
  			if(age > 60.0)
  			{
*** ./linden/indra/linux_crash_logger/linux_crash_logger.cpp	Sat Feb 10 00:49:25 2007
--- /tmp/linden/indra/linux_crash_logger/linux_crash_logger.cpp	Tue Feb 13 10:02:37 2007
***************
*** 454,464 ****
  //		llinfos << "File " << mFilename << " is present..." << llendl;
  
  		if(!gCrashInPreviousExec && isCrashLog)
  		{
  			// Make sure the file isn't too old.
! 			double age = difftime(gLaunchTime, stat_data.st_mtim.tv_sec);
  
  //			llinfos << "age is " << age << llendl;
  
  			if(age > 60.0)
  			{
--- 454,465 ----
  //		llinfos << "File " << mFilename << " is present..." << llendl;
  
  		if(!gCrashInPreviousExec && isCrashLog)
  		{
  			// Make sure the file isn't too old.
! 			// double age = difftime(gLaunchTime, stat_data.st_mtime.tv_sec);
! 			double age = difftime(gLaunchTime, stat_data.st_mtime);
  
  //			llinfos << "age is " << age << llendl;
  
  			if(age > 60.0)
  			{
*** ./linden/indra/newview/lltexturefetch.h	Sat Feb 10 00:49:29 2007
--- /tmp/linden/indra/newview/lltexturefetch.h	Tue Feb 13 13:10:15 2007
***************
*** 97,102 ****
  	queue_t mNetworkQueue;
  
  	LLFrameTimer mNetworkTimer;
  };
  
! #endif LL_LLTEXTUREFETCH_H
--- 97,102 ----
  	queue_t mNetworkQueue;
  
  	LLFrameTimer mNetworkTimer;
  };
  
! #endif /* LL_LLTEXTUREFETCH_H */
*** ./linden/indra/newview/viewer.cpp	Sat Feb 10 00:49:30 2007
--- /tmp/linden/indra/newview/viewer.cpp	Tue Feb 13 13:22:51 2007
***************
*** 68,78 ****
    #	include <netinet/in.h>
    #	include <arpa/inet.h>	// inet_ntoa()
  
    #if LL_LINUX
    #	include <dlfcn.h>		// RTLD_LAZY
!   #     include <execinfo.h>            // backtrace - glibc only
    #define LL_ELFBIN 1
    #     if LL_ELFBIN
    #          include <cxxabi.h>         // for symbol demangling
    #          include "ELFIO.h"          // for better backtraces
    #     endif // LL_ELFBIN
--- 68,78 ----
    #	include <netinet/in.h>
    #	include <arpa/inet.h>	// inet_ntoa()
  
    #if LL_LINUX
    #	include <dlfcn.h>		// RTLD_LAZY
!   //   #     include <execinfo.h>            // backtrace - glibc only  
    #define LL_ELFBIN 1
    #     if LL_ELFBIN
    #          include <cxxabi.h>         // for symbol demangling
    #          include "ELFIO.h"          // for better backtraces
    #     endif // LL_ELFBIN
***************
*** 2252,2263 ****
  	size_t size;
  	char **strings;
  	size_t i;
  	BOOL success = FALSE;
  
! 	size = backtrace(array, MAX_STACK_TRACE_DEPTH);
! 	strings = backtrace_symbols(array, size);
  
  	std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
  	llinfos << "Opening stack trace file " << strace_filename << llendl;
  	FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w");		/* Flawfinder: ignore */
          if (!StraceFile)
--- 2252,2263 ----
  	size_t size;
  	char **strings;
  	size_t i;
  	BOOL success = FALSE;
  
! 	size = 0; // backtrace(array, MAX_STACK_TRACE_DEPTH);
! 	strings = NULL; //backtrace_symbols(array, size);
  
  	std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
  	llinfos << "Opening stack trace file " << strace_filename << llendl;
  	FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w");		/* Flawfinder: ignore */
          if (!StraceFile)
***************
*** 2303,2314 ****
  		llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
  		StraceFile = stderr;
  	}
  
  	// get backtrace address list and basic symbol info
! 	btsize = backtrace(array, MAX_STACK_TRACE_DEPTH);
! 	strings = backtrace_symbols(array, btsize);
  
  	// create ELF reader for our app binary
  	IELFI* pReader;
  	const IELFISection* pSec = NULL;
  	IELFISymbolTable* pSymTbl = 0;
--- 2303,2314 ----
  		llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
  		StraceFile = stderr;
  	}
  
  	// get backtrace address list and basic symbol info
! 	btsize = 0; // backtrace(array, MAX_STACK_TRACE_DEPTH);
! 	strings = NULL; // backtrace_symbols(array, btsize);
  
  	// create ELF reader for our app binary
  	IELFI* pReader;
  	const IELFISection* pSec = NULL;
  	IELFISymbolTable* pSymTbl = 0;
*** ./linden/indra/newview/llviewerobjectlist.cpp	Sat Feb 10 00:49:33 2007
--- /tmp/linden/indra/newview/llviewerobjectlist.cpp	Tue Feb 13 12:58:13 2007
***************
*** 58,68 ****
  #include "lltoolpie.h"
  #include "llkeyboard.h"
  #include "u64.h"
  #include "llviewerimagelist.h"
  #include "lldatapacker.h"
! #include <zlib/zlib.h>
  #include "object_flags.h"
  
  extern BOOL gVelocityInterpolate;
  extern BOOL gPingInterpolate;
  extern F32 gMinObjectDistance;
--- 58,69 ----
  #include "lltoolpie.h"
  #include "llkeyboard.h"
  #include "u64.h"
  #include "llviewerimagelist.h"
  #include "lldatapacker.h"
! /* #include <zlib/zlib.h> */
! #include <zlib.h>
  #include "object_flags.h"
  
  extern BOOL gVelocityInterpolate;
  extern BOOL gPingInterpolate;
  extern F32 gMinObjectDistance;