diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 176a458f9..000000000
--- a/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-* text=auto
diff --git a/.gitignore b/.gitignore
index 7c302ed85..718308dc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,3 @@
-/installed.xml
-/indra/llcommon/llversionviewer.h
/indra/build-*
/indra/tools/vstool/obj/
*.aps
@@ -12,6 +10,8 @@
/indra/viewer-*
/indra/newview/vivox-runtime/
/indra/newview/dbghelp.dll
+indra/newview/res/viewer_icon.*
+indra/newview/res-sdl/viewer_icon.*
/libraries/
/lib/
*.pyc
@@ -26,12 +26,5 @@ qtcreator-build/
/.pc
/build-*
/viewer-*
-/indra/newview/res/viewerRes.rc
-/indra/newview/res/viewerRes_bc.rc
-/indra/newview/English.lproj/InfoPlist.strings
-/indra/newview/linux_tools/handle_secondlifeprotocol.sh
-/indra/newview/linux_tools/install.sh
-/indra/newview/linux_tools/refresh_desktop_app_entry.sh
-/indra/newview/linux_tools/wrapper.sh
diff --git a/AscentChangelog.txt b/AscentChangelog.txt
deleted file mode 100644
index d7c9aff00..000000000
--- a/AscentChangelog.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-->> Features implemented in Ascent:
-
-In-World:
--------------------------------------------------
-* Alpha skins and Tattoo Layers
-* Inventory Pre-caching
-* Avatar Radar
-* Multiple Attachment Points
-* Idle time of avatars around you (Not perfect)
-* Client tags/coloring for various clients, and extra client definitions
-* Force Away button to fake being away if you really want to avoid someone :V
-* Double-Click teleport (Not all the functionality of Emerald yet)
-Preferences (Options are in Ascent Options):
-* Disable Look At
-* Disable Point At and beam end
-* Fetch inventory in background on login (No waiting for caching when searching)
-* Display your client tag to yourself
-* Display your client tag color to yourself
-* Rez objects as land group when possible
-* Some settings can now be saved per account after changing an option in the preferences. Currently affected settings:
- Edit Beam color
- Client Tag Color
-Communication Window:
-- Friend List:
- * Friend List Online/Total counts (Not perfect)
- * Shows what rights your friends have given you (Mod, See on map, Online)
-
-Chat Bar:
-* Emerald-style Chatbar as Commandline (See Preferences)
-* MU-style poses.
-* OOC Auto-close.
-
-Instant Messages:
-* MU-style poses.
-* OOC Auto-close.
-
-Advanced -> Ascent:
-* Fake Away Status
-* Force Ground Sit (Lets you sit anywhere)
-* Phantom Avatar (Prevents you visually from being pushed.)
-* Toggle IM Notification (Ability to hide '%n is typing...' notification from being sent.)
-* Close All Dialogs
-* Message Log
-* Message Builder
-* Sound Explorer
-* Asset Blacklist
-* AO options
-
-Object Pie Menus:
-* Measure: Select on one object, then another, to get the exact distance between the two
-* Data: Reports prim rotation and position in a format usable in LSL scripts.
-* Script Counter
-
-Self Pie Menu:
-* Animation Explorer
-
-Agent Pie Menus:
-* Script Counter
-* Copy Agent UUID
-* Debug
-
-Parcel Window:
--------------------------------------------------
-- General tab:
-- Objects tab:
- * In Sim/Online/Offline indicators for Parcel Object Owner listings (Online is currently wonky - This is an issue with SL, Emerald has the same problem.)
-
-Build Window:
--------------------------------------------------
-- General tab:
- * Last Owner shown in Build "General" Tab
- * Group object is set to has a "View" button to see the group's profile
- * Copy Object Key button
-- Build Tab:
- * Copy/Paste Position buttons
- * Copy/Paste Size buttons
- * Copy/Paste Rotation buttons
- * Copy/Paste Primitive Parameters buttons
-
-Known issues:
-Online/Total counts in the friends list sometimes go haywire. Not often or by a large margin, but it happens.
\ No newline at end of file
diff --git a/autobuild.xml b/autobuild.xml
new file mode 100644
index 000000000..fbdca77b8
--- /dev/null
+++ b/autobuild.xml
@@ -0,0 +1,2944 @@
+
+
+
+
diff --git a/doc/asset_urls.txt b/doc/asset_urls.txt
deleted file mode 100644
index e42a45c89..000000000
--- a/doc/asset_urls.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-SLASSET_LIBS_WIN32=http://automated-builds-secondlife-com.s3.amazonaws.com/oss-viewer/export/slviewer-win32-libs-oss-viewer-1.23.4.0.zip
-SLASSET_MD5=http://automated-builds-secondlife-com.s3.amazonaws.com/oss-viewer/export/md5sums-oss-viewer-1.23.4.0.txt
-SLASSET_LIBS_DARWIN=http://automated-builds-secondlife-com.s3.amazonaws.com/oss-viewer/export/slviewer-darwin-libs-oss-viewer-1.23.4.0.tar.gz
-SLASSET_ART=http://automated-builds-secondlife-com.s3.amazonaws.com/oss-viewer/export/slviewer-artwork-oss-viewer-1.23.4.0.zip
-SLASSET_LIBS_LINUXI386=http://automated-builds-secondlife-com.s3.amazonaws.com/oss-viewer/export/slviewer-linux-libs-oss-viewer-1.23.4.0.tar.gz
diff --git a/doc/releasenotes-where.txt b/doc/releasenotes-where.txt
deleted file mode 100644
index 4af586690..000000000
--- a/doc/releasenotes-where.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-For full release notes, see:
- http://wiki.secondlife.com/wiki/Release_Notes
-
-For a log of viewer changes, see:
- doc/viewer-changes.txt
diff --git a/doc/viewer-changes.txt b/doc/viewer-changes.txt
deleted file mode 100644
index e69de29bb..000000000
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 8694c0dcc..fc61f3f8a 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -3,19 +3,12 @@
# cmake_minimum_required should appear before any
# other commands to guarantee full compatibility
# with the version specified
-
-cmake_minimum_required(VERSION 2.8.10 FATAL_ERROR)
-
-# Eventually the third-party support modules (cmake/*.cmake) should
-# know the full path to all libraries. Until that happens we need
-# per-configuration link directory "libraries//lib/debug" for
-# Debug and "libraries//lib/release" for Release,
-# RelWithDebInfo, and MinSizeRel. CMake 2.6 does not directly support
-# per-configuration link directory specification. However, we can set
-# CMP0003 to OLD and link to one library (apr) on a per-configuration
-# basis to convince CMake to add the proper link directory. This line
-# can be removed when we use full paths for all libraries.
-#cmake_policy(SET CMP0003 OLD)
+## prior to 2.8, the add_custom_target commands used in setting the version did not work correctly
+if(WIN32)
+ cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
+else()
+ cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
+endif()
set(ROOT_PROJECT_NAME "Singularity" CACHE STRING
"The root project/makefile/solution name. Defaults to Singularity.")
@@ -24,26 +17,12 @@ project(${ROOT_PROJECT_NAME})
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(Variables)
-
-# Load versions now. Install locations need them.
include(BuildVersion)
-include(UnixInstall)
-if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE Release CACHE STRING
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
-endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
-
-# Create a 'prepare' target in which to perform setup actions. This
-# must be the first target created so other targets can depend on it.
-if(NOT STANDALONE)
- # We prepare prebuilt binaries when not building standalone.
- set(prepare_depends ${CMAKE_BINARY_DIR}/prepare/prebuilt)
-endif(NOT STANDALONE)
-if(WINDOWS)
- set(prepare_depends ${prepare_depends} copy_win_libs)
-endif(WINDOWS)
-add_custom_target(prepare DEPENDS ${prepare_depends})
+endif (NOT CMAKE_BUILD_TYPE)
add_subdirectory(cmake)
add_subdirectory(${LIBS_OPEN_PREFIX}aistatemachine)
@@ -66,12 +45,6 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llvfs)
add_subdirectory(${LIBS_OPEN_PREFIX}llwindow)
add_subdirectory(${LIBS_OPEN_PREFIX}llxml)
-if(STANDALONE)
- add_subdirectory(${LIBS_OPEN_PREFIX}llqtwebkit)
-endif(STANDALONE)
-
-#add_subdirectory(${LIBS_OPEN_PREFIX}lscript)
-
if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
@@ -83,42 +56,7 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llui)
# viewer plugins directory
add_subdirectory(${LIBS_OPEN_PREFIX}plugins)
-# llplugin testbed code (is this the right way to include it?)
-#if (NOT LINUX)
-# add_subdirectory(${VIEWER_PREFIX}test_apps/llplugintest)
-#endif (NOT LINUX)
-
add_subdirectory(${VIEWER_PREFIX}newview/statemachine)
add_subdirectory(${VIEWER_PREFIX}newview)
add_dependencies(viewer secondlife-bin)
-# The use_prebuilt_binary macro in cmake/Prebuilt.cmake records
-# packages in the PREBUILT property of the 'prepare' target.
-get_property(PREBUILT_PACKAGES TARGET prepare PROPERTY PREBUILT)
-
-# Create a script to download the needed binaries.
-configure_file(${CMAKE_SOURCE_DIR}/cmake/DownloadPrebuilt.cmake.in
- ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake @ONLY)
-
-# Drive the download script at build time. Depend on 'install.xml'
-# to aqcuire new binaries when needed.
-add_custom_command(
- COMMENT "Obtaining prebuilt binaries..."
- OUTPUT ${CMAKE_BINARY_DIR}/prepare/prebuilt
- COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake
- DEPENDS ${CMAKE_SOURCE_DIR}/../install.xml
- ${CMAKE_BINARY_DIR}/DownloadPrebuilt.cmake
- )
-
-
-if(WINDOWS)
- configure_file(${CMAKE_SOURCE_DIR}/cmake/CopyWinLibs.cmake.in
- ${CMAKE_BINARY_DIR}/CopyWinLibs.cmake @ONLY)
- add_custom_command(
- COMMENT "Copying prebuilt libraries to viewer executable directory"
- OUTPUT ${CMAKE_BINARY_DIR}/CopyWinLibs
- COMMAND ${CMAKE_COMMAND} -DCUR_CONFIG:STRING=${CMAKE_CFG_INTDIR} -P ${CMAKE_BINARY_DIR}/CopyWinLibs.cmake
- DEPENDS ${CMAKE_BINARY_DIR}/prepare/prebuilt ${CMAKE_BINARY_DIR}/CopyWinLibs.cmake
- )
- add_custom_target(copy_win_libs DEPENDS ${CMAKE_BINARY_DIR}/CopyWinLibs)
-endif(WINDOWS)
\ No newline at end of file
diff --git a/indra/aistatemachine/CMakeLists.txt b/indra/aistatemachine/CMakeLists.txt
index 806261201..791ff9d25 100644
--- a/indra/aistatemachine/CMakeLists.txt
+++ b/indra/aistatemachine/CMakeLists.txt
@@ -39,5 +39,3 @@ set_source_files_properties(${aistatemachine_HEADER_FILES}
list(APPEND aistatemachine_SOURCE_FILES ${aistatemachine_HEADER_FILES})
add_library (aistatemachine ${aistatemachine_SOURCE_FILES})
-add_dependencies(aistatemachine prepare)
-
diff --git a/indra/aistatemachine/aistatemachinethread.h b/indra/aistatemachine/aistatemachinethread.h
index 193c2e0d4..bf70be6c7 100644
--- a/indra/aistatemachine/aistatemachinethread.h
+++ b/indra/aistatemachine/aistatemachinethread.h
@@ -34,6 +34,7 @@
#include "aistatemachine.h"
#include "llthread.h"
#include "aithreadsafe.h"
+#include
#ifdef EXAMPLE_CODE // undefined
@@ -235,7 +236,7 @@ class AIStateMachineThread : public AIStateMachineThreadBase {
/*virtual*/ const char* getName() const
{
#define STRIZE(arg) #arg
- return "AIStateMachineThread<"STRIZE(THREAD_IMPL)">";
+ return (boost::format("%1%%2%%3%") % "AIStateMachineThread<" % STRIZE(THREAD_IMPL) % ">").str().c_str();
#undef STRIZE
}
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 139a10b3c..f6d570c3f 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -40,22 +40,6 @@ set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
# Platform-specific compilation flags.
if (WINDOWS)
- # Various libs are compiler specific, generate some variables here we can just use
- # when we require them instead of reimplementing the test each time.
- if (MSVC10)
- set(MSVC_DIR 10.0)
- set(MSVC_SUFFIX 100)
- elseif (MSVC12)
- set(MSVC_DIR 12.0)
- set(MSVC_SUFFIX 120)
- endif (MSVC10)
-
- # Remove default /Zm1000 flag that cmake inserts
- string (REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-
- # Always use /Zm140
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm140")
-
# Don't build DLLs.
set(BUILD_SHARED_LIBS OFF)
@@ -70,56 +54,44 @@ if (WINDOWS)
set(CMAKE_C_FLAGS_RELEASE
"${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /fp:fast"
CACHE STRING "C compiler release options" FORCE)
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
+
+ if (WORD_SIZE EQUAL 32)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
+ endif (WORD_SIZE EQUAL 32)
set(CMAKE_CXX_STANDARD_LIBRARIES "")
set(CMAKE_C_STANDARD_LIBRARIES "")
add_definitions(
/DLL_WINDOWS=1
+ /DNOMINMAX
/DUNICODE
- /D_UNICODE
+ /D_UNICODE
/GS
/TP
/W3
/c
/Zc:forScope
- /Zc:wchar_t-
+ /Zc:rvalueCast
+ /Zc:wchar_t
/nologo
/Oy-
+ /Zm140
+ /wd4267
+ /wd4244
)
-
- # SSE2 is implied on win64
- if(WORD_SIZE EQUAL 32)
- add_definitions(/arch:SSE2 /D_ATL_XP_TARGETING)
- else(WORD_SIZE EQUAL 32)
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4267 /wd4250 /wd4244")
- endif(WORD_SIZE EQUAL 32)
if (WORD_SIZE EQUAL 32)
- # configure win32 API for windows XP+ compatibility
- set(WINVER "0x0501" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
- add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
- else (WORD_SIZE EQUAL 32)
- # configure win32 API for windows vista+ compatibility
- set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
- add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
+ add_compile_options(/arch:SSE2)
endif (WORD_SIZE EQUAL 32)
- # Use special XP-compatible toolchain on 32-bit builds
- if (MSVC12 AND (WORD_SIZE EQUAL 32))
- set(CMAKE_GENERATOR_TOOLSET "v120xp")
- endif (MSVC12 AND (WORD_SIZE EQUAL 32))
-
- # Are we using the crummy Visual Studio KDU build workaround?
if (NOT DISABLE_FATAL_WARNINGS)
add_definitions(/WX)
endif (NOT DISABLE_FATAL_WARNINGS)
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
- SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO")
- SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /MANIFEST:NO")
-
+ # configure win32 API for windows Vista+ compatibility
+ set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
+ add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
endif (WINDOWS)
set (GCC_EXTRA_OPTIMIZATIONS "-ffast-math")
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index c47363aa1..f43b3fda1 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -13,37 +13,43 @@ if (STANDALONE)
else (STANDALONE)
use_prebuilt_binary(apr_suite)
if (WINDOWS)
+ if (LLCOMMON_LINK_SHARED)
+ set(APR_selector "lib")
+ else (LLCOMMON_LINK_SHARED)
+ set(APR_selector "")
+ endif (LLCOMMON_LINK_SHARED)
set(APR_LIBRARIES
- debug libapr-1.lib
- optimized libapr-1.lib
+ debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}apr-1.lib
+ optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apr-1.lib
)
set(APRICONV_LIBRARIES
- debug libapriconv-1.lib
- optimized libapriconv-1.lib
+ debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}apriconv-1.lib
+ optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}apriconv-1.lib
)
set(APRUTIL_LIBRARIES
- debug libaprutil-1.lib
- optimized libaprutil-1.lib
+ debug ${ARCH_PREBUILT_DIRS_DEBUG}/${APR_selector}aprutil-1.lib ${APRICONV_LIBRARIES}
+ optimized ${ARCH_PREBUILT_DIRS_RELEASE}/${APR_selector}aprutil-1.lib ${APRICONV_LIBRARIES}
)
+ if(NOT LLCOMMON_LINK_SHARED)
+ list(APPEND APR_LIBRARIES Rpcrt4)
+ endif(NOT LLCOMMON_LINK_SHARED)
elseif (DARWIN)
- set(APR_LIBRARIES
- debug libapr-1.0.dylib
- optimized libapr-1.0.dylib
- )
- set(APRUTIL_LIBRARIES
- debug libaprutil-1.dylib
- optimized libaprutil-1.dylib
- )
+ if (LLCOMMON_LINK_SHARED)
+ set(APR_selector "0.dylib")
+ set(APRUTIL_selector "0.dylib")
+ else (LLCOMMON_LINK_SHARED)
+ set(APR_selector "a")
+ set(APRUTIL_selector "a")
+ endif (LLCOMMON_LINK_SHARED)
+ set(APR_LIBRARIES libapr-1.${APR_selector})
+ set(APRUTIL_LIBRARIES libaprutil-1.${APRUTIL_selector})
set(APRICONV_LIBRARIES iconv)
else (WINDOWS)
set(APR_LIBRARIES apr-1)
set(APRUTIL_LIBRARIES aprutil-1)
set(APRICONV_LIBRARIES iconv)
endif (WINDOWS)
- set(APR_INCLUDE_DIR
- ${LIBS_PREBUILT_DIR}/include/apr-1
- ${LIBS_PREBUILT_LEGACY_DIR}/include/apr-1
- )
+ set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)
if (LINUX)
list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES})
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
index 27633ff72..131d20b18 100644
--- a/indra/cmake/Audio.cmake
+++ b/indra/cmake/Audio.cmake
@@ -8,11 +8,8 @@ if (STANDALONE)
pkg_check_modules(VORBISENC REQUIRED vorbisenc)
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
else (STANDALONE)
- use_prebuilt_binary(ogg-vorbis)
- set(VORBIS_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ use_prebuilt_binary(ogg_vorbis)
+ set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 0421b1c9e..844d5dc49 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -11,11 +11,8 @@ if (STANDALONE)
find_package(Boost 1.51.0 COMPONENTS date_time filesystem program_options regex system thread wave context)
else (STANDALONE)
use_prebuilt_binary(boost)
- set(Boost_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
- set(Boost_VERSION "1.52")
+ set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+ set(Boost_VERSION "1.60")
if (WINDOWS)
set(Boost_CONTEXT_LIBRARY
diff --git a/indra/cmake/BuildPackagesInfo.cmake b/indra/cmake/BuildPackagesInfo.cmake
new file mode 100644
index 000000000..a764e9b42
--- /dev/null
+++ b/indra/cmake/BuildPackagesInfo.cmake
@@ -0,0 +1,11 @@
+# -*- cmake -*-
+# Construct the version and copyright information based on package data.
+include(Python)
+include(Variables)
+
+add_custom_command(OUTPUT packages-info.txt
+ COMMENT "Generating packages-info.txt for the about box"
+ MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/../autobuild.xml
+ DEPENDS ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py -p=${AUTOBUILD_PLATFORM_NAME} > packages-info.txt
+ )
diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake
index 457a1bb16..81a228706 100644
--- a/indra/cmake/BuildVersion.cmake
+++ b/indra/cmake/BuildVersion.cmake
@@ -1,81 +1,54 @@
# -*- cmake -*-
+# Construct the viewer version number based on the indra/VIEWER_VERSION file
-# Read version components from the header file.
-file(STRINGS ${LIBS_OPEN_DIR}/llcommon/llversionviewer.h.in lines
- REGEX " LL_VERSION_")
-foreach(line ${lines})
- string(REGEX REPLACE ".*LL_VERSION_([A-Z]+).*" "\\1" comp "${line}")
- string(REGEX REPLACE ".* = ([0-9]+);.*" "\\1" value "${line}")
- set(v${comp} "${value}")
-endforeach(line)
+if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/newview/
+ set(VIEWER_VERSION_BASE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/newview/VIEWER_VERSION.txt")
-execute_process(
- COMMAND git rev-list HEAD
- OUTPUT_VARIABLE GIT_REV_LIST_STR
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_STRIP_TRAILING_WHITESPACE
-)
+ if ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
+ file(STRINGS ${VIEWER_VERSION_BASE_FILE} VIEWER_SHORT_VERSION REGEX "^[0-9]+\\.[0-9]+\\.[0-9]+")
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" VIEWER_VERSION_MAJOR ${VIEWER_SHORT_VERSION})
+ string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" VIEWER_VERSION_MINOR ${VIEWER_SHORT_VERSION})
+ string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" VIEWER_VERSION_PATCH ${VIEWER_SHORT_VERSION})
-if(GIT_REV_LIST_STR)
- string(REPLACE "\n" ";" GIT_REV_LIST ${GIT_REV_LIST_STR})
-else()
- string(REPLACE "\n" ";" GIT_REV_LIST "")
-endif()
+ if (DEFINED ENV{revision})
+ set(VIEWER_VERSION_REVISION $ENV{revision})
+ message("Revision (from environment): ${VIEWER_VERSION_REVISION}")
-if(GIT_REV_LIST)
- list(LENGTH GIT_REV_LIST vBUILD)
-else()
- set(vBUILD 99)
-endif()
+ else (DEFINED ENV{revision})
+ execute_process(
+ COMMAND git rev-list HEAD
+ OUTPUT_VARIABLE GIT_REV_LIST_STR
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
-configure_file(
- ${CMAKE_SOURCE_DIR}/llcommon/llversionviewer.h.in
- ${CMAKE_SOURCE_DIR}/llcommon/llversionviewer.h
-)
+ if(GIT_REV_LIST_STR)
+ string(REPLACE "\n" ";" GIT_REV_LIST ${GIT_REV_LIST_STR})
+ else()
+ string(REPLACE "\n" ";" GIT_REV_LIST "")
+ endif()
-if (WINDOWS)
- configure_file(
- ${CMAKE_SOURCE_DIR}/newview/res/viewerRes.rc.in
- ${CMAKE_SOURCE_DIR}/newview/res/viewerRes.rc
- )
-endif (WINDOWS)
+ if(GIT_REV_LIST)
+ list(LENGTH GIT_REV_LIST VIEWER_VERSION_REVISION)
+ else(GIT_REV_LIST)
+ set(VIEWER_VERSION_REVISION 99)
+ endif(GIT_REV_LIST)
+ endif (DEFINED ENV{revision})
+ message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
+ else ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
+ message(SEND_ERROR "Cannot get viewer version from '${VIEWER_VERSION_BASE_FILE}'")
+ endif ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
-if (DARWIN)
- configure_file(
- ${CMAKE_SOURCE_DIR}/newview/English.lproj/InfoPlist.strings.in
- ${CMAKE_SOURCE_DIR}/newview/English.lproj/InfoPlist.strings
- )
-endif (DARWIN)
-
-if (LINUX)
- configure_file(
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/wrapper.sh.in
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/wrapper.sh
- @ONLY
- )
- configure_file(
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/handle_secondlifeprotocol.sh.in
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/handle_secondlifeprotocol.sh
- @ONLY
- )
- configure_file(
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/install.sh.in
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/install.sh
- @ONLY
- )
- configure_file(
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/refresh_desktop_app_entry.sh.in
- ${CMAKE_SOURCE_DIR}/newview/linux_tools/refresh_desktop_app_entry.sh
- @ONLY
- )
-endif (LINUX)
-
-
-# Compose the version.
-set(${ROOT_PROJECT_NAME}_VERSION "${vMAJOR}.${vMINOR}.${vPATCH}.${vBUILD}")
-if (${ROOT_PROJECT_NAME}_VERSION MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$")
- message(STATUS "Version is ${${ROOT_PROJECT_NAME}_VERSION}")
-else (${ROOT_PROJECT_NAME}_VERSION MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$")
- message(FATAL_ERROR "Could not determine version (${${ROOT_PROJECT_NAME}_VERSION})")
-endif (${ROOT_PROJECT_NAME}_VERSION MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$")
+ if ("${VIEWER_VERSION_REVISION}" STREQUAL "")
+ message("Ultimate fallback, revision was blank or not set: will use 0")
+ set(VIEWER_VERSION_REVISION 0)
+ endif ("${VIEWER_VERSION_REVISION}" STREQUAL "")
+ set(VIEWER_CHANNEL_VERSION_DEFINES
+ "LL_VIEWER_CHANNEL=\"${VIEWER_CHANNEL}\""
+ "LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}"
+ "LL_VIEWER_VERSION_MINOR=${VIEWER_VERSION_MINOR}"
+ "LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}"
+ "LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}"
+ )
+endif (NOT DEFINED VIEWER_SHORT_VERSION)
diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake
index 062b283c1..02fad1f55 100644
--- a/indra/cmake/CARes.cmake
+++ b/indra/cmake/CARes.cmake
@@ -20,8 +20,5 @@ else (STANDALONE)
else (WINDOWS)
set(CARES_LIBRARIES cares)
endif (WINDOWS)
- set(CARES_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include/ares
- ${LIBS_PREBUILT_LEGACY_DIR}/include/ares
- )
+ set(CARES_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/ares)
endif (STANDALONE)
diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake
new file mode 100644
index 000000000..9cfb7d14c
--- /dev/null
+++ b/indra/cmake/CEFPlugin.cmake
@@ -0,0 +1,40 @@
+# -*- cmake -*-
+include(Linking)
+include(Prebuilt)
+
+if (USESYSTEMLIBS)
+ set(CEFPLUGIN OFF CACHE BOOL
+ "CEFPLUGIN support for the llplugin/llmedia test apps.")
+else (USESYSTEMLIBS)
+ use_prebuilt_binary(llceflib)
+ set(CEFPLUGIN ON CACHE BOOL
+ "CEFPLUGIN support for the llplugin/llmedia test apps.")
+ set(CEF_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/cef)
+endif (USESYSTEMLIBS)
+
+if (WINDOWS)
+ set(CEF_PLUGIN_LIBRARIES
+ libcef.lib
+ libcef_dll_wrapper.lib
+ llceflib.lib
+ )
+elseif (DARWIN)
+ FIND_LIBRARY(APPKIT_LIBRARY AppKit)
+ if (NOT APPKIT_LIBRARY)
+ message(FATAL_ERROR "AppKit not found")
+ endif()
+
+ FIND_LIBRARY(CEF_LIBRARY "Chromium Embedded Framework" ${ARCH_PREBUILT_DIRS_RELEASE})
+ if (NOT CEF_LIBRARY)
+ message(FATAL_ERROR "CEF not found")
+ endif()
+
+ set(CEF_PLUGIN_LIBRARIES
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libLLCefLib.a
+ ${APPKIT_LIBRARY}
+ ${CEF_LIBRARY}
+ )
+
+elseif (LINUX)
+endif (WINDOWS)
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index c6d716fed..708db7571 100644
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -16,22 +16,21 @@ set(cmake_SOURCE_FILES
Boost.cmake
BuildVersion.cmake
CARes.cmake
+ CEFPlugin.cmake
CMakeCopyIfDifferent.cmake
CURL.cmake
Colladadom.cmake
ConfigurePkgConfig.cmake
- CopyBackToSource.cmake
- CopyWinLibs.cmake
+ Copy3rdPartyLibs.cmake
Cwdebug.cmake
DBusGlib.cmake
- DirectX.cmake
- DownloadPrebuilt.cmake.in
+ DeploySharedLibs.cmake
ELFIO.cmake
EXPAT.cmake
ExamplePlugin.cmake
- FMODEX.cmake
FMODSTUDIO.cmake
FindAPR.cmake
+ FindAutobuild.cmake
FindBerkeleyDB.cmake
FindCARes.cmake
FindColladadom.cmake
@@ -41,7 +40,6 @@ set(cmake_SOURCE_FILES
FindGooglePerfTools.cmake
FindHunSpell.cmake
FindJsonCpp.cmake
- FindLLQtWebkit.cmake
FindNDOF.cmake
FindOpenJPEG.cmake
FindTut.cmake
@@ -71,8 +69,8 @@ set(cmake_SOURCE_FILES
LLPrimitive.cmake
LLPhysicsExtensions.cmake
LLSharedLibs.cmake
- LLQtWebkit.cmake
LLRender.cmake
+ LLSharedLibs.cmake
LLUI.cmake
LLVFS.cmake
LLWindow.cmake
@@ -91,7 +89,6 @@ set(cmake_SOURCE_FILES
Prebuilt.cmake
PulseAudio.cmake
Python.cmake
- Qt4.cmake
QuickTimePlugin.cmake
RunBuildTest.cmake
StateMachine.cmake
@@ -101,7 +98,7 @@ set(cmake_SOURCE_FILES
UnixInstall.cmake
Variables.cmake
ViewerMiscLibs.cmake
- WebKitLibPlugin.cmake
+ WinManifest.cmake
XmlRpcEpi.cmake
ZLIB.cmake
)
@@ -110,7 +107,6 @@ source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
set(master_SOURCE_FILES
../CMakeLists.txt
- ../develop.py
)
source_group("Master Rules" FILES ${master_SOURCE_FILES})
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
index 8463d6531..0aafa312d 100644
--- a/indra/cmake/CURL.cmake
+++ b/indra/cmake/CURL.cmake
@@ -18,8 +18,5 @@ else (STANDALONE)
list(APPEND CURL_LIBRARIES idn)
endif(LINUX AND WORD_SIZE EQUAL 64)
endif (WINDOWS)
- set(CURL_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ set(CURL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
endif (STANDALONE)
diff --git a/indra/cmake/Colladadom.cmake b/indra/cmake/Colladadom.cmake
index afc8bcce0..e4eb71af0 100644
--- a/indra/cmake/Colladadom.cmake
+++ b/indra/cmake/Colladadom.cmake
@@ -10,49 +10,22 @@ if (STANDALONE)
include (FindColladadom)
else (STANDALONE)
use_prebuilt_binary(colladadom)
-
- if (NOT WINDOWS AND NOT LINUX)
- use_prebuilt_binary(pcre)
- endif (NOT WINDOWS AND NOT LINUX)
-
- if (NOT DARWIN AND NOT WINDOWS)
- use_prebuilt_binary(libxml)
- endif (NOT DARWIN AND NOT WINDOWS)
-
set(COLLADADOM_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include/collada
- ${LIBS_PREBUILT_DIR}/include/collada/1.4
- ${LIBS_PREBUILT_LEGACY_DIR}/include/collada
- ${LIBS_PREBUILT_LEGACY_DIR}/include/collada/1.4
- )
+ ${LIBS_PREBUILT_DIR}/include/collada
+ ${LIBS_PREBUILT_DIR}/include/collada/1.4
+ )
if (WINDOWS)
- if(MSVC12)
- use_prebuilt_binary(pcre)
- use_prebuilt_binary(libxml)
- set(COLLADADOM_LIBRARIES
- debug libcollada14dom23-sd
- optimized libcollada14dom23-s
- libxml2_a
- debug pcrecppd
- optimized pcrecpp
- debug pcred
- optimized pcre
- ${BOOST_SYSTEM_LIBRARIES}
- )
- else(MSVC12)
- add_definitions(-DDOM_DYNAMIC)
- set(COLLADADOM_LIBRARIES
- debug libcollada14dom22-d
- optimized libcollada14dom22
- )
- endif(MSVC12)
- else (WINDOWS)
- set(COLLADADOM_LIBRARIES
- collada14dom
- minizip
- xml2
- )
+ set(COLLADADOM_LIBRARIES
+ debug libcollada14dom23-sd
+ optimized libcollada14dom23-s
+ )
+ else(WINDOWS)
+ set(COLLADADOM_LIBRARIES
+ debug collada14dom-d
+ optimized collada14dom
+ minizip
+ )
endif (WINDOWS)
endif (STANDALONE)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
new file mode 100644
index 000000000..3ec8b7847
--- /dev/null
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -0,0 +1,244 @@
+# -*- cmake -*-
+
+# The copy_win_libs folder contains file lists and a script used to
+# copy dlls, exes and such needed to run the SecondLife from within
+# VisualStudio.
+
+include(CMakeCopyIfDifferent)
+include(Linking)
+
+###################################################################
+# set up platform specific lists of files that need to be copied
+###################################################################
+if(WINDOWS)
+ set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug")
+ set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo")
+ set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release")
+
+ #*******************************
+ # VIVOX - *NOTE: no debug version
+ set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(vivox_files
+ SLVoice.exe
+ ca-bundle.crt
+ libsndfile-1.dll
+ vivoxplatform.dll
+ vivoxsdk.dll
+ ortp.dll
+ zlib1.dll
+ vivoxoal.dll
+ )
+
+ #*******************************
+ # Misc shared libs
+
+ set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
+ set(debug_files
+ libapr-1.dll
+ libaprutil-1.dll
+ libapriconv-1.dll
+ ssleay32.dll
+ libeay32.dll
+ glod.dll
+ libhunspell.dll
+ )
+
+ set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(release_files
+ libapr-1.dll
+ libaprutil-1.dll
+ libapriconv-1.dll
+ ssleay32.dll
+ libeay32.dll
+ glod.dll
+ libhunspell.dll
+ )
+
+ if(NOT DISABLE_TCMALLOC)
+ set(debug_files ${debug_files} libtcmalloc_minimal-debug.dll)
+ set(release_files ${release_files} libtcmalloc_minimal.dll)
+ endif(NOT DISABLE_TCMALLOC)
+
+ if (FMODSTUDIO)
+ if(WORD_SIZE STREQUAL 64)
+ set(debug_files ${debug_files} fmodL64.dll)
+ set(release_files ${release_files} fmod64.dll)
+ else(WORD_SIZE STREQUAL 64)
+ set(debug_files ${debug_files} fmodL.dll)
+ set(release_files ${release_files} fmod.dll)
+ endif(WORD_SIZE STREQUAL 64)
+ endif (FMODSTUDIO)
+elseif(DARWIN)
+ set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources")
+ set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources")
+ set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}/Release/Resources")
+
+ set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(vivox_files
+ SLVoice
+ ca-bundle.crt
+ libsndfile.dylib
+ libvivoxoal.dylib
+ libortp.dylib
+ libvivoxplatform.dylib
+ libvivoxsdk.dylib
+ )
+ set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
+ set(debug_files
+ )
+ set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(release_files
+ libapr-1.0.dylib
+ libapr-1.dylib
+ libaprutil-1.0.dylib
+ libaprutil-1.dylib
+ libexception_handler.dylib
+ libexpat.1.5.2.dylib
+ libexpat.dylib
+ libGLOD.dylib
+ libhunspell-1.3.0.dylib
+ libndofdev.dylib
+ )
+
+ if (FMODSTUDIO)
+ set(debug_files ${debug_files} libfmodL.dylib)
+ set(release_files ${release_files} libfmod.dylib)
+ endif (FMODSTUDIO)
+
+elseif(LINUX)
+ # linux is weird, multiple side by side configurations aren't supported
+ # and we don't seem to have any debug shared libs built yet anyways...
+ set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}")
+ set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO "${SHARED_LIB_STAGING_DIR}")
+ set(SHARED_LIB_STAGING_DIR_RELEASE "${SHARED_LIB_STAGING_DIR}")
+
+ set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(vivox_files
+ libsndfile.so.1
+ libortp.so
+ libvivoxoal.so.1
+ libvivoxplatform.so
+ libvivoxsdk.so
+ SLVoice
+ # ca-bundle.crt #No cert for linux. It is actually still 3.2SDK.
+ )
+ # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
+ # or ARCH_PREBUILT_DIRS
+ set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
+ set(debug_files
+ )
+ # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
+ # or ARCH_PREBUILT_DIRS
+ set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ # *FIX - figure out what to do with duplicate libalut.so here -brad
+ set(release_files
+ libapr-1.so.0
+ libaprutil-1.so.0
+ libatk-1.0.so
+ libdb-5.1.so
+ libexpat.so
+ libexpat.so.1
+ libfreetype.so.6.6.2
+ libfreetype.so.6
+ libGLOD.so
+ libgmodule-2.0.so
+ libgobject-2.0.so
+ libhunspell-1.3.so.0.0.0
+ libopenal.so
+ libopenjpeg.so
+ libuuid.so.16
+ libuuid.so.16.0.22
+ libfontconfig.so.1.8.0
+ libfontconfig.so.1
+ )
+
+ if (USE_TCMALLOC)
+ set(release_files ${release_files} "libtcmalloc_minimal.so")
+ endif (USE_TCMALLOC)
+
+ if (FMODSTUDIO)
+ set(debug_files ${debug_files} "libfmodL.so")
+ set(release_files ${release_files} "libfmod.so")
+ endif (FMODSTUDIO)
+
+else(WINDOWS)
+ message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
+ set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
+ set(vivox_files "")
+ # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
+ # or ARCH_PREBUILT_DIRS
+ set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/debug")
+ set(debug_files "")
+ # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
+ # or ARCH_PREBUILT_DIRS
+ set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release")
+ set(release_files "")
+
+ set(debug_llkdu_src "")
+ set(debug_llkdu_dst "")
+ set(release_llkdu_src "")
+ set(release_llkdu_dst "")
+ set(relwithdebinfo_llkdu_dst "")
+endif(WINDOWS)
+
+
+################################################################
+# Done building the file lists, now set up the copy commands.
+################################################################
+
+copy_if_different(
+ ${vivox_src_dir}
+ "${SHARED_LIB_STAGING_DIR_DEBUG}"
+ out_targets
+ ${vivox_files}
+ )
+set(third_party_targets ${third_party_targets} ${out_targets})
+
+copy_if_different(
+ ${vivox_src_dir}
+ "${SHARED_LIB_STAGING_DIR_RELEASE}"
+ out_targets
+ ${vivox_files}
+ )
+set(third_party_targets ${third_party_targets} ${out_targets})
+
+copy_if_different(
+ ${vivox_src_dir}
+ "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
+ out_targets
+ ${vivox_files}
+ )
+set(third_party_targets ${third_party_targets} ${out_targets})
+
+
+
+copy_if_different(
+ ${debug_src_dir}
+ "${SHARED_LIB_STAGING_DIR_DEBUG}"
+ out_targets
+ ${debug_files}
+ )
+set(third_party_targets ${third_party_targets} ${out_targets})
+
+copy_if_different(
+ ${release_src_dir}
+ "${SHARED_LIB_STAGING_DIR_RELEASE}"
+ out_targets
+ ${release_files}
+ )
+set(third_party_targets ${third_party_targets} ${out_targets})
+
+copy_if_different(
+ ${release_src_dir}
+ "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
+ out_targets
+ ${release_files}
+ )
+set(third_party_targets ${third_party_targets} ${out_targets})
+
+if(NOT USESYSTEMLIBS)
+ add_custom_target(
+ stage_third_party_libs ALL
+ DEPENDS ${third_party_targets}
+ )
+endif(NOT USESYSTEMLIBS)
diff --git a/indra/cmake/CopyBackToSource.cmake b/indra/cmake/CopyBackToSource.cmake
deleted file mode 100644
index d09a216e8..000000000
--- a/indra/cmake/CopyBackToSource.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- cmake -*-
-# Copies a binary back to the source directory
-
-MACRO(COPY_BACK_TO_SOURCE target)
- SET(FROM $)
- SET(TO ${CMAKE_CURRENT_SOURCE_DIR})
- #MESSAGE("TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${FROM} ${TO}")
- ADD_CUSTOM_COMMAND(
- TARGET ${target} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${FROM} ${TO}
- DEPENDS ${FROM}
- COMMENT "Copying ${target} to ${CMAKE_CURRENT_BINARY_DIR}"
- )
-ENDMACRO(COPY_BACK_TO_SOURCE)
-
-
diff --git a/indra/cmake/CopyWinLibs.cmake.in b/indra/cmake/CopyWinLibs.cmake.in
deleted file mode 100644
index 16be776d6..000000000
--- a/indra/cmake/CopyWinLibs.cmake.in
+++ /dev/null
@@ -1,181 +0,0 @@
-# -*- cmake -*-
-
-# The copy_win_libs folder contains file lists and a script used to
-# copy dlls, exes and such needed to run the SecondLife from within
-# VisualStudio.
-
-set(LIBS_PREBUILT_DIR "@LIBS_PREBUILT_DIR@")
-set(LIBS_PREBUILT_LEGACY_DIR "@LIBS_PREBUILT_LEGACY_DIR@")
-set(MSVC10 "@MSVC10@")
-set(WORD_SIZE "@WORD_SIZE@")
-
-set(LIBS_RELEASE_DIR
- ${LIBS_PREBUILT_DIR}/lib/release
- ${LIBS_PREBUILT_LEGACY_DIR}/lib/release
- )
-set(LIBS_DEBUG_DIR
- ${LIBS_PREBUILT_DIR}/lib/debug
- ${LIBS_PREBUILT_LEGACY_DIR}/lib/debug
- )
-
-function(copy_files paths names dest)
- string(FIND ${dest} ${CUR_CONFIG} idx)
- if(${idx} LESS 0)
- return()
- endif(${idx} LESS 0)
- foreach(f ${names})
- foreach(p ${paths})
- set(from_file "${p}/${f}")
- set(to_dest "${CMAKE_BINARY_DIR}/newview/${dest}/")
- if(EXISTS ${from_file})
- message("Copying ${from_file} to ${to_dest}")
- if(NOT EXISTS ${to_dest})
- execute_process(COMMAND md "${to_dest}")
- endif(NOT EXISTS ${to_dest})
- execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${from_file}" "${to_dest}${f}" RESULT_VARIABLE result)
- if(${result})
- message(SEND_ERROR "Unsuccessful.")
- endif(${result})
- set(found 1)
- break()
- endif(EXISTS ${from_file})
- endforeach(p)
- if(NOT found)
- message(SEND_ERROR "Failed to find library: ${f}")
- endif(NOT found)
- endforeach(f)
-endfunction(copy_files)
-
-set(vivox_files
- ca-bundle.crt
- libsndfile-1.dll
- ortp.dll
- SLVoice.exe
- vivoxoal.dll
- vivoxplatform.dll
- vivoxsdk.dll
- zlib1.dll
- )
-copy_files("${LIBS_RELEASE_DIR}" "${vivox_files}" "Release" )
-copy_files("${LIBS_RELEASE_DIR}" "${vivox_files}" "RelWithDebInfo")
-copy_files("${LIBS_DEBUG_DIR}" "${vivox_files}" "Debug")
-
-set(release_files
- libhunspell.dll
- libapr-1.dll
- libaprutil-1.dll
- libapriconv-1.dll
- libeay32.dll
- ssleay32.dll
- glod.dll
- qtcore4.dll
- )
-copy_files("${LIBS_RELEASE_DIR}" "${release_files}" "Release")
-copy_files("${LIBS_RELEASE_DIR}" "${release_files}" "RelWithDebInfo")
-copy_files("${LIBS_DEBUG_DIR}" "${release_files}" "Debug")
-
-if(MSVC10)
- copy_files("${LIBS_DEBUG_DIR}" "libcollada14dom22-d.dll" "Debug")
-endif(MSVC10)
-
-if(WORD_SIZE EQUAL 32)
-set(release_files
- libcollada14dom22.dll
- libtcmalloc_minimal.dll
- )
- copy_files("${LIBS_RELEASE_DIR}" "${release_files}" "Release")
- copy_files("${LIBS_RELEASE_DIR}" "${release_files}" "RelWithDebInfo")
-endif(WORD_SIZE EQUAL 32)
-
-set(plugins_release_files
- libeay32.dll
- qtcore4.dll
- qtgui4.dll
- qtnetwork4.dll
- qtopengl4.dll
- qtwebkit4.dll
- ssleay32.dll
- qtxmlpatterns4.dll
- )
-copy_files("${LIBS_RELEASE_DIR}" "${plugins_release_files}" "Release/llplugin")
-copy_files("${LIBS_RELEASE_DIR}" "${plugins_release_files}" "RelWithDebInfo/llplugin")
-if(0)
- copy_files("${LIBS_RELEASE_DIR}" "${plugin_release_files}" "../test_apps/llplugintest/Release")
- copy_files("${LIBS_RELEASE_DIR}" "${plugin_release_files}" "../test_apps/llplugintest/RelWithDebInfo")
-endif(0)
-
-# Debug config runtime files required for the plugins
-set(plugins_debug_files
- libeay32.dll
- qtcored4.dll
- qtguid4.dll
- qtnetworkd4.dll
- qtopengld4.dll
- qtwebkitd4.dll
- ssleay32.dll
- qtxmlpatternsd4.dll
- )
-copy_files("${LIBS_DEBUG_DIR}" "${plugins_debug_files}" "Debug/llplugin")
-if(0)
- copy_files("${LIBS_DEBUG_DIR}" "${plugins_debug_files}" "../test_apps/llplugintest/Debug")
-endif(0)
-
-# Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins)
-set(plugin_image_release_files
- qgif4.dll
- qico4.dll
- qjpeg4.dll
- qmng4.dll
- qsvg4.dll
- qtiff4.dll
- )
-copy_files("${LIBS_RELEASE_DIR}/imageformats" "${plugin_image_release_files}" "Release/llplugin/imageformats")
-copy_files("${LIBS_RELEASE_DIR}/imageformats" "${plugin_image_release_files}" "RelWithDebInfo/llplugin/imageformats")
-if(0)
- copy_files("${LIBS_RELEASE_DIR}/imageformats" "${plugin_image_release_files}" "../test_apps/llplugintest/imageformats/Release")
- copy_files("${LIBS_RELEASE_DIR}/imageformats" "${plugin_image_release_files}" "../test_apps/llplugintest/imageformats/RelWithDebInfo")
-endif(0)
-
-
-# Debug config runtime files required for the plugin test mule (Qt image format plugins)
-set(plugin_image_debug_files
- qgifd4.dll
- qicod4.dll
- qjpegd4.dll
- qmngd4.dll
- qsvgd4.dll
- qtiffd4.dll
- )
-copy_files("${LIBS_DEBUG_DIR}/imageformats" "${plugin_image_debug_files}" "Debug/llplugin/imageformats")
-if(0)
- copy_files("${LIBS_DEBUG_DIR}/imageformats" "${plugin_image_debug_files}" "../test_apps/llplugintest/imageformats/Debug")
-endif(0)
-
-# Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins)
-set(plugin_codec_release_files
- qcncodecs4.dll
- qjpcodecs4.dll
- qkrcodecs4.dll
- qtwcodecs4.dll
- )
-copy_files("${LIBS_RELEASE_DIR}/codecs" "${plugin_codec_release_files}" "Release/llplugin/codecs")
-copy_files("${LIBS_RELEASE_DIR}/codecs" "${plugin_codec_release_files}" "RelWithDebInfo/llplugin/codecs")
-if(0)
- copy_files("${LIBS_RELEASE_DIR}/codecs" "${plugin_codec_release_files}" "../test_apps/llplugintest/codecs/Release")
- copy_files("${LIBS_RELEASE_DIR}/codecs" "${plugin_codec_release_files}" "../test_apps/llplugintest/codecs/RelWithDebInfo")
-endif(0)
-
-# Debug config runtime files required for the plugin test mule (Qt image format plugins)
-set(plugin_codec_debug_files
- qcncodecsd4.dll
- qjpcodecsd4.dll
- qkrcodecsd4.dll
- qtwcodecsd4.dll
- )
-copy_files("${LIBS_DEBUG_DIR}/codecs" "${plugin_codec_debug_files}" "Debug/llplugin/codecs")
-if(0)
- copy_files("${LIBS_DEBUG_DIR}/codecs" "${plugin_codec_debug_files}" "../test_apps/llplugintest/codecs/Debug")
-endif(0)
-
-
-
diff --git a/indra/cmake/DeploySharedLibs.cmake b/indra/cmake/DeploySharedLibs.cmake
new file mode 100644
index 000000000..41b7e6a5b
--- /dev/null
+++ b/indra/cmake/DeploySharedLibs.cmake
@@ -0,0 +1,70 @@
+# DeploySharedLibs.cmake
+# This is a script to be run at build time! Its not part of the cmake configuration!
+# See indra/cmake/LLSharedLibs.cmake for a macro that simplifies adding a command to a target to run this script.
+
+# This script requires a few cmake variable to be set on the command line:
+# BIN_NAME= The full path the the binary to search for dependecies.
+# SEARCH_DIRS= The full paths to dirs to search for dependencies.
+# DST_PATH= The full path where the dependecies will be copied.
+get_filename_component(current_dir ${CMAKE_CURRENT_LIST_FILE} PATH)
+include(GetPrerequisites)
+
+message("Getting recursive dependencies for file: ${BIN_NAME}")
+
+set(EXCLUDE_SYSTEM 1)
+set(RECURSE 0)
+get_filename_component(EXE_PATH ${BIN_NAME} PATH)
+
+get_prerequisites( ${BIN_NAME} RESULTS ${EXCLUDE_SYSTEM} ${RECURSE} "${EXE_PATH}" "${SEARCH_DIRS}" )
+
+foreach(DEP ${RESULTS})
+ Message("Processing dependency: ${DEP}")
+ get_filename_component(DEP_FILE ${DEP} NAME)
+ set(DEP_FILES ${DEP_FILES} ${DEP_FILE})
+endforeach(DEP)
+
+if(DEP_FILES)
+ list(REMOVE_DUPLICATES DEP_FILES)
+endif(DEP_FILES)
+
+foreach(DEP_FILE ${DEP_FILES})
+ if(FOUND_FILES)
+ list(FIND FOUND_FILES ${DEP_FILE} FOUND)
+ else(FOUND_FILES)
+ set(FOUND -1)
+ endif(FOUND_FILES)
+
+ if(FOUND EQUAL -1)
+ find_path(DEP_PATH ${DEP_FILE} PATHS ${SEARCH_DIRS} NO_DEFAULT_PATH)
+ if(DEP_PATH)
+ set(FOUND_FILES ${FOUND_FILES} "${DEP_PATH}/${DEP_FILE}")
+ set(DEP_PATH NOTFOUND) #reset DEP_PATH for the next find_path call.
+ else(DEP_PATH)
+ set(MISSING_FILES ${MISSING_FILES} ${DEP_FILE})
+ endif(DEP_PATH)
+ endif(FOUND EQUAL -1)
+endforeach(DEP_FILE)
+
+if(MISSING_FILES)
+ message("Missing:")
+ foreach(FILE ${MISSING_FILES})
+ message(" ${FILE}")
+ endforeach(FILE)
+ message("Searched in:")
+ foreach(SEARCH_DIR ${SEARCH_DIRS})
+ message(" ${SEARCH_DIR}")
+ endforeach(SEARCH_DIR)
+ message(FATAL_ERROR "Failed")
+endif(MISSING_FILES)
+
+if(FOUND_FILES)
+ foreach(FILE ${FOUND_FILES})
+ get_filename_component(DST_FILE ${FILE} NAME)
+ set(DST_FILE "${DST_PATH}/${DST_FILE}")
+ message("Copying ${FILE} to ${DST_FILE}")
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILE} ${DST_FILE}
+ )
+ endforeach(FILE ${FOUND_FILES})
+endif(FOUND_FILES)
+message("Success!")
diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake
deleted file mode 100644
index 56547bb7d..000000000
--- a/indra/cmake/DirectX.cmake
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- cmake -*-
-
-include(Variables)
-
-if (WINDOWS)
- if (WORD_SIZE EQUAL 32)
- set (DIRECTX_ARCHITECTURE x86)
- elseif (WORD_SIZE EQUAL 64)
- set (DIRECTX_ARCHITECTURE x64)
- else (WORD_SIZE EQUAL 32)
- set (DIRECTX_ARCHITECTURE x86)
- endif (WORD_SIZE EQUAL 32)
-
- SET(program_files $ENV{ProgramW6432})
- if(NOT program_files)
- SET(program_files $ENV{ProgramFiles})
- endif(NOT program_files)
- SET(program_files_x86 "ProgramFiles(x86)")
- SET(program_files_x86 $ENV{${program_files_x86}})
-
- find_path(DIRECTX_ROOT_DIR Include/dxdiag.h
- PATHS
- "$ENV{DXSDK_DIR}"
- "${program_files}/Microsoft DirectX SDK (June 2010)"
- "${program_files_x86}/Microsoft DirectX SDK (June 2010)"
- "${program_files}/Microsoft DirectX SDK (February 2010)"
- "${program_files_x86}/Microsoft DirectX SDK (February 2010)"
- "${program_files}/Microsoft DirectX SDK (March 2009)"
- "${program_files_x86}/Microsoft DirectX SDK (March 2009)"
- "${program_files}/Microsoft DirectX SDK (August 2008)"
- "${program_files_x86}/Microsoft DirectX SDK (August 2008)"
- "${program_files}/Microsoft DirectX SDK (June 2008)"
- "${program_files_x86}/Microsoft DirectX SDK (June 2008)"
- "${program_files}/Microsoft DirectX SDK (March 2008)"
- "${program_files_x86}/Microsoft DirectX SDK (March 2008)"
- "${program_files}/Microsoft DirectX SDK (November 2007)"
- "${program_files_x86}/Microsoft DirectX SDK (November 2007)"
- "${program_files}/Microsoft DirectX SDK (August 2007)"
- "${program_files_x86}/Microsoft DirectX SDK (August 2007)"
- )
-
- if (DIRECTX_ROOT_DIR)
- set (DIRECTX_INCLUDE_DIR "${DIRECTX_ROOT_DIR}/Include")
- set (DIRECTX_LIBRARY_DIR "${DIRECTX_ROOT_DIR}/Lib/${DIRECTX_ARCHITECTURE}")
- else (DIRECTX_ROOT_DIR)
- find_path (WIN_KIT_ROOT_DIR Include/um/windows.h
- PATHS
- "${program_files}/Windows Kits/8.1"
- "${program_files_x86}/Windows Kits/8.1"
- "${program_files}/Windows Kits/8.0"
- "${program_files_x86}/Windows Kits/8.0"
- )
-
- find_path (WIN_KIT_LIB_DIR dxguid.lib
- "${WIN_KIT_ROOT_DIR}/Lib/winv6.3/um/${DIRECTX_ARCHITECTURE}"
- "${WIN_KIT_ROOT_DIR}/Lib/Win8/um/${DIRECTX_ARCHITECTURE}"
- )
-
- if (WIN_KIT_ROOT_DIR AND WIN_KIT_LIB_DIR)
- set (DIRECTX_INCLUDE_DIR "${WIN_KIT_ROOT_DIR}/Include/um" "${WIN_KIT_ROOT_DIR}/Include/shared")
- set (DIRECTX_LIBRARY_DIR "${WIN_KIT_LIB_DIR}")
- endif (WIN_KIT_ROOT_DIR AND WIN_KIT_LIB_DIR)
- endif (DIRECTX_ROOT_DIR)
-
- if (DIRECTX_INCLUDE_DIR)
- include_directories(${DIRECTX_INCLUDE_DIR})
- if (DIRECTX_FIND_QUIETLY)
- message(STATUS "Found DirectX include: ${DIRECTX_INCLUDE_DIR}")
- endif (DIRECTX_FIND_QUIETLY)
- else (DIRECTX_INCLUDE_DIR)
- message(FATAL_ERROR "Could not find DirectX SDK Include")
- endif (DIRECTX_INCLUDE_DIR)
-
- if (DIRECTX_LIBRARY_DIR)
- if (DIRECTX_FIND_QUIETLY)
- message(STATUS "Found DirectX include: ${DIRECTX_LIBRARY_DIR}")
- endif (DIRECTX_FIND_QUIETLY)
- else (DIRECTX_LIBRARY_DIR)
- message(FATAL_ERROR "Could not find DirectX SDK Libraries")
- endif (DIRECTX_LIBRARY_DIR)
-
-endif (WINDOWS)
diff --git a/indra/cmake/DownloadPrebuilt.cmake.in b/indra/cmake/DownloadPrebuilt.cmake.in
deleted file mode 100644
index 5b67fedd4..000000000
--- a/indra/cmake/DownloadPrebuilt.cmake.in
+++ /dev/null
@@ -1,45 +0,0 @@
-# This script drives download of prebuilt packages during the build.
-# The top-level CMakeLists.txt configures packages and tool locations.
-set(packages "@PREBUILT_PACKAGES@")
-set(python "@PYTHON_EXECUTABLE@")
-set(install_dir "@CMAKE_BINARY_DIR@/packages")
-set(scp "@SCP_EXECUTABLE@")
-set(scripts_dir "@SCRIPTS_DIR@")
-set(sentinel_dir "@CMAKE_BINARY_DIR@/prepare")
-set(prebuilt_type "@PREBUILT_TYPE@")
-
-# In proprietary mode we use scp for download.
-set(proprietary "@INSTALL_PROPRIETARY@")
-if(proprietary)
- set(scp_option "--scp=${scp}")
- set(proprietary_message " proprietary")
-endif(proprietary)
-
-foreach(package ${packages})
- if(${install_dir}/install.xml IS_NEWER_THAN ${sentinel_dir}/${package}_installed)
- # This package is missing or out of date.
- message(STATUS "Obtaining${proprietary_message} prebuilt '${package}'")
- execute_process(
- COMMAND ${python} install.py -p${prebuilt_type} --install-dir=${install_dir} --installed-manifest=${install_dir}/installed.xml ${scp_option} ${package}
- WORKING_DIRECTORY ${scripts_dir}
- RESULT_VARIABLE result
- )
- if(result STREQUAL 0)
- # Write a sentinel to avoid attempting a download again.
- file(WRITE ${sentinel_dir}/${package}_installed "Obtained '${package}'")
- else(result STREQUAL 0)
- # Remove the sentinel to ensure a download is attempted again.
- file(REMOVE ${sentinel_dir}/prebuilt
- ${sentinel_dir}/${package}_installed)
- message(FATAL_ERROR
- "Failed to download or unpack prebuilt '${package}'. "
- "Process returned: ${result}")
- endif(result STREQUAL 0)
- else(${install_dir}/install.xml IS_NEWER_THAN ${sentinel_dir}/${package}_installed)
- # This package is ready.
- message(STATUS "Prebuilt '${package}' is up-to-date")
- endif(${install_dir}/install.xml IS_NEWER_THAN ${sentinel_dir}/${package}_installed)
-endforeach(package)
-
-# Store a sentinel to avoid running this script unnecessarily.
-file(WRITE ${sentinel_dir}/prebuilt "All prebuilts obtained successfully\n")
diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake
index bafe1a91e..d11c6a9af 100644
--- a/indra/cmake/EXPAT.cmake
+++ b/indra/cmake/EXPAT.cmake
@@ -9,16 +9,9 @@ if (STANDALONE)
else (STANDALONE)
use_prebuilt_binary(expat)
if (WINDOWS)
- if (MSVC12)
- set(EXPAT_LIBRARIES expat)
- else (MSVC12)
- set(EXPAT_LIBRARIES libexpatMT)
- endif (MSVC12)
+ set(EXPAT_LIBRARIES expat)
else (WINDOWS)
set(EXPAT_LIBRARIES expat)
endif (WINDOWS)
- set(EXPAT_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
endif (STANDALONE)
diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake
deleted file mode 100644
index ae95866c4..000000000
--- a/indra/cmake/FMODEX.cmake
+++ /dev/null
@@ -1,116 +0,0 @@
-# -*- cmake -*-
-
-include(Linking)
-
-if (FMODEX AND FMODSTUDIO)
- message( FATAL_ERROR "You can not enable two FMOD variants at the same time." )
-endif (FMODEX AND FMODSTUDIO)
-
-unset(FMOD_LIBRARY_RELEASE CACHE)
-unset(FMOD_LIBRARY_DEBUG CACHE)
-unset(FMOD_INCLUDE_DIR CACHE)
-
-set(FMOD_EXTERNAL_LIB OFF)
-
-if(STANDALONE OR WINDOWS)
- if (NOT FMODEX_SDK_DIR AND WINDOWS)
- GET_FILENAME_COMPONENT(REG_DIR [HKEY_CURRENT_USER\\Software\\FMOD\ Programmers\ API\ Windows] ABSOLUTE)
- set(FMODEX_SDK_DIR ${REG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
- endif (NOT FMODEX_SDK_DIR AND WINDOWS)
- if(NOT FMODEX_SDK_DIR AND STANDALONE)
- message(FATAL_ERROR "FMODEX_SDK_DIR not set!")
- endif(NOT FMODEX_SDK_DIR AND STANDALONE)
-endif(STANDALONE OR WINDOWS)
-
-if(FMODEX_SDK_DIR)
- set(fmod_lib_paths "${FMODEX_SDK_DIR}/api" "${FMODEX_SDK_DIR}/api/lib" )
- set(fmod_inc_paths "${FMODEX_SDK_DIR}/api/inc")
-
- if(WINDOWS)
- set(CMAKE_FIND_LIBRARY_SUFFIXES_OLD ${CMAKE_FIND_LIBRARY_SUFFIXES})
- set(CMAKE_FIND_LIBRARY_SUFFIXES .dll)
- endif(WINDOWS)
- if(WORD_SIZE EQUAL 64)
- find_library(FMOD_LIBRARY_RELEASE fmodex64 PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- find_library(FMOD_LIBRARY_DEBUG fmodexL64 PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- else(WORD_SIZE EQUAL 64)#Check if CMAKE_FIND_LIBRARY_PREFIXES is set to 'lib' for darwin.
- find_library(FMOD_LIBRARY_RELEASE fmodex PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- find_library(FMOD_LIBRARY_DEBUG fmodexL PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- endif(WORD_SIZE EQUAL 64)
- if(WINDOWS)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_OLD})
- if(WORD_SIZE EQUAL 64)
- find_library(FMOD_LINK_LIBRARY_RELEASE fmodex64_vc PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- find_library(FMOD_LINK_LIBRARY_DEBUG fmodexL64_vc PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- else(WORD_SIZE EQUAL 64)#Check if CMAKE_FIND_LIBRARY_PREFIXES is set to 'lib' for darwin.
- find_library(FMOD_LINK_LIBRARY_RELEASE fmodex_vc PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- find_library(FMOD_LINK_LIBRARY_DEBUG fmodexL_vc PATHS ${fmod_lib_paths} NO_DEFAULT_PATH)
- endif(WORD_SIZE EQUAL 64)
- else(WINDOWS)
- set(FMOD_LINK_LIBRARY_RELEASE ${FMOD_LIBRARY_RELEASE})
- set(FMOD_LINK_LIBRARY_DEBUG ${FMOD_LIBRARY_DEBUG})
- endif(WINDOWS)
- find_path(FMOD_INCLUDE_DIR fmod.hpp ${fmod_inc_paths})
- if(NOT FMOD_LIBRARY_RELEASE OR NOT FMOD_INCLUDE_DIR)
- if(STANDALONE)
- message(FATAL_ERROR "Provided FMODEX_SDK_DIR path not found '{$FMODEX_SDK_DIR}'")
- else(STANDALONE)
- message(STATUS "Provided FMODEX_SDK_DIR path not found '${FMODEX_SDK_DIR}'. Falling back to prebuilts")
- endif(STANDALONE)
- else(NOT FMOD_LIBRARY_RELEASE OR NOT FMOD_INCLUDE_DIR)
- message(STATUS "Using system-provided FMOD Ex Libraries")
- set(FMOD_EXTERNAL_LIB ON)
- endif(NOT FMOD_LIBRARY_RELEASE OR NOT FMOD_INCLUDE_DIR)
-endif (FMODEX_SDK_DIR)
-
-if (NOT FMOD_LIBRARY_RELEASE OR NOT FMOD_INCLUDE_DIR)
- if(WINDOWS)
- set(lib_suffix .dll)
- elseif(DARWIN)
- set(lib_suffix .dylib)
- else(WINDOWS)
- set(lib_suffix .so)
- endif(WINDOWS)
- if(WINDOWS)
- if(WORD_SIZE EQUAL 64)
- set(FMOD_LIBRARY_RELEASE ${LIBS_PREBUILT_DIR}/lib/release/fmodex64${lib_suffix})
- set(FMOD_LIBRARY_DEBUG ${LIBS_PREBUILT_DIR}/lib/debug/fmodexL64${lib_suffix})
- else(WORD_SIZE EQUAL 64)
- set(FMOD_LIBRARY_RELEASE ${LIBS_PREBUILT_DIR}/lib/release/fmodex${lib_suffix})
- set(FMOD_LIBRARY_DEBUG ${LIBS_PREBUILT_DIR}/lib/debug/fmodexL${lib_suffix})
- endif(WORD_SIZE EQUAL 64)
- else(WINDOWS)
- if(WORD_SIZE EQUAL 64)
- set(FMOD_LIBRARY_RELEASE ${LIBS_PREBUILT_DIR}/lib/release/libfmodex64${lib_suffix})
- set(FMOD_LIBRARY_DEBUG ${LIBS_PREBUILT_DIR}/lib/debug/libfmodex64L${lib_suffix})
- else(WORD_SIZE EQUAL 64)
- set(FMOD_LIBRARY_RELEASE ${LIBS_PREBUILT_DIR}/lib/release/libfmodex${lib_suffix})
- set(FMOD_LIBRARY_DEBUG ${LIBS_PREBUILT_DIR}/lib/debug/libfmodexL${lib_suffix})
- endif(WORD_SIZE EQUAL 64)
- endif(WINDOWS)
- set(FMOD_LINK_LIBRARY_RELEASE ${FMOD_LIBRARY_RELEASE})
- set(FMOD_LINK_LIBRARY_DEBUG ${FMOD_LIBRARY_DEBUG})
- if(WINDOWS)
- string(REPLACE ".dll" "_vc.lib" FMOD_LINK_LIBRARY_RELEASE ${FMOD_LIBRARY_RELEASE})
- string(REPLACE ".dll" "_vc.lib" FMOD_LINK_LIBRARY_DEBUG ${FMOD_LIBRARY_DEBUG})
- endif(WINDOWS)
- use_prebuilt_binary(fmodex)
- set(FMOD_INCLUDE_DIR
- ${LIBS_PREBUILT_DIR}/include/fmodex)
-endif(NOT FMOD_LIBRARY_RELEASE OR NOT FMOD_INCLUDE_DIR)
-
-if(FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
- set(FMOD ON)
- if (NOT FMOD_LIBRARY_DEBUG) #Use release library in debug configuration if debug library is absent.
- set(FMOD_LIBRARY_DEBUG ${FMOD_LIBRARY_RELEASE})
- endif (NOT FMOD_LIBRARY_DEBUG)
-else (FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
- message(STATUS "No support for FMOD EX audio (need to set FMODEX_SDK_DIR?)")
- set(FMOD OFF)
- set(FMODEX OFF)
-endif (FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
-
-if (FMOD)
- message(STATUS "Building with FMOD Ex audio support")
- set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
-endif (FMOD)
diff --git a/indra/cmake/FMODSTUDIO.cmake b/indra/cmake/FMODSTUDIO.cmake
index fac23b3d3..e7ce595ef 100644
--- a/indra/cmake/FMODSTUDIO.cmake
+++ b/indra/cmake/FMODSTUDIO.cmake
@@ -2,10 +2,6 @@
include(Linking)
-if (FMODEX AND FMODSTUDIO)
- message( FATAL_ERROR "You can not enable two FMOD variants at the same time." )
-endif (FMODEX AND FMODSTUDIO)
-
unset(FMOD_LIBRARY_RELEASE CACHE)
unset(FMOD_LIBRARY_DEBUG CACHE)
unset(FMOD_INCLUDE_DIR CACHE)
@@ -86,10 +82,17 @@ if (NOT FMOD_LIBRARY_RELEASE OR NOT FMOD_INCLUDE_DIR)
endif(WINDOWS)
set(FMOD_LINK_LIBRARY_RELEASE ${FMOD_LIBRARY_RELEASE})
set(FMOD_LINK_LIBRARY_DEBUG ${FMOD_LIBRARY_DEBUG})
+
if(WINDOWS)
string(REPLACE ".dll" "_vc.lib" FMOD_LINK_LIBRARY_RELEASE ${FMOD_LIBRARY_RELEASE})
string(REPLACE ".dll" "_vc.lib" FMOD_LINK_LIBRARY_DEBUG ${FMOD_LIBRARY_DEBUG})
endif(WINDOWS)
+
+ set (FMOD_LIBRARY
+ debug ${FMOD_LINK_LIBRARY_DEBUG}
+ optimized ${FMOD_LINK_LIBRARY_RELEASE}
+ )
+
use_prebuilt_binary(fmodstudio)
set(FMOD_INCLUDE_DIR
${LIBS_PREBUILT_DIR}/include/fmodstudio)
@@ -108,5 +111,5 @@ endif (FMOD_LIBRARY_RELEASE AND FMOD_INCLUDE_DIR)
if (FMOD)
message(STATUS "Building with FMOD Studio audio support")
- set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODSTUDIO")
+ set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODSTUDIO=1")
endif (FMOD)
diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake
new file mode 100644
index 000000000..ea5ad6d10
--- /dev/null
+++ b/indra/cmake/FindAutobuild.cmake
@@ -0,0 +1,43 @@
+# -*- cmake -*-
+#
+# Find the autobuild tool
+#
+# Output variables:
+#
+# AUTOBUILD_EXECUTABLE - path to autobuild executable
+
+
+
+IF (NOT AUTOBUILD_EXECUTABLE)
+
+ # If cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var
+ IF (DEFINED ENV{AUTOBUILD})
+ SET(AUTOBUILD_EXECUTABLE $ENV{AUTOBUILD})
+ ELSE (DEFINED ENV{AUTOBUILD})
+ IF(WIN32)
+ SET(AUTOBUILD_EXE_NAMES autobuild.exe autobuild.cmd)
+ ELSE(WIN32)
+ SET(AUTOBUILD_EXE_NAMES autobuild)
+ ENDIF(WIN32)
+
+ SET(AUTOBUILD_EXECUTABLE)
+ FIND_PROGRAM(
+ AUTOBUILD_EXECUTABLE
+ NAMES ${AUTOBUILD_EXE_NAMES}
+ PATHS
+ ENV PATH
+ ${CMAKE_SOURCE_DIR}/..
+ ${CMAKE_SOURCE_DIR}/../..
+ ${CMAKE_SOURCE_DIR}/../../..
+ PATH_SUFFIXES "/autobuild/bin/"
+ )
+ ENDIF (DEFINED ENV{AUTOBUILD})
+
+ IF (NOT AUTOBUILD_EXECUTABLE)
+ IF (AUTOBUILD_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find autobuild executable")
+ ENDIF (AUTOBUILD_FIND_REQUIRED)
+ ENDIF (NOT AUTOBUILD_EXECUTABLE)
+
+ MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE)
+ENDIF (NOT AUTOBUILD_EXECUTABLE)
diff --git a/indra/cmake/FindLLQtWebkit.cmake b/indra/cmake/FindLLQtWebkit.cmake
deleted file mode 100644
index 731ae67d7..000000000
--- a/indra/cmake/FindLLQtWebkit.cmake
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- cmake -*-
-
-# - Find llqtwebkit
-# Find the llqtwebkit includes and library
-# This module defines
-# LLQTWEBKIT_INCLUDE_DIR, where to find llqtwebkit.h, etc.
-# LLQTWEBKIT_LIBRARY, the llqtwebkit library with full path.
-# LLQTWEBKIT_FOUND, If false, do not try to use llqtwebkit.
-# also defined, but not for general use are
-# LLQTWEBKIT_LIBRARIES, the libraries needed to use llqtwebkit.
-# LLQTWEBKIT_LIBRARY_DIRS, where to find the llqtwebkit library.
-# LLQTWEBKIT_DEFINITIONS - You should add_definitions(${LLQTWEBKIT_DEFINITIONS})
-# before compiling code that includes llqtwebkit library files.
-
-# Try to use pkg-config first.
-# This allows to have two different libllqtwebkit packages installed:
-# one for viewer 2.x and one for viewer 1.x.
-include(FindPkgConfig)
-if (PKG_CONFIG_FOUND)
- if (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION)
- set(_PACKAGE_ARGS libllqtwebkit>=${LLQtWebkit_FIND_VERSION} REQUIRED)
- else (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION)
- set(_PACKAGE_ARGS libllqtwebkit)
- endif (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION)
- if (NOT "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" VERSION_LESS "2.8")
- # As virtually nobody will have a pkg-config file for this, do this check always quiet.
- # Unfortunately cmake 2.8 or higher is required for pkg_check_modules to have a 'QUIET'.
- set(_PACKAGE_ARGS ${_PACKAGE_ARGS} QUIET)
- endif ()
- pkg_check_modules(LLQTWEBKIT ${_PACKAGE_ARGS})
-endif (PKG_CONFIG_FOUND)
-set(LLQTWEBKIT_DEFINITIONS ${LLQTWEBKIT_CFLAGS_OTHER})
-
-find_path(LLQTWEBKIT_INCLUDE_DIR llqtwebkit.h NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_INCLUDE_DIRS})
-
-find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS})
-
-if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
- set(LLQTWEBKIT_LIBRARIES llqtwebkit)
- get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH)
-endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)
-
-# Handle the QUIETLY and REQUIRED arguments and set LLQTWEBKIT_FOUND
-# to TRUE if all listed variables are TRUE.
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(
- LLQTWEBKIT
- DEFAULT_MSG
- LLQTWEBKIT_LIBRARY
- LLQTWEBKIT_INCLUDE_DIR
- LLQTWEBKIT_LIBRARIES
- LLQTWEBKIT_LIBRARY_DIRS
- )
-
-mark_as_advanced(
- LLQTWEBKIT_LIBRARY
- LLQTWEBKIT_INCLUDE_DIR
- LLQTWEBKIT_LIBRARIES
- LLQTWEBKIT_LIBRARY_DIRS
- LLQTWEBKIT_DEFINITIONS
- )
-
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 5cca587cf..2d6025f3a 100644
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -7,18 +7,7 @@ if (STANDALONE)
pkg_check_modules(FREETYPE REQUIRED freetype2)
else (STANDALONE)
use_prebuilt_binary(freetype)
- if(MSVC12)
- set(FREETYPE_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include/freetype2
- ${LIBS_PREBUILT_LEGACY_DIR}/include/freetype2
- )
- else(MSVC12)
- set(FREETYPE_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
- endif (MSVC12)
-
+ set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/freetype2)
set(FREETYPE_LIBRARIES freetype)
endif (STANDALONE)
diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake
index d688db2fe..09260582e 100644
--- a/indra/cmake/GLOD.cmake
+++ b/indra/cmake/GLOD.cmake
@@ -7,10 +7,8 @@ set(GLOD_FIND_REQUIRED ON)
if (STANDALONE)
include(FindGLOD)
else (STANDALONE)
- use_prebuilt_binary(GLOD)
- set(GLOD_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
- set(GLOD_LIBRARIES glod)
+ use_prebuilt_binary(glod)
+
+ set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
+ set(GLOD_LIBRARIES GLOD)
endif (STANDALONE)
diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake
index 9fdf60eba..11028f6fb 100644
--- a/indra/cmake/GStreamer010Plugin.cmake
+++ b/indra/cmake/GStreamer010Plugin.cmake
@@ -17,7 +17,7 @@ else (STANDALONE)
set(GSTREAMER010_PLUGINS_BASE_FOUND ON FORCE BOOL)
set(GSTREAMER010_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include/gstreamer-0.10
- ${LIBS_PREBUILT_DIR}/includeg/lib-2.0
+ ${LIBS_PREBUILT_DIR}/include/glib-2.0
${LIBS_PREBUILT_DIR}/include/libxml2
${LIBS_PREBUILT_LEGACY_DIR}/include/gstreamer-0.10
${LIBS_PREBUILT_LEGACY_DIR}/include/glib-2.0
diff --git a/indra/cmake/Hunspell.cmake b/indra/cmake/Hunspell.cmake
index 3ea97afdf..25b06092b 100644
--- a/indra/cmake/Hunspell.cmake
+++ b/indra/cmake/Hunspell.cmake
@@ -4,16 +4,12 @@ include(Prebuilt)
if (STANDALONE)
include(FindHunSpell)
else (STANDALONE)
- use_prebuilt_binary(hunspell)
-
- set(HUNSPELL_INCLUDE_DIR
- ${LIBS_PREBUILT_DIR}/include/hunspell
- ${LIBS_PREBUILT_LEGACY_DIR}/include/hunspell
- )
+ use_prebuilt_binary(libhunspell)
- if (LINUX OR DARWIN)
- set(HUNSPELL_LIBRARY hunspell-1.3)
- else (LINUX OR DARWIN)
- set(HUNSPELL_LIBRARY libhunspell)
- endif (LINUX OR DARWIN)
+ if (LINUX OR DARWIN)
+ set(HUNSPELL_LIBRARY hunspell-1.3)
+ else (LINUX OR DARWIN)
+ set(HUNSPELL_LIBRARY libhunspell)
+ endif (LINUX OR DARWIN)
+ set(HUNSPELL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/hunspell)
endif (STANDALONE)
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
index 2fe1beb51..fd04fcce1 100644
--- a/indra/cmake/JPEG.cmake
+++ b/indra/cmake/JPEG.cmake
@@ -19,8 +19,5 @@ else (STANDALONE)
elseif (WINDOWS)
set(JPEG_LIBRARIES jpeglib)
endif (LINUX)
- set(JPEG_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
endif (STANDALONE)
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index 3ab859d4d..3519ce4b9 100644
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -10,22 +10,13 @@ if (STANDALONE)
else (STANDALONE)
use_prebuilt_binary(jsoncpp)
if (WINDOWS)
- if(MSVC12)
- set(JSONCPP_LIBRARIES
- debug json_vc${MSVC_SUFFIX}debug_libmt.lib
- optimized json_vc${MSVC_SUFFIX}_libmt)
- else(MSVC12)
- set(JSONCPP_LIBRARIES
- debug json_vc${MSVC_SUFFIX}d
- optimized json_vc${MSVC_SUFFIX})
- endif(MSVC12)
+ set(JSONCPP_LIBRARIES
+ debug jsoncppd.lib
+ optimized jsoncpp.lib)
elseif (DARWIN)
set(JSONCPP_LIBRARIES json_linux-gcc-4.0.1_libmt)
elseif (LINUX)
set(JSONCPP_LIBRARIES jsoncpp)
endif (WINDOWS)
- set(JSONCPP_INCLUDE_DIR
- ${LIBS_PREBUILT_DIR}/include/jsoncpp
- ${LIBS_PREBUILT_LEGACY_DIR}/include/jsoncpp
- )
+ set(JSONCPP_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/jsoncpp)
endif (STANDALONE)
diff --git a/indra/cmake/LLAudio.cmake b/indra/cmake/LLAudio.cmake
index 440032967..1f5fd63ed 100644
--- a/indra/cmake/LLAudio.cmake
+++ b/indra/cmake/LLAudio.cmake
@@ -1,6 +1,7 @@
# -*- cmake -*-
include(Audio)
+include(OPENAL)
set(LLAUDIO_INCLUDE_DIRS
${LIBS_OPEN_DIR}/llaudio
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index dd1d806d5..f508d7e9a 100644
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -1,18 +1,25 @@
# -*- cmake -*-
+# these should be moved to their own cmake file
+include(Prebuilt)
+include(Boost)
include(Colladadom)
+
+use_prebuilt_binary(libxml2)
+
set(LLPRIMITIVE_INCLUDE_DIRS
${LIBS_OPEN_DIR}/llprimitive
${COLLADADOM_INCLUDE_DIRS}
)
if (WINDOWS)
- set(LLPRIMITIVE_LIBRARIES
- debug llprimitive
- optimized llprimitive
- ${COLLADADOM_LIBRARIES}
- )
+ set(LLPRIMITIVE_LIBRARIES
+ llprimitive
+ ${COLLADADOM_LIBRARIES}
+ libxml2_a
+ ${BOOST_SYSTEM_LIBRARIES}
+ )
else (WINDOWS)
set(LLPRIMITIVE_LIBRARIES
llprimitive
diff --git a/indra/cmake/LLQtWebkit.cmake b/indra/cmake/LLQtWebkit.cmake
deleted file mode 100644
index cec7e22e9..000000000
--- a/indra/cmake/LLQtWebkit.cmake
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- cmake -*-
-
-if (STANDALONE)
- set(LLQTWEBKIT_INCLUDE_DIR
- ${LIBS_OPEN_DIR}/llqtwebkit
- )
-
- set(LLQTWEBKIT_LIBRARY
- llqtwebkit
- )
-endif (STANDALONE)
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index 982b2d3f7..4ba1d4c02 100644
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -1,13 +1,12 @@
# ll_deploy_sharedlibs_command
# target_exe: the cmake target of the executable for which the shared libs will be deployed.
macro(ll_deploy_sharedlibs_command target_exe)
- SET(OUTPUT_PATH $)
-
+ set(OUTPUT_PATH $)
+
if(DARWIN)
SET_TEST_PATH(SEARCH_DIRS)
get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
if(IS_BUNDLE)
- # If its a bundle the exe is not in the target location, this should find it.
set(OUTPUT_PATH ${OUTPUT_PATH}/../Resources)
endif(IS_BUNDLE)
elseif(WINDOWS)
@@ -38,8 +37,7 @@ macro(ll_stage_sharedlib DSO_TARGET)
# Also this directory is shared with RunBuildTest.cmake, y'know, for the tests.
set_target_properties(${DSO_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR})
if(NOT WINDOWS)
-
- SET(DSO_PATH $)
+ get_target_property(DSO_PATH ${DSO_TARGET} LOCATION)
get_filename_component(DSO_FILE ${DSO_PATH} NAME)
if(DARWIN)
set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources)
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index a0ce0f6f1..43ec796dd 100644
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -1,42 +1,50 @@
# -*- cmake -*-
+
if(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
include(Variables)
-if (NOT STANDALONE)
+set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib)
+set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins)
+set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)
+set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)
+if (WINDOWS)
+ set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
+ set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
+elseif (LINUX)
+ set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib)
+ set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin)
+elseif (DARWIN)
+ set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
+ set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs")
+endif (WINDOWS)
- if(CMAKE_BUILD_TYPE)
- string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
- endif(CMAKE_BUILD_TYPE)
+# Autobuild packages must provide 'release' versions of libraries, but may provide versions for
+# specific build types. AUTOBUILD_LIBS_INSTALL_DIRS lists first the build type directory and then
+# the 'release' directory (as a default fallback).
+# *NOTE - we have to take special care to use CMAKE_CFG_INTDIR on IDE generators (like mac and
+# windows) and CMAKE_BUILD_TYPE on Makefile based generators (like linux). The reason for this is
+# that CMAKE_BUILD_TYPE is essentially meaningless at configuration time for IDE generators and
+# CMAKE_CFG_INTDIR is meaningless at build time for Makefile generators
+if(WINDOWS OR DARWIN)
+ # the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us
+ # fortunately both windows and darwin are case insensitive filesystems so this works.
+ set(AUTOBUILD_LIBS_INSTALL_DIRS "${AUTOBUILD_INSTALL_DIR}/lib/")
+else(WINDOWS OR DARWIN)
+ # else block is for linux and any other makefile based generators
+ string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
+ set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER})
+endif(WINDOWS OR DARWIN)
- if(WINDOWS OR ${CMAKE_GENERATOR} MATCHES "Xcode")
- # the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us
- # fortunately both windows and darwin are case insensitive filesystems so this works.
- set(ARCH_PREBUILT_LINK_DIRS
- ${LIBS_PREBUILT_DIR}/lib
- ${LIBS_PREBUILT_LEGACY_DIR}/lib
- )
- else(WINDOWS OR ${CMAKE_GENERATOR} MATCHES "Xcode")
- # else block is for linux and any other makefile based generators
- set(ARCH_PREBUILT_LINK_DIRS
- ${LIBS_PREBUILT_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER}
- ${LIBS_PREBUILT_LEGACY_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER}
- )
- endif(WINDOWS OR ${CMAKE_GENERATOR} MATCHES "Xcode")
+if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
+ # When we're building something other than Release, append the
+ # packages/lib/release directory to deal with autobuild packages that don't
+ # provide (e.g.) lib/debug libraries.
+ list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
+endif (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
- if (NOT "${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "release")
- # When we're building something other than Release, append the
- # packages/lib/release directory to deal with autobuild packages that don't
- # provide (e.g.) lib/debug libraries.
- list(APPEND ARCH_PREBUILT_LINK_DIRS
- ${LIBS_PREBUILT_DIR}/lib/release
- ${LIBS_PREBUILT_LEGACY_DIR}/lib/release
- )
- endif (NOT "${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "release")
-endif (NOT STANDALONE)
-
-link_directories(${ARCH_PREBUILT_LINK_DIRS})
+link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})
if (LINUX)
set(DL_LIBRARY dl)
@@ -46,10 +54,11 @@ else (LINUX)
set(PTHREAD_LIBRARY "")
endif (LINUX)
-if (WINDOWS)
+if (WINDOWS)
set(WINDOWS_LIBRARIES
advapi32
shell32
+ ole32
ws2_32
mswsock
psapi
diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake
index d7fb4e686..b742874e2 100644
--- a/indra/cmake/NDOF.cmake
+++ b/indra/cmake/NDOF.cmake
@@ -7,7 +7,11 @@ if (STANDALONE)
message(STATUS "Building without N-DoF joystick support")
endif(NOT NDOF_FOUND)
else (STANDALONE)
- use_prebuilt_binary(ndofdev)
+ if (WINDOWS OR DARWIN)
+ use_prebuilt_binary(libndofdev)
+ elseif (LINUX)
+ use_prebuilt_binary(open-libndofdev)
+ endif (WINDOWS OR DARWIN)
if (WINDOWS)
set(NDOF_LIBRARY libndofdev)
@@ -15,10 +19,7 @@ else (STANDALONE)
set(NDOF_LIBRARY ndofdev)
endif (WINDOWS)
- set(NDOF_INCLUDE_DIR
- ${LIBS_PREBUILT_DIR}/include/ndofdev
- ${LIBS_PREBUILT_LEGACY_DIR}/include/ndofdev
- )
+ set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev)
set(NDOF_FOUND 1)
endif (STANDALONE)
@@ -26,6 +27,8 @@ if (NDOF_FOUND)
add_definitions(-DLIB_NDOF=1)
include_directories(${NDOF_INCLUDE_DIR})
else (NDOF_FOUND)
+ message(STATUS "Building without N-DoF joystick support")
set(NDOF_INCLUDE_DIR "")
set(NDOF_LIBRARY "")
endif (NDOF_FOUND)
+
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index d363e6af3..2860a800e 100644
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -7,16 +7,13 @@ set(OpenSSL_FIND_REQUIRED ON)
if (STANDALONE OR USE_SYSTEM_OPENSSL)
include(FindOpenSSL)
else (STANDALONE OR USE_SYSTEM_OPENSSL)
- use_prebuilt_binary(openSSL)
+ use_prebuilt_binary(openssl)
if (WINDOWS)
set(OPENSSL_LIBRARIES ssleay32 libeay32)
else (WINDOWS)
set(OPENSSL_LIBRARIES ssl)
endif (WINDOWS)
- set(OPENSSL_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
endif (STANDALONE OR USE_SYSTEM_OPENSSL)
if (LINUX)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index fb71c3067..3d02a5e4f 100644
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -9,11 +9,7 @@ if (STANDALONE)
else (STANDALONE)
use_prebuilt_binary(libpng)
if (WINDOWS)
- if(MSVC12)
- set(PNG_LIBRARIES libpng16)
- else(MSVC12)
- set(PNG_LIBRARIES libpng15)
- endif(MSVC12)
+ set(PNG_LIBRARIES libpng16)
elseif(DARWIN)
set(PNG_LIBRARIES png15)
else(LINUX)
@@ -36,15 +32,5 @@ else (STANDALONE)
set(PNG_LIBRARIES png16)
endif ()
endif()
- if (WINDOWS)
- set(PNG_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include/${PNG_LIBRARIES}
- ${LIBS_PREBUILT_LEGACY_DIR}/include/${PNG_LIBRARIES}
- )
- else (WINDOWS)
- set(PNG_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include/lib${PNG_LIBRARIES}
- ${LIBS_PREBUILT_LEGACY_DIR}/include/lib${PNG_LIBRARIES}
- )
- endif (WINDOWS)
+ set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
endif (STANDALONE)
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
index 2295a7574..38e24f13d 100644
--- a/indra/cmake/Prebuilt.cmake
+++ b/indra/cmake/Prebuilt.cmake
@@ -3,14 +3,64 @@
if(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
+include(FindAutobuild)
+include(Variables)
+if(INSTALL_PROPRIETARY)
+ include(FindSCP)
+endif(INSTALL_PROPRIETARY)
+
+set(PREBUILD_TRACKING_DIR ${AUTOBUILD_INSTALL_DIR}/cmake_tracking)
+# For the library installation process;
+# see cmake/Prebuild.cmake for the counterpart code.
+if ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${PREBUILD_TRACKING_DIR}/sentinel_installed")
+ file(MAKE_DIRECTORY ${PREBUILD_TRACKING_DIR})
+ file(WRITE ${PREBUILD_TRACKING_DIR}/sentinel_installed "0")
+endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${PREBUILD_TRACKING_DIR}/sentinel_installed")
+
+# The use_prebuilt_binary macro handles automated installation of package
+# dependencies using autobuild. The goal is that 'autobuild install' should
+# only be run when we know we need to install a new package. This should be
+# the case in a clean checkout, or if autobuild.xml has been updated since the
+# last run (encapsulated by the file ${PREBUILD_TRACKING_DIR}/sentinel_installed),
+# or if a previous attempt to install the package has failed (the exit status
+# of previous attempts is serialized in the file
+# ${PREBUILD_TRACKING_DIR}/${_binary}_installed)
macro (use_prebuilt_binary _binary)
- if(NOT STANDALONE)
- get_property(PREBUILT_PACKAGES TARGET prepare PROPERTY PREBUILT)
- list(FIND PREBUILT_PACKAGES ${_binary} _index)
- if(_index LESS 0)
- set_property(TARGET prepare APPEND PROPERTY PREBUILT ${_binary})
- endif(_index LESS 0)
- endif(NOT STANDALONE)
+ if (NOT DEFINED USESYSTEMLIBS_${_binary})
+ set(USESYSTEMLIBS_${_binary} ${USESYSTEMLIBS})
+ endif (NOT DEFINED USESYSTEMLIBS_${_binary})
+
+ if (NOT USESYSTEMLIBS_${_binary})
+ if("${${_binary}_installed}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/${_binary}_installed")
+ file(READ ${PREBUILD_TRACKING_DIR}/${_binary}_installed "${_binary}_installed")
+ if(DEBUG_PREBUILT)
+ message(STATUS "${_binary}_installed: \"${${_binary}_installed}\"")
+ endif(DEBUG_PREBUILT)
+ endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/${_binary}_installed")
+
+ if(${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
+ if(DEBUG_PREBUILT)
+ message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install
+ --install-dir=${AUTOBUILD_INSTALL_DIR}
+ ${_binary} ")
+ endif(DEBUG_PREBUILT)
+ execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}"
+ install
+ --install-dir=${AUTOBUILD_INSTALL_DIR}
+ -p ${AUTOBUILD_PLATFORM_NAME}
+ ${_binary}
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ RESULT_VARIABLE ${_binary}_installed
+ )
+ file(WRITE ${PREBUILD_TRACKING_DIR}/${_binary}_installed "${${_binary}_installed}")
+ endif(${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
+
+ if(NOT ${_binary}_installed EQUAL 0)
+ message(FATAL_ERROR
+ "Failed to download or unpack prebuilt '${_binary}'."
+ " Process returned ${${_binary}_installed}.")
+ endif (NOT ${_binary}_installed EQUAL 0)
+ endif (NOT USESYSTEMLIBS_${_binary})
endmacro (use_prebuilt_binary _binary)
endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake
index 62e2bf9b2..e918de019 100644
--- a/indra/cmake/PulseAudio.cmake
+++ b/indra/cmake/PulseAudio.cmake
@@ -13,9 +13,8 @@ if (PULSEAUDIO)
use_prebuilt_binary(pulseaudio)
set(PULSEAUDIO_FOUND ON FORCE BOOL)
set(PULSEAUDIO_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ ${LIBS_PREBUILT_DIR}/include
+ )
# We don't need to explicitly link against pulseaudio itself, because
# the viewer probes for the system's copy at runtime.
set(PULSEAUDIO_LIBRARIES
diff --git a/indra/cmake/Qt4.cmake b/indra/cmake/Qt4.cmake
deleted file mode 100644
index 37d2799a2..000000000
--- a/indra/cmake/Qt4.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- cmake -*-
-include(Prebuilt)
-
-if (STANDALONE)
- set(Qt4_FIND_REQUIRED ON)
-
- include(FindQt4)
-
- find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtNetwork QtOpenGL QtWebKit REQUIRED)
- include(${QT_USE_FILE})
- add_definitions(${QT_DEFINITIONS})
-endif (STANDALONE)
diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake
index 171213d42..899a043e8 100644
--- a/indra/cmake/QuickTimePlugin.cmake
+++ b/indra/cmake/QuickTimePlugin.cmake
@@ -1,9 +1,11 @@
# -*- cmake -*-
-if(INSTALL_PROPRIETARY)
+if(INSTALL_PROPRIETARY OR USE_QUICKTIME_PREBUILT)
include(Prebuilt)
- use_prebuilt_binary(quicktime)
-endif(INSTALL_PROPRIETARY)
+ if (WINDOWS)
+ use_prebuilt_binary(quicktime)
+ endif (WINDOWS)
+endif(INSTALL_PROPRIETARY OR USE_QUICKTIME_PREBUILT)
if (DARWIN)
include(CMakeFindFrameworks)
@@ -23,15 +25,13 @@ elseif (WINDOWS AND WORD_SIZE EQUAL 32)
find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient
PATHS
- ${LIBS_PREBUILT_DIR}/lib/debug
- ${LIBS_PREBUILT_LEGACY_DIR}/lib/debug
+ ${ARCH_PREBUILT_DIRS_DEBUG}
"${QUICKTIME_SDK_DIR}\\libraries"
)
find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient
PATHS
- ${LIBS_PREBUILT_DIR}/lib/release
- ${LIBS_PREBUILT_LEGACY_DIR}/lib/release
+ ${ARCH_PREBUILT_DIRS_RELEASE}
"${QUICKTIME_SDK_DIR}\\libraries"
)
@@ -45,7 +45,6 @@ elseif (WINDOWS AND WORD_SIZE EQUAL 32)
include_directories(
${LIBS_PREBUILT_DIR}/include/quicktime
- ${LIBS_PREBUILT_LEGACY_DIR}/include/quicktime
"${QUICKTIME_SDK_DIR}\\CIncludes"
)
endif (DARWIN)
diff --git a/indra/cmake/TemplateCheck.cmake b/indra/cmake/TemplateCheck.cmake
index 3b73dc82d..2fada2eda 100644
--- a/indra/cmake/TemplateCheck.cmake
+++ b/indra/cmake/TemplateCheck.cmake
@@ -8,7 +8,7 @@ macro (check_message_template _target)
PRE_LINK
COMMAND ${PYTHON_EXECUTABLE}
ARGS ${SCRIPTS_DIR}/template_verifier.py
- --mode=development --cache_master
- COMMENT "Verifying message template"
+ --mode=development --cache_master --master_url=${TEMPLATE_VERIFIER_MASTER_URL} ${TEMPLATE_VERIFIER_OPTIONS}
+ COMMENT "Verifying message template - See http://wiki.secondlife.com/wiki/Template_verifier.py"
)
endmacro (check_message_template)
diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake
index 697ac4288..065e74da9 100644
--- a/indra/cmake/UI.cmake
+++ b/indra/cmake/UI.cmake
@@ -63,10 +63,7 @@ else (STANDALONE)
${LIBS_PREBUILT_LEGACY_DIR}/include/pixman-1
)
foreach(include ${${LL_ARCH}_INCLUDES})
- include_directories(
- ${LIBS_PREBUILT_DIR}/include/${include}
- ${LIBS_PREBUILT_LEGACY_DIR}/include/${include}
- )
+ include_directories(${LIBS_PREBUILT_DIR}/include/${include})
endforeach(include)
endif (STANDALONE)
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 5b9890d5b..015dfb162 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -23,26 +23,60 @@ set(LIBS_CLOSED_PREFIX)
set(LIBS_OPEN_PREFIX)
set(SCRIPTS_PREFIX ../scripts)
set(VIEWER_PREFIX)
+set(INTEGRATION_TESTS_PREFIX)
+set(LL_TESTS OFF CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation)")
+
+# Compiler and toolchain options
+set(DISABLE_TCMALLOC OFF CACHE BOOL "Disable linkage of TCMalloc. (64bit builds automatically disable TCMalloc)")
+set(DISABLE_FATAL_WARNINGS TRUE CACHE BOOL "Set this to FALSE to enable fatal warnings.")
+
+if(LIBS_CLOSED_DIR)
+ file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR)
+else(LIBS_CLOSED_DIR)
+ set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX})
+endif(LIBS_CLOSED_DIR)
+if(LIBS_COMMON_DIR)
+ file(TO_CMAKE_PATH "${LIBS_COMMON_DIR}" LIBS_COMMON_DIR)
+else(LIBS_COMMON_DIR)
+ set(LIBS_COMMON_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})
+endif(LIBS_COMMON_DIR)
+set(LIBS_OPEN_DIR ${LIBS_COMMON_DIR})
-set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX})
-set(LIBS_OPEN_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})
set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX})
set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX})
-set(DISABLE_TCMALLOC OFF CACHE BOOL "Disable linkage of TCMalloc. (64bit builds automatically disable TCMalloc)")
-set(LL_TESTS OFF CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation)")
-set(DISABLE_FATAL_WARNINGS TRUE CACHE BOOL "Set this to FALSE to enable fatal warnings.")
+
+set(AUTOBUILD_INSTALL_DIR ${CMAKE_BINARY_DIR}/packages)
+
+set(LIBS_PREBUILT_DIR ${AUTOBUILD_INSTALL_DIR} CACHE PATH
+ "Location of prebuilt libraries.")
+
+if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
+ # We use this as a marker that you can try to use the proprietary libraries.
+ set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")
+endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
+set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py")
+set(TEMPLATE_VERIFIER_MASTER_URL "http://bitbucket.org/lindenlab/master-message-template/raw/tip/message_template.msg" CACHE STRING "Location of the master message template")
+
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
+ "Build type. One of: Debug Release RelWithDebInfo" FORCE)
+endif (NOT CMAKE_BUILD_TYPE)
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set(WINDOWS ON BOOL FORCE)
- if (WORD_SIZE EQUAL 32)
- set(ARCH i686)
+ if (WORD_SIZE EQUAL 64)
+ set(ARCH x86_64 CACHE STRING "Viewer Architecture")
+ set(LL_ARCH ${ARCH}_win64)
+ set(LL_ARCH_DIR ${ARCH}-win64)
+ set(WORD_SIZE 64)
+ set(AUTOBUILD_PLATFORM_NAME "windows64")
+ else (WORD_SIZE EQUAL 64)
+ set(ARCH i686 CACHE STRING "Viewer Architecture")
set(LL_ARCH ${ARCH}_win32)
set(LL_ARCH_DIR ${ARCH}-win32)
- elseif (WORD_SIZE EQUAL 64)
- set(ARCH x86_64)
- set(LL_ARCH ${ARCH}_win)
- set(LL_ARCH_DIR ${ARCH}-win)
- endif (WORD_SIZE EQUAL 32)
+ set(WORD_SIZE 32)
+ set(AUTOBUILD_PLATFORM_NAME "windows")
+ endif (WORD_SIZE EQUAL 64)
endif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
@@ -98,25 +132,6 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
COMMAND sh -c "xcodebuild -version | grep Xcode | cut -d ' ' -f2 | cut -d'.' -f1-2"
OUTPUT_VARIABLE XCODE_VERSION )
string(REGEX REPLACE "(\r?\n)+$" "" XCODE_VERSION "${XCODE_VERSION}")
-
-# # To support a different SDK update these Xcode settings:
-# if (XCODE_VERSION GREATER 4.9) # (Which would be 5.0+)
-# set(CMAKE_OSX_DEPLOYMENT_TARGET 10.8)
-# set(CMAKE_OSX_SYSROOT macosx10.9)
-# else (XCODE_VERION GREATER 4.9)
-# if (XCODE_VERSION GREATER 4.5)
-# set(CMAKE_OSX_DEPLOYMENT_TARGET 10.7)
-# set(CMAKE_OSX_SYSROOT macosx10.8)
-# else (XCODE_VERSION GREATER 4.5)
-# if (XCODE_VERSION GREATER 4.2)
-# set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
-# set(CMAKE_OSX_SYSROOT macosx10.7)
-# else (XCODE_VERSION GREATER 4.2)
-# set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
-# set(CMAKE_OSX_SYSROOT macosx10.7)
-# endif (XCODE_VERSION GREATER 4.2)
-# endif (XCODE_VERSION GREATER 4.5)
-# endif (XCODE_VERSION GREATER 4.9)
# Hardcode SDK we build against until we can test and allow newer ones
# as autodetected in the code above
@@ -151,38 +166,19 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(LL_ARCH_DIR universal-darwin)
endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-set(LIBS_PREBUILT_DIR ${CMAKE_BINARY_DIR}/packages CACHE PATH
- "Location of prebuilt libraries.")
-
-set(LIBS_PREBUILT_LEGACY_DIR ${CMAKE_BINARY_DIR}/packages/libraries/${LL_ARCH_DIR} CACHE PATH
- "Legacy location of prebuilt libraries.")
-
-if (WINDOWS AND WORD_SIZE EQUAL 32)
- set(PREBUILT_TYPE windows)
-elseif (WINDOWS AND WORD_SIZE EQUAL 64)
- set(PREBUILT_TYPE windows64)
-elseif(DARWIN)
- set(PREBUILT_TYPE darwin)
-elseif(LINUX AND WORD_SIZE EQUAL 32)
- set(PREBUILT_TYPE linux)
-elseif(LINUX AND WORD_SIZE EQUAL 64)
- set(PREBUILT_TYPE linux64)
-endif(WINDOWS AND WORD_SIZE EQUAL 32)
-
# Default deploy grid
set(GRID agni CACHE STRING "Target Grid")
-set(VIEWER_CHANNEL "Singularity" CACHE STRING "Viewer Channel Name")
-set(VIEWER_LOGIN_CHANNEL "${VIEWER_CHANNEL}" CACHE STRING "Fake login channel for A/B Testing")
-set(VIEWER_BRANDING_ID "singularity" CACHE STRING "Viewer branding id (currently secondlife|snowglobe)")
+set(VIEWER_CHANNEL "Singularity Test" CACHE STRING "Viewer Channel Name")
-# *TODO: break out proper Branding-secondlife.cmake, Branding-snowglobe.cmake, etc
-string(REGEX REPLACE " +" "" VIEWER_CHANNEL_ONE_WORD "${VIEWER_CHANNEL}")
-set(VIEWER_BRANDING_NAME "${VIEWER_CHANNEL_ONE_WORD}")
-set(VIEWER_BRANDING_NAME_CAMELCASE "${VIEWER_CHANNEL_ONE_WORD}")
+set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
+set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")
+set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.")
+set(USE_PRECOMPILED_HEADERS ON CACHE BOOL "Enable use of precompiled header directives where supported.")
+
source_group("CMake Rules" FILES CMakeLists.txt)
endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake
index 275b840a0..c0a20e183 100644
--- a/indra/cmake/ViewerMiscLibs.cmake
+++ b/indra/cmake/ViewerMiscLibs.cmake
@@ -2,7 +2,7 @@
include(Prebuilt)
if (NOT STANDALONE)
- use_prebuilt_binary(vivox)
+ use_prebuilt_binary(slvoice)
if(LINUX)
use_prebuilt_binary(libuuid)
if (${ARCH} STREQUAL "x86_64")
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
deleted file mode 100644
index 8551aa163..000000000
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- cmake -*-
-include(Linking)
-include(Prebuilt)
-include(LLQtWebkit)
-include(Qt4)
-
-if (STANDALONE)
- set(WEBKITLIBPLUGIN OFF CACHE BOOL
- "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.")
-else (STANDALONE)
- use_prebuilt_binary(llqtwebkit)
- set(WEBKITLIBPLUGIN ON CACHE BOOL
- "WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.")
-endif (STANDALONE)
-
-if (WINDOWS)
- set(WEBKIT_PLUGIN_LIBRARIES
- debug llqtwebkitd
- debug QtWebKitd4
- debug QtOpenGLd4
- debug QtNetworkd4
- debug QtGuid4
- debug QtCored4
- debug qtmaind
- optimized llqtwebkit
- optimized QtWebKit4
- optimized QtOpenGL4
- optimized QtNetwork4
- optimized QtGui4
- optimized QtCore4
- optimized qtmain
- )
-elseif (DARWIN)
- set(WEBKIT_PLUGIN_LIBRARIES
- debug libllqtwebkit.dylib
- optimized libllqtwebkit.dylib
- )
-elseif (LINUX)
- if (STANDALONE)
- set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES})
- else (STANDALONE)
- set(WEBKIT_PLUGIN_LIBRARIES
- llqtwebkit
- QtWebKit
- QtOpenGL
- QtNetwork
- QtGui
- QtCore
- crypto
- ssl
-# qgif
-# qjpeg
- jpeg
- fontconfig
- X11
- Xrender
- Xext
- GL
- )
- if (CMAKE_SIZEOF_VOID_P EQUAL 4) # Singu TODO: update webkit
- set(WEBKIT_PLUGIN_LIBRARIES ${WEBKIT_PLUGIN_LIBRARIES} jscore)
- endif (CMAKE_SIZEOF_VOID_P EQUAL 4)
- endif (STANDALONE)
-endif (WINDOWS)
diff --git a/indra/cmake/WinManifest.cmake b/indra/cmake/WinManifest.cmake
new file mode 100644
index 000000000..39f4def75
--- /dev/null
+++ b/indra/cmake/WinManifest.cmake
@@ -0,0 +1,17 @@
+# - Embeds a specific manifest file in a Windows binary
+# Defines the following:
+# EMBED_MANIFEST - embed manifest in a windows binary with mt
+# Parameters - _target is the target file, type - 1 for EXE, 2 for DLL
+
+ MACRO(EMBED_MANIFEST _target type)
+ ADD_CUSTOM_COMMAND(
+ TARGET ${_target}
+ POST_BUILD
+ COMMAND "mt.exe"
+ ARGS
+ -manifest \"${CMAKE_SOURCE_DIR}\\tools\\manifests\\compatibility.manifest\"
+ -inputresource:\"$\"\;\#${type}
+ -outputresource:\"$\"\;\#${type}
+ COMMENT "Adding compatibility manifest to ${_target}"
+ )
+ ENDMACRO(EMBED_MANIFEST _target type)
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
index 2c93fd20c..5d59c90db 100644
--- a/indra/cmake/XmlRpcEpi.cmake
+++ b/indra/cmake/XmlRpcEpi.cmake
@@ -8,9 +8,13 @@ if (STANDALONE)
include(FindXmlRpcEpi)
else (STANDALONE)
use_prebuilt_binary(xmlrpc-epi)
- set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
- set(XMLRPCEPI_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include
- ${LIBS_PREBUILT_LEGACY_DIR}/include
- )
+ if (WINDOWS)
+ set(XMLRPCEPI_LIBRARIES
+ debug xmlrpc-epid
+ optimized xmlrpc-epi
+ )
+ else (WINDOWS)
+ set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
+ endif (WINDOWS)
+ set(XMLRPCEPI_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
endif (STANDALONE)
diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake
index 3384c55ee..48e5130ad 100644
--- a/indra/cmake/ZLIB.cmake
+++ b/indra/cmake/ZLIB.cmake
@@ -17,9 +17,6 @@ else (STANDALONE)
set(ZLIB_LIBRARIES z)
endif (WINDOWS)
if (WINDOWS OR LINUX)
- set(ZLIB_INCLUDE_DIRS
- ${LIBS_PREBUILT_DIR}/include/zlib
- ${LIBS_PREBUILT_LEGACY_DIR}/include/zlib
- )
+ set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
endif (WINDOWS OR LINUX)
endif (STANDALONE)
diff --git a/indra/cmake/cmake_dummy.cpp b/indra/cmake/cmake_dummy.cpp
index 25191e2a1..ae4475a73 100644
--- a/indra/cmake/cmake_dummy.cpp
+++ b/indra/cmake/cmake_dummy.cpp
@@ -1,30 +1,24 @@
/**
* @file cmake_dummy.cpp
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/copy_win_scripts/start-client.py b/indra/copy_win_scripts/start-client.py
index 5f7ff2f29..5699f5273 100644
--- a/indra/copy_win_scripts/start-client.py
+++ b/indra/copy_win_scripts/start-client.py
@@ -1,4 +1,28 @@
#!/usr/bin/env python
+"""\
+@file start-client.py
+
+$LicenseInfo:firstyear=2010&license=viewerlgpl$
+Second Life Viewer Source Code
+Copyright (C) 2010-2011, Linden Research, Inc.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation;
+version 2.1 of the License only.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+$/LicenseInfo$
+"""
import sys, getopt
import os
import llstart
diff --git a/indra/develop.py b/indra/develop.py
deleted file mode 100755
index 018003c87..000000000
--- a/indra/develop.py
+++ /dev/null
@@ -1,941 +0,0 @@
-#!/usr/bin/env python
-#
-# @file develop.py
-# @authors Bryan O'Sullivan, Mark Palange, Aaron Brashears
-# @brief Fire and forget script to appropriately configure cmake for SL.
-#
-# $LicenseInfo:firstyear=2007&license=viewergpl$
-#
-# Copyright (c) 2007-2009, Linden Research, Inc.
-#
-# Second Life Viewer Source Code
-# The source code in this file ("Source Code") is provided by Linden Lab
-# to you under the terms of the GNU General Public License, version 2.0
-# ("GPL"), unless you have obtained a separate licensing agreement
-# ("Other License"), formally executed by you and Linden Lab. Terms of
-# the GPL can be found in doc/GPL-license.txt in this distribution, or
-# online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
-#
-# There are special exceptions to the terms and conditions of the GPL as
-# it is applied to this Source Code. View the full text of the exception
-# in the file doc/FLOSS-exception.txt in this software distribution, or
-# online at
-# http://secondlifegrid.net/programs/open_source/licensing/flossexception
-#
-# By copying, modifying or distributing this software, you acknowledge
-# that you have read and understood your obligations described above,
-# and agree to abide by those obligations.
-#
-# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-# COMPLETENESS OR PERFORMANCE.
-# $/LicenseInfo$
-
-
-import errno
-import getopt
-import os
-import random
-import re
-import shutil
-import socket
-import sys
-import commands
-import shlex
-
-class CommandError(Exception):
- pass
-
-def mkdir(path):
- try:
- os.mkdir(path)
- return path
- except OSError, err:
- if err.errno != errno.EEXIST or not os.path.isdir(path):
- raise
-
-def prettyprint_path_for_cmake(path):
- if 'a' <= path[0] <= 'z' and path[1] == ':':
- # CMake wants DOS drive letters to be in uppercase. The above
- # condition never asserts on platforms whose full path names
- # always begin with a slash, so we don't need to test whether
- # we are running on Windows.
- path = path[0].upper() + path[1:]
- return path
-
-def getcwd():
- return prettyprint_path_for_cmake(os.getcwd())
-
-source_indra = prettyprint_path_for_cmake(os.path.dirname(os.path.realpath(__file__)))
-
-def quote(opts):
- return '"' + '" "'.join([ opt.replace('"', '') for opt in opts ]) + '"'
-
-class PlatformSetup(object):
- generator = None
- build_types = {}
- for t in ('Debug', 'Release', 'RelWithDebInfo'):
- build_types[t.lower()] = t
-
- build_type = build_types['relwithdebinfo']
- standalone = 'OFF'
- unattended = 'OFF'
- universal = 'OFF'
- project_name = 'Singularity'
- distcc = True
- cmake_opts = []
- word_size = 32
- using_express = False
-
- def __init__(self):
- self.script_dir = os.path.realpath(
- os.path.dirname(__import__(__name__).__file__))
-
- def os(self):
- '''Return the name of the OS.'''
-
- raise NotImplemented('os')
-
- def arch(self):
- '''Return the CPU architecture.'''
-
- return None
-
- def platform(self):
- '''Return a stringified two-tuple of the OS name and CPU
- architecture.'''
-
- ret = self.os()
- if self.arch():
- ret += '-' + self.arch()
- return ret
-
- def build_dirs(self):
- '''Return the top-level directories in which builds occur.
- This can return more than one directory, e.g. if doing a
- 32-bit viewer and server build on Linux.'''
-
- if(os.path.basename(os.path.normpath(os.getcwd())) == 'indra'):
- prefix = '../'
- else:
- prefix = ''
-
- return [prefix+'build-' + self.platform()]
-
- def cmake_commandline(self, src_dir, build_dir, opts, simple):
- '''Return the command line to run cmake with.'''
-
- args = dict(
- dir=src_dir,
- generator=self.generator,
- opts=quote(opts),
- standalone=self.standalone,
- unattended=self.unattended,
- word_size=self.word_size,
- type=self.build_type.upper(),
- )
- #if simple:
- # return 'cmake %(opts)s %(dir)r' % args
- return ('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s '
- '-DSTANDALONE:BOOL=%(standalone)s '
- '-DUNATTENDED:BOOL=%(unattended)s '
- '-DWORD_SIZE:STRING=%(word_size)s '
- '-G %(generator)r %(opts)s %(dir)r' % args)
-
- def run_cmake(self, args=[]):
- '''Run cmake.'''
-
- # do a sanity check to make sure we have a generator
- if not hasattr(self, 'generator'):
- raise "No generator available for '%s'" % (self.__name__,)
- cwd = getcwd()
- created = []
- try:
- for d in self.build_dirs():
- simple = True
- if mkdir(d):
- created.append(d)
- simple = False
- try:
- os.chdir(d)
- cmd = self.cmake_commandline(source_indra, d, args, simple)
- print 'Running %r in %r' % (cmd, d)
- self.run(cmd, 'cmake')
- finally:
- os.chdir(cwd)
- except:
- # If we created a directory in which to run cmake and
- # something went wrong, the directory probably just
- # contains garbage, so delete it.
- os.chdir(cwd)
- for d in created:
- print 'Cleaning %r' % d
- shutil.rmtree(d)
- raise
-
- def parse_build_opts(self, arguments):
- opts, targets = getopt.getopt(arguments, 'D:o:', ['option='])
- build_opts = []
- for o, a in opts:
- if o in ('-o', '--option'):
- build_opts.append(a)
- return build_opts, targets
-
- def run_build(self, opts, targets):
- '''Build the default targets for this platform.'''
-
- raise NotImplemented('run_build')
-
- def cleanup(self):
- '''Delete all build directories.'''
-
- cleaned = 0
- for d in self.build_dirs():
- if os.path.isdir(d):
- print 'Cleaning %r' % d
- shutil.rmtree(d)
- cleaned += 1
- if not cleaned:
- print 'Nothing to clean up!'
-
- def is_internal_tree(self):
- '''Indicate whether we are building in an internal source tree.'''
-
- return os.path.isdir(os.path.join(self.script_dir, 'newsim'))
-
- def find_in_path(self, name, defval=None, basename=False):
- for ext in self.exe_suffixes:
- name_ext = name + ext
- if os.sep in name_ext:
- path = os.path.abspath(name_ext)
- if os.access(path, os.X_OK):
- return [basename and os.path.basename(path) or path]
- for p in os.getenv('PATH', self.search_path).split(os.pathsep):
- path = os.path.join(p, name_ext)
- if os.access(path, os.X_OK):
- return [basename and os.path.basename(path) or path]
- if defval:
- return [defval]
- return []
-
-
-class UnixSetup(PlatformSetup):
- '''Generic Unixy build instructions.'''
-
- search_path = '/usr/bin:/usr/local/bin'
- exe_suffixes = ('',)
-
- def __init__(self):
- PlatformSetup.__init__(self)
- super(UnixSetup, self).__init__()
- self.generator = 'Unix Makefiles'
-
- def os(self):
- return 'unix'
-
- def arch(self):
- cpu = os.uname()[-1]
- if cpu.endswith('386'):
- cpu = 'i386'
- elif cpu.endswith('86'):
- cpu = 'i686'
- elif cpu in ('athlon',):
- cpu = 'i686'
- elif cpu == 'Power Macintosh':
- cpu = 'ppc'
- elif cpu == 'x86_64' and self.word_size == 32:
- cpu = 'i686'
- return cpu
-
- def run(self, command, name=None):
- '''Run a program. If the program fails, raise an exception.'''
- ret = os.system(command)
- if ret:
- if name is None:
- name = command.split(None, 1)[0]
- if os.WIFEXITED(ret):
- st = os.WEXITSTATUS(ret)
- if st == 127:
- event = 'was not found'
- else:
- event = 'exited with status %d' % st
- elif os.WIFSIGNALED(ret):
- event = 'was killed by signal %d' % os.WTERMSIG(ret)
- else:
- event = 'died unexpectedly (!?) with 16-bit status %d' % ret
- raise CommandError('the command %r %s' %
- (name, event))
-
-
-class LinuxSetup(UnixSetup):
- def __init__(self):
- UnixSetup.__init__(self)
- super(LinuxSetup, self).__init__()
- try:
- self.debian_sarge = open('/etc/debian_version').read().strip() == '3.1'
- except:
- self.debian_sarge = False
-
- def os(self):
- return 'linux'
-
- def build_dirs(self):
- return [PlatformSetup.build_dirs(self)[0]+'-'+self.build_type.lower()]
-
- def cmake_commandline(self, src_dir, build_dir, opts, simple):
- args = dict(
- dir=src_dir,
- generator=self.generator,
- opts=quote(opts),
- standalone=self.standalone,
- unattended=self.unattended,
- type=self.build_type.upper(),
- project_name=self.project_name,
- word_size=self.word_size,
- cxx="g++"
- )
-
- cmd = (('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s '
- '-G %(generator)r -DSTANDALONE:BOOL=%(standalone)s '
- '-DWORD_SIZE:STRING=%(word_size)s '
- '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
- '%(opts)s %(dir)r')
- % args)
- if 'CXX' not in os.environ:
- args.update({'cmd':cmd})
- cmd = ('CXX=%(cxx)r %(cmd)s' % args)
- return cmd
-
- def run_build(self, opts, targets):
- job_count = None
-
- for i in range(len(opts)):
- if opts[i].startswith('-j'):
- try:
- job_count = int(opts[i][2:])
- except ValueError:
- try:
- job_count = int(opts[i+1])
- except ValueError:
- job_count = True
-
- def get_cpu_count():
- count = 0
- for line in open('/proc/cpuinfo'):
- if re.match(r'processor\s*:', line):
- count += 1
- return count
-
- def localhost():
- count = get_cpu_count()
- return 'localhost/' + str(count), count
-
- def get_distcc_hosts():
- try:
- hosts = []
- name = os.getenv('DISTCC_DIR', '/etc/distcc') + '/hosts'
- for l in open(name):
- l = l[l.find('#')+1:].strip()
- if l: hosts.append(l)
- return hosts
- except IOError:
- return (os.getenv('DISTCC_HOSTS', '').split() or
- [localhost()[0]])
-
- def count_distcc_hosts():
- cpus = 0
- hosts = 0
- for host in get_distcc_hosts():
- m = re.match(r'.*/(\d+)', host)
- hosts += 1
- cpus += m and int(m.group(1)) or 1
- return hosts, cpus
-
- def mk_distcc_hosts(basename, range, num_cpus):
- '''Generate a list of LL-internal machines to build on.'''
- loc_entry, cpus = localhost()
- hosts = [loc_entry]
- dead = []
- stations = [s for s in xrange(range) if s not in dead]
- random.shuffle(stations)
- hosts += ['%s%d.lindenlab.com/%d,lzo' % (basename, s, num_cpus) for s in stations]
- cpus += 2 * len(stations)
- return ' '.join(hosts), cpus
-
- if job_count is None:
- hosts, job_count = count_distcc_hosts()
- if hosts == 1:
- hostname = socket.gethostname()
- if hostname.startswith('station'):
- hosts, job_count = mk_distcc_hosts('station', 36, 2)
- os.environ['DISTCC_HOSTS'] = hosts
- if hostname.startswith('eniac'):
- hosts, job_count = mk_distcc_hosts('eniac', 71, 2)
- os.environ['DISTCC_HOSTS'] = hosts
- if job_count > 4:
- job_count = 4;
- opts.extend(['-j', str(job_count)])
-
- if targets:
- targets = ' '.join(targets)
- else:
- targets = 'all'
-
- for d in self.build_dirs():
- cmd = 'make -C %r %s %s' % (d, ' '.join(opts), targets)
- print 'Running %r' % cmd
- self.run(cmd)
-
-
-class DarwinSetup(UnixSetup):
- def __init__(self):
- UnixSetup.__init__(self)
- super(DarwinSetup, self).__init__()
- self.generator = 'Xcode'
-
- def os(self):
- return 'darwin'
-
- def arch(self):
- if self.universal == 'ON':
- return 'universal'
- else:
- return UnixSetup.arch(self)
-
- def build_dirs(self):
- if(self.generator == 'Xcode'):
- return PlatformSetup.build_dirs(self)
- else:
- return [PlatformSetup.build_dirs(self)[0]+'-'+self.build_type.lower()]
-
- def cmake_commandline(self, src_dir, build_dir, opts, simple):
- args = dict(
- dir=src_dir,
- generator=self.generator,
- opts=quote(opts),
- standalone=self.standalone,
- word_size=self.word_size,
- unattended=self.unattended,
- project_name=self.project_name,
- universal='',
- type='',
- )
- if(self.generator != 'Xcode'):
- args['type'] = '-DCMAKE_BUILD_TYPE=%s' % self.build_type.upper()
- if self.universal == 'ON':
- args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386;ppc\''
- #if simple:
- # return 'cmake %(opts)s %(dir)r' % args
- return ('cmake -G %(generator)r '
- '%(type)s '
- '-DSTANDALONE:BOOL=%(standalone)s '
- '-DUNATTENDED:BOOL=%(unattended)s '
- '-DWORD_SIZE:STRING=%(word_size)s '
- '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
- '%(universal)s '
- '%(opts)s %(dir)r' % args)
-
- def run_build(self, opts, targets):
- if(self.generator != 'Xcode'):
- if targets:
- targets = ' '.join(targets)
- else:
- targets = 'all'
-
- for d in self.build_dirs():
- cmd = 'make -C %r %s %s' % (d, ' '.join(opts), targets)
- print 'Running %r' % cmd
- self.run(cmd)
- return
-
- cwd = getcwd()
- if targets:
- targets = ' '.join(['-target ' + repr(t) for t in targets])
- else:
- targets = ''
- cmd = ('xcodebuild -configuration %s %s %s' %
- (self.build_type, ' '.join(opts), targets))
- for d in self.build_dirs():
- try:
- os.chdir(d)
- print 'Running %r in %r' % (cmd, d)
- self.run(cmd)
- finally:
- os.chdir(cwd)
-
-
-class WindowsSetup(PlatformSetup):
- gens = {
- 'vc100' : {
- 'gen' : r'Visual Studio 10',
- 'ver' : r'10.0'
- },
- 'vc120' : {
- 'gen' : r'Visual Studio 12',
- 'ver' : r'12.0'
- }
- }
-
- gens['vs2010'] = gens['vc100']
- gens['vs2013'] = gens['vc120']
-
- search_path = r'C:\windows'
- exe_suffixes = ('.exe', '.bat', '.com')
-
- def __init__(self):
- PlatformSetup.__init__(self)
- super(WindowsSetup, self).__init__()
- self._generator = None
- self.incredibuild = False
-
- def _get_generator(self):
- if self._generator is None:
- for version in 'vc100'.split():
- if self.find_visual_studio(version):
- self._generator = version
- print 'Building with ', self.gens[version]['gen']
- break
- else:
- print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
- for version in 'vc100'.split():
- if self.find_visual_studio_express(version):
- self._generator = version
- self.using_express = True
- print 'Building with ', self.gens[version]['gen'] , "Express edition"
- break
- else:
- for version in 'vc100'.split():
- if self.find_visual_studio_express_single(version):
- self._generator = version
- self.using_express = True
- print 'Building with ', self.gens[version]['gen'] , "Express edition"
- break
- else:
- print >> sys.stderr, 'Cannot find any Visual Studio installation'
- sys.exit(1)
- return self._generator
-
- def _set_generator(self, gen):
- self._generator = gen
-
- generator = property(_get_generator, _set_generator)
-
- def get_gen_str(self, gen):
- if gen is None:
- gen = self._generator
- return self.gens[gen.lower()]['ver']
-
- def os(self):
- return 'win32'
-
- def build_dirs(self):
- if(os.path.basename(os.path.normpath(os.getcwd())) == 'indra'):
- prefix = '../'
- else:
- prefix = ''
-
- if self.word_size == 64:
- return [prefix+'build-' + self.generator + '-Win64']
- else:
- return [prefix+'build-' + self.generator]
-
- def cmake_commandline(self, src_dir, build_dir, opts, simple):
- args = dict(
- dir=src_dir,
- generator=self.gens[self.generator.lower()]['gen'],
- opts=quote(opts),
- standalone=self.standalone,
- unattended=self.unattended,
- project_name=self.project_name,
- word_size=self.word_size,
- )
- if self.word_size == 64:
- args["generator"] += r' Win64'
-
- #if simple:
- # return 'cmake %(opts)s "%(dir)s"' % args
- return ('cmake -G "%(generator)s" '
- '-DSTANDALONE:BOOL=%(standalone)s '
- '-DUNATTENDED:BOOL=%(unattended)s '
- '-DWORD_SIZE:STRING=%(word_size)s '
- '-DROOT_PROJECT_NAME:STRING=\"%(project_name)s\" '
- '%(opts)s "%(dir)s"' % args)
-
- def get_HKLM_registry_value(self, key_str, value_str):
- import _winreg
- reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
- key = _winreg.OpenKey(reg, key_str)
- value = _winreg.QueryValueEx(key, value_str)[0]
- print 'Found: %s' % value
- return value
-
- def find_visual_studio(self, gen=None):
- gen = self.get_gen_str(gen)
- value_str = (r'EnvironmentDirectory')
- key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
- gen)
- print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
- (key_str, value_str))
- try:
- return self.get_HKLM_registry_value(key_str, value_str)
- except WindowsError, err:
- key_str = (r'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%s\Setup\VS' %
- gen)
-
- try:
- return self.get_HKLM_registry_value(key_str, value_str)
- except:
- print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
- return ''
-
- def find_msbuild(self, gen=None):
- gen = self.get_gen_str(gen)
-
- key_str = (r'SOFTWARE\Microsoft\MSBuild\ToolsVersions\12.0')
-
- print ('Checking MSBuild support for vs ver = %s' % gen)
- if not self.get_HKLM_registry_value(key_str+'\\'+gen, "VCTargetsPath"):
- return (None, None)
- print ('Reading MSBuild location from HKEY_LOCAL_MACHINE\%s\MSBuildToolsPath' %
- key_str)
- print key_str
- try:
- return (self.get_HKLM_registry_value(key_str, 'MSBuildToolsPath'), gen)
- except WindowsError, err:
- key_str = (r'SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\%s' %
- gen)
-
- try:
- return (self.get_HKLM_registry_value(key_str, 'MSBuildToolsPath'), gen)
- except WindowsError, err:
- print 'Didn\'t find msbuild'
- return (None, None)
-
- def find_visual_studio_express(self, gen=None):
- gen = self.get_gen_str(gen)
- try:
- import _winreg
- key_str = (r'SOFTWARE\Microsoft\VCEXpress\%s\Setup\VC' %
- gen)
- value_str = (r'ProductDir')
- print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
- (key_str, value_str))
- print key_str
-
- reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
- key = _winreg.OpenKey(reg, key_str)
- value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
- print 'Found: %s' % value
- return value
- except WindowsError, err:
- print >> sys.stderr, "Didn't find ", gen
- return ''
-
- def find_visual_studio_express_single(self, gen=None):
- gen = self.get_gen_str(gen)
- try:
- import _winreg
- key_str = (r'SOFTWARE\Microsoft\VCEXpress\%s_Config\Setup\VC' %
- gen)
- value_str = (r'ProductDir')
- print ('Reading VS environment from HKEY_CURRENT_USER\%s\%s' %
- (key_str, value_str))
- print key_str
-
- reg = _winreg.ConnectRegistry(None, _winreg.HKEY_CURRENT_USER)
- key = _winreg.OpenKey(reg, key_str)
- value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
- print 'Found: %s' % value
- return value
- except WindowsError, err:
- print >> sys.stderr, "Didn't find ", gen
- return ''
-
- def get_build_cmd(self):
- if self.incredibuild:
- config = self.build_type
- if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0' ]:
- config = '\"%s|Win32\"' % config
-
- return "buildconsole \"%s.sln\" /build %s" % (self.project_name, config), None
- environment = self.find_visual_studio()
- if environment == '':
- environment = self.find_visual_studio_express()
- if environment == '':
- environment = self.find_visual_studio_express_single()
- if environment == '':
- print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
- else:
- build_dirs=self.build_dirs()
- print >> sys.stderr, "\nSolution generation complete, it can can now be found in:", build_dirs[0]
- print >> sys.stderr, "\nAs you are using an Express Visual Studio, the build step cannot be automated"
- print >> sys.stderr, "\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for Visual Studio Express specific information"
- exit(0)
-
- msbuild_dir, tool_ver = self.find_msbuild()
-
- if msbuild_dir is not None and tool_ver is not None:
- return ('\"%smsbuild.exe\" \"%s.sln\" /p:configuration=%s /p:VisualStudioVersion=%s' %
- (msbuild_dir, self.project_name, self.build_type, tool_ver)), True
-
- # devenv.com is CLI friendly, devenv.exe... not so much.
- return ('"%sdevenv.com" \"%s.sln\" /build %s' %
- (self.find_visual_studio(), self.project_name, self.build_type)), None
-
- def run(self, command, name=None):
- '''Run a program. If the program fails, raise an exception.'''
- ret = os.system('\"'+command+'\"')
- if ret:
- if name is None:
- name = os.path.normpath(shlex.split(command.encode('utf8'),posix=False)[0].strip('"'))
-
- path = self.find_in_path(name)
- if not path:
- ret = 'was not found'
- else:
- ret = 'exited with status %d' % ret
- raise CommandError('the command %r %s' %
- (name, ret))
-
- def run_cmake(self, args=[]):
- '''Override to add the vstool.exe call after running cmake.'''
- PlatformSetup.run_cmake(self, args)
- if self.unattended == 'OFF':
- if self.using_express == False:
- self.run_vstool()
-
- def run_vstool(self):
- for build_dir in self.build_dirs():
- stamp = os.path.join(build_dir, 'vstool.txt')
- try:
- prev_build = open(stamp).read().strip()
- except IOError:
- prev_build = ''
- if prev_build == self.build_type:
- # Only run vstool if the build type has changed.
- continue
-
- if(os.path.basename(os.path.normpath(os.getcwd())) == 'indra'):
- tool_path = os.path.join('tools','vstool','VSTool.exe')
- else:
- tool_path = os.path.join('indra','tools','vstool','VSTool.exe')
- vstool_cmd = (tool_path +
- ' --solution \"' +
- os.path.join(build_dir,'%s.sln' % self.project_name) +
- '\" --config ' + self.build_type +
- ' --startup secondlife-bin')
- print 'Running vstool %r in %r' % (vstool_cmd, getcwd())
- self.run(vstool_cmd)
- print >> open(stamp, 'w'), self.build_type
-
- def run_build(self, opts, targets):
- cwd = getcwd()
- build_cmd, msbuild = self.get_build_cmd()
-
- for d in self.build_dirs():
- try:
- os.chdir(d)
- if targets:
- if msbuild:
- cmd = '%s /target:%s %s' % (build_cmd, ';'.join(targets), ' '.join(opts))
- print 'Running build(targets) %r in %r' % (cmd, d)
- self.run(cmd)
- else:
- for t in targets:
- cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
- print 'Running build(targets) %r in %r' % (cmd, d)
- self.run(cmd)
- else:
- cmd = '%s %s' % (build_cmd, ' '.join(opts))
- print 'Running build %r in %r' % (cmd, d)
- self.run(cmd)
- finally:
- os.chdir(cwd)
-
-class CygwinSetup(WindowsSetup):
- def __init__(self):
- super(CygwinSetup, self).__init__()
- self.generator = 'vc80'
-
- def cmake_commandline(self, src_dir, build_dir, opts, simple):
- dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
- args = dict(
- dir=dos_dir,
- generator=self.gens[self.generator.lower()]['gen'],
- opts=quote(opts),
- standalone=self.standalone,
- unattended=self.unattended,
- project_name=self.project_name,
- word_size=self.word_size,
- )
- if self.word_size == 64:
- args["generator"] += r' Win64'
- #if simple:
- # return 'cmake %(opts)s "%(dir)s"' % args
- return ('cmake -G "%(generator)s" '
- '-DUNATTENDED:BOOl=%(unattended)s '
- '-DSTANDALONE:BOOL=%(standalone)s '
- '-DWORD_SIZE:STRING=%(word_size)s '
- '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
- '%(opts)s "%(dir)s"' % args)
-
- def run(self, command, name=None):
- '''Run a program. If the program fails, raise an exception.'''
- ret = os.system(command)
- if ret:
- if name is None:
- name = os.path.normpath(shlex.split(command.encode('utf8'),posix=False)[0].strip('"'))
-
- path = self.find_in_path(name)
- if not path:
- ret = 'was not found'
- else:
- ret = 'exited with status %d' % ret
- raise CommandError('the command %r %s' %
- (name, ret))
-
-
-setup_platform = {
- 'darwin': DarwinSetup,
- 'linux2': LinuxSetup,
- 'linux3': LinuxSetup,
- 'win32' : WindowsSetup,
- 'cygwin' : CygwinSetup
- }
-
-
-usage_msg = '''
-Usage: develop.py [options] [command [command-options]]
-
-Options:
- -h | --help print this help message
- --standalone build standalone, without Linden prebuild libraries
- --unattended build unattended, do not invoke any tools requiring
- a human response
- --universal build a universal binary on Mac OS X (unsupported)
- -t | --type=NAME build type ("Debug", "Release", or "RelWithDebInfo")
- -m32 | -m64 build architecture (32-bit or 64-bit)
- -N | --no-distcc disable use of distcc
- -G | --generator=NAME generator name
- Windows: VC100 (VS2010) (default)
- Mac OS X: Xcode (default), Unix Makefiles
- Linux: Unix Makefiles (default), KDevelop3
- -p | --project=NAME set the root project name. (Doesn't effect makefiles)
-
-Commands:
- build configure and build default target
- clean delete all build directories, does not affect sources
- configure configure project by running cmake (default if none given)
- printbuilddirs print the build directory that will be used
-
-Command-options for "configure":
- We use cmake variables to change the build configuration.
- -DPACKAGE:BOOL=ON Create "package" target to make installers
- -DLL_TESTS:BOOL=OFF Don't generate unit test projects
- -DEXAMPLEPLUGIN:BOOL=OFF Don't generate example plugin project
- -DDISABLE_TCMALLOC:BOOL=ON Disable linkage of TCMalloc. (64bit builds automatically disable TCMalloc)
- -DRELEASE_CRASH_REPORTING:BOOL=ON Enable Google Breakpad crash reporting
- -DFMODSTUDIO:BOOL=ON Use FMOD Studio audio libraries
- -DFMODEX:BOOL=ON Use FMOD Ex audio libraries
-
-Examples:
- Set up a Visual Studio 2010 project with "package" target:
- develop.py -G vc100 configure -DPACKAGE:BOOL=ON
-'''
-
-def main(arguments):
- setup = setup_platform[sys.platform]()
- try:
- opts, args = getopt.getopt(
- arguments,
- '?hNt:p:G:m:',
- ['help', 'standalone', 'no-distcc', 'unattended', 'type=', 'incredibuild', 'generator=', 'project='])
- except getopt.GetoptError, err:
- print >> sys.stderr, 'Error:', err
- print >> sys.stderr, """
-Note: You must pass -D options to cmake after the "configure" command
-For example: develop.py configure -DSERVER:BOOL=OFF"""
- print >> sys.stderr, usage_msg.strip()
- sys.exit(1)
-
- for o, a in opts:
- if o in ('-?', '-h', '--help'):
- print usage_msg.strip()
- sys.exit(0)
- elif o in ('--standalone',):
- setup.standalone = 'ON'
- elif o in ('--unattended',):
- setup.unattended = 'ON'
- elif o in ('-m',):
- if a in ('32', '64'):
- setup.word_size = int(a)
- else:
- print >> sys.stderr, 'Error: unknown word size', repr(a)
- print >> sys.stderr, 'Supported word sizes: 32, 64'
- sys.exit(1)
- elif o in ('-t', '--type'):
- try:
- setup.build_type = setup.build_types[a.lower()]
- except KeyError:
- print >> sys.stderr, 'Error: unknown build type', repr(a)
- print >> sys.stderr, 'Supported build types:'
- types = setup.build_types.values()
- types.sort()
- for t in types:
- print ' ', t
- sys.exit(1)
- elif o in ('-G', '--generator'):
- setup.generator = a
- elif o in ('-N', '--no-distcc'):
- setup.distcc = False
- elif o in ('-p', '--project'):
- setup.project_name = a
- elif o in ('--incredibuild'):
- setup.incredibuild = True
- else:
- print >> sys.stderr, 'INTERNAL ERROR: unhandled option', repr(o)
- sys.exit(1)
- if not args:
- setup.run_cmake()
- return
- try:
- cmd = args.pop(0)
- if cmd in ('cmake', 'configure'):
- setup.run_cmake(args)
- elif cmd == 'build':
- if os.getenv('DISTCC_DIR') is None:
- distcc_dir = os.path.join(getcwd(), '.distcc')
- if not os.path.exists(distcc_dir):
- os.mkdir(distcc_dir)
- print "setting DISTCC_DIR to %s" % distcc_dir
- os.environ['DISTCC_DIR'] = distcc_dir
- else:
- print "DISTCC_DIR is set to %s" % os.getenv('DISTCC_DIR')
- for d in setup.build_dirs():
- if not os.path.exists(d):
- raise CommandError('run "develop.py cmake" first')
- setup.run_cmake()
- opts, targets = setup.parse_build_opts(args)
- setup.run_build(opts, targets)
- elif cmd == 'clean':
- if args:
- raise CommandError('clean takes no arguments')
- setup.cleanup()
- elif cmd == 'printbuilddirs':
- for d in setup.build_dirs():
- print >> sys.stdout, d
- else:
- print >> sys.stderr, 'Error: unknown subcommand', repr(cmd)
- print >> sys.stderr, "(run 'develop.py --help' for help)"
- sys.exit(1)
- except getopt.GetoptError, err:
- print >> sys.stderr, 'Error with %r subcommand: %s' % (cmd, err)
- sys.exit(1)
-
-
-if __name__ == '__main__':
- try:
- main(sys.argv[1:])
- except CommandError, err:
- print >> sys.stderr, 'Error:', err
- sys.exit(1)
diff --git a/indra/lib/python/indra/ipc/httputil.py b/indra/lib/python/indra/ipc/httputil.py
index c4ac0a379..d53f34a77 100644
--- a/indra/lib/python/indra/ipc/httputil.py
+++ b/indra/lib/python/indra/ipc/httputil.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
import warnings
diff --git a/indra/lib/python/indra/ipc/siesta_test.py b/indra/lib/python/indra/ipc/siesta_test.py
index 177ea710d..a35eed246 100644
--- a/indra/lib/python/indra/ipc/siesta_test.py
+++ b/indra/lib/python/indra/ipc/siesta_test.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
from indra.base import llsd, lluuid
from indra.ipc import siesta
import datetime, math, unittest
diff --git a/indra/lib/python/indra/util/fastest_elementtree.py b/indra/lib/python/indra/util/fastest_elementtree.py
index 3e2189c4e..4fcf662dd 100644
--- a/indra/lib/python/indra/util/fastest_elementtree.py
+++ b/indra/lib/python/indra/util/fastest_elementtree.py
@@ -36,7 +36,6 @@ $/LicenseInfo$
# Using cElementTree might cause some unforeseen problems, so here's a
# convenient off switch.
-
use_celementree = True
try:
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index 0059faa2e..8d9656778 100644
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -41,6 +41,14 @@ import tarfile
import errno
import subprocess
+class ManifestError(RuntimeError):
+ """Use an exception more specific than generic Python RuntimeError"""
+ pass
+
+class MissingError(ManifestError):
+ """You specified a file that doesn't exist"""
+ pass
+
def path_ancestors(path):
drive, path = os.path.splitdrive(os.path.normpath(path))
result = []
@@ -76,31 +84,9 @@ def get_default_platform(dummy):
'darwin':'darwin'
}[sys.platform]
-def get_default_version(srctree):
- # look up llversion.h and parse out the version info
- paths = [os.path.join(srctree, x, 'llversionviewer.h') for x in ['llcommon', '../llcommon', '../../indra/llcommon.h']]
- for p in paths:
- if os.path.exists(p):
- contents = open(p, 'r').read()
- major = re.search("LL_VERSION_MAJOR\s=\s([0-9]+)", contents).group(1)
- minor = re.search("LL_VERSION_MINOR\s=\s([0-9]+)", contents).group(1)
- patch = re.search("LL_VERSION_PATCH\s=\s([0-9]+)", contents).group(1)
- build = re.search("LL_VERSION_BUILD\s=\s([0-9]+)", contents).group(1)
- return major, minor, patch, build
-
-def get_channel(srctree):
- # look up llversionserver.h and parse out the version info
- paths = [os.path.join(srctree, x, 'llversionviewer.h') for x in ['llcommon', '../llcommon', '../../indra/llcommon.h']]
- for p in paths:
- if os.path.exists(p):
- contents = open(p, 'r').read()
- channel = re.search("LL_CHANNEL\s=\s\"(.+)\";\s*$", contents, flags = re.M).group(1)
- return channel
-
-
DEFAULT_SRCTREE = os.path.dirname(sys.argv[0])
-DEFAULT_CHANNEL = 'Second Life Release'
-DEFAULT_CHANNEL_SNOWGLOBE = 'Snowglobe Release'
+CHANNEL_VENDOR_BASE = 'Singularity'
+RELEASE_CHANNEL = CHANNEL_VENDOR_BASE + ' Release'
ARGUMENTS=[
dict(name='actions',
@@ -121,27 +107,19 @@ ARGUMENTS=[
On Linux this would try to use Linux_i686Manifest.""",
default=""),
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
- dict(name='buildtype', description="""The build type used. ('Debug', 'Release', or 'RelWithDebInfo')
- Default is Release """,
- default="Release"),
- dict(name='branding_id', description="""Identifier for the branding set to
- use. Currently, 'secondlife' or 'snowglobe')""",
- default='secondlife'),
+ dict(name='buildtype', description='Build type (i.e. Debug, Release, RelWithDebInfo).', default=None),
dict(name='configuration',
- description="""The build configuration used. Only used on OS X for
- now, but it could be used for other platforms as well.""",
- default="Universal"),
+ description="""The build configuration used.""",
+ default="Release"),
dict(name='dest', description='Destination directory.', default=DEFAULT_SRCTREE),
dict(name='grid',
- description="""Which grid the client will try to connect to. Even
- though it's not strictly a grid, 'firstlook' is also an acceptable
- value for this parameter.""",
- default=""),
+ description="""Which grid the client will try to connect to.""",
+ default=None),
dict(name='channel',
description="""The channel to use for updates, packaging, settings name, etc.""",
- default=get_channel),
- dict(name='login_channel',
- description="""The channel to use for login handshake/updates only.""",
+ default='CHANNEL UNSET'),
+ dict(name='channel_suffix',
+ description="""Addition to the channel for packaging and channel value, but not application name (used internally)""",
default=None),
dict(name='installer_name',
description=""" The name of the file that the installer should be
@@ -166,12 +144,12 @@ ARGUMENTS=[
contain the name of the final package in a form suitable
for use by a .bat file.""",
default=None),
- dict(name='version',
- description="""This specifies the version of Second Life that is
- being packaged up.""",
- default=get_default_version),
- dict(name='extra_libraries',
- description="""List of extra libraries to include in package""",
+ dict(name='versionfile',
+ description="""The name of a file containing the full version number."""),
+ dict(name='signature',
+ description="""This specifies an identity to sign the viewer with, if any.
+ If no value is supplied, the default signature will be used, if any. Currently
+ only used on Mac OS X.""",
default=None)
]
@@ -193,8 +171,9 @@ def usage(srctree=""):
arg['description'] % nd)
def main():
- print "cwd:", os.getcwd()
- print " ".join(sys.argv)
+## import itertools
+## print ' '.join((("'%s'" % item) if ' ' in item else item)
+## for item in itertools.chain([sys.executable], sys.argv))
option_names = [arg['name'] + '=' for arg in ARGUMENTS]
option_names.append('help')
options, remainder = getopt.getopt(sys.argv[1:], "", option_names)
@@ -231,12 +210,17 @@ def main():
args[arg['name']] = default
# fix up version
- if isinstance(args.get('version'), str):
- args['version'] = args['version'].split('.')
-
- # default and agni are default
- if args['grid'] in ['default', 'agni']:
- args['grid'] = ''
+ if isinstance(args.get('versionfile'), str):
+ try: # read in the version string
+ vf = open(args['versionfile'], 'r')
+ args['version'] = vf.read().strip().split('.')
+ except:
+ print "Unable to read versionfile '%s'" % args['versionfile']
+ raise
+
+ # unspecified, default, and agni are default
+ if args['grid'] in ['', 'default', 'agni']:
+ args['grid'] = None
if 'actions' in args:
args['actions'] = args['actions'].split()
@@ -245,15 +229,101 @@ def main():
for opt in args:
print "Option:", opt, "=", args[opt]
+ # pass in sourceid as an argument now instead of an environment variable
+ try:
+ args['sourceid'] = os.environ["sourceid"]
+ except KeyError:
+ args['sourceid'] = ""
+
+ # Build base package.
+ touch = args.get('touch')
+ if touch:
+ print 'Creating base package'
+ args['package_id'] = "" # base package has no package ID
wm = LLManifest.for_platform(args['platform'], args.get('arch'))(args)
wm.do(*args['actions'])
+ # Store package file for later if making touched file.
+ base_package_file = ""
+ if touch:
+ print 'Created base package ', wm.package_file
+ base_package_file = "" + wm.package_file
+ # handle multiple packages if set
+ try:
+ additional_packages = os.environ["additional_packages"]
+ except KeyError:
+ additional_packages = ""
+ if additional_packages:
+ # Determine destination prefix / suffix for additional packages.
+ base_dest_postfix = args['dest']
+ base_dest_prefix = ""
+ base_dest_parts = args['dest'].split(os.sep)
+ if len(base_dest_parts) > 1:
+ base_dest_postfix = base_dest_parts[len(base_dest_parts) - 1]
+ base_dest_prefix = base_dest_parts[0]
+ i = 1
+ while i < len(base_dest_parts) - 1:
+ base_dest_prefix = base_dest_prefix + os.sep + base_dest_parts[i]
+ i = i + 1
+ # Determine touched prefix / suffix for additional packages.
+ base_touch_postfix = ""
+ base_touch_prefix = ""
+ if touch:
+ base_touch_postfix = touch
+ base_touch_parts = touch.split('/')
+ if "arwin" in args['platform']:
+ if len(base_touch_parts) > 1:
+ base_touch_postfix = base_touch_parts[len(base_touch_parts) - 1]
+ base_touch_prefix = base_touch_parts[0]
+ i = 1
+ while i < len(base_touch_parts) - 1:
+ base_touch_prefix = base_touch_prefix + '/' + base_touch_parts[i]
+ i = i + 1
+ else:
+ if len(base_touch_parts) > 2:
+ base_touch_postfix = base_touch_parts[len(base_touch_parts) - 2] + '/' + base_touch_parts[len(base_touch_parts) - 1]
+ base_touch_prefix = base_touch_parts[0]
+ i = 1
+ while i < len(base_touch_parts) - 2:
+ base_touch_prefix = base_touch_prefix + '/' + base_touch_parts[i]
+ i = i + 1
+ # Store base channel name.
+ base_channel_name = args['channel']
+ # Build each additional package.
+ package_id_list = additional_packages.split(" ")
+ args['channel'] = base_channel_name
+ for package_id in package_id_list:
+ try:
+ if package_id + "_viewer_channel_suffix" in os.environ:
+ args['channel_suffix'] = os.environ[package_id + "_viewer_channel_suffix"]
+ else:
+ args['channel_suffix'] = None
+ if package_id + "_sourceid" in os.environ:
+ args['sourceid'] = os.environ[package_id + "_sourceid"]
+ else:
+ args['sourceid'] = None
+ args['dest'] = base_dest_prefix + os.sep + package_id + os.sep + base_dest_postfix
+ except KeyError:
+ sys.stderr.write("Failed to create package for package_id: %s" % package_id)
+ sys.stderr.flush()
+ continue
+ if touch:
+ print 'Creating additional package for "', package_id, '" in ', args['dest']
+ wm = LLManifest.for_platform(args['platform'], args.get('arch'))(args)
+ wm.do(*args['actions'])
+ if touch:
+ print 'Created additional package ', wm.package_file, ' for ', package_id
+ faketouch = base_touch_prefix + '/' + package_id + '/' + base_touch_postfix
+ fp = open(faketouch, 'w')
+ fp.write('set package_file=%s\n' % wm.package_file)
+ fp.close()
+
# Write out the package file in this format, so that it can easily be called
# and used in a .bat file - yeah, it sucks, but this is the simplest...
touch = args.get('touch')
if touch:
fp = open(touch, 'w')
- fp.write('set package_file=%s\n' % wm.package_file)
+ fp.write('set package_file=%s\n' % base_package_file)
fp.close()
print 'touched', touch
return 0
@@ -269,8 +339,8 @@ class LLManifest(object):
__metaclass__ = LLManifestRegistry
manifests = {}
def for_platform(self, platform, arch = None):
- if arch and platform != "windows":
- platform = platform + '_' + arch
+ if arch:
+ platform = platform + '_' + arch + '_'
return self.manifests[platform.lower()]
for_platform = classmethod(for_platform)
@@ -280,26 +350,15 @@ class LLManifest(object):
self.file_list = []
self.excludes = []
self.actions = []
- self.src_prefix = list([args['source']])
- self.artwork_prefix = list([args['artwork']])
- self.build_prefix = list([args['build']])
- self.alt_build_prefix = list([args['build']])
- self.dst_prefix = list([args['dest']])
+ self.src_prefix = [args['source']]
+ self.artwork_prefix = [args['artwork']]
+ self.build_prefix = [args['build']]
+ self.dst_prefix = [args['dest']]
self.created_paths = []
self.package_name = "Unknown"
-
- def default_grid(self):
- return self.args.get('grid', None) == ''
+
def default_channel(self):
- return self.args.get('channel', None) == DEFAULT_CHANNEL
-
- def default_channel_for_brand(self):
- if self.viewer_branding_id()=='secondlife':
- return self.args.get('channel', None) == DEFAULT_CHANNEL
- elif self.viewer_branding_id()=="snowglobe":
- return self.args.get('channel', None) == DEFAULT_CHANNEL_SNOWGLOBE
- else:
- return True
+ return self.args.get('channel', None) == RELEASE_CHANNEL
def construct(self):
""" Meant to be overriden by LLManifest implementors with code that
@@ -311,7 +370,7 @@ class LLManifest(object):
in the file list by path()."""
self.excludes.append(glob)
- def prefix(self, src='', build=None, dst=None, alt_build=None):
+ def prefix(self, src='', build=None, dst=None):
""" Pushes a prefix onto the stack. Until end_prefix is
called, all relevant method calls (esp. to path()) will prefix
paths with the entire prefix stack. Source and destination
@@ -322,15 +381,10 @@ class LLManifest(object):
dst = src
if build is None:
build = src
- if alt_build is None:
- alt_build = build
-
self.src_prefix.append(src)
self.artwork_prefix.append(src)
self.build_prefix.append(build)
self.dst_prefix.append(dst)
- self.alt_build_prefix.append(alt_build)
-
return True # so that you can wrap it in an if to get indentation
def end_prefix(self, descr=None):
@@ -343,30 +397,25 @@ class LLManifest(object):
src = self.src_prefix.pop()
artwork = self.artwork_prefix.pop()
build = self.build_prefix.pop()
- alt_build_prefix = self.alt_build_prefix.pop()
dst = self.dst_prefix.pop()
if descr and not(src == descr or build == descr or dst == descr):
raise ValueError, "End prefix '" + descr + "' didn't match '" +src+ "' or '" +dst + "'"
def get_src_prefix(self):
""" Returns the current source prefix."""
- return os.path.relpath(os.path.normpath(os.path.join(*self.src_prefix)))
+ return os.path.join(*self.src_prefix)
def get_artwork_prefix(self):
""" Returns the current artwork prefix."""
- return os.path.relpath(os.path.normpath(os.path.join(*self.artwork_prefix)))
+ return os.path.join(*self.artwork_prefix)
def get_build_prefix(self):
""" Returns the current build prefix."""
- return os.path.relpath(os.path.normpath(os.path.join(*self.build_prefix)))
-
- def get_alt_build_prefix(self):
- """ Returns the current alternate source prefix."""
- return os.path.relpath(os.path.normpath(os.path.join(*self.alt_build_prefix)))
+ return os.path.join(*self.build_prefix)
def get_dst_prefix(self):
""" Returns the current destination prefix."""
- return os.path.relpath(os.path.normpath(os.path.join(*self.dst_prefix)))
+ return os.path.join(*self.dst_prefix)
def src_path_of(self, relpath):
"""Returns the full path to a file or directory specified
@@ -383,25 +432,45 @@ class LLManifest(object):
relative to the destination directory."""
return os.path.join(self.get_dst_prefix(), relpath)
+ def ensure_src_dir(self, reldir):
+ """Construct the path for a directory relative to the
+ source path, and ensures that it exists. Returns the
+ full path."""
+ path = os.path.join(self.get_src_prefix(), reldir)
+ self.cmakedirs(path)
+ return path
+
+ def ensure_dst_dir(self, reldir):
+ """Construct the path for a directory relative to the
+ destination path, and ensures that it exists. Returns the
+ full path."""
+ path = os.path.join(self.get_dst_prefix(), reldir)
+ self.cmakedirs(path)
+ return path
+
def run_command(self, command):
""" Runs an external command, and returns the output. Raises
- an exception if the command reurns a nonzero status code. For
- debugging/informational purpoases, prints out the command's
+ an exception if the command returns a nonzero status code. For
+ debugging/informational purposes, prints out the command's
output as it is received."""
print "Running command:", command
- fd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+ sys.stdout.flush()
+ child = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+ shell=True)
lines = []
while True:
- lines.append(fd.stdout.readline())
+ lines.append(child.stdout.readline())
if lines[-1] == '':
break
else:
- print lines[-1].rstrip('\n'),
+ print lines[-1],
output = ''.join(lines)
- if fd.returncode:
- raise RuntimeError(
+ child.stdout.close()
+ status = child.wait()
+ if status:
+ raise ManifestError(
"Command %s returned non-zero status (%s) \noutput:\n%s"
- % (command, fd.returncode, output) )
+ % (command, status, output) )
return output
def created_path(self, path):
@@ -409,14 +478,24 @@ class LLManifest(object):
a) verify that you really have created it
b) schedule it for cleanup"""
if not os.path.exists(path):
- raise RuntimeError, "Should be something at path " + path
+ raise ManifestError, "Should be something at path " + path
self.created_paths.append(path)
- def put_in_file(self, contents, dst):
+ def put_in_file(self, contents, dst, src=None):
# write contents as dst
- f = open(self.dst_path_of(dst), "wb")
- f.write(contents)
- f.close()
+ dst_path = self.dst_path_of(dst)
+ f = open(dst_path, "wb")
+ try:
+ f.write(contents)
+ finally:
+ f.close()
+
+ # Why would we create a file in the destination tree if not to include
+ # it in the installer? The default src=None (plus the fact that the
+ # src param is last) is to preserve backwards compatibility.
+ if src:
+ self.file_list.append([src, dst_path])
+ return dst_path
def replace_in(self, src, dst=None, searchdict={}):
if dst == None:
@@ -436,11 +515,7 @@ class LLManifest(object):
# ensure that destination path exists
self.cmakedirs(os.path.dirname(dst))
self.created_paths.append(dst)
- if not os.path.isdir(src):
- self.ccopy(src,dst)
- else:
- # src is a dir
- self.ccopytree(src,dst)
+ self.ccopymumble(src, dst)
else:
print "Doesn't exist:", src
@@ -479,30 +554,29 @@ class LLManifest(object):
if method is not None:
method(src, dst)
self.file_list.append([src, dst])
- return [dst]
+ return 1
else:
sys.stdout.write(" (excluding %r, %r)" % (src, dst))
sys.stdout.flush()
- return []
+ return 0
def process_directory(self, src, dst):
if not self.includes(src, dst):
sys.stdout.write(" (excluding %r, %r)" % (src, dst))
sys.stdout.flush()
- return []
+ return 0
names = os.listdir(src)
self.cmakedirs(dst)
errors = []
- found_files = []
count = 0
for name in names:
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
if os.path.isdir(srcname):
- found_files.extend(self.process_directory(srcname, dstname))
+ count += self.process_directory(srcname, dstname)
else:
- found_files.extend(self.process_file(srcname, dstname))
- return found_files
+ count += self.process_file(srcname, dstname)
+ return count
def includes(self, src, dst):
if src:
@@ -520,28 +594,38 @@ class LLManifest(object):
else:
os.remove(path)
- def ccopy(self, src, dst):
- """ Copy a single file or symlink. Uses filecmp to skip copying for existing files."""
+ def ccopymumble(self, src, dst):
+ """Copy a single symlink, file or directory."""
if os.path.islink(src):
linkto = os.readlink(src)
- if os.path.islink(dst) or os.path.exists(dst):
+ if os.path.islink(dst) or os.path.isfile(dst):
os.remove(dst) # because symlinking over an existing link fails
+ elif os.path.isdir(dst):
+ shutil.rmtree(dst)
os.symlink(linkto, dst)
+ elif os.path.isdir(src):
+ self.ccopytree(src, dst)
else:
- # Don't recopy file if it's up-to-date.
- # If we seem to be not not overwriting files that have been
- # updated, set the last arg to False, but it will take longer.
- if os.path.exists(dst) and filecmp.cmp(src, dst, True):
- return
- # only copy if it's not excluded
- if self.includes(src, dst):
- try:
- os.unlink(dst)
- except OSError, err:
- if err.errno != errno.ENOENT:
- raise
+ self.ccopyfile(src, dst)
+ # XXX What about devices, sockets etc.?
+ # YYY would we put such things into a viewer package?!
- shutil.copy2(src, dst)
+ def ccopyfile(self, src, dst):
+ """ Copy a single file. Uses filecmp to skip copying for existing files."""
+ # Don't recopy file if it's up-to-date.
+ # If we seem to be not not overwriting files that have been
+ # updated, set the last arg to False, but it will take longer.
+ if os.path.exists(dst) and filecmp.cmp(src, dst, True):
+ return
+ # only copy if it's not excluded
+ if self.includes(src, dst):
+ try:
+ os.unlink(dst)
+ except OSError, err:
+ if err.errno != errno.ENOENT:
+ raise
+
+ shutil.copy2(src, dst)
def ccopytree(self, src, dst):
"""Direct copy of shutil.copytree with the additional
@@ -557,15 +641,11 @@ class LLManifest(object):
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
try:
- if os.path.isdir(srcname):
- self.ccopytree(srcname, dstname)
- else:
- self.ccopy(srcname, dstname)
- # XXX What about devices, sockets etc.?
+ self.ccopymumble(srcname, dstname)
except (IOError, os.error), why:
errors.append((srcname, dstname, why))
if errors:
- raise RuntimeError, errors
+ raise ManifestError, errors
def cmakedirs(self, path):
@@ -582,11 +662,25 @@ class LLManifest(object):
if os.path.exists(f):
return f
# didn't find it, return last item in list
- if list:
+ if len(list) > 0:
return list[-1]
else:
return None
+ def contents_of_tar(self, src_tar, dst_dir):
+ """ Extracts the contents of the tarfile (specified
+ relative to the source prefix) into the directory
+ specified relative to the destination directory."""
+ self.check_file_exists(src_tar)
+ tf = tarfile.open(self.src_path_of(src_tar), 'r')
+ for member in tf.getmembers():
+ tf.extract(member, self.ensure_dst_dir(dst_dir))
+ # TODO get actions working on these dudes, perhaps we should extract to a temporary directory and then process_directory on it?
+ self.file_list.append([src_tar,
+ self.dst_path_of(os.path.join(dst_dir,member.name))])
+ tf.close()
+
+
def wildcard_regex(self, src_glob, dst_glob):
src_re = re.escape(src_glob)
src_re = src_re.replace('\*', '([-a-zA-Z0-9._ ]*)')
@@ -597,7 +691,12 @@ class LLManifest(object):
i = i+1
return re.compile(src_re), dst_temp
- wildcard_pattern = re.compile('\*')
+ def check_file_exists(self, path):
+ if not os.path.exists(path) and not os.path.islink(path):
+ raise MissingError("Path %s doesn't exist" % (os.path.abspath(path),))
+
+
+ wildcard_pattern = re.compile(r'\*')
def expand_globs(self, src, dst):
src_list = glob.glob(src)
src_re, d_template = self.wildcard_regex(src.replace('\\', '/'),
@@ -624,43 +723,53 @@ class LLManifest(object):
return self.path(os.path.join(path, file), file)
def path(self, src, dst=None):
+ sys.stdout.write("Processing %s => %s ... " % (src, dst))
sys.stdout.flush()
if src == None:
- raise RuntimeError("No source file, dst is " + dst)
+ raise ManifestError("No source file, dst is " + dst)
if dst == None:
dst = src
dst = os.path.join(self.get_dst_prefix(), dst)
- sys.stdout.write("Processing %s => %s ... " % (src, dst))
- count = 0
- is_glob = False
- found_files = []
- # look under each prefix for matching paths. Paths are normalized so './../blah' will match '../blah/../blah/'
- paths = set([os.path.normpath(os.path.join(self.get_src_prefix(), src)),
- os.path.normpath(os.path.join(self.get_artwork_prefix(), src)),
- os.path.normpath(os.path.join(self.get_build_prefix(), src)),
- os.path.normpath(os.path.join(self.get_alt_build_prefix(), src))]
- )
- for path in paths:
- if self.wildcard_pattern.search(path):
- is_glob = True
- for s,d in self.expand_globs(path, dst):
+ def try_path(src):
+ # expand globs
+ count = 0
+ if self.wildcard_pattern.search(src):
+ for s,d in self.expand_globs(src, dst):
assert(s != d)
- found_files.extend(self.process_file(s, d))
+ count += self.process_file(s, d)
else:
+ # if we're specifying a single path (not a glob),
+ # we should error out if it doesn't exist
+ self.check_file_exists(src)
# if it's a directory, recurse through it
- if os.path.isdir(path):
- found_files.extend(self.process_directory(path, dst))
- elif os.path.exists(path):
- found_files.extend(self.process_file(path, dst))
+ if os.path.isdir(src):
+ count += self.process_directory(src, dst)
+ else:
+ count += self.process_file(src, dst)
+ return count
- # if we're specifying a single path (not a glob),
- # we should error out if it doesn't exist
- if not found_files and not is_glob:
- raise RuntimeError("No files match %s\n" % str(paths))
+ for pfx in self.get_src_prefix(), self.get_artwork_prefix(), self.get_build_prefix():
+ try:
+ count = try_path(os.path.join(pfx, src))
+ except MissingError:
+ # If src isn't a wildcard, and if that file doesn't exist in
+ # this pfx, try next pfx.
+ count = 0
+ continue
- print "%d files" % len(found_files)
- return found_files
+ # Here try_path() didn't raise MissingError. Did it process any files?
+ if count:
+ break
+ # Even though try_path() didn't raise MissingError, it returned 0
+ # files. src is probably a wildcard meant for some other pfx. Loop
+ # back to try the next.
+
+ print "%d files" % count
+
+ # Let caller check whether we processed as many files as expected. In
+ # particular, let caller notice 0.
+ return count
def do(self, *actions):
self.actions = actions
diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py
index 0bc21a35f..e956383cc 100644
--- a/indra/lib/python/uuid.py
+++ b/indra/lib/python/uuid.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
r"""UUID objects (universally unique identifiers) according to RFC 4122.
This module provides immutable UUID objects (class UUID) and the functions
diff --git a/indra/libpathing/CMakeLists.txt b/indra/libpathing/CMakeLists.txt
index 35086c716..2ab424822 100644
--- a/indra/libpathing/CMakeLists.txt
+++ b/indra/libpathing/CMakeLists.txt
@@ -30,5 +30,3 @@ set_source_files_properties(${libpathing_HEADER_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
add_library(nd_Pathing STATIC ${libpathing_SOURCE_FILES} ${libpathing_HEADER_FILES} )
-add_dependencies(nd_Pathing prepare)
-
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
index 25970a99a..f6ea97d07 100644
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -5,12 +5,7 @@ project(llaudio)
include(00-Common)
include(Audio)
include(LLAudio)
-if (FMODSTUDIO)
- include(FMODSTUDIO)
-endif (FMODSTUDIO)
-if (FMODEX)
- include(FMODEX)
-endif (FMODEX)
+include(FMODSTUDIO)
include(OPENAL)
include(LLCommon)
include(LLMath)
@@ -68,20 +63,6 @@ if (FMODSTUDIO)
)
endif (FMODSTUDIO)
-if (FMODEX)
- list(APPEND llaudio_SOURCE_FILES
- llaudioengine_fmodex.cpp
- lllistener_fmodex.cpp
- llstreamingaudio_fmodex.cpp
- )
-
- list(APPEND llaudio_HEADER_FILES
- llaudioengine_fmodex.h
- lllistener_fmodex.h
- llstreamingaudio_fmodex.h
- )
-endif (FMODEX)
-
if (OPENAL)
list(APPEND llaudio_SOURCE_FILES
llaudioengine_openal.cpp
@@ -100,5 +81,3 @@ set_source_files_properties(${llaudio_HEADER_FILES}
list(APPEND llaudio_SOURCE_FILES ${llaudio_HEADER_FILES})
add_library (llaudio ${llaudio_SOURCE_FILES})
-add_dependencies(llaudio prepare)
-
diff --git a/indra/llaudio/llaudioengine_fmodex.cpp b/indra/llaudio/llaudioengine_fmodex.cpp
deleted file mode 100644
index 8b71012ba..000000000
--- a/indra/llaudio/llaudioengine_fmodex.cpp
+++ /dev/null
@@ -1,1027 +0,0 @@
-/**
- * @file audioengine_FMODEX.cpp
- * @brief Implementation of LLAudioEngine class abstracting the audio support as a FMOD 3D implementation
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include "llstreamingaudio.h"
-#include "llstreamingaudio_fmodex.h"
-
-#include "llaudioengine_fmodex.h"
-#include "lllistener_fmodex.h"
-
-#include "llerror.h"
-#include "llmath.h"
-#include "llrand.h"
-
-#include "fmod.hpp"
-#include "fmod_errors.h"
-#include "lldir.h"
-#include "llapr.h"
-
-#include "sound_ids.h"
-
-#if LL_WINDOWS //Some ugly code to make missing fmodex.dll not cause a fatal error.
-#define WIN32_LEAN_AND_MEAN
-#include "windows.h"
-#include
-#pragma comment(lib, "delayimp.lib")
-
-bool attemptDelayLoad()
-{
- __try
- {
-#if defined(_WIN64)
- if( FAILED( __HrLoadAllImportsForDll( "fmodex64.dll" ) ) )
- return false;
-#else
- if( FAILED( __HrLoadAllImportsForDll( "fmodex.dll" ) ) )
- return false;
-#endif
- }
- __except( EXCEPTION_EXECUTE_HANDLER )
- {
- return false;
- }
- return true;
-}
-#endif
-
-static bool sVerboseDebugging = false;
-
-FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int outchannels);
-
-FMOD::ChannelGroup *LLAudioEngine_FMODEX::mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT] = {0};
-
-//This class is designed to keep track of all sound<->channel assocations.
-//Used to verify validity of sound and channel pointers, as well as catch cases were sounds
-//are released with active channels still attached.
-class CFMODSoundChecks
-{
- typedef std::map > active_sounds_t;
- typedef std::set dead_sounds_t;
- typedef std::map active_channels_t;
- typedef std::map dead_channels_t;
-
- active_sounds_t mActiveSounds;
- dead_sounds_t mDeadSounds;
- active_channels_t mActiveChannels;
- dead_channels_t mDeadChannels;
-public:
- enum STATUS
- {
- ACTIVE,
- DEAD,
- UNKNOWN
- };
- STATUS getPtrStatus(LLAudioChannel* channel)
- {
- if(!channel)
- return UNKNOWN;
- return getPtrStatus(dynamic_cast(channel)->mChannelp);
- }
- STATUS getPtrStatus(LLAudioBuffer* sound)
- {
- if(!sound)
- return UNKNOWN;
- return getPtrStatus(dynamic_cast(sound)->mSoundp);
- }
- STATUS getPtrStatus(FMOD::Channel* channel)
- {
- if(!channel)
- return UNKNOWN;
- else if(mActiveChannels.find(channel) != mActiveChannels.end())
- return ACTIVE;
- else if(mDeadChannels.find(channel) != mDeadChannels.end())
- return DEAD;
- return UNKNOWN;
- }
- STATUS getPtrStatus(FMOD::Sound* sound)
- {
- if(!sound)
- return UNKNOWN;
- if(mActiveSounds.find(sound) != mActiveSounds.end())
- return ACTIVE;
- else if(mDeadSounds.find(sound) != mDeadSounds.end())
- return DEAD;
- return UNKNOWN;
- }
- void addNewSound(FMOD::Sound* sound)
- {
- assertActiveState(sound,true,false);
-
- mDeadSounds.erase(sound);
- mActiveSounds.insert(std::make_pair(sound,std::set()));
- }
- void removeSound(FMOD::Sound* sound)
- {
- assertActiveState(sound,true);
-
- active_sounds_t::const_iterator it = mActiveSounds.find(sound);
- llassert(it != mActiveSounds.end());
- if(it != mActiveSounds.end())
- {
- if(!it->second.empty())
- {
- LL_WARNS("AudioImpl") << "Removing sound " << sound << " with attached channels: \n";
- for(std::set::iterator it2 = it->second.begin(); it2 != it->second.end();++it2)
- {
- switch(getPtrStatus(*it2))
- {
- case ACTIVE:
- LL_CONT << " Channel " << *it2 << " ACTIVE\n";
- break;
- case DEAD:
- LL_CONT << " Channel " << *it2 << " DEAD\n";
- break;
- default:
- LL_CONT << " Channel " << *it2 << " UNKNOWN\n";
- }
- }
- LL_CONT << LL_ENDL;
- }
- llassert(it->second.empty());
- mDeadSounds.insert(sound);
- mActiveSounds.erase(sound);
- }
- }
- void addNewChannelToSound(FMOD::Sound* sound,FMOD::Channel* channel)
- {
- assertActiveState(sound,true);
- assertActiveState(channel,true,false);
-
- mActiveSounds[sound].insert(channel);
- mActiveChannels.insert(std::make_pair(channel,sound));
- }
- void removeChannel(FMOD::Channel* channel)
- {
- assertActiveState(channel,true);
-
- active_channels_t::const_iterator it = mActiveChannels.find(channel);
- llassert(it != mActiveChannels.end());
- if(it != mActiveChannels.end())
- {
-#ifdef SHOW_ASSERT
- STATUS status = getPtrStatus(it->second);
- llassert(status != DEAD);
- llassert(status != UNKNOWN);
-#endif
-
- active_sounds_t::iterator it2 = mActiveSounds.find(it->second);
- llassert(it2 != mActiveSounds.end());
- if(it2 != mActiveSounds.end())
- {
- it2->second.erase(channel);
- }
- mDeadChannels.insert(*it);
- mActiveChannels.erase(channel);
- }
- }
-
- template
- void assertActiveState(T ptr, bool try_log=false, bool active=true)
- {
-#ifndef SHOW_ASSERT
- if(try_log && sVerboseDebugging)
-#endif
- {
- CFMODSoundChecks::STATUS chan = getPtrStatus(ptr);
- if(try_log && sVerboseDebugging)
- {
- if(active)
- {
- if(chan == CFMODSoundChecks::DEAD)
- LL_WARNS("AudioImpl") << __FUNCTION__ << ": Using unexpectedly dead " << typeid(T*).name() << " " << ptr << LL_ENDL;
- else if(chan == CFMODSoundChecks::UNKNOWN)
- LL_WARNS("AudioImpl") << __FUNCTION__ << ": Using unexpectedly unknown " << typeid(T*).name() << " " << ptr << LL_ENDL;
- }
- else if(chan == CFMODSoundChecks::ACTIVE)
- LL_WARNS("AudioImpl") << __FUNCTION__ << ": Using unexpectedly active " << typeid(T*).name() << " " << ptr << LL_ENDL;
- }
- llassert( active == (chan == CFMODSoundChecks::ACTIVE) );
- }
- }
-} gSoundCheck;
-
-LLAudioEngine_FMODEX::LLAudioEngine_FMODEX(bool enable_profiler, bool verbose_debugging)
-{
- sVerboseDebugging = verbose_debugging;
- mInited = false;
- mWindGen = NULL;
- mWindDSP = NULL;
- mSystem = NULL;
- mEnableProfiler = enable_profiler;
-}
-
-
-LLAudioEngine_FMODEX::~LLAudioEngine_FMODEX()
-{
-}
-
-
-inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
-{
- if(result == FMOD_OK)
- return false;
- LL_WARNS("AudioImpl") << string << " Error: " << FMOD_ErrorString(result) << LL_ENDL;
- return true;
-}
-
-void* F_STDCALL decode_alloc(unsigned int size, FMOD_MEMORY_TYPE type, const char *sourcestr)
-{
- if(type & FMOD_MEMORY_STREAM_DECODE)
- {
- LL_INFOS("AudioImpl") << "Decode buffer size: " << size << LL_ENDL;
- }
- else if(type & FMOD_MEMORY_STREAM_FILE)
- {
- LL_INFOS("AudioImpl") << "Stream buffer size: " << size << LL_ENDL;
- }
- return new char[size];
-}
-void* F_STDCALL decode_realloc(void *ptr, unsigned int size, FMOD_MEMORY_TYPE type, const char *sourcestr)
-{
- memset(ptr,0,size);
- return ptr;
-}
-void F_STDCALL decode_dealloc(void *ptr, FMOD_MEMORY_TYPE type, const char *sourcestr)
-{
- delete[] (char*)ptr;
-}
-
-bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
-{
-
-#if LL_WINDOWS
- if(!attemptDelayLoad())
- return false;
-#endif
-
- U32 version = 0;
- FMOD_RESULT result;
-
- LL_DEBUGS("AppInit") << "LLAudioEngine_FMODEX::init() initializing FMOD" << LL_ENDL;
-
- //result = FMOD::Memory_Initialize(NULL, 0, &decode_alloc, &decode_realloc, &decode_dealloc, FMOD_MEMORY_STREAM_DECODE | FMOD_MEMORY_STREAM_FILE);
- //if(Check_FMOD_Error(result, "FMOD::Memory_Initialize"))
- // return false;
-
- result = FMOD::System_Create(&mSystem);
- if(Check_FMOD_Error(result, "FMOD::System_Create"))
- return false;
-
- //will call LLAudioEngine_FMODEX::allocateListener, which needs a valid mSystem pointer.
- LLAudioEngine::init(num_channels, userdata);
-
- result = mSystem->getVersion(&version);
- Check_FMOD_Error(result, "FMOD::System::getVersion");
-
- if (version < FMOD_VERSION)
- {
- LL_WARNS("AppInit") << "Error : You are using the wrong FMOD Ex version (" << version
- << ")! You should be using FMOD Ex" << FMOD_VERSION << LL_ENDL;
- }
-
-// result = mSystem->setSoftwareFormat(44100, FMOD_SOUND_FORMAT_PCM16, 0, 0, FMOD_DSP_RESAMPLER_LINEAR);
-// Check_FMOD_Error(result,"FMOD::System::setSoftwareFormat");
-
- // In this case, all sounds, PLUS wind and stream will be software.
- result = mSystem->setSoftwareChannels(num_channels + 2);
- Check_FMOD_Error(result,"FMOD::System::setSoftwareChannels");
-
- U32 fmod_flags = FMOD_INIT_NORMAL;
- if(mEnableProfiler)
- {
- fmod_flags |= FMOD_INIT_ENABLE_PROFILE;
- }
-
-#if LL_LINUX
- bool audio_ok = false;
-
- if (!audio_ok)
- {
- if (NULL == getenv("LL_BAD_FMOD_PULSEAUDIO")) /*Flawfinder: ignore*/
- {
- LL_DEBUGS("AppInit") << "Trying PulseAudio audio output..." << LL_ENDL;
- if((result = mSystem->setOutput(FMOD_OUTPUTTYPE_PULSEAUDIO)) == FMOD_OK &&
- (result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
- {
- LL_DEBUGS("AppInit") << "PulseAudio output initialized OKAY" << LL_ENDL;
- audio_ok = true;
- }
- else
- {
- Check_FMOD_Error(result, "PulseAudio audio output FAILED to initialize");
- }
- }
- else
- {
- LL_DEBUGS("AppInit") << "PulseAudio audio output SKIPPED" << LL_ENDL;
- }
- }
- if (!audio_ok)
- {
- if (NULL == getenv("LL_BAD_FMOD_ALSA")) /*Flawfinder: ignore*/
- {
- LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
- if((result = mSystem->setOutput(FMOD_OUTPUTTYPE_ALSA)) == FMOD_OK &&
- (result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
- {
- LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
- audio_ok = true;
- }
- else
- {
- Check_FMOD_Error(result, "ALSA audio output FAILED to initialize");
- }
- }
- else
- {
- LL_DEBUGS("AppInit") << "ALSA audio output SKIPPED" << LL_ENDL;
- }
- }
- if (!audio_ok)
- {
- if (NULL == getenv("LL_BAD_FMOD_OSS")) /*Flawfinder: ignore*/
- {
- LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL;
- if((result = mSystem->setOutput(FMOD_OUTPUTTYPE_OSS)) == FMOD_OK &&
- (result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
- {
- LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL;
- audio_ok = true;
- }
- else
- {
- Check_FMOD_Error(result, "OSS audio output FAILED to initialize");
- }
- }
- else
- {
- LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
- }
- }
- if (!audio_ok)
- {
- LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL;
- return false;
- }
-
- // We're interested in logging which output method we
- // ended up with, for QA purposes.
- FMOD_OUTPUTTYPE output_type;
- if(!Check_FMOD_Error(mSystem->getOutput(&output_type), "FMOD::System::getOutput"))
- {
- switch (output_type)
- {
- case FMOD_OUTPUTTYPE_NOSOUND:
- LL_INFOS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
- case FMOD_OUTPUTTYPE_PULSEAUDIO:
- LL_INFOS("AppInit") << "Audio output: PulseAudio" << LL_ENDL; break;
- case FMOD_OUTPUTTYPE_ALSA:
- LL_INFOS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
- case FMOD_OUTPUTTYPE_OSS:
- LL_INFOS("AppInit") << "Audio output: OSS" << LL_ENDL; break;
- default:
- LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
- };
- }
-#else // LL_LINUX
-
- // initialize the FMOD engine
- result = mSystem->init( num_channels + 2, fmod_flags, 0);
- if (result == FMOD_ERR_OUTPUT_CREATEBUFFER)
- {
- /*
- Ok, the speaker mode selected isn't supported by this soundcard. Switch it
- back to stereo...
- */
- result = mSystem->setSpeakerMode(FMOD_SPEAKERMODE_STEREO);
- Check_FMOD_Error(result,"Error falling back to stereo mode");
- /*
- ... and re-init.
- */
- result = mSystem->init( num_channels + 2, fmod_flags, 0);
- }
- if(Check_FMOD_Error(result, "Error initializing FMOD Ex"))
- return false;
-#endif
-
- if (mEnableProfiler)
- {
- Check_FMOD_Error(mSystem->createChannelGroup("None", &mChannelGroups[AUDIO_TYPE_NONE]), "FMOD::System::createChannelGroup");
- Check_FMOD_Error(mSystem->createChannelGroup("SFX", &mChannelGroups[AUDIO_TYPE_SFX]), "FMOD::System::createChannelGroup");
- Check_FMOD_Error(mSystem->createChannelGroup("UI", &mChannelGroups[AUDIO_TYPE_UI]), "FMOD::System::createChannelGroup");
- Check_FMOD_Error(mSystem->createChannelGroup("Ambient", &mChannelGroups[AUDIO_TYPE_AMBIENT]), "FMOD::System::createChannelGroup");
- }
-
- // set up our favourite FMOD-native streaming audio implementation if none has already been added
- if (!getStreamingAudioImpl()) // no existing implementation added
- setStreamingAudioImpl(new LLStreamingAudio_FMODEX(mSystem));
-
- LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init() FMOD Ex initialized correctly" << LL_ENDL;
-
- int r_numbuffers, r_samplerate, r_channels, r_bits;
- unsigned int r_bufferlength;
- char r_name[256];
- FMOD_SPEAKERMODE speaker_mode;
- if (!Check_FMOD_Error(mSystem->getDSPBufferSize(&r_bufferlength, &r_numbuffers), "FMOD::System::getDSPBufferSize") &&
- !Check_FMOD_Error(mSystem->getSoftwareFormat(&r_samplerate, NULL, &r_channels, NULL, NULL, &r_bits), "FMOD::System::getSoftwareFormat") &&
- !Check_FMOD_Error(mSystem->getDriverInfo(0, r_name, 255, 0), "FMOD::System::getDriverInfo") &&
- !Check_FMOD_Error(mSystem->getSpeakerMode(&speaker_mode), "FMOD::System::getSpeakerMode"))
- {
- std::string speaker_mode_str = "unknown";
- switch(speaker_mode)
- {
- #define SPEAKER_MODE_CASE(MODE) case MODE: speaker_mode_str = #MODE; break;
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_RAW)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_MONO)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_STEREO)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_QUAD)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_SURROUND)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_5POINT1)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_7POINT1)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_SRS5_1_MATRIX)
- SPEAKER_MODE_CASE(FMOD_SPEAKERMODE_MYEARS)
- default:;
- #undef SPEAKER_MODE_CASE
- }
-
- r_name[255] = '\0';
- int latency = 1000.0 * r_bufferlength * r_numbuffers /r_samplerate;
-
- LL_INFOS("AppInit") << "FMOD device: "<< r_name << "\n"
- << "Output mode: "<< speaker_mode_str << "\n"
- << "FMOD Ex parameters: " << r_samplerate << " Hz * " << r_channels << " * " <getVersion(&version), "FMOD::System::getVersion"))
- {
- return llformat("FMOD Ex %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
- }
- }
- return "FMODEx";
-}
-
-
-void LLAudioEngine_FMODEX::allocateListener(void)
-{
- mListenerp = (LLListener *) new LLListener_FMODEX(mSystem);
- if (!mListenerp)
- {
- LL_WARNS("AudioImpl") << "Listener creation failed" << LL_ENDL;
- }
-}
-
-
-void LLAudioEngine_FMODEX::shutdown()
-{
- LL_INFOS("AudioImpl") << "About to LLAudioEngine::shutdown()" << LL_ENDL;
- LLAudioEngine::shutdown();
-
- LL_INFOS("AudioImpl") << "LLAudioEngine_FMODEX::shutdown() closing FMOD Ex" << LL_ENDL;
- if ( mSystem ) // speculative fix for MAINT-2657
- {
- LL_INFOS("AudioImpl") << "LLAudioEngine_FMODEX::shutdown() Requesting FMOD Ex system closure" << LL_ENDL;
- Check_FMOD_Error(mSystem->close(), "FMOD::System::close");
- LL_INFOS("AudioImpl") << "LLAudioEngine_FMODEX::shutdown() Requesting FMOD Ex system release" << LL_ENDL;
- Check_FMOD_Error(mSystem->release(), "FMOD::System::release");
- }
- LL_INFOS("AudioImpl") << "LLAudioEngine_FMODEX::shutdown() done closing FMOD Ex" << LL_ENDL;
-
- delete mListenerp;
- mListenerp = NULL;
-}
-
-
-LLAudioBuffer * LLAudioEngine_FMODEX::createBuffer()
-{
- return new LLAudioBufferFMODEX(mSystem);
-}
-
-
-LLAudioChannel * LLAudioEngine_FMODEX::createChannel()
-{
- return new LLAudioChannelFMODEX(mSystem);
-}
-
-bool LLAudioEngine_FMODEX::initWind()
-{
- mNextWindUpdate = 0.0;
-
- cleanupWind();
-
-
- FMOD_DSP_DESCRIPTION dspdesc;
- memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION)); //Set everything to zero
- strncpy(dspdesc.name,"Wind Unit", sizeof(dspdesc.name)); //Set name to "Wind Unit"
- dspdesc.channels=2;
- dspdesc.read = &windCallback; //Assign callback.
- if(Check_FMOD_Error(mSystem->createDSP(&dspdesc, &mWindDSP), "FMOD::createDSP") || !mWindDSP)
- return false;
-
- float frequency = 44100;
- if (!Check_FMOD_Error(mWindDSP->getDefaults(&frequency,0,0,0), "FMOD::DSP::getDefaults"))
- {
- mWindGen = new LLWindGen((U32)frequency);
- if (!Check_FMOD_Error(mWindDSP->setUserData((void*)mWindGen), "FMOD::DSP::setUserData") &&
- !Check_FMOD_Error(mSystem->playDSP(FMOD_CHANNEL_FREE, mWindDSP, false, 0), "FMOD::System::playDSP"))
- return true; //Success
- }
-
- cleanupWind();
- return false;
-}
-
-
-void LLAudioEngine_FMODEX::cleanupWind()
-{
- if (mWindDSP)
- {
- Check_FMOD_Error(mWindDSP->remove(), "FMOD::DSP::remove");
- Check_FMOD_Error(mWindDSP->release(), "FMOD::DSP::release");
- mWindDSP = NULL;
- }
-
- delete mWindGen;
- mWindGen = NULL;
-}
-
-
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMODEX::updateWind(LLVector3 wind_vec, F32 camera_height_above_water)
-{
- LLVector3 wind_pos;
- F64 pitch;
- F64 center_freq;
-
- if (!mEnableWind)
- {
- return;
- }
-
- if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL))
- {
-
- // wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up)
- // need to convert this to the conventional orientation DS3D and OpenAL use
- // where +X = right, +Y = up, +Z = backwards
-
- wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]);
-
- // cerr << "Wind update" << endl;
-
- pitch = 1.0 + mapWindVecToPitch(wind_vec);
- center_freq = 80.0 * pow(pitch,2.5*(mapWindVecToGain(wind_vec)+1.0));
-
- mWindGen->mTargetFreq = (F32)center_freq;
- mWindGen->mTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain;
- mWindGen->mTargetPanGainR = (F32)mapWindVecToPan(wind_vec);
- }
-}
-
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMODEX::setInternalGain(F32 gain)
-{
- if (!mInited)
- {
- return;
- }
-
- gain = llclamp( gain, 0.0f, 1.0f );
-
- FMOD::ChannelGroup *master_group;
- if(Check_FMOD_Error(mSystem->getMasterChannelGroup(&master_group), "FMOD::System::getMasterChannelGroup"))
- return;
- master_group->setVolume(gain);
-
- LLStreamingAudioInterface *saimpl = getStreamingAudioImpl();
- if ( saimpl )
- {
- // fmod likes its streaming audio channel gain re-asserted after
- // master volume change.
- saimpl->setGain(saimpl->getGain());
- }
-}
-
-//
-// LLAudioChannelFMODEX implementation
-//
-
-LLAudioChannelFMODEX::LLAudioChannelFMODEX(FMOD::System *system) : LLAudioChannel(), mSystemp(system), mChannelp(NULL), mLastSamplePos(0)
-{
-}
-
-
-LLAudioChannelFMODEX::~LLAudioChannelFMODEX()
-{
- if(sVerboseDebugging)
- LL_DEBUGS("AudioImpl") << "Destructing Audio Channel. mChannelp = " << mChannelp << LL_ENDL;
-
- cleanup();
-}
-
-static FMOD_RESULT F_CALLBACK channel_callback(FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACKTYPE type, void *commanddata1, void *commanddata2)
-{
- if(type == FMOD_CHANNEL_CALLBACKTYPE_END)
- {
- FMOD::Channel* chan = reinterpret_cast(channel);
- LLAudioChannelFMODEX* audio_channel = NULL;
- chan->getUserData((void**)&audio_channel);
- if(audio_channel)
- {
- audio_channel->onRelease();
- }
- }
- return FMOD_OK;
-}
-
-void LLAudioChannelFMODEX::onRelease()
-{
- llassert(mChannelp);
- if(sVerboseDebugging)
- LL_DEBUGS("AudioImpl") << "Fmod signaled channel release for channel " << mChannelp << LL_ENDL;
- gSoundCheck.removeChannel(mChannelp);
- mChannelp = NULL; //Null out channel here so cleanup doesn't try to redundantly stop it.
- cleanup();
-}
-
-bool LLAudioChannelFMODEX::updateBuffer()
-{
- if (LLAudioChannel::updateBuffer())
- {
- // Base class update returned true, which means the channel buffer was changed, and not is null.
-
- // Grab the FMOD sample associated with the buffer
- FMOD::Sound *soundp = ((LLAudioBufferFMODEX*)mCurrentBufferp)->getSound();
- if (!soundp)
- {
- // This is bad, there should ALWAYS be a sound associated with a legit
- // buffer.
- LL_ERRS("AudioImpl") << "No FMOD sound!" << LL_ENDL;
- return false;
- }
-
- // Actually play the sound. Start it off paused so we can do all the necessary
- // setup.
- if(!mChannelp)
- {
- FMOD_RESULT result = getSystem()->playSound(FMOD_CHANNEL_FREE, soundp, true, &mChannelp);
- Check_FMOD_Error(result, "FMOD::System::playSound");
- if(result == FMOD_OK)
- {
- if(sVerboseDebugging)
- LL_DEBUGS("AudioImpl") << "Created channel " << mChannelp << " for sound " << soundp << LL_ENDL;
-
- gSoundCheck.addNewChannelToSound(soundp,mChannelp);
- mChannelp->setCallback(&channel_callback);
- mChannelp->setUserData(this);
- }
- }
- }
-
- // If we have a source for the channel, we need to update its gain.
- if (mCurrentSourcep && mChannelp)
- {
- FMOD_RESULT result;
-
- gSoundCheck.assertActiveState(this);
- result = mChannelp->setVolume(getSecondaryGain() * mCurrentSourcep->getGain());
- Check_FMOD_Error(result, "FMOD::Channel::setVolume");
- result = mChannelp->setMode(mCurrentSourcep->isLoop() ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF);
- Check_FMOD_Error(result, "FMOD::Channel::setMode");
- }
-
- return true;
-}
-
-
-void LLAudioChannelFMODEX::update3DPosition()
-{
- if (!mChannelp)
- {
- // We're not actually a live channel (i.e., we're not playing back anything)
- return;
- }
-
- LLAudioBufferFMODEX *bufferp = (LLAudioBufferFMODEX *)mCurrentBufferp;
- if (!bufferp)
- {
- // We don't have a buffer associated with us (should really have been picked up
- // by the above if.
- return;
- }
-
- gSoundCheck.assertActiveState(this);
-
- if (mCurrentSourcep->isAmbient())
- {
- // Ambient sound, don't need to do any positional updates.
- set3DMode(false);
- }
- else
- {
- // Localized sound. Update the position and velocity of the sound.
- set3DMode(true);
-
- LLVector3 float_pos;
- float_pos.setVec(mCurrentSourcep->getPositionGlobal());
- FMOD_RESULT result = mChannelp->set3DAttributes((FMOD_VECTOR*)float_pos.mV, (FMOD_VECTOR*)mCurrentSourcep->getVelocity().mV);
- Check_FMOD_Error(result, "FMOD::Channel::set3DAttributes");
- }
-}
-
-
-void LLAudioChannelFMODEX::updateLoop()
-{
- if (!mChannelp)
- {
- // May want to clear up the loop/sample counters.
- return;
- }
-
- gSoundCheck.assertActiveState(this);
-
- //
- // Hack: We keep track of whether we looped or not by seeing when the
- // sample position looks like it's going backwards. Not reliable; may
- // yield false negatives.
- //
- U32 cur_pos;
- Check_FMOD_Error(mChannelp->getPosition(&cur_pos,FMOD_TIMEUNIT_PCMBYTES),"FMOD::Channel::getPosition");
-
- if (cur_pos < (U32)mLastSamplePos)
- {
- mLoopedThisFrame = true;
- }
- mLastSamplePos = cur_pos;
-}
-
-
-void LLAudioChannelFMODEX::cleanup()
-{
- LLAudioChannel::cleanup();
-
- if (!mChannelp)
- {
- llassert(mCurrentBufferp == NULL);
- //LL_INFOS("AudioImpl") << "Aborting cleanup with no channel handle." << LL_ENDL;
- return;
- }
-
- if(sVerboseDebugging)
- LL_DEBUGS("AudioImpl") << "Stopping channel " << mChannelp << LL_ENDL;
-
- gSoundCheck.removeChannel(mChannelp);
- mChannelp->setCallback(NULL);
- Check_FMOD_Error(mChannelp->stop(),"FMOD::Channel::stop");
-
- mChannelp = NULL;
- mLastSamplePos = 0;
-}
-
-
-void LLAudioChannelFMODEX::play()
-{
- if (!mChannelp)
- {
- LL_WARNS("AudioImpl") << "Playing without a channel handle, aborting" << LL_ENDL;
- return;
- }
-
- gSoundCheck.assertActiveState(this,true);
-
- bool paused=true;
- Check_FMOD_Error(mChannelp->getPaused(&paused), "FMOD::Channel::getPaused");
- if(!paused)
- {
- Check_FMOD_Error(mChannelp->setPaused(true), "FMOD::Channel::setPaused");
- Check_FMOD_Error(mChannelp->setPosition(0,FMOD_TIMEUNIT_PCMBYTES), "FMOD::Channel::setPosition");
- }
- Check_FMOD_Error(mChannelp->setPaused(false), "FMOD::Channel::setPaused");
-
- if(sVerboseDebugging)
- LL_DEBUGS("AudioImpl") << "Playing channel " << mChannelp << LL_ENDL;
-
- getSource()->setPlayedOnce(true);
-
- if(LLAudioEngine_FMODEX::mChannelGroups[getSource()->getType()])
- Check_FMOD_Error(mChannelp->setChannelGroup(LLAudioEngine_FMODEX::mChannelGroups[getSource()->getType()]),"FMOD::Channel::setChannelGroup");
-}
-
-
-void LLAudioChannelFMODEX::playSynced(LLAudioChannel *channelp)
-{
- LLAudioChannelFMODEX *fmod_channelp = (LLAudioChannelFMODEX*)channelp;
- if (!(fmod_channelp->mChannelp && mChannelp))
- {
- // Don't have channels allocated to both the master and the slave
- return;
- }
-
- gSoundCheck.assertActiveState(this,true);
-
- U32 cur_pos;
- if(Check_FMOD_Error(fmod_channelp->mChannelp->getPosition(&cur_pos,FMOD_TIMEUNIT_PCMBYTES), "Unable to retrieve current position"))
- return;
-
- cur_pos %= mCurrentBufferp->getLength();
-
- // Try to match the position of our sync master
- Check_FMOD_Error(mChannelp->setPosition(cur_pos,FMOD_TIMEUNIT_PCMBYTES),"Unable to set current position");
-
- // Start us playing
- play();
-}
-
-
-bool LLAudioChannelFMODEX::isPlaying()
-{
- if (!mChannelp)
- {
- return false;
- }
-
- gSoundCheck.assertActiveState(this);
-
- bool paused, playing;
- Check_FMOD_Error(mChannelp->getPaused(&paused),"FMOD::Channel::getPaused");
- Check_FMOD_Error(mChannelp->isPlaying(&playing),"FMOD::Channel::isPlaying");
- return !paused && playing;
-}
-
-
-//
-// LLAudioChannelFMODEX implementation
-//
-
-
-LLAudioBufferFMODEX::LLAudioBufferFMODEX(FMOD::System *system) : LLAudioBuffer(), mSystemp(system), mSoundp(NULL)
-{
-}
-
-
-LLAudioBufferFMODEX::~LLAudioBufferFMODEX()
-{
- if(mSoundp)
- {
- if(sVerboseDebugging)
- LL_DEBUGS("AudioImpl") << "Release sound " << mSoundp << LL_ENDL;
-
- gSoundCheck.removeSound(mSoundp);
- Check_FMOD_Error(mSoundp->release(),"FMOD::Sound::Release");
- mSoundp = NULL;
- }
-}
-
-
-bool LLAudioBufferFMODEX::loadWAV(const std::string& filename)
-{
- // Try to open a wav file from disk. This will eventually go away, as we don't
- // really want to block doing this.
- if (filename.empty())
- {
- // invalid filename, abort.
- return false;
- }
-
- if (!LLAPRFile::isExist(filename, LL_APR_RPB))
- {
- // File not found, abort.
- return false;
- }
-
- if (mSoundp)
- {
- gSoundCheck.removeSound(mSoundp);
- // If there's already something loaded in this buffer, clean it up.
- Check_FMOD_Error(mSoundp->release(),"FMOD::Sound::release");
- mSoundp = NULL;
- }
-
- FMOD_MODE base_mode = FMOD_LOOP_NORMAL | FMOD_SOFTWARE;
- FMOD_CREATESOUNDEXINFO exinfo;
- memset(&exinfo,0,sizeof(exinfo));
- exinfo.cbsize = sizeof(exinfo);
- exinfo.suggestedsoundtype = FMOD_SOUND_TYPE_WAV; //Hint to speed up loading.
- // Load up the wav file into an fmod sample
-#if LL_WINDOWS
- FMOD_RESULT result = getSystem()->createSound((const char*)utf8str_to_utf16str(filename).c_str(), base_mode | FMOD_UNICODE, &exinfo, &mSoundp);
-#else
- FMOD_RESULT result = getSystem()->createSound(filename.c_str(), base_mode, &exinfo, &mSoundp);
-#endif
-
- if (result != FMOD_OK)
- {
- // We failed to load the file for some reason.
- LL_WARNS("AudioImpl") << "Could not load data '" << filename << "': " << FMOD_ErrorString(result) << LL_ENDL;
-
- //
- // If we EVER want to load wav files provided by end users, we need
- // to rethink this!
- //
- // file is probably corrupt - remove it.
- LLFile::remove(filename);
- return false;
- }
-
- gSoundCheck.addNewSound(mSoundp);
-
- // Everything went well, return true
- return true;
-}
-
-
-U32 LLAudioBufferFMODEX::getLength()
-{
- if (!mSoundp)
- {
- return 0;
- }
-
- gSoundCheck.assertActiveState(this);
- U32 length;
- Check_FMOD_Error(mSoundp->getLength(&length, FMOD_TIMEUNIT_PCMBYTES),"FMOD::Sound::getLength");
- return length;
-}
-
-
-void LLAudioChannelFMODEX::set3DMode(bool use3d)
-{
- gSoundCheck.assertActiveState(this);
-
- FMOD_MODE current_mode;
- if(Check_FMOD_Error(mChannelp->getMode(¤t_mode),"FMOD::Channel::getMode"))
- return;
- FMOD_MODE new_mode = current_mode;
- new_mode &= ~(use3d ? FMOD_2D : FMOD_3D);
- new_mode |= use3d ? FMOD_3D : FMOD_2D;
-
- if(current_mode != new_mode)
- {
- Check_FMOD_Error(mChannelp->setMode(new_mode),"FMOD::Channel::setMode");
- }
-}
-
-
-FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *originalbuffer, float *newbuffer, unsigned int length, int inchannels, int outchannels)
-{
- // originalbuffer = fmod's original mixbuffer.
- // newbuffer = the buffer passed from the previous DSP unit.
- // length = length in samples at this mix time.
- // userdata = user parameter passed through in FSOUND_DSP_Create.
-
- LLWindGen *windgen;
- FMOD::DSP *thisdsp = (FMOD::DSP *)dsp_state->instance;
-
- thisdsp->getUserData((void **)&windgen);
-
- if (windgen)
- windgen->windGenerate((LLAudioEngine_FMODEX::MIXBUFFERFORMAT *)newbuffer, length);
-
- return FMOD_OK;
-}
diff --git a/indra/llaudio/llaudioengine_fmodex.h b/indra/llaudio/llaudioengine_fmodex.h
deleted file mode 100644
index fe93d8c48..000000000
--- a/indra/llaudio/llaudioengine_fmodex.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * @file audioengine_FMODEX.h
- * @brief Definition of LLAudioEngine class abstracting the audio
- * support as a FMOD 3D implementation
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_AUDIOENGINE_FMODEX_H
-#define LL_AUDIOENGINE_FMODEX_H
-
-#include "llaudioengine.h"
-#include "lllistener_fmodex.h"
-#include "llwindgen.h"
-
-//Stubs
-class LLAudioStreamManagerFMODEX;
-namespace FMOD
-{
- class System;
- class Channel;
- class ChannelGroup;
- class Sound;
- class DSP;
-}
-
-//Interfaces
-class LLAudioEngine_FMODEX : public LLAudioEngine
-{
-public:
- LLAudioEngine_FMODEX(bool enable_profiler, bool verbose_debugging);
- virtual ~LLAudioEngine_FMODEX();
-
- // initialization/startup/shutdown
- virtual bool init(const S32 num_channels, void *user_data);
- virtual std::string getDriverName(bool verbose);
- virtual void allocateListener();
-
- virtual void shutdown();
-
- /*virtual*/ bool initWind();
- /*virtual*/ void cleanupWind();
-
- /*virtual*/void updateWind(LLVector3 direction, F32 camera_height_above_water);
-
- typedef F32 MIXBUFFERFORMAT;
-
- FMOD::System *getSystem() const {return mSystem;}
-protected:
- /*virtual*/ LLAudioBuffer *createBuffer(); // Get a free buffer, or flush an existing one if you have to.
- /*virtual*/ LLAudioChannel *createChannel(); // Create a new audio channel.
-
- /*virtual*/ void setInternalGain(F32 gain);
-
- bool mInited;
-
- LLWindGen *mWindGen;
-
- FMOD::DSP *mWindDSP;
- FMOD::System *mSystem;
- bool mEnableProfiler;
-
-public:
- static FMOD::ChannelGroup *mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT];
-};
-
-
-class LLAudioChannelFMODEX : public LLAudioChannel
-{
-public:
- LLAudioChannelFMODEX(FMOD::System *audioengine);
- virtual ~LLAudioChannelFMODEX();
- void onRelease();
-protected:
- /*virtual*/ void play();
- /*virtual*/ void playSynced(LLAudioChannel *channelp);
- /*virtual*/ void cleanup();
- /*virtual*/ bool isPlaying();
-
- /*virtual*/ bool updateBuffer();
- /*virtual*/ void update3DPosition();
- /*virtual*/ void updateLoop();
-
- void set3DMode(bool use3d);
-protected:
- FMOD::System *getSystem() const {return mSystemp;}
- FMOD::System *mSystemp;
- FMOD::Channel *mChannelp;
- S32 mLastSamplePos;
-
- friend class CFMODSoundChecks;
-};
-
-
-class LLAudioBufferFMODEX : public LLAudioBuffer
-{
-public:
- LLAudioBufferFMODEX(FMOD::System *audioengine);
- virtual ~LLAudioBufferFMODEX();
-
- /*virtual*/ bool loadWAV(const std::string& filename);
- /*virtual*/ U32 getLength();
- friend class LLAudioChannelFMODEX;
-protected:
- FMOD::System *getSystem() const {return mSystemp;}
- FMOD::System *mSystemp;
- FMOD::Sound *getSound() const{ return mSoundp; }
- FMOD::Sound *mSoundp;
-
- friend class CFMODSoundChecks;
-};
-
-
-#endif // LL_AUDIOENGINE_FMODEX_H
diff --git a/indra/llaudio/llaudioengine_fmodstudio.cpp b/indra/llaudio/llaudioengine_fmodstudio.cpp
index 93541d3de..930af7fc2 100644
--- a/indra/llaudio/llaudioengine_fmodstudio.cpp
+++ b/indra/llaudio/llaudioengine_fmodstudio.cpp
@@ -281,8 +281,8 @@ void F_STDCALL decode_dealloc(void *ptr, FMOD_MEMORY_TYPE type, const char *sour
bool LLAudioEngine_FMODSTUDIO::init(const S32 num_channels, void* userdata)
{
-
-#if LL_WINDOWS
+ LL_WARNS("AudioImpl") << "BARKBARKBARK" << LL_ENDL;
+#if 0 //LL_WINDOWS
if(!attemptDelayLoad())
return false;
#endif
@@ -477,7 +477,7 @@ std::string LLAudioEngine_FMODSTUDIO::getDriverName(bool verbose)
return llformat("FMOD Studio %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
}
}
- return "FMODEx";
+ return "FMOD Studio";
}
diff --git a/indra/llaudio/lllistener_fmodex.cpp b/indra/llaudio/lllistener_fmodex.cpp
deleted file mode 100644
index e70dc7c60..000000000
--- a/indra/llaudio/lllistener_fmodex.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * @file listener_fmod.cpp
- * @brief implementation of LISTENER class abstracting the audio
- * support as a FMOD 3D implementation (windows only)
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-#include "llaudioengine.h"
-#include "lllistener_fmodex.h"
-#include "fmod.hpp"
-
-//-----------------------------------------------------------------------
-// constructor
-//-----------------------------------------------------------------------
-LLListener_FMODEX::LLListener_FMODEX(FMOD::System *system)
-{
- mSystem = system;
- init();
-}
-
-//-----------------------------------------------------------------------
-LLListener_FMODEX::~LLListener_FMODEX()
-{
-}
-
-//-----------------------------------------------------------------------
-void LLListener_FMODEX::init(void)
-{
- // do inherited
- LLListener::init();
- mDopplerFactor = 1.0f;
- mRolloffFactor = 1.0f;
-}
-
-//-----------------------------------------------------------------------
-void LLListener_FMODEX::translate(LLVector3 offset)
-{
- LLListener::translate(offset);
-
- mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
-}
-
-//-----------------------------------------------------------------------
-void LLListener_FMODEX::setPosition(LLVector3 pos)
-{
- LLListener::setPosition(pos);
-
- mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
-}
-
-//-----------------------------------------------------------------------
-void LLListener_FMODEX::setVelocity(LLVector3 vel)
-{
- LLListener::setVelocity(vel);
-
- mSystem->set3DListenerAttributes(0, NULL, (FMOD_VECTOR*)mVelocity.mV, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
-}
-
-//-----------------------------------------------------------------------
-void LLListener_FMODEX::orient(LLVector3 up, LLVector3 at)
-{
- LLListener::orient(up, at);
-
- // Welcome to the transition between right and left
- // (coordinate systems, that is)
- // Leaving the at vector alone results in a L/R reversal
- // since DX is left-handed and we (LL, OpenGL, OpenAL) are right-handed
- at = -at;
-
- mSystem->set3DListenerAttributes(0, NULL, NULL, (FMOD_VECTOR*)at.mV, (FMOD_VECTOR*)up.mV);
-}
-
-//-----------------------------------------------------------------------
-void LLListener_FMODEX::commitDeferredChanges()
-{
- mSystem->update();
-}
-
-
-void LLListener_FMODEX::setRolloffFactor(F32 factor)
-{
- //An internal FMODEx optimization skips 3D updates if there have not been changes to the 3D sound environment.
- //Sadly, a change in rolloff is not accounted for, thus we must touch the listener properties as well.
- //In short: Changing the position ticks a dirtyflag inside fmodex, which makes it not skip 3D processing next update call.
- if(mRolloffFactor != factor)
- {
- LLVector3 pos = mVelocity - LLVector3(0.f,0.f,.1f);
- mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)pos.mV, NULL, NULL, NULL);
- mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mVelocity.mV, NULL, NULL, NULL);
- }
- mRolloffFactor = factor;
- mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
-}
-
-
-F32 LLListener_FMODEX::getRolloffFactor()
-{
- return mRolloffFactor;
-}
-
-
-void LLListener_FMODEX::setDopplerFactor(F32 factor)
-{
- mDopplerFactor = factor;
- mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
-}
-
-
-F32 LLListener_FMODEX::getDopplerFactor()
-{
- return mDopplerFactor;
-}
-
-
diff --git a/indra/llaudio/lllistener_fmodex.h b/indra/llaudio/lllistener_fmodex.h
deleted file mode 100644
index 8a91b3a2e..000000000
--- a/indra/llaudio/lllistener_fmodex.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * @file listener_fmod.h
- * @brief Description of LISTENER class abstracting the audio support
- * as an FMOD 3D implementation (windows and Linux)
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LISTENER_FMODEX_H
-#define LL_LISTENER_FMODEX_H
-
-#include "lllistener.h"
-
-//Stubs
-namespace FMOD
-{
- class System;
-}
-
-//Interfaces
-class LLListener_FMODEX : public LLListener
-{
- public:
- LLListener_FMODEX(FMOD::System *system);
- virtual ~LLListener_FMODEX();
- virtual void init();
-
- virtual void translate(LLVector3 offset);
- virtual void setPosition(LLVector3 pos);
- virtual void setVelocity(LLVector3 vel);
- virtual void orient(LLVector3 up, LLVector3 at);
- virtual void commitDeferredChanges();
-
- virtual void setDopplerFactor(F32 factor);
- virtual F32 getDopplerFactor();
- virtual void setRolloffFactor(F32 factor);
- virtual F32 getRolloffFactor();
- protected:
- FMOD::System *mSystem;
- F32 mDopplerFactor;
- F32 mRolloffFactor;
-};
-
-#endif
-
-
diff --git a/indra/llaudio/llstreamingaudio_fmodex.cpp b/indra/llaudio/llstreamingaudio_fmodex.cpp
deleted file mode 100644
index 39436977a..000000000
--- a/indra/llaudio/llstreamingaudio_fmodex.cpp
+++ /dev/null
@@ -1,596 +0,0 @@
-/**
- * @file streamingaudio_fmod.cpp
- * @brief LLStreamingAudio_FMODEX implementation
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include "llmath.h"
-
-#include "fmod.hpp"
-#include "fmod_errors.h"
-
-#include "llstreamingaudio_fmodex.h"
-
-inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
-{
- if (result == FMOD_OK)
- return false;
- LL_WARNS("AudioImpl") << string << " Error: " << FMOD_ErrorString(result) << LL_ENDL;
- return true;
-}
-
-class LLAudioStreamManagerFMODEX
-{
-public:
- LLAudioStreamManagerFMODEX(FMOD::System *system, const std::string& url);
- FMOD::Channel* startStream();
- bool stopStream(); // Returns true if the stream was successfully stopped.
- bool ready();
-
- const std::string& getURL() { return mInternetStreamURL; }
-
- FMOD_RESULT getOpenState(FMOD_OPENSTATE& openstate, unsigned int* percentbuffered=NULL, bool* starving=NULL, bool* diskbusy=NULL);
-protected:
- FMOD::System* mSystem;
- FMOD::Channel* mStreamChannel;
- FMOD::Sound* mInternetStream;
- bool mReady;
-
- std::string mInternetStreamURL;
-};
-
-
-
-//---------------------------------------------------------------------------
-// Internet Streaming
-//---------------------------------------------------------------------------
-LLStreamingAudio_FMODEX::LLStreamingAudio_FMODEX(FMOD::System *system) :
- mSystem(system),
- mCurrentInternetStreamp(NULL),
- mFMODInternetStreamChannelp(NULL),
- mGain(1.0f),
- mMetaData(NULL)
-{
- FMOD_RESULT result;
-
- // Number of milliseconds of audio to buffer for the audio card.
- // Must be larger than the usual Second Life frame stutter time.
- const U32 buffer_seconds = 10; //sec
- const U32 estimated_bitrate = 128; //kbit/sec
- result = mSystem->setStreamBufferSize(estimated_bitrate * buffer_seconds * 128/*bytes/kbit*/, FMOD_TIMEUNIT_RAWBYTES);
- Check_FMOD_Error(result, "FMOD::System::setStreamBufferSize");
-
- // Here's where we set the size of the network buffer and some buffering
- // parameters. In this case we want a network buffer of 16k, we want it
- // to prebuffer 40% of that when we first connect, and we want it
- // to rebuffer 80% of that whenever we encounter a buffer underrun.
-
- // Leave the net buffer properties at the default.
- //FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80);
-}
-
-
-LLStreamingAudio_FMODEX::~LLStreamingAudio_FMODEX()
-{
- stop();
- for (U32 i = 0; i < 100; ++i)
- {
- if (releaseDeadStreams())
- break;
- ms_sleep(10);
- }
-}
-
-
-void LLStreamingAudio_FMODEX::start(const std::string& url)
-{
- //if (!mInited)
- //{
- // LL_WARNS() << "startInternetStream before audio initialized" << LL_ENDL;
- // return;
- //}
-
- // "stop" stream but don't clear url, etc. in case url == mInternetStreamURL
- stop();
-
- if (!url.empty())
- {
- if(mDeadStreams.empty())
- {
- LL_INFOS() << "Starting internet stream: " << url << LL_ENDL;
- mCurrentInternetStreamp = new LLAudioStreamManagerFMODEX(mSystem,url);
- mURL = url;
- mMetaData = new LLSD;
- }
- else
- {
- LL_INFOS() << "Deferring stream load until buffer release: " << url << LL_ENDL;
- mPendingURL = url;
- }
- }
- else
- {
- LL_INFOS() << "Set internet stream to null" << LL_ENDL;
- mURL.clear();
- }
-}
-
-enum utf_endian_type_t
-{
- UTF16LE,
- UTF16BE,
- UTF16
-};
-
-std::string utf16input_to_utf8(unsigned char* input, U32 len, utf_endian_type_t type)
-{
- if (type == UTF16)
- {
- type = UTF16BE; //Default
- if (len > 2)
- {
- //Parse and strip BOM.
- if ((input[0] == 0xFE && input[1] == 0xFF) ||
- (input[0] == 0xFF && input[1] == 0xFE))
- {
- input += 2;
- len -= 2;
- type = input[0] == 0xFE ? UTF16BE : UTF16LE;
- }
- }
- }
- llutf16string out_16((U16*)input, len / 2);
- if (len % 2)
- {
- out_16.push_back((input)[len - 1] << 8);
- }
- if (type == UTF16BE)
- {
- for (llutf16string::iterator i = out_16.begin(); i < out_16.end(); ++i)
- {
- llutf16string::value_type v = *i;
- *i = ((v & 0x00FF) << 8) | ((v & 0xFF00) >> 8);
- }
- }
- return utf16str_to_utf8str(out_16);
-}
-
-void LLStreamingAudio_FMODEX::update()
-{
- if (!releaseDeadStreams())
- {
- llassert_always(mCurrentInternetStreamp == NULL);
- return;
- }
-
- if(!mPendingURL.empty())
- {
- llassert_always(mCurrentInternetStreamp == NULL);
- LL_INFOS() << "Starting internet stream: " << mPendingURL << LL_ENDL;
- mCurrentInternetStreamp = new LLAudioStreamManagerFMODEX(mSystem,mPendingURL);
- mURL = mPendingURL;
- mMetaData = new LLSD;
- mPendingURL.clear();
- }
-
- // Don't do anything if there are no streams playing
- if (!mCurrentInternetStreamp)
- {
- return;
- }
-
- unsigned int progress;
- bool starving;
- bool diskbusy;
- FMOD_OPENSTATE open_state;
- FMOD_RESULT res = mCurrentInternetStreamp->getOpenState(open_state, &progress, &starving, &diskbusy);
-
- if (res != FMOD_OK || open_state == FMOD_OPENSTATE_ERROR)
- {
- stop();
- return;
- }
- else if (open_state == FMOD_OPENSTATE_READY)
- {
- // Stream is live
-
- // start the stream if it's ready
- if (!mFMODInternetStreamChannelp &&
- (mFMODInternetStreamChannelp = mCurrentInternetStreamp->startStream()))
- {
- // Reset volume to previously set volume
- setGain(getGain());
- Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(false), "FMOD::Channel::setPaused");
- }
- }
-
- if(mFMODInternetStreamChannelp)
- {
- if(!mMetaData)
- mMetaData = new LLSD;
-
- FMOD::Sound *sound = NULL;
-
- if(mFMODInternetStreamChannelp->getCurrentSound(&sound) == FMOD_OK && sound)
- {
- FMOD_TAG tag;
- S32 tagcount, dirtytagcount;
- if(sound->getNumTags(&tagcount, &dirtytagcount) == FMOD_OK && dirtytagcount)
- {
- mMetaData->clear();
-
- for(S32 i = 0; i < tagcount; ++i)
- {
- if(sound->getTag(NULL, i, &tag)!=FMOD_OK)
- continue;
- std::string name = tag.name;
- switch(tag.type) //Crappy tag translate table.
- {
- case(FMOD_TAGTYPE_ID3V2):
- if (!LLStringUtil::compareInsensitive(name, "TIT2")) name = "TITLE";
- else if(name == "TPE1") name = "ARTIST";
- break;
- case(FMOD_TAGTYPE_ASF):
- if (!LLStringUtil::compareInsensitive(name, "Title")) name = "TITLE";
- else if (!LLStringUtil::compareInsensitive(name, "WM/AlbumArtist")) name = "ARTIST";
- break;
- case(FMOD_TAGTYPE_FMOD):
- if (!LLStringUtil::compareInsensitive(name, "Sample Rate Change"))
- {
- LL_INFOS() << "Stream forced changing sample rate to " << *((float *)tag.data) << LL_ENDL;
- Check_FMOD_Error(mFMODInternetStreamChannelp->setFrequency(*((float *)tag.data)), "FMOD::Channel::setFrequency");
- }
- continue;
- default:
- if (!LLStringUtil::compareInsensitive(name, "TITLE") ||
- !LLStringUtil::compareInsensitive(name, "ARTIST"))
- LLStringUtil::toUpper(name);
- break;
- }
-
- switch(tag.datatype)
- {
- case(FMOD_TAGDATATYPE_INT):
- (*mMetaData)[name]=*(LLSD::Integer*)(tag.data);
- LL_INFOS() << tag.name << ": " << *(int*)(tag.data) << LL_ENDL;
- break;
- case(FMOD_TAGDATATYPE_FLOAT):
- (*mMetaData)[name]=*(LLSD::Float*)(tag.data);
- LL_INFOS() << tag.name << ": " << *(float*)(tag.data) << LL_ENDL;
- break;
- case(FMOD_TAGDATATYPE_STRING):
- {
- std::string out = rawstr_to_utf8(std::string((char*)tag.data,tag.datalen));
- if (out.length() && out[out.size() - 1] == 0)
- out.erase(out.size() - 1);
- (*mMetaData)[name]=out;
- LL_INFOS() << tag.name << "(RAW): " << out << LL_ENDL;
- }
- break;
- case(FMOD_TAGDATATYPE_STRING_UTF8) :
- {
- U8 offs = 0;
- if (tag.datalen > 3 && ((unsigned char*)tag.data)[0] == 0xEF && ((char*)tag.data)[1] == 0xBB && ((char*)tag.data)[2] == 0xBF)
- offs = 3;
- std::string out((char*)tag.data + offs, tag.datalen - offs);
- if (out.length() && out[out.size() - 1] == 0)
- out.erase(out.size() - 1);
- (*mMetaData)[name] = out;
- LL_INFOS() << tag.name << "(UTF8): " << out << LL_ENDL;
- }
- break;
- case(FMOD_TAGDATATYPE_STRING_UTF16):
- {
- std::string out = utf16input_to_utf8((unsigned char*)tag.data, tag.datalen, UTF16);
- if (out.length() && out[out.size() - 1] == 0)
- out.erase(out.size() - 1);
- (*mMetaData)[name] = out;
- LL_INFOS() << tag.name << "(UTF16): " << out << LL_ENDL;
- }
- break;
- case(FMOD_TAGDATATYPE_STRING_UTF16BE):
- {
- std::string out = utf16input_to_utf8((unsigned char*)tag.data, tag.datalen, UTF16BE);
- if (out.length() && out[out.size() - 1] == 0)
- out.erase(out.size() - 1);
- (*mMetaData)[name] = out;
- LL_INFOS() << tag.name << "(UTF16BE): " << out << LL_ENDL;
- }
- default:
- break;
- }
- }
- }
- if(starving)
- {
- bool paused = false;
- if (mFMODInternetStreamChannelp->getPaused(&paused) == FMOD_OK && !paused)
- {
- LL_INFOS() << "Stream starvation detected! Pausing stream until buffer nearly full." << LL_ENDL;
- LL_INFOS() << " (diskbusy="<setPaused(true), "FMOD::Channel::setPaused");
- }
- }
- else if(progress > 80)
- {
- Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(false), "FMOD::Channel::setPaused");
- }
- }
- }
-}
-
-void LLStreamingAudio_FMODEX::stop()
-{
- mPendingURL.clear();
-
- if(mMetaData)
- {
- delete mMetaData;
- mMetaData = NULL;
- }
- if (mFMODInternetStreamChannelp)
- {
- Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(true), "FMOD::Channel::setPaused");
- Check_FMOD_Error(mFMODInternetStreamChannelp->setPriority(0), "FMOD::Channel::setPriority");
- mFMODInternetStreamChannelp = NULL;
- }
-
- if (mCurrentInternetStreamp)
- {
- LL_INFOS() << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
- if (mCurrentInternetStreamp->stopStream())
- {
- delete mCurrentInternetStreamp;
- }
- else
- {
- LL_WARNS() << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
- mDeadStreams.push_back(mCurrentInternetStreamp);
- }
- mCurrentInternetStreamp = NULL;
- //mURL.clear();
- }
-}
-
-void LLStreamingAudio_FMODEX::pause(int pauseopt)
-{
- if (pauseopt < 0)
- {
- pauseopt = mCurrentInternetStreamp ? 1 : 0;
- }
-
- if (pauseopt)
- {
- if (mCurrentInternetStreamp)
- {
- stop();
- }
- }
- else
- {
- start(getURL());
- }
-}
-
-
-// A stream is "playing" if it has been requested to start. That
-// doesn't necessarily mean audio is coming out of the speakers.
-int LLStreamingAudio_FMODEX::isPlaying()
-{
- if (mCurrentInternetStreamp)
- {
- return 1; // Active and playing
- }
- else if (!mURL.empty() || !mPendingURL.empty())
- {
- return 2; // "Paused"
- }
- else
- {
- return 0;
- }
-}
-
-
-F32 LLStreamingAudio_FMODEX::getGain()
-{
- return mGain;
-}
-
-
-std::string LLStreamingAudio_FMODEX::getURL()
-{
- return mURL;
-}
-
-
-void LLStreamingAudio_FMODEX::setGain(F32 vol)
-{
- mGain = vol;
-
- if (mFMODInternetStreamChannelp)
- {
- vol = llclamp(vol * vol, 0.f, 1.f); //should vol be squared here?
-
- Check_FMOD_Error(mFMODInternetStreamChannelp->setVolume(vol), "FMOD::Channel::setVolume");
- }
-}
-
-/*virtual*/ bool LLStreamingAudio_FMODEX::getWaveData(float* arr, S32 count, S32 stride/*=1*/)
-{
- if(!mFMODInternetStreamChannelp || !mCurrentInternetStreamp)
- return false;
-
- bool muted=false;
- FMOD_RESULT res = mFMODInternetStreamChannelp->getMute(&muted);
- if(res != FMOD_OK || muted)
- return false;
-
- static std::vector local_array(count); //Have to have an extra buffer to mix channels. Bleh.
- if(count > (S32)local_array.size()) //Expand the array if needed. Try to minimize allocation calls, so don't ever shrink.
- local_array.resize(count);
-
- if( mFMODInternetStreamChannelp->getWaveData(&local_array[0],count,0) == FMOD_OK &&
- mFMODInternetStreamChannelp->getWaveData(&arr[0],count,1) == FMOD_OK )
- {
- for(S32 i = count-1;i>=0;i-=stride)
- {
- arr[i] += local_array[i];
- arr[i] *= .5f;
- }
- return true;
- }
- return false;
-}
-
-///////////////////////////////////////////////////////
-// manager of possibly-multiple internet audio streams
-
-LLAudioStreamManagerFMODEX::LLAudioStreamManagerFMODEX(FMOD::System *system, const std::string& url) :
- mSystem(system),
- mStreamChannel(NULL),
- mInternetStream(NULL),
- mReady(false)
-{
- mInternetStreamURL = url;
-
- /*FMOD_CREATESOUNDEXINFO exinfo;
- memset(&exinfo,0,sizeof(exinfo));
- exinfo.cbsize = sizeof(exinfo);
- exinfo.suggestedsoundtype = FMOD_SOUND_TYPE_OGGVORBIS; //Hint to speed up loading.*/
-
- FMOD_RESULT result = mSystem->createStream(url.c_str(), FMOD_2D | FMOD_NONBLOCKING | FMOD_IGNORETAGS, 0, &mInternetStream);
-
- if (result!= FMOD_OK)
- {
- LL_WARNS() << "Couldn't open fmod stream, error "
- << FMOD_ErrorString(result)
- << LL_ENDL;
- mReady = false;
- return;
- }
-
- mReady = true;
-}
-
-FMOD::Channel *LLAudioStreamManagerFMODEX::startStream()
-{
- // We need a live and opened stream before we try and play it.
- FMOD_OPENSTATE open_state;
- if (getOpenState(open_state) != FMOD_OK || open_state != FMOD_OPENSTATE_READY)
- {
- LL_WARNS() << "No internet stream to start playing!" << LL_ENDL;
- return NULL;
- }
-
- if(mStreamChannel)
- return mStreamChannel; //Already have a channel for this stream.
-
- Check_FMOD_Error(mSystem->playSound(FMOD_CHANNEL_FREE, mInternetStream, true, &mStreamChannel), "FMOD::System::playSound");
- return mStreamChannel;
-}
-
-bool LLAudioStreamManagerFMODEX::stopStream()
-{
- if (mInternetStream)
- {
- bool close = true;
- FMOD_OPENSTATE open_state;
- if (getOpenState(open_state) == FMOD_OK)
- {
- switch (open_state)
- {
- case FMOD_OPENSTATE_CONNECTING:
- close = false;
- break;
- default:
- close = true;
- }
- }
-
- if (close && mInternetStream->release() == FMOD_OK)
- {
- mStreamChannel = NULL;
- mInternetStream = NULL;
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return true;
- }
-}
-
-FMOD_RESULT LLAudioStreamManagerFMODEX::getOpenState(FMOD_OPENSTATE& state, unsigned int* percentbuffered, bool* starving, bool* diskbusy)
-{
- if (!mInternetStream)
- return FMOD_ERR_INVALID_HANDLE;
- FMOD_RESULT result = mInternetStream->getOpenState(&state, percentbuffered, starving, diskbusy);
- Check_FMOD_Error(result, "FMOD::Sound::getOpenState");
- return result;
-}
-
-void LLStreamingAudio_FMODEX::setBufferSizes(U32 streambuffertime, U32 decodebuffertime)
-{
- Check_FMOD_Error(mSystem->setStreamBufferSize(streambuffertime / 1000 * 128 * 128, FMOD_TIMEUNIT_RAWBYTES), "FMOD::System::setStreamBufferSize");
- FMOD_ADVANCEDSETTINGS settings;
- memset(&settings,0,sizeof(settings));
- settings.cbsize=sizeof(settings);
- settings.defaultDecodeBufferSize = decodebuffertime;//ms
- Check_FMOD_Error(mSystem->setAdvancedSettings(&settings), "FMOD::System::setAdvancedSettings");
-}
-
-bool LLStreamingAudio_FMODEX::releaseDeadStreams()
-{
- // Kill dead internet streams, if possible
- std::list::iterator iter;
- for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
- {
- LLAudioStreamManagerFMODEX *streamp = *iter;
- if (streamp->stopStream())
- {
- LL_INFOS() << "Closed dead stream" << LL_ENDL;
- delete streamp;
- mDeadStreams.erase(iter++);
- }
- else
- {
- iter++;
- }
- }
-
- return mDeadStreams.empty();
-}
\ No newline at end of file
diff --git a/indra/llaudio/llstreamingaudio_fmodex.h b/indra/llaudio/llstreamingaudio_fmodex.h
deleted file mode 100644
index 15a4af931..000000000
--- a/indra/llaudio/llstreamingaudio_fmodex.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * @file streamingaudio_fmod.h
- * @author Tofu Linden
- * @brief Definition of LLStreamingAudio_FMOD implementation
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_STREAMINGAUDIO_FMOD_H
-#define LL_STREAMINGAUDIO_FMOD_H
-
-#include "stdtypes.h" // from llcommon
-
-#include "llstreamingaudio.h"
-#include "lltimer.h"
-
-//Stubs
-class LLAudioStreamManagerFMODEX;
-namespace FMOD
-{
- class System;
- class Channel;
-}
-
-//Interfaces
-class LLStreamingAudio_FMODEX : public LLStreamingAudioInterface
-{
- public:
- LLStreamingAudio_FMODEX(FMOD::System *system);
- /*virtual*/ ~LLStreamingAudio_FMODEX();
-
- /*virtual*/ void start(const std::string& url);
- /*virtual*/ void stop();
- /*virtual*/ void pause(int pause);
- /*virtual*/ void update();
- /*virtual*/ int isPlaying();
- /*virtual*/ void setGain(F32 vol);
- /*virtual*/ F32 getGain();
- /*virtual*/ std::string getURL();
-
- /*virtual*/ bool supportsMetaData(){return true;}
- /*virtual*/ const LLSD *getMetaData(){return mMetaData;} //return NULL if not playing.
- /*virtual*/ bool supportsWaveData(){return true;}
- /*virtual*/ bool getWaveData(float* arr, S32 count, S32 stride = 1);
- /*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
- /*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
-private:
- bool releaseDeadStreams();
-
- FMOD::System *mSystem;
-
- LLAudioStreamManagerFMODEX *mCurrentInternetStreamp;
- FMOD::Channel *mFMODInternetStreamChannelp;
- std::list mDeadStreams;
-
- std::string mURL;
- std::string mPendingURL;
- F32 mGain;
-
- LLSD *mMetaData;
-};
-
-
-#endif // LL_STREAMINGAUDIO_FMOD_H
diff --git a/indra/llaudio/llstreamingaudio_fmodstudio.cpp b/indra/llaudio/llstreamingaudio_fmodstudio.cpp
index 5ef93fd00..047b6e5f1 100644
--- a/indra/llaudio/llstreamingaudio_fmodstudio.cpp
+++ b/indra/llaudio/llstreamingaudio_fmodstudio.cpp
@@ -226,7 +226,7 @@ std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type)
}
}
}
- llutf16string out_16((U16*)input, len / 2);
+ llutf16string out_16((utf16strtype*)input, len / 2);
if (len % 2)
{
out_16.push_back((input)[len - 1] << 8);
diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt
index 8dda476d9..1c4ab0b2d 100644
--- a/indra/llcharacter/CMakeLists.txt
+++ b/indra/llcharacter/CMakeLists.txt
@@ -73,4 +73,3 @@ set_source_files_properties(${llcharacter_HEADER_FILES}
list(APPEND llcharacter_SOURCE_FILES ${llcharacter_HEADER_FILES})
add_library (llcharacter ${llcharacter_SOURCE_FILES})
-add_dependencies(llcharacter prepare)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 72e03e709..c6a187840 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -7,7 +7,11 @@ include(00-Common)
include(LLCommon)
include(APR)
include(Linking)
+include(Boost)
+include(LLSharedLibs)
include(GoogleBreakpad)
+include(Copy3rdPartyLibs)
+include(ZLIB)
include_directories(
${EXPAT_INCLUDE_DIRS}
@@ -229,7 +233,6 @@ set(llcommon_HEADER_FILES
lltypeinfolookup.h
lluri.h
lluuid.h
- llversionviewer.h.in
llworkerthread.h
metaclass.h
metaclasst.h
@@ -251,11 +254,22 @@ set_source_files_properties(${llcommon_HEADER_FILES}
list(APPEND llcommon_SOURCE_FILES ${cwdebug_SOURCE_FILES})
list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES})
-add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
-if(WINDOWS)
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL")
-endif(WINDOWS)
-add_dependencies(llcommon prepare)
+if(LLCOMMON_LINK_SHARED)
+ add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
+ if(NOT WORD_SIZE EQUAL 32)
+ if(NOT WINDOWS)
+ add_definitions(-fPIC)
+ endif(NOT WINDOWS)
+ endif(NOT WORD_SIZE EQUAL 32)
+ if(WINDOWS)
+ # always generate llcommon.pdb, even for "Release" builds
+ set_target_properties(llcommon PROPERTIES LINK_FLAGS "/DEBUG")
+ endif(WINDOWS)
+ ll_stage_sharedlib(llcommon)
+else(LLCOMMON_LINK_SHARED)
+ add_library (llcommon ${llcommon_SOURCE_FILES})
+endif(LLCOMMON_LINK_SHARED)
+
target_link_libraries(
llcommon
${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}
@@ -280,3 +294,5 @@ if (DARWIN)
INSTALL_NAME_DIR "@executable_path/../Resources"
)
endif (DARWIN)
+
+add_dependencies(llcommon stage_third_party_libs)
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 44c6d1435..f898efe04 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -174,10 +174,10 @@ S32 wchar_to_utf8chars(llwchar in_char, char* outchars)
return outchars - base;
}
-S32 utf16chars_to_wchar(const U16* inchars, llwchar* outchar)
+S32 utf16chars_to_wchar(const utf16strtype* inchars, llwchar* outchar)
{
- const U16* base = inchars;
- U16 cur_char = *inchars++;
+ const utf16strtype* base = inchars;
+ utf16strtype cur_char = *inchars++;
llwchar char32 = cur_char;
if ((cur_char >= 0xD800) && (cur_char <= 0xDFFF))
{
@@ -236,7 +236,7 @@ LLWString utf16str_to_wstring(const llutf16string &utf16str, S32 len)
S32 i = 0;
// craziness to make gcc happy (llutf16string.c_str() is tweaked on linux):
- const U16* chars16 = &(*(utf16str.begin()));
+ const utf16strtype* chars16 = &(*(utf16str.begin()));
while (i < len)
{
llwchar cur_char;
@@ -257,18 +257,18 @@ S32 utf16str_wstring_length(const llutf16string &utf16str, const S32 utf16_len)
{
S32 surrogate_pairs = 0;
// ... craziness to make gcc happy (llutf16string.c_str() is tweaked on linux):
- const U16 *const utf16_chars = &(*(utf16str.begin()));
+ const utf16strtype *const utf16_chars = &(*(utf16str.begin()));
S32 i = 0;
while (i < utf16_len)
{
- const U16 c = utf16_chars[i++];
+ const utf16strtype c = utf16_chars[i++];
if (c >= 0xD800 && c <= 0xDBFF) // See http://en.wikipedia.org/wiki/UTF-16
{ // Have first byte of a surrogate pair
if (i >= utf16_len)
{
break;
}
- const U16 d = utf16_chars[i];
+ const utf16strtype d = utf16_chars[i];
if (d >= 0xDC00 && d <= 0xDFFF)
{ // Have valid second byte of a surrogate pair
surrogate_pairs++;
@@ -621,22 +621,6 @@ bool LLStringOps::isHexString(const std::string& str)
}
#if LL_WINDOWS
-// documentation moved to header. Phoenix 2007-11-27
-namespace snprintf_hack
-{
- int snprintf(char *str, size_t size, const char *format, ...)
- {
- va_list args;
- va_start(args, format);
-
- int num_written = _vsnprintf(str, size, format, args); /* Flawfinder: ignore */
- va_end(args);
-
- str[size-1] = '\0'; // always null terminate
- return num_written;
- }
-}
-
std::string ll_convert_wide_to_string(const wchar_t* in, unsigned int code_page)
{
std::string out;
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index 112a25e66..be8af44dd 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -501,7 +501,14 @@ LL_COMMON_API std::string rawstr_to_utf8(const std::string& raw);
//
// We should never use UTF16 except when communicating with Win32!
//
-typedef std::basic_string llutf16string;
+
+#if _WIN32 && _NATIVE_WCHAR_T_DEFINED
+typedef wchar_t utf16strtype;
+#else
+typedef U16 utf16strtype;
+#endif
+
+typedef std::basic_string llutf16string;
LL_COMMON_API LLWString utf16str_to_wstring(const llutf16string &utf16str, S32 len);
LL_COMMON_API LLWString utf16str_to_wstring(const llutf16string &utf16str);
@@ -586,32 +593,6 @@ LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str);
*/
//@{
-/**
- * @brief Implementation the expected snprintf interface.
- *
- * If the size of the passed in buffer is not large enough to hold the string,
- * two bad things happen:
- * 1. resulting formatted string is NOT null terminated
- * 2. Depending on the platform, the return value could be a) the required
- * size of the buffer to copy the entire formatted string or b) -1.
- * On Windows with VS.Net 2003, it returns -1 e.g.
- *
- * safe_snprintf always adds a NULL terminator so that the caller does not
- * need to check for return value or need to add the NULL terminator.
- * It does not, however change the return value - to let the caller know
- * that the passed in buffer size was not large enough to hold the
- * formatted string.
- *
- */
-
-// Deal with the differeneces on Windows
-namespace snprintf_hack
-{
- LL_COMMON_API int snprintf(char *str, size_t size, const char *format, ...);
-}
-
-using snprintf_hack::snprintf;
-
/**
* @brief Convert a wide string to std::string
*
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index ba81301e3..240d7ee3f 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -63,6 +63,7 @@ using namespace llsd;
# include
# include
# include // GetPerformanceInfo() et al.
+# include
#elif LL_DARWIN
# include
# include
@@ -108,78 +109,6 @@ static const F32 MEM_INFO_THROTTLE = 20;
// dropped below the login framerate, we'd have very little additional data.
static const F32 MEM_INFO_WINDOW = 10*60;
-#if LL_WINDOWS
-// We cannot trust GetVersionEx function on Win8.1 , we should check this value when creating OS string
-static const U32 WINNT_WINBLUE = 0x0603;
-
-#ifndef DLLVERSIONINFO
-typedef struct _DllVersionInfo
-{
- DWORD cbSize;
- DWORD dwMajorVersion;
- DWORD dwMinorVersion;
- DWORD dwBuildNumber;
- DWORD dwPlatformID;
-}DLLVERSIONINFO;
-#endif
-
-#ifndef DLLGETVERSIONPROC
-typedef int (FAR WINAPI *DLLGETVERSIONPROC) (DLLVERSIONINFO *);
-#endif
-
-bool get_shell32_dll_version(DWORD& major, DWORD& minor, DWORD& build_number)
-{
- bool result = false;
- const U32 BUFF_SIZE = 32767;
- WCHAR tempBuf[BUFF_SIZE];
- if(GetSystemDirectory((LPWSTR)&tempBuf, BUFF_SIZE))
- {
-
- std::basic_string shell32_path(tempBuf);
-
- // Shell32.dll contains the DLLGetVersion function.
- // according to msdn its not part of the API
- // so you have to go in and get it.
- // http://msdn.microsoft.com/en-us/library/bb776404(VS.85).aspx
- shell32_path += TEXT("\\shell32.dll");
-
- HMODULE hDllInst = LoadLibrary(shell32_path.c_str()); //load the DLL
- if(hDllInst)
- { // Could successfully load the DLL
- DLLGETVERSIONPROC pDllGetVersion;
- /*
- You must get this function explicitly because earlier versions of the DLL
- don't implement this function. That makes the lack of implementation of the
- function a version marker in itself.
- */
- pDllGetVersion = (DLLGETVERSIONPROC) GetProcAddress(hDllInst,
- "DllGetVersion");
-
- if(pDllGetVersion)
- {
- // DLL supports version retrieval function
- DLLVERSIONINFO dvi;
-
- ZeroMemory(&dvi, sizeof(dvi));
- dvi.cbSize = sizeof(dvi);
- HRESULT hr = (*pDllGetVersion)(&dvi);
-
- if(SUCCEEDED(hr))
- { // Finally, the version is at our hands
- major = dvi.dwMajorVersion;
- minor = dvi.dwMinorVersion;
- build_number = dvi.dwBuildNumber;
- result = true;
- }
- }
-
- FreeLibrary(hDllInst); // Release DLL
- }
- }
- return result;
-}
-#endif // LL_WINDOWS
-
// Wrap boost::regex_match() with a function that doesn't throw.
template
static bool regex_match_no_exc(const S& string, M& match, const R& regex)
@@ -212,221 +141,141 @@ static bool regex_search_no_exc(const S& string, M& match, const R& regex)
}
}
-#if LL_WINDOWS
-// GetVersionEx should not works correct with Windows 8.1 and the later version. We need to check this case
-static bool check_for_version(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
-{
- OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
- DWORDLONG const dwlConditionMask = VerSetConditionMask(
- VerSetConditionMask(
- VerSetConditionMask(
- 0, VER_MAJORVERSION, VER_GREATER_EQUAL),
- VER_MINORVERSION, VER_GREATER_EQUAL),
- VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
-
- osvi.dwMajorVersion = wMajorVersion;
- osvi.dwMinorVersion = wMinorVersion;
- osvi.wServicePackMajor = wServicePackMajor;
-
- return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
-}
-#endif
-
-
LLOSInfo::LLOSInfo() :
mMajorVer(0), mMinorVer(0), mBuild(0), mOSVersionString("")
{
#if LL_WINDOWS
+ bool is_server = IsWindowsServer();
+ std::string service_pack;
+ if (IsWindows10OrGreater())
+ {
+ if (is_server)
+ {
+ mOSStringSimple = "Microsoft Windows Server 2016 ";
+ }
+ else
+ {
+ mOSStringSimple = "Microsoft Windows 10 ";
+ }
+ }
+ else if (IsWindows8Point1OrGreater())
+ {
+ if (is_server)
+ {
+ mOSStringSimple = "Microsoft Windows Server 2012 R2 ";
+ }
+ else
+ {
+ mOSStringSimple = "Microsoft Windows 8.1 ";
+ }
+ }
+ else if (IsWindows8OrGreater())
+ {
+ if (is_server)
+ {
+ mOSStringSimple = "Microsoft Windows Server 2012 ";
+ }
+ else
+ {
+ mOSStringSimple = "Microsoft Windows 8 ";
+ }
+ }
+ else if (IsWindows7OrGreater())
+ {
+ if (is_server)
+ {
+ mOSStringSimple = "Microsoft Windows Server 2008 R2 ";
+ }
+ else
+ {
+ mOSStringSimple = "Microsoft Windows 7 ";
+ }
+ if (IsWindows7SP1OrGreater())
+ {
+ service_pack = "Service Pack 1 ";
+ }
+ }
+ else if (IsWindowsVistaOrGreater())
+ {
+ if (is_server)
+ {
+ mOSStringSimple = "Microsoft Windows Server 2008 ";
+ }
+ else
+ {
+ mOSStringSimple = "Microsoft Windows Vista ";
+ }
+ if (IsWindowsVistaSP2OrGreater())
+ {
+ service_pack = "Service Pack 2 ";
+ }
+ else if (IsWindowsVistaSP1OrGreater())
+ {
+ service_pack = "Service Pack 1 ";
+ }
+ }
+ else
+ {
+ mOSStringSimple = "Microsoft Windows (unrecognized) ";
+ }
+
+ ///get native system info if available..
+ typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); ///function pointer for loading GetNativeSystemInfo
+ SYSTEM_INFO si; //System Info object file contains architecture info
+ PGNSI pGNSI; //pointer object
+ ZeroMemory(&si, sizeof(SYSTEM_INFO)); //zero out the memory in information
+ pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); //load kernel32 get function
+ if (NULL != pGNSI) //check if it has failed
+ pGNSI(&si); //success
+ else
+ GetSystemInfo(&si); //if it fails get regular system info
+ //(Warning: If GetSystemInfo it may result in incorrect information in a WOW64 machine, if the kernel fails to load)
+
+ //msdn microsoft finds 32 bit and 64 bit flavors this way..
+ //http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx (example code that contains quite a few more flavors
+ //of windows than this code does (in case it is needed for the future)
+ if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) //check for 64 bit
+ {
+ mOSStringSimple += "64-bit ";
+ }
+ else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
+ {
+ mOSStringSimple += "32-bit ";
+ }
+
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
- BOOL bShouldUseShellVersion = false;
-
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi)))
+ if (!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi)))
{
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
- osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
- if(!GetVersionEx( (OSVERSIONINFO *) &osvi))
- return;
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi);
}
- mMajorVer = osvi.dwMajorVersion;
- mMinorVer = osvi.dwMinorVersion;
- mBuild = osvi.dwBuildNumber;
- DWORD shell32_major, shell32_minor, shell32_build;
- bool got_shell32_version = get_shell32_dll_version(shell32_major,
- shell32_minor,
- shell32_build);
-
- switch(osvi.dwPlatformId)
+
+ std::string tmpstr;
+ if (bOsVersionInfoEx)
{
- case VER_PLATFORM_WIN32_NT:
- {
- // Test for the product.
- if(osvi.dwMajorVersion <= 4)
- {
- mOSStringSimple = "Microsoft Windows NT ";
- }
- else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
- {
- mOSStringSimple = "Microsoft Windows 2000 ";
- }
- else if(osvi.dwMajorVersion ==5 && osvi.dwMinorVersion == 1)
- {
- mOSStringSimple = "Microsoft Windows XP ";
- }
- else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
- {
- if(osvi.wProductType == VER_NT_WORKSTATION)
- mOSStringSimple = "Microsoft Windows XP x64 Edition ";
- else
- mOSStringSimple = "Microsoft Windows Server 2003 ";
- }
- else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion <= 2)
- {
- if(osvi.dwMinorVersion == 0)
- {
- if(osvi.wProductType == VER_NT_WORKSTATION)
- mOSStringSimple = "Microsoft Windows Vista ";
- else
- mOSStringSimple = "Windows Server 2008 ";
- }
- else if(osvi.dwMinorVersion == 1)
- {
- if(osvi.wProductType == VER_NT_WORKSTATION)
- mOSStringSimple = "Microsoft Windows 7 ";
- else
- mOSStringSimple = "Windows Server 2008 R2 ";
- }
- else if(osvi.dwMinorVersion == 2)
- {
- if (check_for_version(HIBYTE(WINNT_WINBLUE), LOBYTE(WINNT_WINBLUE), 0))
- {
- mOSStringSimple = "Microsoft Windows 8.1 ";
- bShouldUseShellVersion = true; // GetVersionEx failed, going to use shell version
- }
- else
- {
- if(osvi.wProductType == VER_NT_WORKSTATION)
- mOSStringSimple = "Microsoft Windows 8 ";
- else
- mOSStringSimple = "Windows Server 2012 ";
- }
- }
-
- ///get native system info if available..
- typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); ///function pointer for loading GetNativeSystemInfo
- SYSTEM_INFO si; //System Info object file contains architecture info
- PGNSI pGNSI; //pointer object
- ZeroMemory(&si, sizeof(SYSTEM_INFO)); //zero out the memory in information
- pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); //load kernel32 get function
- if(NULL != pGNSI) //check if it has failed
- pGNSI(&si); //success
- else
- GetSystemInfo(&si); //if it fails get regular system info
- //(Warning: If GetSystemInfo it may result in incorrect information in a WOW64 machine, if the kernel fails to load)
-
- //msdn microsoft finds 32 bit and 64 bit flavors this way..
- //http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx (example code that contains quite a few more flavors
- //of windows than this code does (in case it is needed for the future)
- if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 ) //check for 64 bit
- {
- mOSStringSimple += "64-bit ";
- }
- else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
- {
- mOSStringSimple += "32-bit ";
- }
- }
- else // Use the registry on early versions of Windows NT.
- {
- mOSStringSimple = "Microsoft Windows (unrecognized) ";
-
- HKEY hKey;
- WCHAR szProductType[80];
- DWORD dwBufLen;
- RegOpenKeyEx( HKEY_LOCAL_MACHINE,
- L"SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
- 0, KEY_QUERY_VALUE, &hKey );
- RegQueryValueEx( hKey, L"ProductType", NULL, NULL,
- (LPBYTE) szProductType, &dwBufLen);
- RegCloseKey( hKey );
- if ( lstrcmpi( L"WINNT", szProductType) == 0 )
- {
- mOSStringSimple += "Professional ";
- }
- else if ( lstrcmpi( L"LANMANNT", szProductType) == 0 )
- {
- mOSStringSimple += "Server ";
- }
- else if ( lstrcmpi( L"SERVERNT", szProductType) == 0 )
- {
- mOSStringSimple += "Advanced Server ";
- }
- }
-
- std::string csdversion = utf16str_to_utf8str(osvi.szCSDVersion);
- // Display version, service pack (if any), and build number.
- std::string tmpstr;
- if(osvi.dwMajorVersion <= 4)
- {
- tmpstr = llformat("version %d.%d %s (Build %d)",
- osvi.dwMajorVersion,
- osvi.dwMinorVersion,
- csdversion.c_str(),
- (osvi.dwBuildNumber & 0xffff));
- }
- else
- {
- tmpstr = !bShouldUseShellVersion ? llformat("%s (Build %d)", csdversion.c_str(), (osvi.dwBuildNumber & 0xffff)):
- llformat("%s (Build %d)", csdversion.c_str(), shell32_build);
- }
-
- mOSString = mOSStringSimple + tmpstr;
- }
- break;
-
- case VER_PLATFORM_WIN32_WINDOWS:
- // Test for the Windows 95 product family.
- if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
- {
- mOSStringSimple = "Microsoft Windows 95 ";
- if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
- {
- mOSStringSimple += "OSR2 ";
- }
- }
- if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
- {
- mOSStringSimple = "Microsoft Windows 98 ";
- if ( osvi.szCSDVersion[1] == 'A' )
- {
- mOSStringSimple += "SE ";
- }
- }
- if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
- {
- mOSStringSimple = "Microsoft Windows Millennium Edition ";
- }
- mOSString = mOSStringSimple;
- break;
+ mMajorVer = osvi.dwMajorVersion;
+ mMinorVer = osvi.dwMinorVersion;
+ mBuild = osvi.dwBuildNumber;
+ tmpstr = llformat("%s(Build %d)", service_pack.c_str(), mBuild);
}
-
- std::string compatibility_mode;
- if(got_shell32_version)
+ else
{
- if((osvi.dwMajorVersion != shell32_major || osvi.dwMinorVersion != shell32_minor) && !bShouldUseShellVersion)
- {
- compatibility_mode = llformat(" compatibility mode. real ver: %d.%d (Build %d)",
- shell32_major,
- shell32_minor,
- shell32_build);
- }
+ mMajorVer = 0;
+ mMinorVer = 0;
+ mBuild = 0;
+ tmpstr = llformat("%s(Build %d)", service_pack.c_str(), 0);
}
- mOSString += compatibility_mode;
+
+ // Display version, service pack (if any), and build number.
+ mOSString = mOSStringSimple + tmpstr;
+ LLStringUtil::trim(mOSStringSimple);
#elif LL_DARWIN
diff --git a/indra/llcommon/llversionviewer.h.in b/indra/llcommon/llversionviewer.h.in
deleted file mode 100644
index 76d53b926..000000000
--- a/indra/llcommon/llversionviewer.h.in
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * @file llversionviewer.h
- * @brief
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLVERSIONVIEWER_H
-#define LL_LLVERSIONVIEWER_H
-
-const S32 LL_VERSION_MAJOR = 1;
-const S32 LL_VERSION_MINOR = 8;
-const S32 LL_VERSION_PATCH = 6;
-const S32 LL_VERSION_BUILD = ${vBUILD};
-
-const char * const LL_CHANNEL = "${VIEWER_CHANNEL}";
-
-#if LL_DARWIN
-const char * const LL_VERSION_BUNDLE_ID = "org.singularityviewer.singularity";
-#endif
-
-#endif
-
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
index 431744c42..e05eebc32 100644
--- a/indra/llimage/CMakeLists.txt
+++ b/indra/llimage/CMakeLists.txt
@@ -54,7 +54,7 @@ set_source_files_properties(${llimage_HEADER_FILES}
list(APPEND llimage_SOURCE_FILES ${llimage_HEADER_FILES})
add_library (llimage ${llimage_SOURCE_FILES})
-add_dependencies(llimage prepare)
+
target_link_libraries(
llimage
${JPEG_LIBRARIES}
diff --git a/indra/llimagej2coj/CMakeLists.txt b/indra/llimagej2coj/CMakeLists.txt
index e8b87e587..af7d35601 100644
--- a/indra/llimagej2coj/CMakeLists.txt
+++ b/indra/llimagej2coj/CMakeLists.txt
@@ -41,7 +41,7 @@ IF(WIN32)
ENDIF(WIN32)
add_library (llimagej2coj ${llimagej2coj_SOURCE_FILES})
-add_dependencies(llimagej2coj prepare)
+
target_link_libraries(
llimagej2coj
${OPENJPEG_LIBRARIES}
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
index f288fa496..028117151 100644
--- a/indra/llinventory/CMakeLists.txt
+++ b/indra/llinventory/CMakeLists.txt
@@ -58,4 +58,3 @@ set_source_files_properties(${llinventory_HEADER_FILES}
list(APPEND llinventory_SOURCE_FILES ${llinventory_HEADER_FILES})
add_library (llinventory ${llinventory_SOURCE_FILES})
-add_dependencies(llinventory prepare)
diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index 1c43bb218..96986b79f 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -97,4 +97,3 @@ set_source_files_properties(${llmath_HEADER_FILES}
list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES})
add_library (llmath ${llmath_SOURCE_FILES})
-add_dependencies(llmath prepare)
diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h
index 8df507bc8..0fbf358a1 100644
--- a/indra/llmath/llcalcparser.h
+++ b/indra/llmath/llcalcparser.h
@@ -33,10 +33,21 @@
#endif
// Add this in if we want boost math constants.
+#include
+
+#if defined(LL_WINDOWS)
+#pragma warning(push)
+// warning C4348: 'boost::spirit::terminal<...>::result_helper': redefinition of default parameter: parameter 3, 4
+#pragma warning(disable: 4348)
+#endif
+
//#include
#include
#include
+#if defined(LL_WINDOWS)
+#pragma warning(pop)
+#endif
namespace expression {
@@ -54,37 +65,43 @@ T max_glue(T a, T b)
{
return std::max(a, b);
}
+
+struct lazy_pow_
+{
+ template
+ struct result { typedef X type; };
+
+ template
+ X operator()(X x, Y y) const
+ {
+ return std::pow(x, y);
+ }
+};
-template
struct lazy_ufunc_
{
- typedef RT result_type;
-
template
- struct result { typedef RT type; };
+ struct result { typedef A1 type; };
template
- RT operator()(F f, A1 a1) const
+ A1 operator()(F f, A1 a1) const
{
return f(a1);
}
};
-
-template
+
struct lazy_bfunc_
{
- typedef RT result_type;
-
template
- struct result { typedef RT type; };
+ struct result { typedef A1 type; };
template
- RT operator()(F f, A1 a1, A2 a2) const
+ A1 operator()(F f, A1 a1, A2 a2) const
{
return f(a1, a2);
}
};
-
+
//} // end namespace anonymous
template
@@ -172,9 +189,10 @@ struct grammar
using boost::spirit::qi::no_case;
using boost::spirit::qi::_val;
- boost::phoenix::function< lazy_ufunc_ > lazy_ufunc;
- boost::phoenix::function< lazy_bfunc_ > lazy_bfunc;
-
+ boost::phoenix::function lazy_pow;
+ boost::phoenix::function lazy_ufunc;
+ boost::phoenix::function lazy_bfunc;
+
expression =
term [_val = _1]
>> *( ('+' >> term [_val += _1])
@@ -191,7 +209,7 @@ struct grammar
factor =
primary [_val = _1]
- >> *( ("**" >> factor [_val = boost::phoenix::bind(static_cast(&std::pow),_val,_1)])
+ >> *( ("**" >> factor [_val = lazy_pow(_val, _1)])
)
;
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index 6523a2c9a..5ce76470b 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -220,7 +220,7 @@ set_source_files_properties(${llmessage_HEADER_FILES}
list(APPEND llmessage_SOURCE_FILES ${llmessage_HEADER_FILES})
add_library (llmessage ${llmessage_SOURCE_FILES})
-add_dependencies(llmessage prepare)
+
target_link_libraries(
llmessage
${CURL_LIBRARIES}
diff --git a/indra/llmessage/aicurl.cpp b/indra/llmessage/aicurl.cpp
index 843b06a28..70bd956c8 100644
--- a/indra/llmessage/aicurl.cpp
+++ b/indra/llmessage/aicurl.cpp
@@ -195,10 +195,10 @@ ssl_dyn_create_function_type old_ssl_dyn_create_function;
ssl_dyn_destroy_function_type old_ssl_dyn_destroy_function;
ssl_dyn_lock_function_type old_ssl_dyn_lock_function;
-#if LL_WINDOWS
+#if LL_WINDOWS && !HAVE_CRYPTO_THREADID
static unsigned long __cdecl apr_os_thread_current_wrapper()
{
- return (unsigned long)apr_os_thread_current();
+ return (unsigned long)(HANDLE)apr_os_thread_current();
}
#endif
diff --git a/indra/llmessage/aicurlthread.h b/indra/llmessage/aicurlthread.h
index 908456b13..7046af12b 100644
--- a/indra/llmessage/aicurlthread.h
+++ b/indra/llmessage/aicurlthread.h
@@ -45,7 +45,7 @@ class PollSet;
// For ordering a std::set with AICurlEasyRequest objects.
struct AICurlEasyRequestCompare {
- bool operator()(AICurlEasyRequest const& h1, AICurlEasyRequest const& h2) { return h1.get() < h2.get(); }
+ bool operator()(AICurlEasyRequest const& h1, AICurlEasyRequest const& h2) const { return h1.get() < h2.get(); }
};
//-----------------------------------------------------------------------------
diff --git a/indra/llmessage/aihttptimeoutpolicy.cpp b/indra/llmessage/aihttptimeoutpolicy.cpp
index ff37b849d..52a8fb36b 100644
--- a/indra/llmessage/aihttptimeoutpolicy.cpp
+++ b/indra/llmessage/aihttptimeoutpolicy.cpp
@@ -30,7 +30,6 @@
#include "sys.h"
#include "aihttptimeoutpolicy.h"
-#define NOMINMAX
#include "llerror.h"
#include "lldefs.h"
#include "v3math.h"
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
index 448b6606b..a18c40d57 100644
--- a/indra/llmessage/llproxy.cpp
+++ b/indra/llmessage/llproxy.cpp
@@ -115,9 +115,9 @@ S32 LLProxy::proxyHandshake(LLHost proxy)
U32 request_size = socks_username.size() + socks_password.size() + 3;
char * password_auth = new char[request_size];
password_auth[0] = 0x01;
- password_auth[1] = socks_username.size();
+ password_auth[1] = (char)socks_username.size();
memcpy(&password_auth[2], socks_username.c_str(), socks_username.size());
- password_auth[socks_username.size() + 2] = socks_password.size();
+ password_auth[socks_username.size() + 2] = (char)socks_password.size();
memcpy(&password_auth[socks_username.size() + 3], socks_password.c_str(), socks_password.size());
authmethod_password_reply_t password_reply;
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 5aa33696e..3c76f7a50 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -13,7 +13,6 @@ include_directories(
${LLMATH_INCLUDE_DIRS}
${LLMESSAGE_INCLUDE_DIRS}
${LLRENDER_INCLUDE_DIRS}
- ${LLQTWEBKIT_INCLUDE_DIR}
)
set(llplugin_SOURCE_FILES
@@ -62,8 +61,6 @@ if(LINUX AND STANDALONE)
target_link_libraries (llplugin rt dl)
endif(LINUX AND STANDALONE)
-add_dependencies(llplugin prepare)
-
add_subdirectory(slplugin)
# # Add tests
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index c5ff97ef7..75de5393f 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -1,4 +1,4 @@
-/**
+/**
* @file llpluginclassmedia.cpp
* @brief LLPluginClassMedia handles a plugin which knows about the "media" message class.
*
@@ -6,21 +6,21 @@
* $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
* @endcond
@@ -41,7 +41,7 @@ static int nextPowerOf2( int value )
{
next_power_of_2 <<= 1;
}
-
+
return next_power_of_2;
}
@@ -104,7 +104,7 @@ void LLPluginClassMedia::reset_impl(void)
mMediaName.clear();
mMediaDescription.clear();
mBackgroundColor = LLColor4(1.0f, 1.0f, 1.0f, 1.0f);
-
+
// media_browser class
mNavigateURI.clear();
mNavigateResultCode = -1;
@@ -112,13 +112,13 @@ void LLPluginClassMedia::reset_impl(void)
mHistoryBackAvailable = false;
mHistoryForwardAvailable = false;
mStatusText.clear();
- mProgressPercent = 0;
+ mProgressPercent = 0;
mClickURL.clear();
mClickNavType.clear();
mClickTarget.clear();
mClickUUID.clear();
mStatusCode = 0;
-
+
// media_time class
mCurrentTime = 0.0f;
mDuration = 0.0f;
@@ -144,7 +144,7 @@ void LLPluginClassMedia::idle_impl(void)
else
{
mRequestedTextureWidth = mRequestedMediaWidth;
-
+
if(mPadding > 1)
{
// Pad up to a multiple of the specified number of bytes per row
@@ -154,7 +154,7 @@ void LLPluginClassMedia::idle_impl(void)
{
rowbytes += mPadding - pad;
}
-
+
if(rowbytes % mRequestedTextureDepth == 0)
{
mRequestedTextureWidth = rowbytes / mRequestedTextureDepth;
@@ -166,7 +166,7 @@ void LLPluginClassMedia::idle_impl(void)
}
}
-
+
// Size change has been requested but not initiated yet.
size_t newsize = mRequestedTextureWidth * mRequestedTextureHeight * mRequestedTextureDepth;
@@ -181,22 +181,22 @@ void LLPluginClassMedia::idle_impl(void)
mPlugin->removeSharedMemory(mTextureSharedMemoryName);
mTextureSharedMemoryName.clear();
}
-
+
mTextureSharedMemorySize = newsize;
mTextureSharedMemoryName = mPlugin->addSharedMemory(mTextureSharedMemorySize);
if(!mTextureSharedMemoryName.empty())
{
void *addr = mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName);
-
+
// clear texture memory to avoid random screen visual fuzz from uninitialized texture data
memset( addr, 0x00, newsize );
-
+
// We could do this to force an update, but textureValid() will still be returning false until the first roundtrip to the plugin,
// so it may not be worthwhile.
// mDirtyRect.setOriginAndSize(0, 0, mRequestedMediaWidth, mRequestedMediaHeight);
}
}
-
+
// This is our local indicator that a change is in progress.
mTextureWidth = -1;
mTextureHeight = -1;
@@ -205,7 +205,7 @@ void LLPluginClassMedia::idle_impl(void)
// This invalidates any existing dirty rect.
resetDirty();
-
+
// Send a size change message to the plugin
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change");
@@ -219,7 +219,7 @@ void LLPluginClassMedia::idle_impl(void)
message.setValueReal("background_b", mBackgroundColor.mV[VZ]);
message.setValueReal("background_a", mBackgroundColor.mV[VW]);
mPlugin->sendMessage(message); // DO NOT just use sendMessage() here -- we want this to jump ahead of the queue.
-
+
LL_DEBUGS("Plugin") << "Sending size_change" << LL_ENDL;
}
}
@@ -278,11 +278,11 @@ void LLPluginClassMedia::setSizeInternal(void)
mRequestedMediaWidth = mDefaultMediaWidth;
mRequestedMediaHeight = mDefaultMediaHeight;
}
-
+
// Save these for size/interest calculations
mFullMediaWidth = mRequestedMediaWidth;
mFullMediaHeight = mRequestedMediaHeight;
-
+
if(mAllowDownsample)
{
switch(mPriority)
@@ -296,19 +296,19 @@ void LLPluginClassMedia::setSizeInternal(void)
mRequestedMediaHeight /= 2;
}
break;
-
+
default:
// Don't adjust texture size
break;
}
}
-
+
if(mAutoScaleMedia)
{
mRequestedMediaWidth = nextPowerOf2(mRequestedMediaWidth);
mRequestedMediaHeight = nextPowerOf2(mRequestedMediaHeight);
}
-
+
if(mRequestedMediaWidth > 2048)
mRequestedMediaWidth = 2048;
@@ -336,9 +336,9 @@ bool LLPluginClassMedia::textureValid(void)
mRequestedMediaWidth != mMediaWidth ||
mRequestedMediaHeight != mMediaHeight ||
getBitsData() == NULL
- )
+ )
return false;
-
+
return true;
}
@@ -362,8 +362,8 @@ void LLPluginClassMedia::resetDirty(void)
std::string LLPluginClassMedia::translateModifiers(MASK modifiers)
{
std::string result;
-
-
+
+
if(modifiers & MASK_CONTROL)
{
result += "control|";
@@ -386,7 +386,7 @@ std::string LLPluginClassMedia::translateModifiers(MASK modifiers)
{
result += "meta|";
}
-*/
+*/
return result;
}
@@ -494,11 +494,11 @@ void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int
// Don't spam unnecessary mouse move events.
return;
}
-
+
mLastMouseX = x;
mLastMouseY = y;
}
-
+
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "mouse_event");
std::string temp;
switch(type)
@@ -513,7 +513,7 @@ void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int
message.setValueS32("button", button);
message.setValueS32("x", x);
-
+
// Incoming coordinates are OpenGL-style ((0,0) = lower left), so flip them here if the plugin has requested it.
if(!mRequestedTextureCoordsOpenGL)
{
@@ -523,42 +523,42 @@ void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int
message.setValueS32("y", y);
message.setValue("modifiers", translateModifiers(modifiers));
-
+
sendMessage(message);
}
bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data)
{
bool result = true;
-
+
// FIXME:
// HACK: we don't have an easy way to tell if the plugin is going to handle a particular keycode.
// For now, return false for the ones the webkit plugin won't handle properly.
-
+
switch(key_code)
{
- case KEY_BACKSPACE:
- case KEY_TAB:
- case KEY_RETURN:
- case KEY_PAD_RETURN:
- case KEY_SHIFT:
- case KEY_CONTROL:
- case KEY_ALT:
- case KEY_CAPSLOCK:
- case KEY_ESCAPE:
- case KEY_PAGE_UP:
- case KEY_PAGE_DOWN:
- case KEY_END:
- case KEY_HOME:
- case KEY_LEFT:
- case KEY_UP:
- case KEY_RIGHT:
- case KEY_DOWN:
- case KEY_INSERT:
+ case KEY_BACKSPACE:
+ case KEY_TAB:
+ case KEY_RETURN:
+ case KEY_PAD_RETURN:
+ case KEY_SHIFT:
+ case KEY_CONTROL:
+ case KEY_ALT:
+ case KEY_CAPSLOCK:
+ case KEY_ESCAPE:
+ case KEY_PAGE_UP:
+ case KEY_PAGE_DOWN:
+ case KEY_END:
+ case KEY_HOME:
+ case KEY_LEFT:
+ case KEY_UP:
+ case KEY_RIGHT:
+ case KEY_DOWN:
+ case KEY_INSERT:
case KEY_DELETE:
- // These will be handled
+ // These will be handled
break;
-
+
default:
// regular ASCII characters will also be handled
if(key_code >= KEY_SPECIAL)
@@ -569,7 +569,7 @@ bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifie
break;
}
-#if LL_DARWIN
+#if LL_DARWIN
if(modifiers & MASK_ALT)
{
// Option-key modified characters should be handled by the unicode input path instead of this one.
@@ -588,15 +588,15 @@ bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifie
case KEY_EVENT_REPEAT: temp = "repeat"; break;
}
message.setValue("event", temp);
-
+
message.setValueS32("key", key_code);
message.setValue("modifiers", translateModifiers(modifiers));
message.setValueLLSD("native_key_data", native_key_data);
-
+
sendMessage(message);
}
-
+
return result;
}
@@ -607,10 +607,10 @@ void LLPluginClassMedia::scrollEvent(int x, int y, MASK modifiers)
message.setValueS32("x", x);
message.setValueS32("y", y);
message.setValue("modifiers", translateModifiers(modifiers));
-
+
sendMessage(message);
}
-
+
bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD native_key_data)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "text_event");
@@ -618,18 +618,33 @@ bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD
message.setValue("text", text);
message.setValue("modifiers", translateModifiers(modifiers));
message.setValueLLSD("native_key_data", native_key_data);
-
+
sendMessage(message);
-
+
return true;
}
+void LLPluginClassMedia::setCookie(std::string uri, std::string name, std::string value, std::string domain, std::string path, bool httponly, bool secure)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_cookie");
+
+ message.setValue("uri", uri);
+ message.setValue("name", name);
+ message.setValue("value", value);
+ message.setValue("domain", domain);
+ message.setValue("path", path);
+ message.setValueBoolean("httponly", httponly);
+ message.setValueBoolean("secure", secure);
+
+ sendMessage(message);
+}
+
void LLPluginClassMedia::loadURI(const std::string &uri)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "load_uri");
message.setValue("uri", uri);
-
+
sendMessage(message);
}
@@ -645,6 +660,7 @@ void LLPluginClassMedia::setLowPrioritySizeLimit(int size)
if(mLowPrioritySizeLimit != power)
{
mLowPrioritySizeLimit = power;
+
// This may affect the calculated size, so recalculate it here.
setSizeInternal();
}
@@ -653,12 +669,12 @@ void LLPluginClassMedia::setLowPrioritySizeLimit(int size)
F64 LLPluginClassMedia::getCPUUsage()
{
F64 result = 0.0f;
-
+
if(mPlugin)
{
result = mPlugin->getCPUUsage();
}
-
+
return result;
}
@@ -706,10 +722,12 @@ void LLPluginClassMedia::paste()
sendMessage(message);
}
-void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path)
+void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path_cache, const std::string &user_data_path_cookies, const std::string &user_data_path_logs)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path");
- message.setValue("path", user_data_path);
+ message.setValue("cache_path", user_data_path_cache);
+ message.setValue("cookies_path", user_data_path_cookies);
+ message.setValue("logs_path", user_data_path_logs);
sendMessage(message);
}
@@ -722,14 +740,14 @@ void LLPluginClassMedia::setLanguageCode(const std::string &language_code)
void LLPluginClassMedia::setPluginsEnabled(const bool enabled)
{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled");
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "plugins_enabled");
message.setValueBoolean("enable", enabled);
sendMessage(message);
}
void LLPluginClassMedia::setJavascriptEnabled(const bool enabled)
{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled");
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "javascript_enabled");
message.setValueBoolean("enable", enabled);
sendMessage(message);
}
@@ -746,7 +764,8 @@ void LLPluginClassMedia::setTarget(const std::string &target)
{
mTarget = target;
}
-/* virtual */
+
+/* virtual */
void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
{
std::string message_class = message.getClass();
@@ -765,21 +784,21 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
mRequestedTextureFormat = message.getValueU32("format");
mRequestedTextureType = message.getValueU32("type");
mRequestedTextureSwapBytes = message.getValueBoolean("swap_bytes");
- mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl");
-
+ mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl");
+
// These two are optional, and will default to 0 if they're not specified.
mDefaultMediaWidth = message.getValueS32("default_width");
mDefaultMediaHeight = message.getValueS32("default_height");
-
+
mAllowDownsample = message.getValueBoolean("allow_downsample");
mPadding = message.getValueS32("padding");
setSizeInternal();
-
+
mTextureParamsReceived = true;
}
else if(message_name == "updated")
- {
+ {
if(message.hasValue("left"))
{
LLRect newDirtyRect;
@@ -787,7 +806,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
newDirtyRect.mTop = message.getValueS32("top");
newDirtyRect.mRight = message.getValueS32("right");
newDirtyRect.mBottom = message.getValueS32("bottom");
-
+
// The plugin is likely to have top and bottom switched, due to vertical flip and OpenGL coordinate confusion.
// If they're backwards, swap them.
if(newDirtyRect.mTop < newDirtyRect.mBottom)
@@ -796,7 +815,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
newDirtyRect.mTop = newDirtyRect.mBottom;
newDirtyRect.mBottom = temp;
}
-
+
if(mDirtyRect.isEmpty())
{
mDirtyRect = newDirtyRect;
@@ -816,10 +835,10 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
<< mDirtyRect.mRight << ", "
<< mDirtyRect.mBottom << ")"
<< LL_ENDL;
-
+
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CONTENT_UPDATED);
- }
-
+ }
+
bool time_duration_updated = false;
int previous_percent = mProgressPercent;
@@ -839,7 +858,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
{
mCurrentRate = message.getValueReal("current_rate");
}
-
+
if(message.hasValue("loaded_duration"))
{
mLoadedDuration = message.getValueReal("loaded_duration");
@@ -850,7 +869,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
// If the message doesn't contain a loaded_duration param, assume it's equal to duration
mLoadedDuration = mDuration;
}
-
+
// Calculate a percentage based on the loaded duration and total duration.
if(mDuration != 0.0f) // Don't divide by zero.
{
@@ -861,7 +880,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
{
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_TIME_DURATION_UPDATED);
}
-
+
if(previous_percent != mProgressPercent)
{
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED);
@@ -870,9 +889,9 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
else if(message_name == "media_status")
{
std::string status = message.getValue("status");
-
+
LL_DEBUGS("Plugin") << "Status changed to: " << status << LL_ENDL;
-
+
if(status == "loading")
{
mStatus = LLPluginClassMediaOwner::MEDIA_LOADING;
@@ -912,24 +931,24 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
// TODO: check that name matches?
mNaturalMediaWidth = width;
mNaturalMediaHeight = height;
-
+
setSizeInternal();
}
else if(message_name == "size_change_response")
{
std::string name = message.getValue("name");
-
+
// TODO: check that name matches?
-
+
mTextureWidth = message.getValueS32("texture_width");
mTextureHeight = message.getValueS32("texture_height");
mMediaWidth = message.getValueS32("width");
mMediaHeight = message.getValueS32("height");
-
+
// This invalidates any existing dirty rect.
resetDirty();
-
- // TODO: should we verify that the plugin sent back the right values?
+
+ // TODO: should we verify that the plugin sent back the right values?
// Two size changes in a row may cause them to not match, due to queueing, etc.
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_SIZE_CHANGED);
@@ -969,7 +988,12 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
mAuthURL = message.getValue("url");
mAuthRealm = message.getValue("realm");
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST);
- }
+ }
+ else if (message_name == "file_download")
+ {
+ mFileDownloadFilename = message.getValue("filename");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_FILE_DOWNLOAD);
+ }
else if(message_name == "debug_message")
{
mDebugMessageText = message.getValue("message_text");
@@ -996,7 +1020,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
mNavigateResultString = message.getValue("result_string");
mHistoryBackAvailable = message.getValueBoolean("history_back_available");
mHistoryForwardAvailable = message.getValueBoolean("history_forward_available");
-
+
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE);
}
else if(message_name == "progress")
@@ -1051,7 +1075,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
mGeometryY = message.getValueS32("y");
mGeometryWidth = message.getValueS32("width");
mGeometryHeight = message.getValueS32("height");
-
+
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE);
}
else if(message_name == "link_hovered")
@@ -1060,7 +1084,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
mHoverLink = message.getValue("link");
mHoverText = message.getValue("title");
// message.getValue("text");
-
+
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LINK_HOVERED);
}
else
@@ -1076,20 +1100,21 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
// if(message_name == "message_name")
// {
// }
-// else
+// else
{
LL_WARNS("Plugin") << "Unknown " << message_class << " class message: " << message_name << LL_ENDL;
}
}
+
}
-/* virtual */
+/* virtual */
void LLPluginClassMedia::pluginLaunchFailed()
{
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH);
}
-/* virtual */
+/* virtual */
void LLPluginClassMedia::pluginDied()
{
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED);
@@ -1116,7 +1141,7 @@ void LLPluginClassMedia::focus(bool focused)
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "focus");
message.setValueBoolean("focused", focused);
-
+
sendMessage(message);
}
@@ -1143,7 +1168,7 @@ void LLPluginClassMedia::clear_cookies()
void LLPluginClassMedia::set_cookies(const std::string &cookies)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies");
- message.setValue("cookies", cookies);
+ message.setValue("cookies", cookies);
sendMessage(message);
}
@@ -1176,7 +1201,7 @@ void LLPluginClassMedia::browse_reload(bool ignore_cache)
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_reload");
message.setValueBoolean("ignore_cache", ignore_cache);
-
+
sendMessage(message);
}
@@ -1300,7 +1325,7 @@ void LLPluginClassMedia::seek(float time)
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "seek");
message.setValueReal("time", time);
-
+
sendMessage(message);
}
@@ -1318,11 +1343,11 @@ void LLPluginClassMedia::setVolume(float volume)
if(volume != mRequestedVolume)
{
mRequestedVolume = volume;
-
+
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_volume");
message.setValueReal("volume", volume);
-
+
sendMessage(message);
}
}
@@ -1341,4 +1366,3 @@ void LLPluginClassMedia::initializeUrlHistory(const LLSD& url_history)
LL_DEBUGS("Plugin") << "Sending history" << LL_ENDL;
}
-
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index 8e7a40a67..c2b993488 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -122,6 +122,8 @@ public:
// Text may be unicode (utf8 encoded)
bool textInput(const std::string &text, MASK modifiers, LLSD native_key_data);
+ void setCookie(std::string uri, std::string name, std::string value, std::string domain, std::string path, bool httponly, bool secure);
+
void loadURI(const std::string &uri);
// Inherited from LLPluginProcessParentOwner
@@ -154,7 +156,7 @@ public:
bool canPaste() const { return mCanPaste; };
// These can be called before init(), and they will be queued and sent before the media init message.
- void setUserDataPath(const std::string &user_data_path);
+ void setUserDataPath(const std::string &user_data_path_cache, const std::string &user_data_path_cookies, const std::string &user_data_path_logs);
void setLanguageCode(const std::string &language_code);
void setPluginsEnabled(const bool enabled);
void setJavascriptEnabled(const bool enabled);
@@ -234,6 +236,10 @@ public:
std::string getHoverText() const { return mHoverText; };
std::string getHoverLink() const { return mHoverLink; };
+ // these are valid during MEDIA_EVENT_LINK_HOVERED
+ std::string getFileDownloadFilename() const { return mFileDownloadFilename; }
+
+
const std::string& getMediaName() const { return mMediaName; };
std::string getMediaDescription() const { return mMediaDescription; };
@@ -373,6 +379,7 @@ protected:
std::string mAuthRealm;
std::string mHoverText;
std::string mHoverLink;
+ std::string mFileDownloadFilename;
/////////////////////////////////////////
// media_time class
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 4a739cf86..391c23d88 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -3,33 +3,26 @@
* @brief LLPluginClassMedia handles interaction with a plugin which knows about the "media" message class.
*
* @cond
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2010, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlife.com/developers/opensource/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
- *
* @endcond
*/
@@ -71,6 +64,8 @@ public:
MEDIA_EVENT_AUTH_REQUEST, // The plugin wants to display an auth dialog
+ MEDIA_EVENT_FILE_DOWNLOAD, // the plugin wants to download a file
+
MEDIA_EVENT_DEBUG_MESSAGE, // plugin sending back debug information for host to process
MEDIA_EVENT_LINK_HOVERED // Got a "link hovered" event from the plugin
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index 381782ed6..9020b85ca 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -6,6 +6,7 @@ include(LLPlugin)
include(Linking)
include(PluginAPI)
include(LLMessage)
+include(WinManifest)
include_directories(
${LLPLUGIN_INCLUDE_DIRS}
@@ -58,6 +59,7 @@ if (WINDOWS)
PROPERTIES
LINK_FLAGS "/OPT:NOREF"
)
+ EMBED_MANIFEST(SLPlugin 1)
endif()
target_link_libraries(SLPlugin
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
index e9478bb06..e2c4d5295 100644
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -62,4 +62,3 @@ set_source_files_properties(${llprimitive_HEADER_FILES}
list(APPEND llprimitive_SOURCE_FILES ${llprimitive_HEADER_FILES})
add_library (llprimitive ${llprimitive_SOURCE_FILES})
-add_dependencies(llprimitive prepare)
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index 27bb606ff..3fc0a9390 100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -2452,7 +2452,7 @@ void LLModel::Decomposition::fromLLSD(LLSD& decomp)
range = max-min;
- U16 count = position.size()/6;
+ size_t count = position.size()/6;
for (U32 j = 0; j < count; ++j)
{
diff --git a/indra/llqtwebkit/CMakeLists.txt b/indra/llqtwebkit/CMakeLists.txt
deleted file mode 100644
index 6fbf5e960..000000000
--- a/indra/llqtwebkit/CMakeLists.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- cmake -*-
-
-project(llqtwebkit)
-
-include(00-Common)
-include(Qt4)
-
-if(NOT WORD_SIZE EQUAL 32)
- if(WINDOWS)
- add_definitions(/FIXED:NO)
- else(WINDOWS)
- add_definitions(-fPIC)
- endif(WINDOWS)
-endif(NOT WORD_SIZE EQUAL 32)
-
-include_directories(${QT_INCLUDES})
-
-add_subdirectory(qtwebkit_cookiejar)
-include_directories(qtwebkit_cookiejar/src/)
-
-set(llqtwebkit_SOURCE_FILES
- llembeddedbrowser.cpp
- llembeddedbrowserwindow.cpp
- lljsobject.cpp
- llnetworkaccessmanager.cpp
- llqtwebkit.cpp
- llstyle.cpp
- llwebpage.cpp
- llwebpageopenshim.cpp
- )
-
-set(llqtwebkit_HEADER_FILES
- llembeddedbrowser.h
- llembeddedbrowser_p.h
- llembeddedbrowserwindow.h
- llembeddedbrowserwindow_p.h
- lljsobject.h
- llnetworkaccessmanager.h
- llqtwebkit.h
- llstyle.h
- llwebpage.h
- llwebpageopenshim.h
- pstdint.h
- )
-
-set(llqtwebkit_UI_FILES
- passworddialog.ui
- )
-
-set(llqtwebkit_LINK_LIBRARIES
- networkcookiejar
-)
-
-QT4_WRAP_UI(llqtwebkit_UI_MOC ${llqtwebkit_UI_FILES})
-QT4_WRAP_CPP(llqtwebkit_HEADERS_MOC ${llqtwebkit_HEADER_FILES})
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
-add_library(llqtwebkit
- ${llqtwebkit_SOURCE_FILES}
- ${llqtwebkit_HEADERS_MOC}
- ${llqtwebkit_UI_MOC}
-)
-
-add_dependencies(llqtwebkit prepare)
-
-target_link_libraries(llqtwebkit ${llqtwebkit_LINK_LIBRARIES})
-
-add_dependencies(llqtwebkit
- networkcookiejar
-)
diff --git a/indra/llqtwebkit/autotests/llembeddedbrowser/llembeddedbrowser.pro b/indra/llqtwebkit/autotests/llembeddedbrowser/llembeddedbrowser.pro
deleted file mode 100644
index 02ecce5a2..000000000
--- a/indra/llqtwebkit/autotests/llembeddedbrowser/llembeddedbrowser.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-TEMPLATE = app
-TARGET =
-DEPENDPATH += .
-INCLUDEPATH += .
-
-CONFIG += qtestlib
-QT += webkit opengl network
-
-include(../../llmozlib2.pri)
-DEFINES += AUTOTEST
-
-# Input
-SOURCES += tst_llembeddedbrowser.cpp
-
diff --git a/indra/llqtwebkit/autotests/llembeddedbrowser/tst_llembeddedbrowser.cpp b/indra/llqtwebkit/autotests/llembeddedbrowser/tst_llembeddedbrowser.cpp
deleted file mode 100644
index a59cc9e19..000000000
--- a/indra/llqtwebkit/autotests/llembeddedbrowser/tst_llembeddedbrowser.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include
-#include
-#include
-
-class tst_LLEmbeddedBrowser : public QObject
-{
- Q_OBJECT
-
-public slots:
- void initTestCase();
- void cleanupTestCase();
- void init();
- void cleanup();
-
-private slots:
- void llembeddedbrowser_data();
- void llembeddedbrowser();
-
- void clearAllCookies();
- void clearCache_data();
- void clearCache();
- void clearLastError_data();
- void clearLastError();
- void createBrowserWindow_data();
- void createBrowserWindow();
- void destroyBrowserWindow();
- void enableCookies_data();
- void enableCookies();
- void enablePlugins_data();
- void enablePlugins();
- void enableProxy_data();
- void enableProxy();
- void getGREVersion_data();
- void getGREVersion();
- void getInstance();
- void getLastError_data();
- void getLastError();
- void initBrowser_data();
- void initBrowser(); //change function init as initbrowser
- void reset();
- void setBrowserAgentId_data();
- void setBrowserAgentId();
- void setLastError_data();
- void setLastError();
-};
-
-// Subclass that exposes the protected functions.
-class SubLLEmbeddedBrowser : public LLEmbeddedBrowser
-{
-public:
-
-};
-
-// This will be called before the first test function is executed.
-// It is only called once.
-void tst_LLEmbeddedBrowser::initTestCase()
-{
-}
-
-// This will be called after the last test function is executed.
-// It is only called once.
-void tst_LLEmbeddedBrowser::cleanupTestCase()
-{
-}
-
-// This will be called before each test function is executed.
-void tst_LLEmbeddedBrowser::init()
-{
-}
-
-// This will be called after every test function.
-void tst_LLEmbeddedBrowser::cleanup()
-{
-}
-
-void tst_LLEmbeddedBrowser::llembeddedbrowser_data()
-{
-}
-
-void tst_LLEmbeddedBrowser::llembeddedbrowser()
-{
- SubLLEmbeddedBrowser browser;
- QCOMPARE(browser.clearAllCookies(), false);
- QCOMPARE(browser.clearCache(), false);
- browser.clearLastError();
- QCOMPARE(browser.enableCookies(false), false);
- QCOMPARE(browser.enablePlugins(false), true);
- QCOMPARE(browser.enableProxy(false, std::string(""), -1), true);
- QCOMPARE(browser.getGREVersion(), std::string(QT_VERSION_STR));
- QVERIFY(browser.getInstance() != NULL);
- QCOMPARE(browser.getLastError(), 0);
- browser.setBrowserAgentId("uBrowser");
- browser.setLastError(-1);
- QCOMPARE(browser.reset(), true);
- browser.destroyBrowserWindow(0);
- browser.destroyBrowserWindow((LLEmbeddedBrowserWindow*)6);
- QCOMPARE(browser.getWindowCount(), 0);
- QCOMPARE(browser.init(std::string(""),std::string(""),std::string(""),0), true);
-}
-
-// public bool clearAllCookies()
-void tst_LLEmbeddedBrowser::clearAllCookies()
-{
- SubLLEmbeddedBrowser browser;
-
- QCOMPARE(browser.clearAllCookies(), false);
- browser.reset();
- QCOMPARE(browser.clearAllCookies(), true);
-}
-
-void tst_LLEmbeddedBrowser::clearCache_data()
-{
- QTest::addColumn("clearCache");
-#if QT_VERSION < 0x040500
- QTest::newRow("QTVersion < 4.5") << false;
-#else
- QTest::newRow("QTVersion > 4.5") << true;
-#endif
-}
-
-// public bool clearCache()
-void tst_LLEmbeddedBrowser::clearCache()
-{
- QFETCH(bool, clearCache);
-
- SubLLEmbeddedBrowser browser;
- browser.reset();
- QCOMPARE(browser.clearCache(), clearCache);
-}
-
-void tst_LLEmbeddedBrowser::clearLastError_data()
-{
- QTest::addColumn("lastError");
- QTest::newRow("1") << 1;
-}
-
-// public void clearLastError()
-void tst_LLEmbeddedBrowser::clearLastError()
-{
- SubLLEmbeddedBrowser browser;
- QFETCH(int, lastError);
-
- browser.setLastError(lastError);
- browser.clearLastError();
- QCOMPARE(browser.getLastError(), 0);
-}
-
-void tst_LLEmbeddedBrowser::createBrowserWindow_data()
-{
- QTest::addColumn("width");
- QTest::addColumn("height");
- QTest::newRow("0,0") << 0 << 0;
- QTest::newRow("800,600") << 800 << 600;
-}
-
-// public LLEmbeddedBrowserWindow* createBrowserWindow(int width, int height)
-void tst_LLEmbeddedBrowser::createBrowserWindow()
-{
- QFETCH(int, width);
- QFETCH(int, height);
- SubLLEmbeddedBrowser browser;
-
- LLEmbeddedBrowserWindow *window = browser.createBrowserWindow(width, height);
- QVERIFY(window);
- QCOMPARE(browser.getLastError(), 0);
- QCOMPARE(browser.getWindowCount(), 1);
- QCOMPARE(window->getBrowserWidth(), (int16_t)width);
- QCOMPARE(window->getBrowserHeight(), (int16_t)height);
-}
-
-// public bool destroyBrowserWindow(LLEmbeddedBrowserWindow* browser_window)
-void tst_LLEmbeddedBrowser::destroyBrowserWindow()
-{
- SubLLEmbeddedBrowser browser;
- browser.reset();
- LLEmbeddedBrowserWindow* browser_window = browser.createBrowserWindow(200, 100);
- if (browser_window)
- {
- QCOMPARE(browser.getWindowCount(), 1);
- browser.destroyBrowserWindow(browser_window);
- QCOMPARE(browser.getLastError(), 0);
- QCOMPARE(browser.getWindowCount(), 0);
- }
-
- browser_window = browser.createBrowserWindow(800, 600);
- if (browser_window)
- {
- QCOMPARE(browser.getWindowCount(), 1);
- browser.destroyBrowserWindow(browser_window);
- QCOMPARE(browser.getLastError(), 0);
- QCOMPARE(browser.getWindowCount(), 0);
- }
-}
-
-void tst_LLEmbeddedBrowser::enableCookies_data()
-{
- QTest::addColumn("enabled");
- QTest::addColumn("enableCookies");
- QTest::newRow("disable") << false << false;
- QTest::newRow("enable") << true << false;
-}
-
-// public bool enableCookies(bool enabled)
-void tst_LLEmbeddedBrowser::enableCookies()
-{
- QFETCH(bool, enabled);
- QFETCH(bool, enableCookies);
-
- SubLLEmbeddedBrowser browser;
- browser.reset();
- QCOMPARE(browser.enableCookies(enabled), enableCookies);
- // TODO check that cookies are not saved
-}
-
-void tst_LLEmbeddedBrowser::enablePlugins_data()
-{
- QTest::addColumn("enabled");
- QTest::addColumn("enablePlugins");
- QTest::newRow("disable") << false << true;
- QTest::newRow("enable") << true << true;
-}
-
-// public bool enablePlugins(bool enabled)
-void tst_LLEmbeddedBrowser::enablePlugins()
-{
- QFETCH(bool, enabled);
- QFETCH(bool, enablePlugins);
-
- SubLLEmbeddedBrowser browser;
- browser.reset();
- QCOMPARE(browser.enablePlugins(enabled), enablePlugins);
- // TODO check that plugins work/do not work
-}
-
-Q_DECLARE_METATYPE(std::string)
-void tst_LLEmbeddedBrowser::enableProxy_data()
-{
- QTest::addColumn("enabled");
- QTest::addColumn("host_name");
- QTest::addColumn("port");
- QTest::addColumn("enableProxy");
- QTest::newRow("null") << false << std::string() << 0 << true;
- QTest::newRow("valid") << true << std::string("wtfsurf.com") << 80 << true;
-}
-
-// public bool enableProxy(bool enabled, std::string host_name, int port)
-void tst_LLEmbeddedBrowser::enableProxy()
-{
- QFETCH(bool, enabled);
- QFETCH(std::string, host_name);
- QFETCH(int, port);
- QFETCH(bool, enableProxy);
-
- SubLLEmbeddedBrowser browser;
- browser.reset();
- QCOMPARE(browser.enableProxy(enabled, host_name, port), enableProxy);
- // TODO need some proxy servers to test this
-}
-
-void tst_LLEmbeddedBrowser::getGREVersion_data()
-{
- QTest::addColumn("getGREVersion");
- QTest::newRow("valid") << std::string(QT_VERSION_STR);
-}
-
-// public std::string getGREVersion()
-void tst_LLEmbeddedBrowser::getGREVersion()
-{
- QFETCH(std::string, getGREVersion);
-
- SubLLEmbeddedBrowser browser;
- browser.reset();
- QCOMPARE(browser.getGREVersion(), getGREVersion);
-}
-
-// public static LLEmbeddedBrowser* getInstance()
-void tst_LLEmbeddedBrowser::getInstance()
-{
- SubLLEmbeddedBrowser browser;
- QVERIFY(browser.getInstance() != NULL);
-}
-
-void tst_LLEmbeddedBrowser::getLastError_data()
-{
- QTest::addColumn("error");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
- QTest::newRow("100") << 100;
-}
-
-// public int getLastError()
-void tst_LLEmbeddedBrowser::getLastError()
-{
- QFETCH(int, error);
- SubLLEmbeddedBrowser browser;
- browser.setLastError(error);
- QCOMPARE(browser.getLastError(), error);
-}
-
-void tst_LLEmbeddedBrowser::initBrowser_data()
-{
- QTest::addColumn("application_directory");
- QTest::addColumn("component_directory");
- QTest::addColumn("profile_directory");
- QTest::addColumn("native_window_handleCount");
- QTest::addColumn("init");
- QTest::newRow("null") << std::string() << std::string() << std::string() << (void *)0 << true;
- QTest::newRow("valid") << std::string("/home/crystal/Settings/") << std::string() << std::string() << (void *)0 << true;
-}
-void tst_LLEmbeddedBrowser::initBrowser()
-{
- QFETCH(std::string, application_directory);
- QFETCH(std::string, component_directory);
- QFETCH(std::string, profile_directory);
- QFETCH(void *, native_window_handleCount);
- SubLLEmbeddedBrowser browser;
- browser.init(application_directory,component_directory,profile_directory,native_window_handleCount);
- QCOMPARE(browser.getLastError(), 0);
-}
-
-// public bool reset()
-void tst_LLEmbeddedBrowser::reset()
-{
- SubLLEmbeddedBrowser browser;
-
- browser.setLastError(100);
- QCOMPARE(browser.getLastError(), 100);
- QVERIFY(browser.reset());
- QCOMPARE(browser.getLastError(), 0);
- // TODO what should reset really do?
-}
-
-void tst_LLEmbeddedBrowser::setBrowserAgentId_data()
-{
- QTest::addColumn("id");
- QTest::newRow("null") << std::string();
- QTest::newRow("valid") << std::string("uBrowser");
-
-}
-
-// public void setBrowserAgentId(std::string id)
-void tst_LLEmbeddedBrowser::setBrowserAgentId()
-{
- QFETCH(std::string, id);
-
- SubLLEmbeddedBrowser browser;
- browser.reset();
- browser.setBrowserAgentId(id);
- LLEmbeddedBrowserWindow *window = browser.createBrowserWindow(0, 0);
- Q_UNUSED(window);
- // TODO confirm that the page is actually sending the agent ID
-}
-
-void tst_LLEmbeddedBrowser::setLastError_data()
-{
- QTest::addColumn("error_number");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
- QTest::newRow("100") << 100;
-}
-
-// public void setLastError(int error_number)
-void tst_LLEmbeddedBrowser::setLastError()
-{
- QFETCH(int, error_number);
-
- SubLLEmbeddedBrowser browser;
-
- browser.setLastError(error_number);
- QCOMPARE(browser.getLastError(), error_number);
-}
-
-QTEST_MAIN(tst_LLEmbeddedBrowser)
-#include "tst_llembeddedbrowser.moc"
-
diff --git a/indra/llqtwebkit/autotests/llembeddedbrowserwindow/llembeddedbrowserwindow.pro b/indra/llqtwebkit/autotests/llembeddedbrowserwindow/llembeddedbrowserwindow.pro
deleted file mode 100644
index a89f50065..000000000
--- a/indra/llqtwebkit/autotests/llembeddedbrowserwindow/llembeddedbrowserwindow.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-TEMPLATE = app
-TARGET =
-DEPENDPATH += .
-INCLUDEPATH += .
-
-CONFIG += qtestlib
-QT += webkit opengl network
-
-include(../../llmozlib2.pri)
-DEFINES += AUTOTEST
-
-# Input
-SOURCES += tst_llembeddedbrowserwindow.cpp
-
diff --git a/indra/llqtwebkit/autotests/llembeddedbrowserwindow/tst_llembeddedbrowserwindow.cpp b/indra/llqtwebkit/autotests/llembeddedbrowserwindow/tst_llembeddedbrowserwindow.cpp
deleted file mode 100644
index 4c365d371..000000000
--- a/indra/llqtwebkit/autotests/llembeddedbrowserwindow/tst_llembeddedbrowserwindow.cpp
+++ /dev/null
@@ -1,1027 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include
-
-#include "llembeddedbrowserwindow.h"
-#include "llembeddedbrowser.h"
-
-#ifndef QTRY_COMPARE
-
-#define __TRY_TIMEOUT__ 10000
-#define __TRY_STEP__ 50
-
-#define __QTRY(__expression__, __functionToCall__) \
- do { \
- int __i = 0; \
- while (!(__expression__) && __i < __TRY_TIMEOUT__) { \
- QTest::qWait(__TRY_STEP__); \
- __i += __TRY_STEP__; \
- } \
- __functionToCall__; \
- } while(0)
-
-#define QTRY_COMPARE(__expression__, __expected__) \
- __QTRY((__expression__ == __expected__), QCOMPARE(__expression__, __expected__));
-
-#define QTRY_VERIFY(__expression__) \
- __QTRY(__expression__, QVERIFY(__expression__));
-
-#endif // QTRY_COMPARE
-
-class tst_LLEmbeddedBrowserWindow : public QObject
-{
- Q_OBJECT
-
-public slots:
- void initTestCase();
- void cleanupTestCase();
- void init();
- void cleanup();
-
-private slots:
- void llembeddedbrowserwindow_data();
- void llembeddedbrowserwindow();
-
- void addObserver_data();
- void addObserver();
- void canNavigateBack_data();
- void canNavigateBack();
- void canNavigateForward_data();
- void canNavigateForward();
- void evaluateJavascript_data();
- void evaluateJavascript();
- void flipWindow_data();
- void flipWindow();
- void focusBrowser_data();
- void focusBrowser();
- void getBrowserDepth_data();
- void getBrowserDepth();
- void getBrowserHeight_data();
- void getBrowserHeight();
- void getBrowserRowSpan_data();
- void getBrowserRowSpan();
- void getBrowserWidth_data();
- void getBrowserWidth();
- void getClickLinkHref_data();
- void getClickLinkHref();
- void getClickLinkTarget_data();
- void getClickLinkTarget();
- void getCurrentUri_data();
- void getCurrentUri();
- void getNoFollowScheme_data();
- void getNoFollowScheme();
- void getPageBuffer_data();
- void getPageBuffer();
- void getPercentComplete_data();
- void getPercentComplete();
- void getStatusMsg_data();
- void getStatusMsg();
- void getWindowId_data();
- void getWindowId();
- void grabWindow_data();
- void grabWindow();
- void keyPress_data();
- void keyPress();
- void mouseDown_data();
- void mouseDown();
- void mouseLeftDoubleClick_data();
- void mouseLeftDoubleClick();
- void mouseMove_data();
- void mouseMove();
- void mouseUp_data();
- void mouseUp();
- void navigateBack_data();
- void navigateBack();
- void navigateForward_data();
- void navigateForward();
- void navigateReload_data();
- void navigateReload();
- void navigateStop_data();
- void navigateStop();
- void navigateTo_data();
- void navigateTo();
- void remObserver_data();
- void remObserver();
- void scrollByLines_data();
- void scrollByLines();
- void setBackgroundColor_data();
- void setBackgroundColor();
- void setCaretColor_data();
- void setCaretColor();
- void setEnabled_data();
- void setEnabled();
- void setNoFollowScheme_data();
- void setNoFollowScheme();
- void setParent_data();
- void setParent();
- void setSize_data();
- void setSize();
- void setWindowId_data();
- void setWindowId();
- void unicodeInput_data();
- void unicodeInput();
-};
-
-// Subclass that exposes the protected functions.
-class SubLLEmbeddedBrowserWindow : public LLEmbeddedBrowserWindow
-{
-public:
-
-};
-
-// This will be called before the first test function is executed.
-// It is only called once.
-void tst_LLEmbeddedBrowserWindow::initTestCase()
-{
-}
-
-// This will be called after the last test function is executed.
-// It is only called once.
-void tst_LLEmbeddedBrowserWindow::cleanupTestCase()
-{
-}
-
-// This will be called before each test function is executed.
-void tst_LLEmbeddedBrowserWindow::init()
-{
-}
-
-// This will be called after every test function.
-void tst_LLEmbeddedBrowserWindow::cleanup()
-{
-}
-
-void tst_LLEmbeddedBrowserWindow::llembeddedbrowserwindow_data()
-{
-}
-
-void tst_LLEmbeddedBrowserWindow::llembeddedbrowserwindow()
-{
- SubLLEmbeddedBrowserWindow window;
- QCOMPARE(window.addObserver((LLEmbeddedBrowserWindowObserver*)0), false);
- QCOMPARE(window.canNavigateBack(), false);
- QCOMPARE(window.canNavigateForward(), false);
- QCOMPARE(window.evaluateJavascript(std::string()), std::string());
- QCOMPARE(window.flipWindow(false), true);
- window.focusBrowser(false);
- QCOMPARE(window.getBrowserDepth(), (int16_t)4);
- QCOMPARE(window.getBrowserHeight(), (int16_t)0);
- QCOMPARE(window.getBrowserRowSpan(), (int32_t)0);
- QCOMPARE(window.getBrowserWidth(), (int16_t)0);
- QCOMPARE(window.getClickLinkHref(), std::string());
- QCOMPARE(window.getClickLinkTarget(), std::string());
- QCOMPARE(window.getCurrentUri(), std::string());
- QCOMPARE(window.getNoFollowScheme(), std::string("secondlife"));
- QCOMPARE(window.getPageBuffer(), (unsigned char*)0);
- QCOMPARE(window.getPercentComplete(), (int16_t)0);
- QCOMPARE(window.getStatusMsg(), std::string());
- QCOMPARE(window.getWindowId(), -1);
- QCOMPARE(window.grabWindow(-1, -1, -1, -1), (unsigned char*)0);
- window.keyPress(0);
- window.mouseDown(0, 0);
- window.mouseLeftDoubleClick(0, 0);
- window.mouseMove(0, 0);
- window.mouseUp(0, 0);
- window.navigateBack();
- window.navigateForward();
- window.navigateReload();
- window.navigateStop();
- QCOMPARE(window.navigateTo(std::string()), true);
- QCOMPARE(window.remObserver((LLEmbeddedBrowserWindowObserver*)0), false);
- window.scrollByLines(0);
- window.setBackgroundColor(0, 0, 0);
- window.setCaretColor(0, 0, 0);
- window.setEnabled(false);
- window.setNoFollowScheme(std::string());
- window.setParent((LLEmbeddedBrowser*)0);
- QCOMPARE(window.setSize(0, 0), true);
- window.setWindowId(-1);
- window.unicodeInput((uint32_t)0);
-}
-
-void tst_LLEmbeddedBrowserWindow::addObserver_data()
-{
-#if 0
- QTest::addColumn("observerCount");
- QTest::addColumn("addObserver");
- QTest::newRow("null") << 0 << false;
-#endif
-}
-
-// public bool addObserver(LLEmbeddedBrowserWindowObserver* observer)
-void tst_LLEmbeddedBrowserWindow::addObserver()
-{
-#if 0
- QFETCH(int, observerCount);
- QFETCH(bool, addObserver);
-
- SubLLEmbeddedBrowserWindow window;
-
- QCOMPARE(window.addObserver(observer), addObserver);
-#endif
- QSKIP("Test is same with remObserver.", SkipAll);
-}
-
-void tst_LLEmbeddedBrowserWindow::canNavigateBack_data()
-{
-#if 0
- QTest::addColumn("canNavigateBack");
- QTest::newRow("true") << true;
- QTest::newRow("false") << false;
-#endif
-}
-
-// public bool canNavigateBack()
-void tst_LLEmbeddedBrowserWindow::canNavigateBack()
-{
- //QFETCH(bool, canNavigateForward);
-
- SubLLEmbeddedBrowserWindow window;
- window.setSize(800,600);
- window.setParent(new LLEmbeddedBrowser());
- QCOMPARE(window.canNavigateForward(), false);
- window.navigateTo(std::string("http://www.google.com"));
- QTest::qWait(__TRY_TIMEOUT__);
- QCOMPARE(window.canNavigateBack(), false);
- window.navigateTo(std::string("http://www.cnn.com"));
- QTest::qWait(__TRY_TIMEOUT__);
- QCOMPARE(window.canNavigateBack(), true);
- window.navigateBack();
- QTRY_COMPARE(window.canNavigateForward(), true);
- window.navigateForward();
- QTRY_COMPARE(window.canNavigateBack(), true);
-}
-
-void tst_LLEmbeddedBrowserWindow::canNavigateForward_data()
-{
-#if 0
- QTest::addColumn("canNavigateForward");
- QTest::newRow("true") << true;
- QTest::newRow("false") << false;
-#endif
-}
-
-// public bool canNavigateForward()
-void tst_LLEmbeddedBrowserWindow::canNavigateForward()
-{
- QSKIP("Test is same with canNavigateBack().", SkipAll);
-}
-
-Q_DECLARE_METATYPE(std::string)
-void tst_LLEmbeddedBrowserWindow::evaluateJavascript_data()
-{
- QTest::addColumn("script");
- QTest::addColumn("evaluateJavascript");
- QTest::newRow("null") << std::string() << std::string();
- //QTest::newRow("valid") << std::string("alert(\"hey!\")") << std::string("alert(\"hey!\")");
-}
-
-// public std::string evaluateJavascript(std::string script)
-void tst_LLEmbeddedBrowserWindow::evaluateJavascript()
-{
- QFETCH(std::string, script);
- QFETCH(std::string, evaluateJavascript);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.evaluateJavascript(script);
-}
-
-void tst_LLEmbeddedBrowserWindow::flipWindow_data()
-{
- QTest::addColumn("flip");
- QTest::addColumn("flipWindow");
- QTest::newRow("false") << false << true;
- QTest::newRow("true") << true << true;
-}
-
-// public bool flipWindow(bool flip)
-void tst_LLEmbeddedBrowserWindow::flipWindow()
-{
- QFETCH(bool, flip);
- QFETCH(bool, flipWindow);
-
- SubLLEmbeddedBrowserWindow window;
-
- QCOMPARE(window.flipWindow(flip), flipWindow);
-}
-
-void tst_LLEmbeddedBrowserWindow::focusBrowser_data()
-{
- QTest::addColumn("focus_browser");
- QTest::newRow("true") << true;
- QTest::newRow("false") << false;
-}
-
-// public void focusBrowser(bool focus_browser)
-void tst_LLEmbeddedBrowserWindow::focusBrowser()
-{
- QFETCH(bool, focus_browser);
-
- SubLLEmbeddedBrowserWindow window;
- window.focusBrowser(focus_browser);
-}
-
-Q_DECLARE_METATYPE(int16_t)
-void tst_LLEmbeddedBrowserWindow::getBrowserDepth_data()
-{
-#if 0
- QTest::addColumn("getBrowserDepth");
- QTest::newRow("null") << int16_t();
-#endif
-}
-
-// public int16_t getBrowserDepth()
-void tst_LLEmbeddedBrowserWindow::getBrowserDepth()
-{
- //QFETCH(int16_t, getBrowserDepth);
-
- SubLLEmbeddedBrowserWindow window;
-
- QCOMPARE(window.getBrowserDepth(), int16_t(4));
-}
-
-void tst_LLEmbeddedBrowserWindow::getBrowserHeight_data()
-{
-#if 0
- QTest::addColumn("getBrowserHeight");
- QTest::newRow("null") << int16_t();
-#endif
-}
-
-// public int16_t getBrowserHeight()
-void tst_LLEmbeddedBrowserWindow::getBrowserHeight()
-{
-#if 0
- QFETCH(int16_t, getBrowserHeight);
-
- SubLLEmbeddedBrowserWindow window;
-
- QCOMPARE(window.getBrowserHeight(), getBrowserHeight);
-#endif
- QSKIP("Test is same with setSize().", SkipAll);
-}
-
-Q_DECLARE_METATYPE(int32_t)
-void tst_LLEmbeddedBrowserWindow::getBrowserRowSpan_data()
-{
-#if 0
- QTest::addColumn("getBrowserRowSpan");
- QTest::newRow("null") << int32_t();
-#endif
-}
-
-// public int32_t getBrowserRowSpan()
-void tst_LLEmbeddedBrowserWindow::getBrowserRowSpan()
-{
-#if 0
- SubLLEmbeddedBrowserWindow window;
- window.setSize(0, 0);
-
- QCOMPARE(window.getBrowserWidth(), int16_t(0));
- QCOMPARE(window.getBrowserRowSpan(), int32_t(0));
- window.setSize(100, 100);
-
- QCOMPARE(window.getBrowserWidth(), int16_t(100));
- QCOMPARE(window.getBrowserRowSpan(), int32_t(400));
-#endif
- QSKIP("Test is same with setSize().", SkipAll);
-}
-
-void tst_LLEmbeddedBrowserWindow::getBrowserWidth_data()
-{
-#if 0
- QTest::addColumn("getBrowserWidth");
- QTest::newRow("null") << int16_t();
-#endif
-}
-
-// public int16_t getBrowserWidth()
-void tst_LLEmbeddedBrowserWindow::getBrowserWidth()
-{
-#if 0
- //QFETCH(int16_t, getBrowserWidth);
-
- SubLLEmbeddedBrowserWindow window;
- window.setSize(0, 0);
-
- QCOMPARE(window.getBrowserWidth(), int16_t(0));
- QCOMPARE(window.getBrowserHeight(), int16_t(0));
- window.setSize(100, 100);
-
- QCOMPARE(window.getBrowserWidth(), int16_t(100));
- QCOMPARE(window.getBrowserHeight(), int16_t(100));
-#endif
- QSKIP("Test is same with setSize().", SkipAll);
-}
-
-//Q_DECLARE_METATYPE(std::string const)
-void tst_LLEmbeddedBrowserWindow::getClickLinkHref_data()
-{
-#if 0
- QTest::addColumn("getClickLinkHref");
- QTest::newRow("null") << std::string const();
-#endif
-}
-
-// public std::string const getClickLinkHref()
-void tst_LLEmbeddedBrowserWindow::getClickLinkHref()
-{
- //QFETCH(std::string const, getClickLinkHref);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.getClickLinkHref();
-}
-
-void tst_LLEmbeddedBrowserWindow::getClickLinkTarget_data()
-{
-#if 0
- QTest::addColumn("getClickLinkTarget");
- QTest::newRow("null") << std::string const();
-#endif
-}
-
-// public std::string const getClickLinkTarget()
-void tst_LLEmbeddedBrowserWindow::getClickLinkTarget()
-{
- //QFETCH(std::string const, getClickLinkTarget);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.getClickLinkTarget();
-}
-
-void tst_LLEmbeddedBrowserWindow::getCurrentUri_data()
-{
-#if 0
- QTest::addColumn("getCurrentUri");
- QTest::newRow("null") << std::string const();
-#endif
-}
-
-// public std::string const getCurrentUri()
-void tst_LLEmbeddedBrowserWindow::getCurrentUri()
-{
- //QFETCH(std::string const, getCurrentUri);
-
- SubLLEmbeddedBrowserWindow window;
- window.navigateTo(std::string("http://www.google.ca/"));
- QTRY_COMPARE(QString::fromStdString(window.getCurrentUri()), QString::fromStdString(std::string("http://www.google.ca/")));
-}
-
-void tst_LLEmbeddedBrowserWindow::getNoFollowScheme_data()
-{
-#if 0
- QTest::addColumn("getNoFollowScheme");
- QTest::newRow("FTP") << std::string("FTP");
-#endif
-}
-
-// public std::string getNoFollowScheme()
-void tst_LLEmbeddedBrowserWindow::getNoFollowScheme()
-{
- //QFETCH(std::string, getNoFollowScheme);
-
- SubLLEmbeddedBrowserWindow window;
- window.setNoFollowScheme("FTP://www.google.com");
-
- QCOMPARE(window.getNoFollowScheme(), std::string("FTP"));
-}
-
-//Q_DECLARE_METATYPE(unsigned char*)
-void tst_LLEmbeddedBrowserWindow::getPageBuffer_data()
-{
-#if 0
- QTest::addColumn("getPageBuffer");
- QTest::newRow("null") << unsigned char*();
-#endif
-}
-
-// public unsigned char* getPageBuffer()
-void tst_LLEmbeddedBrowserWindow::getPageBuffer()
-{
- //QFETCH(unsigned char*, getPageBuffer);
-
- SubLLEmbeddedBrowserWindow window;
- window.setSize(100,100);
- window.grabWindow(0, 0, 100, 100);
-
- QVERIFY(window.getPageBuffer() != NULL);
-}
-
-//Q_DECLARE_METATYPE(int16_t const)
-void tst_LLEmbeddedBrowserWindow::getPercentComplete_data()
-{
-#if 0
- QTest::addColumn("getPercentComplete");
- QTest::newRow("null") << int16_t const();
-#endif
-}
-
-// public int16_t const getPercentComplete()
-void tst_LLEmbeddedBrowserWindow::getPercentComplete()
-{
- //QFETCH(int16_t const, getPercentComplete);
- SubLLEmbeddedBrowserWindow window;
- window.navigateTo(std::string("http://www.google.com"));
- QTest::qWait(1000);
- QVERIFY(window.getPercentComplete() > 0);
-}
-
-void tst_LLEmbeddedBrowserWindow::getStatusMsg_data()
-{
-#if 0
- QTest::addColumn("getStatusMsg");
- QTest::newRow("null") << std::string const();
-#endif
-}
-
-// public std::string const getStatusMsg()
-void tst_LLEmbeddedBrowserWindow::getStatusMsg()
-{
- //QFETCH(std::string const, getStatusMsg);
-
- SubLLEmbeddedBrowserWindow window;
- window.navigateTo(std::string("http://www.google.com"));
- QTest::qWait(1000);
- window.navigateStop();
- window.navigateTo(std::string("http://www.yahoo.com"));
- // Seems status msg will always be null during navigating.
- //QTRY_VERIFY(QString::fromStdString(window.getStatusMsg())!= NULL);
- QSKIP("Status msg will always be null during navigating", SkipAll);
-}
-
-void tst_LLEmbeddedBrowserWindow::getWindowId_data()
-{
-#if 0
- QTest::addColumn("getWindowId");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
-#endif
-}
-
-// public int getWindowId()
-void tst_LLEmbeddedBrowserWindow::getWindowId()
-{
- //QFETCH(int, getWindowId);
-
- SubLLEmbeddedBrowserWindow window;
- window.setWindowId(0);
- QCOMPARE(window.getWindowId(), 0);
- window.setWindowId(100);
- QCOMPARE(window.getWindowId(), 100);
-}
-
-void tst_LLEmbeddedBrowserWindow::grabWindow_data()
-{
-#if 0
- QTest::addColumn("x");
- QTest::addColumn("y");
- QTest::addColumn("width");
- QTest::addColumn("height");
- QTest::addColumn("grabWindow");
- QTest::newRow("null") << 0 << 0 << 0 << 0 << 0;
-#endif
-}
-
-// public unsigned char* grabWindow(int x, int y, int width, int height)
-void tst_LLEmbeddedBrowserWindow::grabWindow()
-{
- QSKIP("Test is same with getPageBuffer().", SkipAll);
-}
-
-void tst_LLEmbeddedBrowserWindow::keyPress_data()
-{
- QTest::addColumn("key_code");
- QTest::newRow("null") << int16_t(0);
- QTest::newRow("valid") << int16_t(0x0E);
-}
-
-// public void keyPress(int16_t key_code)
-void tst_LLEmbeddedBrowserWindow::keyPress()
-{
- QFETCH(int16_t, key_code);
-
- SubLLEmbeddedBrowserWindow window;
- window.keyPress(key_code);
-}
-
-void tst_LLEmbeddedBrowserWindow::mouseDown_data()
-{
- QTest::addColumn("x");
- QTest::addColumn("y");
- QTest::newRow("0") << int16_t(0) << int16_t(0);
- QTest::newRow("bignumber") << int16_t(100000) << int16_t(100000);
- QTest::newRow("valid") << int16_t(100) << int16_t(100);
-}
-
-// public void mouseDown(int16_t x, int16_t y)
-void tst_LLEmbeddedBrowserWindow::mouseDown()
-{
- QFETCH(int16_t, x);
- QFETCH(int16_t, y);
-
- SubLLEmbeddedBrowserWindow window;
- window.mouseDown(x, y);
-}
-
-void tst_LLEmbeddedBrowserWindow::mouseLeftDoubleClick_data()
-{
- QTest::addColumn("x");
- QTest::addColumn("y");
- QTest::newRow("0") << int16_t(0) << int16_t(0);
- QTest::newRow("bignumber") << int16_t(100000) << int16_t(100000);
- QTest::newRow("valid") << int16_t(100) << int16_t(100);
-}
-
-// public void mouseLeftDoubleClick(int16_t x, int16_t y)
-void tst_LLEmbeddedBrowserWindow::mouseLeftDoubleClick()
-{
- QFETCH(int16_t, x);
- QFETCH(int16_t, y);
-
- SubLLEmbeddedBrowserWindow window;
- window.mouseLeftDoubleClick(x, y);
-}
-
-void tst_LLEmbeddedBrowserWindow::mouseMove_data()
-{
- QTest::addColumn("x");
- QTest::addColumn("y");
- QTest::newRow("0") << int16_t(0) << int16_t(0);
- QTest::newRow("bignumber") << int16_t(100000) << int16_t(100000);
- QTest::newRow("valid") << int16_t(100) << int16_t(100);
-}
-
-// public void mouseMove(int16_t x, int16_t y)
-void tst_LLEmbeddedBrowserWindow::mouseMove()
-{
- QFETCH(int16_t, x);
- QFETCH(int16_t, y);
-
- SubLLEmbeddedBrowserWindow window;
- window.mouseMove(x, y);
-}
-
-void tst_LLEmbeddedBrowserWindow::mouseUp_data()
-{
- QTest::addColumn("x");
- QTest::addColumn("y");
- QTest::newRow("0") << int16_t(0) << int16_t(0);
- QTest::newRow("bignumber") << int16_t(100000) << int16_t(100000);
- QTest::newRow("valid") << int16_t(100) << int16_t(100);
-}
-
-// public void mouseUp(int16_t x, int16_t y)
-void tst_LLEmbeddedBrowserWindow::mouseUp()
-{
- QFETCH(int16_t, x);
- QFETCH(int16_t, y);
-
- SubLLEmbeddedBrowserWindow window;
- window.mouseUp(x, y);
-}
-
-void tst_LLEmbeddedBrowserWindow::navigateBack_data()
-{
-#if 0
- QTest::addColumn("foo");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
-#endif
-}
-
-// public void navigateBack()
-void tst_LLEmbeddedBrowserWindow::navigateBack()
-{
- //QFETCH(int, foo);
-
- SubLLEmbeddedBrowserWindow window;
- window.navigateTo(std::string("http://www.google.ca/"));
- QTest::qWait(__TRY_TIMEOUT__);
- QCOMPARE(window.canNavigateForward(), false);
- window.navigateTo(std::string("http://www.yahoo.com/"));
- QTest::qWait(__TRY_TIMEOUT__);
- QCOMPARE(window.canNavigateBack(), true);
- window.navigateBack();
- QTRY_COMPARE(QString::fromStdString((window.getCurrentUri())), QString("http://www.google.ca/"));
- window.navigateBack();
- QTRY_COMPARE(QString::fromStdString((window.getCurrentUri())), QString("http://www.google.ca/"));
-}
-
-void tst_LLEmbeddedBrowserWindow::navigateForward_data()
-{
-#if 0
- QTest::addColumn("foo");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
-#endif
-}
-
-// public void navigateForward()
-void tst_LLEmbeddedBrowserWindow::navigateForward()
-{
- // QFETCH(int, foo);
- SubLLEmbeddedBrowserWindow window;
- window.navigateTo(std::string("http://www.google.ca/"));
- QTest::qWait(__TRY_TIMEOUT__);
- QCOMPARE(window.canNavigateForward(), false);
- window.navigateTo(std::string("http://www.yahoo.ca/"));
- QTest::qWait(__TRY_TIMEOUT__);
- QCOMPARE(window.canNavigateBack(), true);
- window.navigateBack();
- QTRY_COMPARE(QString::fromStdString((window.getCurrentUri())), QString("http://www.google.ca/"));
- window.navigateForward();
- QTRY_COMPARE(QString::fromStdString((window.getCurrentUri())), QString("http://ca.yahoo.com/"));
- window.navigateForward();
- QTRY_COMPARE(QString::fromStdString((window.getCurrentUri())), QString("http://ca.yahoo.com/"));
-}
-
-void tst_LLEmbeddedBrowserWindow::navigateReload_data()
-{
-#if 0
- QTest::addColumn("foo");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
-#endif
-}
-
-// public void navigateReload()
-void tst_LLEmbeddedBrowserWindow::navigateReload()
-{
- SubLLEmbeddedBrowserWindow window;
-
- window.navigateTo(std::string("http://www.google.ca/"));
- QTest::qWait(__TRY_TIMEOUT__);
- window.navigateReload();
- QTRY_COMPARE(QString::fromStdString((window.getCurrentUri())), QString("http://www.google.ca/"));
-}
-
-void tst_LLEmbeddedBrowserWindow::navigateStop_data()
-{
-#if 0
- QTest::addColumn("foo");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
-#endif
-}
-
-// public void navigateStop()
-void tst_LLEmbeddedBrowserWindow::navigateStop()
-{
- SubLLEmbeddedBrowserWindow window;
- window.navigateTo("www.google.com");
- window.navigateStop();
-}
-
-void tst_LLEmbeddedBrowserWindow::navigateTo_data()
-{
- QTest::addColumn("uri");
- QTest::addColumn("navigateTo");
- QTest::newRow("null") << std::string() << std::string();
- QTest::newRow("valid") << std::string("http://www.google.ca/") << std::string("http://www.google.ca/");
-}
-
-// public bool navigateTo(std::string const uri)
-void tst_LLEmbeddedBrowserWindow::navigateTo()
-{
- QSKIP("Test is same with navigateBack(), navigateForward().", SkipAll);
-}
-
-void tst_LLEmbeddedBrowserWindow::remObserver_data()
-{
-#if 0
- QTest::addColumn("observerCount");
- QTest::addColumn("remObserver");
- QTest::newRow("null") << 0 << false;
-#endif
-}
-
-// public bool remObserver(LLEmbeddedBrowserWindowObserver* observer)
-void tst_LLEmbeddedBrowserWindow::remObserver()
-{
-// QFETCH(int, observerCount);
-// QFETCH(bool, remObserver);
-
- SubLLEmbeddedBrowserWindow window;
- LLEmbeddedBrowserWindowObserver* observer = new LLEmbeddedBrowserWindowObserver();
- window.addObserver(observer);
- QCOMPARE(window.getObserverNumber(), 1);
- window.remObserver(observer);
- QCOMPARE(window.getObserverNumber(), 0);
-}
-
-void tst_LLEmbeddedBrowserWindow::scrollByLines_data()
-{
- QTest::addColumn("lines");
- QTest::newRow("null") << int16_t(0);
- QTest::addColumn("lines");
- QTest::newRow("100") << int16_t(100);
-}
-
-// public void scrollByLines(int16_t lines)
-void tst_LLEmbeddedBrowserWindow::scrollByLines()
-{
- QFETCH(int16_t, lines);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.scrollByLines(lines);
-}
-
-Q_DECLARE_METATYPE(uint8_t)
-void tst_LLEmbeddedBrowserWindow::setBackgroundColor_data()
-{
- QTest::addColumn("red");
- QTest::addColumn("green");
- QTest::addColumn("blue");
- QTest::newRow("black") << uint8_t(0) << uint8_t(0) << uint8_t(0);
- QTest::newRow("red") << uint8_t(255) << uint8_t(0) << uint8_t(0);
- QTest::newRow("green") << uint8_t(0) << uint8_t(255) << uint8_t(0);
- QTest::newRow("blue") << uint8_t(0) << uint8_t(0) << uint8_t(255);
-}
-
-// public void setBackgroundColor(uint8_t const red, uint8_t const green, uint8_t const blue)
-void tst_LLEmbeddedBrowserWindow::setBackgroundColor()
-{
- QFETCH(uint8_t, red);
- QFETCH(uint8_t, green);
- QFETCH(uint8_t, blue);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.setBackgroundColor(red, green, blue);
-}
-
-void tst_LLEmbeddedBrowserWindow::setCaretColor_data()
-{
- QTest::addColumn("red");
- QTest::addColumn("green");
- QTest::addColumn("blue");
- QTest::newRow("black") << uint8_t(0) << uint8_t(0) << uint8_t(0);
- QTest::newRow("red") << uint8_t(255) << uint8_t(0) << uint8_t(0);
- QTest::newRow("green") << uint8_t(0) << uint8_t(255) << uint8_t(0);
- QTest::newRow("blue") << uint8_t(0) << uint8_t(0) << uint8_t(255);
-}
-
-// public void setCaretColor(uint8_t const red, uint8_t const green, uint8_t const blue)
-void tst_LLEmbeddedBrowserWindow::setCaretColor()
-{
- QFETCH(uint8_t, red);
- QFETCH(uint8_t, green);
- QFETCH(uint8_t, blue);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.setCaretColor(red, green, blue);
-}
-
-void tst_LLEmbeddedBrowserWindow::setEnabled_data()
-{
- QTest::addColumn("enabledIn");
- QTest::newRow("true") << true;
- QTest::newRow("false") << false;
-}
-
-// public void setEnabled(bool enabledIn)
-void tst_LLEmbeddedBrowserWindow::setEnabled()
-{
- QFETCH(bool, enabledIn);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.setEnabled(enabledIn);
-}
-
-void tst_LLEmbeddedBrowserWindow::setNoFollowScheme_data()
-{
- QTest::addColumn("scheme");
- QTest::addColumn("result");
- QTest::newRow("null") << std::string() << std::string();
- QTest::newRow("valid") << std::string("ftp://www.google.com") << std::string("ftp");;
-}
-
-// public void setNoFollowScheme(std::string scheme)
-void tst_LLEmbeddedBrowserWindow::setNoFollowScheme()
-{
- QFETCH(std::string, scheme);
- QFETCH(std::string, result);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.setNoFollowScheme(scheme);
- QCOMPARE(window.getNoFollowScheme(), result);
-}
-
-void tst_LLEmbeddedBrowserWindow::setParent_data()
-{
-#if 0
- QTest::addColumn("parentCount");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
-#endif
-}
-
-// public void setParent(LLEmbeddedBrowser* parent)
-void tst_LLEmbeddedBrowserWindow::setParent()
-{
-#if 0
- QFETCH(int, parentCount);
-
- SubLLEmbeddedBrowserWindow window;
- LLEmbeddedBrowser* parent = new LLEmbeddedBrowser();
-
- window.setParent(parent);
-#endif
- QSKIP("Has been tested before.", SkipAll);
-}
-
-void tst_LLEmbeddedBrowserWindow::setSize_data()
-{
- QTest::addColumn("width");
- QTest::addColumn("height");
- QTest::addColumn("setSize");
- QTest::newRow("null") << int16_t(0) << int16_t(0) << true;
- QTest::newRow("valid") << int16_t(100) << int16_t(200) << true;
-}
-
-// public bool setSize(int16_t width, int16_t height)
-void tst_LLEmbeddedBrowserWindow::setSize()
-{
- QFETCH(int16_t, width);
- QFETCH(int16_t, height);
- QFETCH(bool, setSize);
-
- SubLLEmbeddedBrowserWindow window;
- QCOMPARE(window.setSize(width, height), setSize);
- window.grabWindow(0, 0, 800, 600);
-
- QCOMPARE(window.getBrowserWidth(), width);
- QCOMPARE(window.getBrowserHeight(), height);
- QCOMPARE(window.getBrowserRowSpan(), (int32_t)width * 4);
-}
-
-void tst_LLEmbeddedBrowserWindow::setWindowId_data()
-{
- QTest::addColumn("window_id");
- QTest::newRow("0") << 0;
- QTest::newRow("-1") << -1;
- QTest::newRow("100") << 100;
-}
-
-// public void setWindowId(int window_id)
-void tst_LLEmbeddedBrowserWindow::setWindowId()
-{
- QFETCH(int, window_id);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.setWindowId(window_id);
- QCOMPARE(window.getWindowId(), window_id);
-}
-
-Q_DECLARE_METATYPE(uint32_t)
-void tst_LLEmbeddedBrowserWindow::unicodeInput_data()
-{
- QTest::addColumn("unicode_char");
- QTest::newRow("null") << uint32_t();
- QTest::newRow("valid") << uint32_t(54);
-}
-
-// public void unicodeInput(uint32_t unicode_char)
-void tst_LLEmbeddedBrowserWindow::unicodeInput()
-{
- QFETCH(uint32_t, unicode_char);
-
- SubLLEmbeddedBrowserWindow window;
-
- window.unicodeInput(unicode_char);
-}
-
-QTEST_MAIN(tst_LLEmbeddedBrowserWindow)
-#include "tst_llembeddedbrowserwindow.moc"
-
diff --git a/indra/llqtwebkit/llembeddedbrowser.cpp b/indra/llqtwebkit/llembeddedbrowser.cpp
deleted file mode 100644
index f38019b9b..000000000
--- a/indra/llqtwebkit/llembeddedbrowser.cpp
+++ /dev/null
@@ -1,759 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "llembeddedbrowser.h"
-
-#include "llembeddedbrowser_p.h"
-#include "llembeddedbrowserwindow.h"
-#include "llnetworkaccessmanager.h"
-#include "llstyle.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-// singleton pattern - initialization
-LLEmbeddedBrowser* LLEmbeddedBrowser::sInstance = 0;
-
-LLEmbeddedBrowserPrivate::LLEmbeddedBrowserPrivate()
- : mErrorNum(0)
- , mNativeWindowHandle(0)
- , mNetworkAccessManager(0)
- , mApplication(0)
-#if QT_VERSION >= 0x040500
- , mDiskCache(0)
-#endif
- , mNetworkCookieJar(0)
- , mHostLanguage( "en" )
- , mIgnoreSSLCertErrors(false)
-{
- if (!qApp)
- {
- static int argc = 0;
- static const char* argv[] = {""};
- QApplication::setAttribute(Qt::AA_MacPluginApplication);
- QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
-
- mApplication = new QApplication(argc, (char **)argv);
- mApplication->addLibraryPath(qApp->applicationDirPath());
- }
- qApp->setStyle(new LLStyle());
- mNetworkAccessManager = new LLNetworkAccessManager(this);
-#if LL_DARWIN
- // HACK: Qt installs CarbonEvent handlers that steal events from our main event loop.
- // This uninstalls them.
- // It's not clear whether calling this internal function is really a good idea. It's probably not.
- // It does, however, seem to fix at least one problem ( https://jira.secondlife.com/browse/MOZ-12 ).
- extern void qt_release_app_proc_handler();
- qt_release_app_proc_handler();
-
- // This is defined and exported from qwidget_mac.mm.
- // Calling it with false should prevent qwidget from bringing its process to the foreground, such as when bringing up a popup menu.
- extern void qt_mac_set_raise_process(bool b);
- qt_mac_set_raise_process(false);
-#endif
-}
-
-LLEmbeddedBrowserPrivate::~LLEmbeddedBrowserPrivate()
-{
- delete mApplication;
- delete mNetworkAccessManager;
- delete mNetworkCookieJar;
-}
-
-
-
-LLEmbeddedBrowser::LLEmbeddedBrowser()
- : d(new LLEmbeddedBrowserPrivate)
- , mPluginsEnabled( false )
- , mJavaScriptEnabled( false )
- , mCookiesEnabled( false )
-{
-}
-
-LLEmbeddedBrowser::~LLEmbeddedBrowser()
-{
- if(d->mNetworkCookieJar)
- {
- d->mNetworkCookieJar->mBrowser = NULL;
- }
-
- delete d;
-}
-
-LLEmbeddedBrowser* LLEmbeddedBrowser::getInstance()
-{
- if (!sInstance)
- sInstance = new LLEmbeddedBrowser;
- return sInstance;
-}
-
-void LLEmbeddedBrowser::setLastError(int error_number)
-{
- d->mErrorNum = error_number;
-}
-
-void LLEmbeddedBrowser::clearLastError()
-{
- d->mErrorNum = 0x0000;
-}
-
-int LLEmbeddedBrowser::getLastError()
-{
- return d->mErrorNum;
-}
-
-std::string LLEmbeddedBrowser::getGREVersion()
-{
- // take the string directly from Qt
- return std::string(QT_VERSION_STR);
-}
-
-bool LLEmbeddedBrowser::init(std::string application_directory,
- std::string component_directory,
- std::string profile_directory,
- void* native_window_handle)
-{
- Q_UNUSED(application_directory);
- Q_UNUSED(component_directory);
- Q_UNUSED(native_window_handle);
- d->mStorageDirectory = QString::fromStdString(profile_directory);
- QWebSettings::setIconDatabasePath(d->mStorageDirectory);
- // The gif and jpeg libraries should be installed in component_directory/imageformats/
- QCoreApplication::addLibraryPath(QString::fromStdString(component_directory));
-
- // turn on plugins by default
- enablePlugins( true );
-
- // Until QtWebkit defaults to 16
- QWebSettings::globalSettings()->setFontSize(QWebSettings::DefaultFontSize, 16);
- QWebSettings::globalSettings()->setFontSize(QWebSettings::DefaultFixedFontSize, 16);
-
-
- QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
- QWebSettings::globalSettings()->setOfflineStoragePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation));
-
- // use default text encoding - not sure how this helps right now so commenting out until we
- // understand how to use it a little better.
- //QWebSettings::globalSettings()->setDefaultTextEncoding ( "" );
-
- return reset();
-}
-
-bool LLEmbeddedBrowser::reset()
-{
- foreach(LLEmbeddedBrowserWindow *window, d->windows)
- delete window;
- d->windows.clear();
- delete d->mNetworkAccessManager;
- d->mNetworkAccessManager = new LLNetworkAccessManager(d);
-#if QT_VERSION >= 0x040500
- d->mDiskCache = new QNetworkDiskCache(d->mNetworkAccessManager);
- d->mDiskCache->setCacheDirectory(d->mStorageDirectory + "/cache");
- if (QLatin1String(qVersion()) != QLatin1String("4.5.1"))
- d->mNetworkAccessManager->setCache(d->mDiskCache);
-#endif
- d->mNetworkCookieJar = new LLNetworkCookieJar(d->mNetworkAccessManager, this);
- d->mNetworkAccessManager->setCookieJar(d->mNetworkCookieJar);
- clearLastError();
- return true;
-}
-
-bool LLEmbeddedBrowser::clearCache()
-{
-#if QT_VERSION >= 0x040500
- if (d->mDiskCache)
- {
- d->mDiskCache->clear();
- return true;
- }
-#endif
- return false;
-}
-
-bool LLEmbeddedBrowser::enableProxy(bool enabled, std::string host_name, int port)
-{
- QNetworkProxy proxy;
- if (enabled)
- {
- proxy.setType(QNetworkProxy::HttpProxy);
- QString q_host_name = QString::fromStdString(host_name);
- proxy.setHostName(q_host_name);
- proxy.setPort(port);
- }
- d->mNetworkAccessManager->setProxy(proxy);
- return true;
-}
-
-bool LLEmbeddedBrowser::clearAllCookies()
-{
- if (!d->mNetworkCookieJar)
- return false;
- d->mNetworkCookieJar->clear();
- return true;
-}
-
-void LLEmbeddedBrowser::setCookies(const std::string &cookies)
-{
- if (d->mNetworkCookieJar)
- {
- d->mNetworkCookieJar->setCookiesFromRawForm(cookies);
- }
-}
-
-std::string LLEmbeddedBrowser::getAllCookies()
-{
- std::string result;
-
- if (d->mNetworkCookieJar)
- {
- result = d->mNetworkCookieJar->getAllCookiesInRawForm();
- }
-
- return result;
-}
-
-void LLEmbeddedBrowser::enableCookies( bool enabled )
-{
- mCookiesEnabled = enabled;
- enableCookiesTransient( mCookiesEnabled );
-}
-
-void LLEmbeddedBrowser::enableCookiesTransient( bool enabled )
-{
- if ( d->mNetworkCookieJar )
- {
- d->mNetworkCookieJar->mAllowCookies = enabled;
- }
-}
-
-bool LLEmbeddedBrowser::areCookiesEnabled()
-{
- return mCookiesEnabled;
-}
-
-void LLEmbeddedBrowser::enablePlugins( bool enabled )
-{
- mPluginsEnabled = enabled; // record state
- enablePluginsTransient( mPluginsEnabled );
-}
-
-void LLEmbeddedBrowser::enablePluginsTransient( bool enabled )
-{
- QWebSettings* default_settings = QWebSettings::globalSettings();
- default_settings->setAttribute( QWebSettings::PluginsEnabled, enabled );
-}
-
-bool LLEmbeddedBrowser::arePluginsEnabled()
-{
- return mPluginsEnabled;
-}
-
-void LLEmbeddedBrowser::enableJavaScript( bool enabled )
-{
- mJavaScriptEnabled = enabled; // record state
- enableJavaScriptTransient( mJavaScriptEnabled );
-}
-
-void LLEmbeddedBrowser::enableJavaScriptTransient( bool enabled )
-{
- QWebSettings* default_settings = QWebSettings::globalSettings();
- default_settings->setAttribute( QWebSettings::JavascriptEnabled, enabled );
- default_settings->setAttribute( QWebSettings::JavascriptCanOpenWindows, enabled );
-}
-
-bool LLEmbeddedBrowser::isJavaScriptEnabled()
-{
- return mJavaScriptEnabled;
-}
-
-bool LLEmbeddedBrowser::showWebInspector(bool show)
-{
- QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, show);
- foreach (LLEmbeddedBrowserWindow* window, d->windows)
- {
- window->showWebInspector(show);
- }
- return true;
-}
-
-/*
- Sets a string that should be addded to the user agent to identify the application
-*/
-void LLEmbeddedBrowser::setBrowserAgentId(std::string id)
-{
- QCoreApplication::setApplicationName(QString::fromStdString(id));
-}
-
-// updates value of 'hostLanguage' in JavaScript 'Navigator' obect that
-// embedded pages can query to see what language the host app is set to
-// IMPORTANT: call this before any windows are created - only gets passed
-// to LLWebPage when new window is created
-void LLEmbeddedBrowser::setHostLanguage( const std::string& host_language )
-{
- d->mHostLanguage = host_language;
-}
-
-LLEmbeddedBrowserWindow* LLEmbeddedBrowser::createBrowserWindow(int width, int height, const std::string target)
-{
- LLEmbeddedBrowserWindow *newWin = new LLEmbeddedBrowserWindow();
- if (newWin)
- {
- newWin->setSize(width, height);
- newWin->setParent(this);
- newWin->setHostLanguage(d->mHostLanguage);
- clearLastError();
- d->windows.append(newWin);
-
- if(!target.empty() && (target != "_blank"))
- {
- newWin->setTarget(target);
- }
-
- return newWin;
- }
- return 0;
-}
-
-bool LLEmbeddedBrowser::destroyBrowserWindow(LLEmbeddedBrowserWindow* browser_window)
-{
- // check if exists in windows list
- if (d->windows.removeOne(browser_window))
- {
- delete browser_window;
- clearLastError();
- return true;
- }
- return false;
-}
-
-int LLEmbeddedBrowser::getWindowCount() const
-{
- return d->windows.size();
-}
-
-void LLEmbeddedBrowser::pump(int max_milliseconds)
-{
-#if 0
- // This USED to be necessary on the mac, but with Qt 4.6 it seems to cause trouble loading some pages,
- // and using processEvents() seems to work properly now.
- // Leaving this here in case these issues ever come back.
-
- // On the Mac, calling processEvents hangs the viewer.
- // I'm not entirely sure this does everything we need, but it seems to work better, and allows things like animated gifs to work.
- qApp->sendPostedEvents();
- qApp->sendPostedEvents(0, QEvent::DeferredDelete);
-#else
- qApp->processEvents(QEventLoop::AllEvents, max_milliseconds);
-#endif
-}
-
-void LLEmbeddedBrowser::cookieChanged(const std::string &cookie, const std::string &url, bool dead)
-{
- foreach (LLEmbeddedBrowserWindow* window, d->windows)
- {
- window->cookieChanged(cookie, url, dead);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLEmbeddedBrowser::setCAFile(const std::string &ca_file)
-{
- bool result = false;
- //qDebug() << "LLEmbeddedBrowser::" << __FUNCTION__ << "attempting to read certs from file: " << QString::fromStdString(ca_file);
-
- // Extract the list of certificates from the specified file
- QList certs = QSslCertificate::fromPath(QString::fromStdString(ca_file));
-
- if(!certs.isEmpty())
- {
- //qDebug() << "LLEmbeddedBrowser::" << __FUNCTION__ << "certs read: " << certs;
-
- // Set the default CA cert for Qt's SSL implementation.
- QSslConfiguration config = QSslConfiguration::defaultConfiguration();
- config.setCaCertificates(certs);
- QSslConfiguration::setDefaultConfiguration(config);
- result = true;
- }
-
- return result;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLEmbeddedBrowser::addCAFile(const std::string &ca_file)
-{
- // Enabling this can help diagnose certificate verification issues.
- const bool cert_debugging_on = false;
-
- if ( cert_debugging_on )
- {
- //qDebug() << "\n\nLLEmbeddedBrowser::" << __FUNCTION__ << " ------------------- (Before add)";
- QSslCertificate cert;
- foreach(cert, QSslSocket::defaultCaCertificates())
- {
- //qDebug() << cert.issuerInfo(QSslCertificate::CommonName) << " --- " << cert.subjectInfo(QSslCertificate::CommonName);
- }
- }
-
- bool result = false;
- //qDebug() << "LLEmbeddedBrowser::" << __FUNCTION__ << "attempting to read certs from file: " << QString::fromStdString(ca_file);
-
- if ( cert_debugging_on )
- {
- //qDebug() << "\n\nLLEmbeddedBrowser::" << __FUNCTION__ << " ------------------- (From CA.pem)";
- QList certs = QSslCertificate::fromPath(QString::fromStdString(ca_file));
- QSslCertificate cert;
- foreach(cert, certs)
- {
- //qDebug() << cert.issuerInfo(QSslCertificate::CommonName) << " --- " << cert.subjectInfo(QSslCertificate::CommonName);
- }
- }
-
- result = QSslSocket::addDefaultCaCertificates(QString::fromStdString(ca_file));
-
- if ( cert_debugging_on )
- {
- //qDebug() << "\n\nLLEmbeddedBrowser::" << __FUNCTION__ << " ------------------- (After add)";
- QSslCertificate cert;
- foreach(cert, QSslSocket::defaultCaCertificates())
- {
- //qDebug() << cert.issuerInfo(QSslCertificate::CommonName) << " --- " << cert.subjectInfo(QSslCertificate::CommonName);
- }
- }
-
- return result;
-}
-
-void LLEmbeddedBrowser::setIgnoreSSLCertErrors(bool ignore)
-{
- d->mIgnoreSSLCertErrors = ignore;
-}
-
-bool LLEmbeddedBrowser::getIgnoreSSLCertErrors()
-{
- return d->mIgnoreSSLCertErrors;
-}
-
-const std::vector< std::string > LLEmbeddedBrowser::getInstalledCertsList()
-{
- std::vector< std::string > cert_list;
-
- QSslCertificate cert;
- foreach(cert, QSslSocket::defaultCaCertificates())
- {
- QString cert_info="";
-
- QString issuer_info="";
- issuer_info+="C=";
- issuer_info+=cert.issuerInfo(QSslCertificate::CountryName);
- issuer_info+=", ST=";
- issuer_info+=cert.issuerInfo(QSslCertificate::StateOrProvinceName);
- issuer_info+=", L=";
- issuer_info+=cert.issuerInfo(QSslCertificate::LocalityName);
- issuer_info+=", O=";
- issuer_info+=cert.issuerInfo(QSslCertificate::Organization);
- issuer_info+=", OU=";
- issuer_info+=cert.issuerInfo(QSslCertificate::OrganizationalUnitName);
- issuer_info+=", CN=";
- issuer_info+=cert.issuerInfo(QSslCertificate::CommonName);
- cert_info+=issuer_info;
- cert_info+="\n";
-
- QString subject_info="";
- subject_info+="C=";
- subject_info+=cert.subjectInfo(QSslCertificate::CountryName);
- subject_info+=", ST=";
- subject_info+=cert.subjectInfo(QSslCertificate::StateOrProvinceName);
- subject_info+=", L=";
- subject_info+=cert.subjectInfo(QSslCertificate::LocalityName);
- subject_info+=", O=";
- subject_info+=cert.subjectInfo(QSslCertificate::Organization);
- subject_info+=", OU=";
- subject_info+=cert.subjectInfo(QSslCertificate::OrganizationalUnitName);
- subject_info+=", CN=";
- subject_info+=cert.subjectInfo(QSslCertificate::CommonName);
- cert_info+=subject_info;
- cert_info+="\n";
-
- cert_info+="Not valid before: ";
- cert_info+=cert.effectiveDate().toString();
- cert_info+="\n";
- cert_info+="Not valid after: ";
- cert_info+=cert.expiryDate().toString();
- cert_info+="\n";
-
- cert_list.push_back( llToStdString(cert_info) );
- }
- return cert_list;
-}
-
-// Second Life viewer specific functions
-void LLEmbeddedBrowser::setSLObjectEnabled( bool enabled )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setSLObjectEnabled( enabled );
- }
-}
-
-void LLEmbeddedBrowser::setAgentLanguage( const std::string& agent_language )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setAgentLanguage( agent_language );
- }
-}
-
-void LLEmbeddedBrowser::setAgentRegion( const std::string& agent_region )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setAgentRegion( agent_region );
- }
-}
-
-void LLEmbeddedBrowser::setAgentLocation( double x, double y, double z )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setAgentLocation( x, y, z );
- }
-}
-
-void LLEmbeddedBrowser::setAgentGlobalLocation( double x, double y, double z )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setAgentGlobalLocation( x, y, z );
- }
-}
-
-void LLEmbeddedBrowser::setAgentOrientation( double angle )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setAgentOrientation( angle );
- }
-}
-
-void LLEmbeddedBrowser::setAgentMaturity( const std::string& agent_maturity )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setAgentMaturity( agent_maturity );
- }
-}
-
-void LLEmbeddedBrowser::emitLocation()
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->emitLocation();
- }
-}
-
-void LLEmbeddedBrowser::emitMaturity()
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->emitMaturity();
- }
-}
-
-void LLEmbeddedBrowser::emitLanguage()
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->emitLanguage();
- }
-}
-
-void LLEmbeddedBrowser::setPageZoomFactor( double factor )
-{
- foreach ( LLEmbeddedBrowserWindow* window, d->windows )
- {
- window->setPageZoomFactor( factor );
- }
-}
-
-void LLEmbeddedBrowser::qtMessageHandler(QtMsgType type, const char *msg)
-{
- std::string msg_type("");
- switch (type)
- {
- case QtDebugMsg:
- msg_type="Debug";
- break;
- case QtWarningMsg:
- msg_type="Warning";
- break;
- case QtCriticalMsg:
- msg_type="Critical";
- break;
- case QtFatalMsg:
- msg_type="Fatal";
- break;
- };
-
- foreach ( LLEmbeddedBrowserWindow* window, sInstance->d->windows )
- {
-
- window->onQtDebugMessage( std::string( msg ), msg_type);
- }
-}
-
-void LLEmbeddedBrowser::enableQtMessageHandler( bool enable )
-{
- if ( enable )
- {
- qInstallMsgHandler( qtMessageHandler );
- }
- else
- {
- // remove handler
- qInstallMsgHandler(0);
- };
-}
-
-LLNetworkCookieJar::LLNetworkCookieJar(QObject* parent, LLEmbeddedBrowser *browser)
- : NetworkCookieJar(parent)
- , mAllowCookies(true)
- , mBrowser(browser)
-{
-}
-
-LLNetworkCookieJar::~LLNetworkCookieJar()
-{
-}
-
-QList LLNetworkCookieJar::cookiesForUrl(const QUrl& url) const
-{
- if (!mAllowCookies)
- return QList();
- return NetworkCookieJar::cookiesForUrl(url);
-}
-
-bool LLNetworkCookieJar::setCookiesFromUrl(const QList &cookie_list, const QUrl& url)
-{
- if (!mAllowCookies)
- return false;
- return NetworkCookieJar::setCookiesFromUrl(cookie_list, url);
-}
-
-void LLNetworkCookieJar::onCookieSetFromURL(const QNetworkCookie &cookie, const QUrl &url, bool already_dead)
-{
-// qDebug() << "LLNetworkCookieJar::" << __FUNCTION__ << (already_dead?"set dead cookie":"set cookie ") << cookie;
-
- if(mBrowser)
- {
- QByteArray cookie_bytes = cookie.toRawForm(QNetworkCookie::Full);
- std::string cookie_string(cookie_bytes.data(), cookie_bytes.size());
- std::string url_string = llToStdString(url);
- mBrowser->cookieChanged(cookie_string, url_string, already_dead);
- }
-}
-
-void LLNetworkCookieJar::clear()
-{
- clearCookies();
-}
-
-void LLNetworkCookieJar::setCookiesFromRawForm(const std::string &cookie_string)
-{
- QByteArray cookie_bytearray(cookie_string.data(), cookie_string.size());
- QList cookie_list = QNetworkCookie::parseCookies(cookie_bytearray);
- setCookies(cookie_list);
-}
-
-std::string LLNetworkCookieJar::getAllCookiesInRawForm()
-{
- std::string result;
-
- QList cookie_list = allCookies();
-
- foreach (const QNetworkCookie &cookie, cookie_list)
- {
- QByteArray raw_form = cookie.toRawForm(QNetworkCookie::Full);
- result.append(raw_form.data(), raw_form.size());
- result.append("\n");
- }
-
- return result;
-}
-
-#include "llembeddedbrowserwindow_p.h"
-#include
-
-QGraphicsWebView *LLEmbeddedBrowserPrivate::findView(QNetworkReply *reply)
-{
- for (int i = 0; i < windows.count(); ++i)
- if (windows[i]->d->mView->url() == reply->url())
- return windows[i]->d->mView;
- return windows[0]->d->mView;
-}
-
-bool LLEmbeddedBrowserPrivate::authRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password)
-{
- bool result = false;
-
-// qDebug() << "LLEmbeddedBrowser::" << __FUNCTION__ << "requesting auth for url " << QString::fromStdString(in_url) << ", realm " << QString::fromStdString(in_realm);
-//
-// qDebug() << "LLEmbeddedBrowser::" << __FUNCTION__ << "window count is " << windows.count();
-
- if(windows.count() > 1)
- {
- qDebug() << "LLEmbeddedBrowser::" << __FUNCTION__ << "WARNING: authRequest called with more than one window, using the first one";
- }
-
- LLEmbeddedBrowserWindow* window = windows.first();
-
- if(window)
- {
- result = window->authRequest(in_url, in_realm, out_username, out_password);
- }
-
- return result;
-}
-
-bool LLEmbeddedBrowserPrivate::certError(const std::string &in_url, const std::string &in_msg)
-{
- bool result = false;
-
- LLEmbeddedBrowserWindow* window = windows.first();
- if(window)
- {
- result = window->certError(in_url, in_msg);
- }
-
- return result;
-}
diff --git a/indra/llqtwebkit/llembeddedbrowser.h b/indra/llqtwebkit/llembeddedbrowser.h
deleted file mode 100644
index c21a6b063..000000000
--- a/indra/llqtwebkit/llembeddedbrowser.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLEMBEDDEDBROWSER_H
-#define LLEMBEDDEDBROWSER_H
-
-#include
-#include
-#include
-#include
-
-class LLEmbeddedBrowserWindow;
-class LLEmbeddedBrowserWindowObserver;
-
-class LLEmbeddedBrowserPrivate;
-class LLEmbeddedBrowser
-{
- public:
- LLEmbeddedBrowser();
- virtual ~LLEmbeddedBrowser();
-
- static LLEmbeddedBrowser* getInstance();
-
- bool init(std::string application_directory,
- std::string component_directory,
- std::string profile_directory,
- void* native_window_handle);
- bool reset();
- bool clearCache();
- bool enableProxy(bool enabled, std::string host_name, int port);
- bool clearAllCookies();
- void setCookies(const std::string &cookies);
- std::string getAllCookies();
-
- void enableCookies( bool enabled );
- void enableCookiesTransient( bool enabled );
- bool areCookiesEnabled();
- void enablePlugins( bool enabled );
- void enablePluginsTransient( bool enabled );
- bool arePluginsEnabled();
- void enableJavaScript( bool enabled );
- void enableJavaScriptTransient( bool enabled );
- bool isJavaScriptEnabled();
-
- bool showWebInspector(bool show);
- std::string getGREVersion();
- void setBrowserAgentId(std::string id);
- void setHostLanguage( const std::string& host_language );
- LLEmbeddedBrowserWindow* createBrowserWindow(int width, int height, const std::string target);
- bool destroyBrowserWindow(LLEmbeddedBrowserWindow* browser_window);
- void setLastError(int error_number);
- void clearLastError();
- int getLastError();
- int getWindowCount() const;
- void pump(int max_milliseconds);
- void cookieChanged(const std::string &cookie, const std::string &url, bool dead);
- bool setCAFile(const std::string &ca_file);
- bool addCAFile(const std::string &ca_file);
- void setIgnoreSSLCertErrors(bool ignore);
- bool getIgnoreSSLCertErrors();
- const std::vector< std::string > getInstalledCertsList();
-
- void enableQtMessageHandler( bool enable );
-
- void setPageZoomFactor( double factor );
-
- // Second Life specific functions
- void setSLObjectEnabled( bool enabled );
- void setAgentLanguage( const std::string& agent_language );
- void setAgentRegion( const std::string& agent_region );
- void setAgentLocation( double x, double y, double z );
- void setAgentGlobalLocation( double x, double y, double z );
- void setAgentOrientation( double angle );
- void setAgentMaturity( const std::string& agent_maturity );
- void emitLocation();
- void emitMaturity();
- void emitLanguage();
-
- private:
- friend class LLEmbeddedBrowserWindow;
- friend class LLEmbeddedBrowserWindowPrivate;
- LLEmbeddedBrowserPrivate *d;
- bool mPluginsEnabled;
- bool mJavaScriptEnabled;
- bool mCookiesEnabled;
-
- static void qtMessageHandler(QtMsgType type, const char *msg);
-
- static LLEmbeddedBrowser* sInstance;
-};
-
-#endif // LLEMBEDDEDBROWSER_H
-
diff --git a/indra/llqtwebkit/llembeddedbrowser_p.h b/indra/llqtwebkit/llembeddedbrowser_p.h
deleted file mode 100644
index 9f9f9cd02..000000000
--- a/indra/llqtwebkit/llembeddedbrowser_p.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLEMBEDDEDBROWSER_P_H
-#define LLEMBEDDEDBROWSER_P_H
-
-#include
-#include
-#if QT_VERSION >= 0x040500
-#include
-#endif
-
-#include "networkcookiejar.h"
-#include "llembeddedbrowser.h"
-
-#include
-
-class LLEmbeddedBrowser;
-class LLNetworkCookieJar : public NetworkCookieJar
-{
-public:
- LLNetworkCookieJar(QObject *parent, LLEmbeddedBrowser *browser);
- ~LLNetworkCookieJar();
-
- QList cookiesForUrl(const QUrl& url) const;
- bool setCookiesFromUrl(const QList &cookie_list, const QUrl& url);
-
- /*virtual*/ void onCookieSetFromURL(const QNetworkCookie &cookie, const QUrl &url, bool already_dead);
-
- void clear();
-
- void setCookiesFromRawForm(const std::string &cookie_string);
- std::string getAllCookiesInRawForm();
-
- bool mAllowCookies;
- LLEmbeddedBrowser *mBrowser;
-};
-
-class LLNetworkAccessManager;
-class LLEmbeddedBrowserPrivate
-{
-public:
- LLEmbeddedBrowserPrivate();
- ~LLEmbeddedBrowserPrivate();
-
- bool authRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password);
- bool certError(const std::string &in_url, const std::string &in_msg);
-
- int mErrorNum;
- void* mNativeWindowHandle;
- LLNetworkAccessManager *mNetworkAccessManager;
- QApplication *mApplication;
-#if QT_VERSION >= 0x040500
- QNetworkDiskCache *mDiskCache;
-#endif
- LLNetworkCookieJar *mNetworkCookieJar;
-
- QGraphicsWebView *findView(QNetworkReply *);
-
- QString mStorageDirectory;
- QList windows;
-
- std::string mHostLanguage;
- bool mIgnoreSSLCertErrors;
-};
-
-#endif
-
diff --git a/indra/llqtwebkit/llembeddedbrowserwindow.cpp b/indra/llqtwebkit/llembeddedbrowserwindow.cpp
deleted file mode 100644
index c990d5567..000000000
--- a/indra/llqtwebkit/llembeddedbrowserwindow.cpp
+++ /dev/null
@@ -1,1136 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "llembeddedbrowserwindow.h"
-#include "llembeddedbrowserwindow_p.h"
-
-#include "llembeddedbrowser.h"
-#include "llembeddedbrowser_p.h"
-#include "llnetworkaccessmanager.h"
-
-#ifdef STATIC_QT
- #include
- // Enable gif and jpeg plugins, since web pages look pretty bleak without gifs or jpegs.
- // Qt 4.7 uses the system gif and jpeg libraries by default, so this is no longer necessary.
-// Q_IMPORT_PLUGIN(qgif)
-// Q_IMPORT_PLUGIN(qjpeg)
-#ifndef LL_LINUX
- // Qt also has its own translators for CJK text encodings we need to pull in.
- Q_IMPORT_PLUGIN(qcncodecs)
- Q_IMPORT_PLUGIN(qjpcodecs)
- Q_IMPORT_PLUGIN(qkrcodecs)
- Q_IMPORT_PLUGIN(qtwcodecs)
-#endif
-#endif
-
-//#define LLEMBEDDEDBROWSER_DEBUG 1
-
-#ifdef LLEMBEDDEDBROWSER_DEBUG
-#include
-#endif
-
-#if LL_DARWIN || defined(STATIC_QT)
- // Don't define qt_sendSpontaneousEvent on the mac -- it causes a multiply-defined symbol.
- extern bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event);
-#else
- #include
- bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event)
- {
- return QCoreApplication::sendSpontaneousEvent(receiver, event);
- }
-#endif
-
-LLEmbeddedBrowserWindow::LLEmbeddedBrowserWindow()
-{
- d = new LLEmbeddedBrowserWindowPrivate();
-
- d->mPage = new LLWebPage;
- d->mInspector = new QWebInspector;
- d->mInspector->setPage(d->mPage);
- d->mPage->window = this;
- d->mView = new LLWebView;
- d->mPage->webView = d->mView;
- d->mView->window = this;
- d->mView->setPage(d->mPage);
- d->mGraphicsScene = new LLGraphicsScene;
- d->mGraphicsScene->window = this;
- d->mGraphicsView = new QGraphicsView;
- d->mGraphicsScene->addItem(d->mView);
- d->mGraphicsView->setScene(d->mGraphicsScene);
- d->mGraphicsScene->setStickyFocus(true);
- d->mGraphicsView->viewport()->setParent(0);
-
- mEnableLoadingOverlay = false;
-}
-
-LLEmbeddedBrowserWindow::~LLEmbeddedBrowserWindow()
-{
- delete d;
-}
-
-void LLEmbeddedBrowserWindow::setParent(LLEmbeddedBrowser* parent)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << parent;
-#endif
- d->mParent = parent;
- if (parent)
- {
- d->mPage->setNetworkAccessManager(parent->d->mNetworkAccessManager);
- } else
- {
- d->mPage->setNetworkAccessManager(0);
- }
-}
-
-void LLEmbeddedBrowserWindow::showWebInspector(bool show)
-{
- if ( d )
- {
- if ( d->mInspector )
- {
- d->mInspector->setVisible( show );
- }
- }
-}
-
-void LLEmbeddedBrowserWindow::enableLoadingOverlay(bool enable)
-{
- mEnableLoadingOverlay = enable;
-}
-
-// change the background color that gets used between pages (usually white)
-void LLEmbeddedBrowserWindow::setBackgroundColor(const uint8_t red, const uint8_t green, const uint8_t blue)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << red << green << blue;
-#endif
- d->backgroundColor = QColor(red, green, blue);
-}
-
-//
-void LLEmbeddedBrowserWindow::setEnabled(bool enabled)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << enabled;
-#endif
- d->mEnabled = enabled;
-}
-
-// allow consumers of this class to observe events - add themselves as an observer
-bool LLEmbeddedBrowserWindow::addObserver(LLEmbeddedBrowserWindowObserver* observer)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << observer;
-#endif
- return d->mEventEmitter.addObserver(observer);
-}
-
-// allow consumers of this class to observe events - remove themselves as an observer
-bool LLEmbeddedBrowserWindow::remObserver(LLEmbeddedBrowserWindowObserver* observer)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << observer;
-#endif
- return d->mEventEmitter.remObserver(observer);
-}
-
-int LLEmbeddedBrowserWindow::getObserverNumber()
-{
- return d->mEventEmitter.getObserverNumber();
-}
-
-// used by observers of this class to get the current URI
-std::string& LLEmbeddedBrowserWindow::getCurrentUri()
-{
- d->mCurrentUri = llToStdString(d->mPage->mainFrame()->url());
- return d->mCurrentUri;
-}
-
-// utility method that is used by observers to retrieve data after an event
-int16_t LLEmbeddedBrowserWindow::getPercentComplete()
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return d->mPercentComplete;
-}
-
-// utility method that is used by observers to retrieve data after an event
-std::string& LLEmbeddedBrowserWindow::getStatusMsg()
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return d->mStatusText;
-}
-
-// render a page into memory and grab the window
-unsigned char* LLEmbeddedBrowserWindow::grabWindow(int x, int y, int width, int height)
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << x << y << width << height;
-#endif
- // only grab the window if it's enabled
- if (!d->mEnabled)
- return 0;
-
- if (!d->mDirty)
- return d->mPageBuffer;
-
- Q_ASSERT(d->mImage.size() == d->mView->size());
- if (!d->mPage->mainFrame()->url().isValid())
- {
- d->mImage.fill(d->backgroundColor.value());
- } else
- {
- QPainter painter(&d->mImage);
-
- QRectF r(x, y, width, height);
- QRect g(0, 0, d->mView->width(), d->mView->height());
- d->mGraphicsView->render(&painter, r, g);
-
- d->mDirty = false;
-
- const bool spinner_enabled = false;
- if ( spinner_enabled )
- {
- const time_t seconds_before_show_overlay = 1;
-
- if ( mEnableLoadingOverlay &&
- d->mShowLoadingOverlay &&
- time(NULL) - d->mTimeLoadStarted >= seconds_before_show_overlay )
- {
- painter.setRenderHint(QPainter::Antialiasing);;
-
- QBrush brush;
- QPen pen;
-
- int size = width;
- if ( height < width )
- size = height;
-
- const int symbol_translucency = 64; // 0=fully trans, 255=opaque
- const int symbol_proportion_of_sceen = 8; // (1/8)
- const int symbol_diameter = size/(symbol_proportion_of_sceen);
- const int symbol_start_line = symbol_diameter*2/3;
- const int symbol_end_line = symbol_diameter;
- const int symbol_num_segments = 20;
- const int symbol_line_width = size/60;
- if ( size < 4 ) size = 4;
-
- QColor background_color(QColor(128,128,128,symbol_translucency));
- brush.setColor(background_color);
- brush.setStyle(Qt::SolidPattern);
- pen.setColor(background_color);
- painter.setPen(pen);
- painter.setBrush(brush);
- painter.drawRect(0,0,width, height);
-
- painter.translate(QPoint(width/2, height/2));
-
- static int offset=0;
- painter.rotate(((qreal)(offset++%(symbol_num_segments))/(qreal)symbol_num_segments)*360.0f);
-
- for ( int count=0; countmDirty = true; // force dirty so updates happen frequently during load
- }
- }
-
- painter.end();
- if (d->mFlipBitmap)
- {
- d->mImage = d->mImage.mirrored();
- }
- d->mImage = d->mImage.rgbSwapped();
- }
-
- d->mPageBuffer = d->mImage.bits();
-
- return d->mPageBuffer;
-}
-
-// return the buffer that contains the rendered page
-unsigned char* LLEmbeddedBrowserWindow::getPageBuffer()
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return d->mPageBuffer;
-}
-
-int16_t LLEmbeddedBrowserWindow::getBrowserWidth()
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return d->mImage.width();
-}
-
-int16_t LLEmbeddedBrowserWindow::getBrowserHeight()
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return d->mImage.height();
-}
-
-int16_t LLEmbeddedBrowserWindow::getBrowserDepth()
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return 4;
-}
-
-int32_t LLEmbeddedBrowserWindow::getBrowserRowSpan()
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return 4 * getBrowserWidth();
-}
-
-bool LLEmbeddedBrowserWindow::navigateTo(const std::string uri)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << QString::fromStdString(uri);
-#endif
- QUrl url = QUrl::fromUserInput(QString::fromStdString(uri));
-
- d->mPage->triggerAction(QWebPage::Stop);
- d->mPage->mainFrame()->setUrl(url);
- d->mPage->mainFrame()->load(url);
- return true;
-}
-
-bool LLEmbeddedBrowserWindow::userAction(LLQtWebKit::EUserAction action)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << action;
-#endif
- bool result = true;
-
- switch(action)
- {
- case LLQtWebKit::UA_EDIT_CUT:
- d->mPage->triggerAction(QWebPage::Cut);
- break;
- case LLQtWebKit::UA_EDIT_COPY:
- d->mPage->triggerAction(QWebPage::Copy);
- break;
- case LLQtWebKit::UA_EDIT_PASTE:
- d->mPage->triggerAction(QWebPage::Paste);
- break;
- case LLQtWebKit::UA_NAVIGATE_STOP:
- d->mPage->triggerAction(QWebPage::Stop);
- break;
- case LLQtWebKit::UA_NAVIGATE_BACK:
- d->mPage->triggerAction(QWebPage::Back);
- break;
- case LLQtWebKit::UA_NAVIGATE_FORWARD:
- d->mPage->triggerAction(QWebPage::Forward);
- break;
- case LLQtWebKit::UA_NAVIGATE_RELOAD:
- d->mPage->triggerAction(QWebPage::ReloadAndBypassCache);
- break;
- default:
- result = false;
- break;
- }
-
- return result;
-}
-
-bool LLEmbeddedBrowserWindow::userActionIsEnabled(LLQtWebKit::EUserAction action)
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << action;
-#endif
-
- bool result;
-
- switch(action)
- {
- case LLQtWebKit::UA_EDIT_CUT:
- result = d->mPage->action(QWebPage::Cut)->isEnabled();
- break;
- case LLQtWebKit::UA_EDIT_COPY:
- result = d->mPage->action(QWebPage::Copy)->isEnabled();
- break;
- case LLQtWebKit::UA_EDIT_PASTE:
- result = d->mPage->action(QWebPage::Paste)->isEnabled();
- break;
- case LLQtWebKit::UA_NAVIGATE_STOP:
- result = true;
- break;
- case LLQtWebKit::UA_NAVIGATE_BACK:
- result = d->mPage->history()->canGoBack();
- break;
- case LLQtWebKit::UA_NAVIGATE_FORWARD:
- result = d->mPage->history()->canGoForward();
- break;
- case LLQtWebKit::UA_NAVIGATE_RELOAD:
- result = true;
- break;
- default:
- result = false;
- break;
- }
- return result;
-}
-
-// set the size of the browser window
-bool LLEmbeddedBrowserWindow::setSize(int16_t width, int16_t height)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << width << height;
-#endif
- d->mPageBuffer = NULL;
- d->mImage = QImage(QSize(width, height), QImage::Format_RGB32);
- d->mGraphicsView->resize(width, height);
- d->mView->resize(width, height);
- d->mImage.fill(d->backgroundColor.rgb());
- return true;
-}
-
-bool LLEmbeddedBrowserWindow::flipWindow(bool flip)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << flip;
-#endif
- d->mFlipBitmap = flip;
- return true;
-}
-
-static Qt::KeyboardModifiers convert_modifiers(LLQtWebKit::EKeyboardModifier modifiers)
-{
- Qt::KeyboardModifiers result = Qt::NoModifier;
-
- if(modifiers & LLQtWebKit::KM_MODIFIER_SHIFT)
- result |= Qt::ShiftModifier;
-
- if(modifiers & LLQtWebKit::KM_MODIFIER_CONTROL)
- result |= Qt::ControlModifier;
-
- if(modifiers & LLQtWebKit::KM_MODIFIER_ALT)
- result |= Qt::AltModifier;
-
- if(modifiers & LLQtWebKit::KM_MODIFIER_META)
- result |= Qt::MetaModifier;
-
- return result;
-}
-
-static Qt::MouseButton qt_button_from_button_number(int button)
-{
- Qt::MouseButton result;
-
- switch(button)
- {
- default: result = Qt::NoButton; break;
- case 0: result = Qt::LeftButton; break;
- case 1: result = Qt::RightButton; break;
- case 2: result = Qt::MidButton; break;
- case 3: result = Qt::XButton1; break;
- case 4: result = Qt::XButton2; break;
- }
-
- return result;
-}
-
-static QEvent::Type event_from_mouse_event(LLQtWebKit::EMouseEvent mouse_event)
-{
- QEvent::Type result;
-
- switch(mouse_event)
- {
- default:
- result = QEvent::None;
- break;
-
- case LLQtWebKit::ME_MOUSE_MOVE:
- result = QEvent::MouseMove;
- break;
-
- case LLQtWebKit::ME_MOUSE_DOWN:
- result = QEvent::MouseButtonPress;
- break;
-
- case LLQtWebKit::ME_MOUSE_UP:
- result = QEvent::MouseButtonRelease;
- break;
-
- case LLQtWebKit::ME_MOUSE_DOUBLE_CLICK:
- result = QEvent::MouseButtonDblClick;
- break;
- }
-
- return result;
-}
-
-static QEvent::Type event_from_keyboard_event(LLQtWebKit::EKeyEvent keyboard_event)
-{
- QEvent::Type result;
-
- switch(keyboard_event)
- {
- default:
- result = QEvent::None;
- break;
-
- case LLQtWebKit::KE_KEY_DOWN:
- case LLQtWebKit::KE_KEY_REPEAT:
- result = QEvent::KeyPress;
- break;
-
- case LLQtWebKit::KE_KEY_UP:
- result = QEvent::KeyRelease;
- break;
- }
-
- return result;
-}
-
-void LLEmbeddedBrowserWindow::mouseEvent(LLQtWebKit::EMouseEvent mouse_event, int16_t button, int16_t x, int16_t y, LLQtWebKit::EKeyboardModifier modifiers)
-{
-#if LLEMBEDDEDBROWSER_DEBUG > 10
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << x << y;
-#endif
-
- QEvent::Type type = event_from_mouse_event(mouse_event);
- Qt::MouseButton qt_button = qt_button_from_button_number(button);
- Qt::KeyboardModifiers qt_modifiers = convert_modifiers(modifiers);
-
- if(type == QEvent::MouseMove)
- {
- // Mouse move events should always use "no button".
- qt_button = Qt::NoButton;
- }
-
- // FIXME: should the current button state be updated before or after constructing the event?
- switch(type)
- {
- case QEvent::MouseButtonPress:
- case QEvent::MouseButtonDblClick:
- d->mCurrentMouseButtonState |= qt_button;
- break;
-
- case QEvent::MouseButtonRelease:
- d->mCurrentMouseButtonState &= ~qt_button;
- break;
-
- default:
- break;
- }
-
- QMouseEvent event(type, QPoint(x, y), qt_button, d->mCurrentMouseButtonState, qt_modifiers);
-
- qt_sendSpontaneousEvent(d->mGraphicsView->viewport(), &event);
-}
-
-void LLEmbeddedBrowserWindow::scrollWheelEvent(int16_t x, int16_t y, int16_t scroll_x, int16_t scroll_y, LLQtWebKit::EKeyboardModifier modifiers)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << x << y;
-#endif
-
- Qt::KeyboardModifiers qt_modifiers = convert_modifiers(modifiers);
-
- if(scroll_y != 0)
- {
- QWheelEvent event(QPoint(x, y), scroll_y, d->mCurrentMouseButtonState, qt_modifiers, Qt::Vertical);
- qApp->sendEvent(d->mGraphicsView->viewport(), &event);
- }
-
- if(scroll_x != 0)
- {
- QWheelEvent event(QPoint(x, y), scroll_x, d->mCurrentMouseButtonState, qt_modifiers, Qt::Horizontal);
- qApp->sendEvent(d->mGraphicsView->viewport(), &event);
- }
-}
-
-
-// utility methods to set an error message so something else can look at it
-void LLEmbeddedBrowserWindow::scrollByLines(int16_t lines)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << lines;
-#endif
- int currentScrollValue = d->mPage->mainFrame()->scrollBarValue(Qt::Vertical);
- d->mPage->mainFrame()->setScrollBarValue(Qt::Vertical, currentScrollValue + lines);
-}
-
-// Send a keyboard event with native event data.
-void LLEmbeddedBrowserWindow::keyboardEvent(
- LLQtWebKit::EKeyEvent key_event,
- uint32_t key_code,
- const char *utf8_text,
- LLQtWebKit::EKeyboardModifier modifiers,
- uint32_t native_scan_code,
- uint32_t native_virtual_key,
- uint32_t native_modifiers)
-{
- QEvent::Type type = event_from_keyboard_event(key_event);
- Qt::KeyboardModifiers qt_modifiers = convert_modifiers(modifiers);
- bool auto_repeat = (key_event == LLQtWebKit::KE_KEY_REPEAT);
- QString text = QString::fromUtf8(utf8_text);
-
- Qt::Key key = Qt::Key_unknown;
-
- switch (key_code)
- {
- case LLQtWebKit::KEY_RETURN: key = Qt::Key_Return; break;
- case LLQtWebKit::KEY_LEFT: key = Qt::Key_Left; break;
- case LLQtWebKit::KEY_RIGHT: key = Qt::Key_Right; break;
- case LLQtWebKit::KEY_UP: key = Qt::Key_Up; break;
- case LLQtWebKit::KEY_DOWN: key = Qt::Key_Down; break;
- case LLQtWebKit::KEY_ESCAPE: key = Qt::Key_Escape; break;
- case LLQtWebKit::KEY_BACKSPACE: key = Qt::Key_Backspace; break;
- case LLQtWebKit::KEY_DELETE: key = Qt::Key_Delete; break;
- case LLQtWebKit::KEY_SHIFT: key = Qt::Key_Shift; break;
- case LLQtWebKit::KEY_CONTROL: key = Qt::Key_Control; break;
- case LLQtWebKit::KEY_ALT: key = Qt::Key_Alt; break;
- case LLQtWebKit::KEY_HOME: key = Qt::Key_Home; break;
- case LLQtWebKit::KEY_END: key = Qt::Key_End; break;
- case LLQtWebKit::KEY_PAGE_UP: key = Qt::Key_PageUp; break;
- case LLQtWebKit::KEY_PAGE_DOWN: key = Qt::Key_PageDown; break;
- case LLQtWebKit::KEY_HYPHEN: key = Qt::Key_hyphen; break;
- case LLQtWebKit::KEY_EQUALS: key = Qt::Key_Equal; break;
- case LLQtWebKit::KEY_INSERT: key = Qt::Key_Insert; break;
- case LLQtWebKit::KEY_CAPSLOCK: key = Qt::Key_CapsLock; break;
- case LLQtWebKit::KEY_TAB: key = Qt::Key_Tab; break;
- case LLQtWebKit::KEY_ADD: key = Qt::Key_Plus; break;
- case LLQtWebKit::KEY_SUBTRACT: key = Qt::Key_Minus; break;
- case LLQtWebKit::KEY_MULTIPLY: key = Qt::Key_Asterisk; break;
- case LLQtWebKit::KEY_DIVIDE: key = Qt::Key_Slash; break;
- case LLQtWebKit::KEY_F1: key = Qt::Key_F1; break;
- case LLQtWebKit::KEY_F2: key = Qt::Key_F2; break;
- case LLQtWebKit::KEY_F3: key = Qt::Key_F3; break;
- case LLQtWebKit::KEY_F4: key = Qt::Key_F4; break;
- case LLQtWebKit::KEY_F5: key = Qt::Key_F5; break;
- case LLQtWebKit::KEY_F6: key = Qt::Key_F6; break;
- case LLQtWebKit::KEY_F7: key = Qt::Key_F7; break;
- case LLQtWebKit::KEY_F8: key = Qt::Key_F8; break;
- case LLQtWebKit::KEY_F9: key = Qt::Key_F9; break;
- case LLQtWebKit::KEY_F10: key = Qt::Key_F10; break;
- case LLQtWebKit::KEY_F11: key = Qt::Key_F11; break;
- case LLQtWebKit::KEY_F12: key = Qt::Key_F12; break;
-
- case LLQtWebKit::KEY_PAD_UP: key = Qt::Key_Up; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_DOWN: key = Qt::Key_Down; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_LEFT: key = Qt::Key_Left; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_RIGHT: key = Qt::Key_Right; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_HOME: key = Qt::Key_Home; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_END: key = Qt::Key_End; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_PGUP: key = Qt::Key_PageUp; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_PGDN: key = Qt::Key_PageDown; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_CENTER: key = Qt::Key_5; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_INS: key = Qt::Key_Insert; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_DEL: key = Qt::Key_Delete; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_RETURN: key = Qt::Key_Enter; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_ADD: key = Qt::Key_Plus; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_SUBTRACT: key = Qt::Key_Minus; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_MULTIPLY: key = Qt::Key_Asterisk; qt_modifiers |= Qt::KeypadModifier; break;
- case LLQtWebKit::KEY_PAD_DIVIDE: key = Qt::Key_Slash; qt_modifiers |= Qt::KeypadModifier; break;
-
- case LLQtWebKit::KEY_NONE: key = Qt::Key_unknown; break;
-
- default:
- key = (Qt::Key)toupper(key_code);
- break;
- }
-
-
- QKeyEvent *event =
- QKeyEvent::createExtendedKeyEvent(
- type,
- key,
- qt_modifiers,
- native_scan_code,
- native_virtual_key,
- native_modifiers,
- text,
- auto_repeat,
- text.count());
-
- qApp->sendEvent(d->mGraphicsScene, event);
-
- delete event;
-}
-
-
-// give focus to the browser so that input keyboard events work
-void LLEmbeddedBrowserWindow::focusBrowser(bool focus_browser)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << focus_browser;
-#endif
- QEvent ev(QEvent::WindowActivate);
- qApp->sendEvent(d->mGraphicsScene, &ev);
-
- QEvent ev2(QEvent::ActivationChange);
- qApp->sendEvent(d->mGraphicsScene, &ev2);
-
- QFocusEvent event(focus_browser ? QEvent::FocusIn : QEvent::FocusOut, Qt::ActiveWindowFocusReason);
- qApp->sendEvent(d->mPage, &event);
-}
-
-void LLEmbeddedBrowserWindow::setWindowId(int window_id)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << window_id;
-#endif
- d->mWindowId = window_id;
-}
-
-int LLEmbeddedBrowserWindow::getWindowId()
-{
- return d->mWindowId;
-}
-
-void LLEmbeddedBrowserWindow::proxyWindowOpened(const std::string target, const std::string uuid)
-{
- LLWebPageOpenShim *shim = findShim(uuid);
- if(!shim)
- {
- // We don't already have a shim with this uuid -- create one.
- shim = new LLWebPageOpenShim(this, d->mPage);
- d->mProxyPages.push_back(shim);
-
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow::proxyWindowOpened: page list size is " << d->mProxyPages.size();
-#endif
- }
-
- shim->setProxy(target, uuid);
-}
-
-void LLEmbeddedBrowserWindow::proxyWindowClosed(const std::string uuid)
-{
- LLWebPageOpenShim *shim = findShim(uuid);
- if(shim)
- {
- deleteShim(shim);
- }
-}
-
-std::string LLEmbeddedBrowserWindow::evaluateJavaScript(std::string script)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << QString::fromStdString(script);
-#endif
- QString q_script = QString::fromStdString(script);
- QString result = d->mPage->mainFrame()->evaluateJavaScript(q_script).toString();
- return llToStdString(result);
-}
-
-void LLEmbeddedBrowserWindow::setHostLanguage(const std::string host_language)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << QString::fromStdString(host_language);
-#endif
- if ( d )
- if ( d->mPage )
- d->mPage->setHostLanguage( host_language );
-}
-
-void LLEmbeddedBrowserWindow::navigateErrorPage( int http_status_code )
-{
- LLEmbeddedBrowserWindowEvent event(getWindowId());
- event.setIntValue( http_status_code );
-
- d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onNavigateErrorPage, event);
-}
-
-void LLEmbeddedBrowserWindow::setNoFollowScheme(std::string scheme)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__ << QString::fromStdString(scheme);
-#endif
- d->mNoFollowScheme = QString::fromStdString(scheme);
- // The scheme part of the url is what is before '://'
- d->mNoFollowScheme = d->mNoFollowScheme.mid(0, d->mNoFollowScheme.indexOf("://"));
-}
-
-std::string LLEmbeddedBrowserWindow::getNoFollowScheme()
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow" << __FUNCTION__;
-#endif
- return llToStdString(d->mNoFollowScheme);
-}
-
-void LLEmbeddedBrowserWindow::prependHistoryUrl(std::string url)
-{
-#ifdef WEBHISTORYPATCH
- // *HACK: we only have a URL here, we set a "" title and "current time" as
- // last visited time.
- d->mPage->history()->prependItem(QString::fromStdString(url),
- QString::fromAscii(""),
- QDateTime::currentDateTime());
-#else
- Q_UNUSED(url);
-#endif
-}
-
-void LLEmbeddedBrowserWindow::clearHistory()
-{
- d->mPage->history()->clear();
-}
-
-std::string LLEmbeddedBrowserWindow::dumpHistory()
-{
- std::ostringstream oss;
- const QList &items = d->mPage->history()->backItems(9999);
- oss << "cur: " << d->mPage->history()->currentItemIndex() << ":"
- << d->mPage->history()->currentItem().url().toString().toAscii().data() << "\n";
- for (int i=0; i< items.count(); i++) {
- oss << items[i].url().toString().toAscii().data() << "\n";
- }
- return oss.str();
-}
-
-void LLEmbeddedBrowserWindow::cookieChanged(const std::string &cookie, const std::string &url, bool dead)
-{
- LLEmbeddedBrowserWindowEvent event(getWindowId());
- event.setEventUri(url);
- event.setStringValue(cookie);
- event.setIntValue((int)dead);
-
- d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onCookieChanged, event);
-}
-
-QWebPage *LLEmbeddedBrowserWindow::createWindow()
-{
- QWebPage *result = NULL;
- if(d->mOpeningSelf)
- {
- // Special case: opening self to set target, etc.
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow::createWindow: opening self to set target name. ";
-#endif
- result = d->mPage;
- d->mOpeningSelf = false;
- }
- else
- {
- LLWebPageOpenShim *shim = new LLWebPageOpenShim(this, d->mPage);
- d->mProxyPages.push_back(shim);
- result = shim;
-
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow::createWindow: page list size is " << d->mProxyPages.size();
-#endif
- }
-
- return result;
-}
-
-LLWebPageOpenShim *LLEmbeddedBrowserWindow::findShim(const std::string &uuid)
-{
- LLEmbeddedBrowserWindowPrivate::ProxyList::iterator iter;
- for(iter = d->mProxyPages.begin(); iter != d->mProxyPages.end(); iter++)
- {
- if((*iter)->matchesUUID(uuid))
- return *iter;
- }
-
- return NULL;
-}
-
-void LLEmbeddedBrowserWindow::deleteShim(LLWebPageOpenShim *shim)
-{
- shim->window = 0;
- shim->deleteLater();
- d->mProxyPages.remove(shim);
-
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow::deleteShim: page list size is " << d->mProxyPages.size();
-#endif
-}
-
-void LLEmbeddedBrowserWindow::setTarget(const std::string &target)
-{
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow::setTarget: setting target to " << QString::fromStdString(target);
-#endif
-
- d->mOpeningSelf = true;
-
- std::stringstream s;
- s << "window.open(\"\",\"" << target << "\");";
-
- evaluateJavaScript(s.str());
-}
-
-std::string LLEmbeddedBrowserWindow::requestFilePicker()
-{
- std::string filename_chosen;
-
- LLEmbeddedBrowserWindowEvent event(getWindowId());
- event.setEventUri(getCurrentUri());
- event.setStringValue("*.png;*.jpg");
-
- // If there's at least one observer registered, call it with the event.
- LLEmbeddedBrowserWindowPrivate::Emitter::iterator i = d->mEventEmitter.begin();
- if(i != d->mEventEmitter.end())
- {
- filename_chosen = (*i)->onRequestFilePicker(event);
- }
-
- return filename_chosen;
-}
-
-bool LLEmbeddedBrowserWindow::authRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password)
-{
- bool result = false;
-
-#ifdef LLEMBEDDEDBROWSER_DEBUG
- qDebug() << "LLEmbeddedBrowserWindow::authRequest: requesting auth for url " << QString::fromStdString(in_url) << ", realm " << QString::fromStdString(in_realm);
-#endif
-
- // If there's at least one observer registered, send it the auth request.
- LLEmbeddedBrowserWindowPrivate::Emitter::iterator i = d->mEventEmitter.begin();
- if(i != d->mEventEmitter.end())
- {
- result = (*i)->onAuthRequest(in_url, in_realm, out_username, out_password);
- }
-
- return result;
-}
-
-bool LLEmbeddedBrowserWindow::certError(const std::string &in_url, const std::string &in_msg)
-{
- bool result = false;
-
- // If there's at least one observer registered, send it the auth request.
- LLEmbeddedBrowserWindowPrivate::Emitter::iterator i = d->mEventEmitter.begin();
- if(i != d->mEventEmitter.end())
- {
- result = (*i)->onCertError(in_url, in_msg);
- }
-
- return result;
-}
-
-void LLEmbeddedBrowserWindow::onQtDebugMessage( const std::string& msg, const std::string& msg_type)
-{
- // If there's at least one observer registered, send it the auth request.
- LLEmbeddedBrowserWindowPrivate::Emitter::iterator i = d->mEventEmitter.begin();
- if(i != d->mEventEmitter.end())
- {
- (*i)->onQtDebugMessage(msg, msg_type);
- }
-}
-
-void LLEmbeddedBrowserWindow::setWhiteListRegex( const std::string& regex )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setWhiteListRegex( regex );
-}
-
-// Second Life viewer specific functions
-void LLEmbeddedBrowserWindow::setSLObjectEnabled( bool enabled )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setSLObjectEnabled( enabled );
-}
-
-void LLEmbeddedBrowserWindow::setAgentLanguage( const std::string& agent_language )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setAgentLanguage( agent_language );
-}
-
-void LLEmbeddedBrowserWindow::setAgentRegion( const std::string& agent_region )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setAgentRegion( agent_region );
-}
-
-void LLEmbeddedBrowserWindow::setAgentLocation( double x, double y, double z )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setAgentLocation( x, y, z );
-}
-
-void LLEmbeddedBrowserWindow::setAgentGlobalLocation( double x, double y, double z )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setAgentGlobalLocation( x, y, z );
-}
-
-void LLEmbeddedBrowserWindow::setAgentOrientation( double angle )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setAgentOrientation( angle );
-}
-
-void LLEmbeddedBrowserWindow::setAgentMaturity( const std::string& agent_maturity )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setAgentMaturity( agent_maturity );
-}
-
-void LLEmbeddedBrowserWindow::emitLocation()
-{
- if ( d )
- if ( d->mPage )
- d->mPage->emitLocation();
-}
-
-void LLEmbeddedBrowserWindow::emitMaturity()
-{
- if ( d )
- if ( d->mPage )
- d->mPage->emitMaturity();
-}
-
-void LLEmbeddedBrowserWindow::emitLanguage()
-{
- if ( d )
- if ( d->mPage )
- d->mPage->emitLanguage();
-}
-
-void LLEmbeddedBrowserWindow::setPageZoomFactor( double factor )
-{
- if ( d )
- if ( d->mPage )
- d->mPage->setPageZoomFactor( factor );
-}
-
-LLGraphicsScene::LLGraphicsScene()
- : QGraphicsScene()
- , window(0)
-{
- connect(this, SIGNAL(changed(const QList &)),
- this, SLOT(repaintRequestedSlot(const QList &)));
-}
-
-void LLGraphicsScene::repaintRequestedSlot(const QList ®ions)
-{
- if (!window)
- return;
- window->d->mDirty = true;
- for (int i = 0; i < regions.count(); ++i)
- {
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- event.setRectValue(regions[i].x(), regions[i].y(), regions[i].width(), regions[i].height());
-
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onPageChanged, event);
- }
-}
-
-#include
-#include
-LLWebView::LLWebView(QGraphicsItem *parent)
- : QGraphicsWebView(parent)
- , window(0)
-{
-}
-
-bool LLWebView::event(QEvent* event)
-{
- if (window && event->type() == QEvent::CursorChange) {
- QCursor cursor = this->cursor();
- if (currentShape != cursor.shape()) {
- currentShape = cursor.shape();
- LLQtWebKit::ECursor llcursor;
- switch(currentShape)
- {
- case Qt::ArrowCursor:
- llcursor = LLQtWebKit::C_ARROW;
- break;
- case Qt::PointingHandCursor:
- llcursor = LLQtWebKit::C_POINTINGHAND;
- break;
- case Qt::IBeamCursor:
- llcursor = LLQtWebKit::C_IBEAM;
- break;
- case Qt::SplitVCursor:
- llcursor = LLQtWebKit::C_SPLITV;
- break;
- case Qt::SplitHCursor:
- llcursor = LLQtWebKit::C_SPLITH;
- break;
- default:
- qWarning() << "Unhandled cursor shape:" << currentShape;
- llcursor = LLQtWebKit::C_ARROW;
- }
-
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- event.setIntValue((int)llcursor);
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onCursorChanged, event);
- }
-
- return true;
- }
- return QGraphicsWebView::event(event);
-}
-
-
-std::string llToStdString(const QString &s)
-{
- return llToStdString(s.toUtf8());
-}
-
-std::string llToStdString(const QByteArray &bytes)
-{
- return std::string(bytes.constData(), bytes.size());
-}
-
-std::string llToStdString(const QUrl &url)
-{
- return llToStdString(url.toEncoded());
-}
diff --git a/indra/llqtwebkit/llembeddedbrowserwindow.h b/indra/llqtwebkit/llembeddedbrowserwindow.h
deleted file mode 100644
index 0c8080c15..000000000
--- a/indra/llqtwebkit/llembeddedbrowserwindow.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLEMBEDDEDBROWSERWINDOW_H
-#define LLEMBEDDEDBROWSERWINDOW_H
-
-#include
-#include
-#include
-#if defined _MSC_VER && _MSC_VER < 1600
-#include "pstdint.h"
-#else
-#include // Use the C99 official header
-#endif
-
-#include "llqtwebkit.h"
-
-class LLEmbeddedBrowser;
-class LLWebPageOpenShim;
-class QWebPage;
-
-////////////////////////////////////////////////////////////////////////////////
-// class for a "window" that holds a browser - there can be lots of these
-class LLEmbeddedBrowserWindowPrivate;
-class LLEmbeddedBrowserWindow
-{
-public:
- LLEmbeddedBrowserWindow();
- virtual ~LLEmbeddedBrowserWindow();
-
- // housekeeping
- void setParent(LLEmbeddedBrowser* parent);
- bool setSize(int16_t width, int16_t height);
- void focusBrowser(bool focus_browser);
- void scrollByLines(int16_t lines);
- void setWindowId(int window_id);
- int getWindowId();
- void proxyWindowOpened(const std::string target, const std::string uuid);
- void proxyWindowClosed(const std::string uuid);
-
- // random accessors
- int16_t getPercentComplete();
- std::string& getStatusMsg();
- std::string& getCurrentUri();
-
- // memory buffer management
- unsigned char* grabWindow(int x, int y, int width, int height);
- bool flipWindow(bool flip);
- unsigned char* getPageBuffer();
- int16_t getBrowserWidth();
- int16_t getBrowserHeight();
- int16_t getBrowserDepth();
- int32_t getBrowserRowSpan();
-
- // set background color that you see in between pages - default is white but sometimes useful to change
- void setBackgroundColor(const uint8_t red, const uint8_t green, const uint8_t blue);
-
- // can turn off updates to a page - e.g. when it's hidden by your windowing system
- void setEnabled(bool enabledIn);
-
- // navigation
- bool userAction(LLQtWebKit::EUserAction action);
- bool userActionIsEnabled(LLQtWebKit::EUserAction action);
- bool navigateTo(const std::string uri);
-
- // javascript access/control
- std::string evaluateJavaScript(std::string script);
-
- // redirection when you hit an error page
- void navigateErrorPage( int http_status_code );
-
- // host language setting
- void setHostLanguage(const std::string host_language);
-
- // mouse & keyboard events
- void mouseEvent(LLQtWebKit::EMouseEvent mouse_event, int16_t button, int16_t x, int16_t y, LLQtWebKit::EKeyboardModifier modifiers);
- void scrollWheelEvent(int16_t x, int16_t y, int16_t scroll_x, int16_t scroll_y, LLQtWebKit::EKeyboardModifier modifiers);
- void keyboardEvent(
- LLQtWebKit::EKeyEvent key_event,
- uint32_t key_code,
- const char *utf8_text,
- LLQtWebKit::EKeyboardModifier modifiers,
- uint32_t native_scan_code,
- uint32_t native_virtual_key,
- uint32_t native_modifiers);
-
- // allow consumers of this class and to observe browser events
- bool addObserver(LLEmbeddedBrowserWindowObserver* observer);
- bool remObserver(LLEmbeddedBrowserWindowObserver* observer);
- int getObserverNumber();
-
- // accessor/mutator for scheme that browser doesn't follow - e.g. secondlife.com://
- void setNoFollowScheme(std::string scheme);
- std::string getNoFollowScheme();
-
- // prepend the current history with the given url
- void prependHistoryUrl(std::string url);
- // clear the URL history
- void clearHistory();
- std::string dumpHistory();
-
- void cookieChanged(const std::string &cookie, const std::string &url, bool dead);
-
- QWebPage *createWindow();
-
- LLWebPageOpenShim *findShim(const std::string &uuid);
- void deleteShim(LLWebPageOpenShim *shim);
- void setTarget(const std::string &target);
-
- std::string requestFilePicker();
-
- void showWebInspector(bool enabled);
-
- bool authRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password);
- bool certError(const std::string &in_url, const std::string &in_msg);
-
- void onQtDebugMessage( const std::string& msg, const std::string& msg_type);
-
- void enableLoadingOverlay(bool enable);
-
- void setWhiteListRegex( const std::string& regex );
-
- void setPageZoomFactor( double factor );
-
- // Second Life specific functions
- void setSLObjectEnabled( bool enabled );
- void setAgentLanguage( const std::string& agent_language );
- void setAgentRegion( const std::string& agent_region );
- void setAgentLocation( double x, double y, double z );
- void setAgentGlobalLocation( double x, double y, double z );
- void setAgentOrientation( double angle );
- void setAgentMaturity( const std::string& agent_maturity );
- void emitLocation();
- void emitMaturity();
- void emitLanguage();
-
-private:
- friend class LLWebPage;
- friend class LLWebPageOpenShim;
- friend class LLGraphicsScene;
- friend class LLWebView;
- friend class LLEmbeddedBrowserPrivate;
- LLEmbeddedBrowserWindowPrivate *d;
- bool mEnableLoadingOverlay;
-
-};
-
-
-// QString::toStdString converts to ascii, not utf8. Define our own versions that do utf8.
-
-#ifdef QSTRING_H
-std::string llToStdString(const QString &s);
-#endif
-
-#ifdef QBYTEARRAY_H
-std::string llToStdString(const QByteArray &bytes);
-#endif
-
-#ifdef QURL_H
-std::string llToStdString(const QUrl &url);
-#endif
-
-#endif // LLEMBEDEDDBROWSERWINDOW_H
diff --git a/indra/llqtwebkit/llembeddedbrowserwindow_p.h b/indra/llqtwebkit/llembeddedbrowserwindow_p.h
deleted file mode 100644
index 27b36d947..000000000
--- a/indra/llqtwebkit/llembeddedbrowserwindow_p.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLEMBEDDEDBROWSERWINDOW_P_H
-#define LLEMBEDDEDBROWSERWINDOW_P_H
-
-#include "llwebpage.h"
-#include "llwebpageopenshim.h"
-
-#include
-#include
-#include
-#include
-#include
-
-///////////////////////////////////////////////////////////////////////////////
-// manages the process of storing and emitting events that the consumer
-// of the embedding class can observe
-template< class T >
-class LLEmbeddedBrowserWindowEmitter
-{
- public:
- LLEmbeddedBrowserWindowEmitter() { };
- ~LLEmbeddedBrowserWindowEmitter() { };
-
- typedef typename T::EventType EventType;
- typedef std::list< T* > ObserverContainer;
- typedef typename ObserverContainer::iterator iterator;
- typedef void(T::*observerMethod)(const EventType&);
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- bool addObserver(T* observer)
- {
- if (! observer)
- return false;
-
- if (std::find(observers.begin(), observers.end(), observer) != observers.end())
- return false;
-
- observers.push_back(observer);
-
- return true;
- }
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- bool remObserver(T* observer)
- {
- if (! observer)
- return false;
-
- observers.remove(observer);
-
- return true;
- }
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- void update(observerMethod method, const EventType& msg)
- {
- typename std::list< T* >::iterator iter = observers.begin();
-
- while(iter != observers.end())
- {
- ((*iter)->*method)(msg);
- ++iter;
- }
- }
-
- int getObserverNumber()
- {
- return observers.size();
- }
-
- iterator begin()
- {
- return observers.begin();
- }
-
- iterator end()
- {
- return observers.end();
- }
-
- protected:
- ObserverContainer observers;
-};
-
-#include "llqtwebkit.h"
-#include "llembeddedbrowserwindow.h"
-#include
-#include
-
-class LLGraphicsScene : public QGraphicsScene
-{
- Q_OBJECT
-
-public:
- LLGraphicsScene();
- LLEmbeddedBrowserWindow *window;
-
- void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) {
- QGraphicsScene::mouseMoveEvent(mouseEvent);
- mouseEvent->setAccepted(true);
- mouseEvent->setButtons(Qt::LeftButton);
- }
-
-private slots:
- void repaintRequestedSlot(const QList &);
- friend class LLEmbeddedBrowserWindow;
-};
-
-
-class LLWebView : public QGraphicsWebView
-{
- Q_OBJECT
-
-public:
- LLWebView(QGraphicsItem *parent = 0);
- LLEmbeddedBrowserWindow *window;
-
- static QUrl guessUrlFromString(const QString &string);
-
- int width() const { return boundingRect().width(); }
- int height() const { return boundingRect().height(); }
-
-protected:
- bool event(QEvent *event);
-
- Qt::CursorShape currentShape;
-};
-
-class LLEmbeddedBrowserWindowPrivate
-{
- public:
- LLEmbeddedBrowserWindowPrivate()
- : mParent(0)
- , mPage(0)
- , mView(0)
- , mGraphicsScene(0)
- , mGraphicsView(0)
- , mInspector(0)
- , mCurrentMouseButtonState(Qt::NoButton)
- , mPercentComplete(0)
- , mShowLoadingOverlay(false)
- , mTimeLoadStarted(0)
- , mStatusText("")
- , mTitle("")
- , mCurrentUri("")
- , mNoFollowScheme("secondlife")
- , mWindowId(-1)
- , mEnabled(true)
- , mFlipBitmap(false)
- , mPageBuffer(NULL)
- , mDirty(false)
- , mOpeningSelf(false)
- {
- }
-
- ~LLEmbeddedBrowserWindowPrivate()
- {
- while(!mProxyPages.empty())
- {
- ProxyList::iterator iter = mProxyPages.begin();
- (*iter)->window = 0;
- (*iter)->deleteLater();
- }
-
- if(mGraphicsScene)
- {
- mGraphicsScene->window = 0;
- }
- if(mPage)
- {
- mPage->window = 0;
- }
- if(mView)
- {
- mView->deleteLater();
- }
- if(mGraphicsScene)
- {
- mGraphicsScene->deleteLater();
- }
- if(mGraphicsView)
- {
- mGraphicsView->viewport()->setParent(mGraphicsView);
- mGraphicsView->deleteLater();
- }
- if(mInspector)
- {
- mInspector->deleteLater();
- }
- }
-
- typedef LLEmbeddedBrowserWindowEmitter< LLEmbeddedBrowserWindowObserver> Emitter;
- Emitter mEventEmitter;
- QImage mImage;
- LLEmbeddedBrowser *mParent;
- LLWebPage *mPage;
- typedef std::list ProxyList;
- ProxyList mProxyPages;
-
- LLWebView *mView;
- QWebInspector* mInspector;
- LLGraphicsScene *mGraphicsScene;
- QGraphicsView *mGraphicsView;
- Qt::MouseButtons mCurrentMouseButtonState;
-
- int16_t mPercentComplete;
- bool mShowLoadingOverlay;
- time_t mTimeLoadStarted;
- std::string mStatusText;
- std::string mTitle;
- std::string mCurrentUri;
- QString mNoFollowScheme;
- int mWindowId;
- bool mEnabled;
- bool mFlipBitmap;
- unsigned char* mPageBuffer;
- QColor backgroundColor;
- bool mDirty;
- bool mOpeningSelf;
-};
-
-
-#endif
-
diff --git a/indra/llqtwebkit/lljsobject.cpp b/indra/llqtwebkit/lljsobject.cpp
deleted file mode 100644
index f5abfa702..000000000
--- a/indra/llqtwebkit/lljsobject.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include
-#include "lljsobject.h"
-
-LLJsObject::LLJsObject( QObject* parent ) :
- QObject( parent )
-{
- mEnabled = false;
-
- mAgentLanguage = QString();
- mAgentMaturity = QString();
- mAgentRegion = QString();
-
- mAgentLocation[ "x" ] = 0.0;
- mAgentLocation[ "y" ] = 0.0;
- mAgentLocation[ "z" ] = 0.0;
-
- mAgentGlobalLocation[ "x" ] = 0.0;
- mAgentGlobalLocation[ "y" ] = 0.0;
- mAgentGlobalLocation[ "z" ] = 0.0;
-}
-
-void LLJsObject::setSLObjectEnabled( bool enabled )
-{
- mEnabled = enabled;
-}
-
-bool LLJsObject::getSLObjectEnabled()
-{
- return mEnabled;
-}
-
-void LLJsObject::setAgentLanguage( const QString& agent_language )
-{
- if ( mEnabled )
- {
- mAgentLanguage = agent_language;
- }
- else
- {
- mAgentLanguage = QString();
- }
-}
-
-void LLJsObject::setAgentRegion( const QString& agent_region )
-{
- if ( mEnabled )
- {
- mAgentRegion = agent_region;
- }
- else
- {
- mAgentRegion = QString();
- }
-}
-
-void LLJsObject::setAgentMaturity( const QString& agent_maturity )
-{
- if ( mEnabled )
- {
- mAgentMaturity = agent_maturity;
- }
- else
- {
- mAgentMaturity = QString();
- }
-}
-
-void LLJsObject::setAgentLocation( const QVariantMap agent_location )
-{
- if ( mEnabled )
- {
- mAgentLocation = agent_location;
- }
- else
- {
- mAgentLocation[ "x" ] = 0.0;
- mAgentLocation[ "y" ] = 0.0;
- mAgentLocation[ "z" ] = 0.0;
- }
-}
-
-void LLJsObject::setAgentGlobalLocation( const QVariantMap agent_global_location )
-{
- if ( mEnabled )
- {
- mAgentGlobalLocation = agent_global_location;
- }
- else
- {
- mAgentGlobalLocation[ "x" ] = 0.0;
- mAgentGlobalLocation[ "y" ] = 0.0;
- mAgentGlobalLocation[ "z" ] = 0.0;
- }
-}
-
-void LLJsObject::setAgentOrientation( const double angle )
-{
- if ( mEnabled )
- {
- mAgentOrientation = angle;
- }
- else
- {
- mAgentOrientation = 0.0;
- }
-}
-
-void LLJsObject::emitLocation()
-{
- QVariantMap agent_location;
-
- agent_location[ "region" ] = mAgentRegion;
- agent_location[ "location" ] = mAgentLocation;
- agent_location[ "orientation" ] = mAgentOrientation;
- agent_location[ "globalLocation" ] = mAgentGlobalLocation;
-
- emit getLocation( agent_location );
-}
-
-void LLJsObject::emitMaturity()
-{
- emit getMaturity( mAgentMaturity );
-}
-
-void LLJsObject::emitLanguage()
-{
- emit getLanguage( mAgentLanguage );
-}
diff --git a/indra/llqtwebkit/lljsobject.h b/indra/llqtwebkit/lljsobject.h
deleted file mode 100644
index 806a8a8a1..000000000
--- a/indra/llqtwebkit/lljsobject.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLJSOBJECT_H
-#define LLJSOBJECT_H
-
-#include
-#include
-#include
-
-class LLJsObject :
- public QObject
-{
- Q_OBJECT
-
- public:
- LLJsObject( QObject* parent = 0 );
-
- void setSLObjectEnabled( bool enabled );
- bool getSLObjectEnabled();
-
- void setAgentLanguage( const QString& agent_language );
- void setAgentRegion( const QString& agent_region );
- void setAgentMaturity( const QString& agent_maturity );
- void setAgentLocation( const QVariantMap agent_location );
- void setAgentGlobalLocation( const QVariantMap agent_global_location );
- void setAgentOrientation( const double angle );
-
- void emitLocation();
- void emitMaturity();
- void emitLanguage();
-
- signals:
- void getLocation( const QVariantMap agent_location );
- void getMaturity( const QString agent_maturity );
- void getLanguage( const QString agent_language );
-
- private:
- bool mEnabled;
-
- QString mAgentLanguage;
- QString mAgentMaturity;
- QString mAgentRegion;
- QVariantMap mAgentLocation;
- QVariantMap mAgentGlobalLocation;
- double mAgentOrientation;
-};
-
-#endif // LLJSOBJECT_H
diff --git a/indra/llqtwebkit/llnetworkaccessmanager.cpp b/indra/llqtwebkit/llnetworkaccessmanager.cpp
deleted file mode 100644
index 2a51f1340..000000000
--- a/indra/llqtwebkit/llnetworkaccessmanager.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include
-#include "llnetworkaccessmanager.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "llembeddedbrowserwindow.h"
-#include "llembeddedbrowser_p.h"
-
-#include "ui_passworddialog.h"
-
-
-LLNetworkAccessManager::LLNetworkAccessManager(LLEmbeddedBrowserPrivate* browser,QObject* parent)
- : QNetworkAccessManager(parent)
- , mBrowser(browser)
-{
- connect(this, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(finishLoading(QNetworkReply*)));
- connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
- this, SLOT(authenticationRequiredSlot(QNetworkReply*, QAuthenticator*)));
- connect(this, SIGNAL(sslErrors( QNetworkReply *, const QList &)),
- this, SLOT(sslErrorsSlot( QNetworkReply *, const QList & )));
-}
-
-QNetworkReply *LLNetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request,
- QIODevice *outgoingData)
-{
-
- // Create a local copy of the request we can modify.
- QNetworkRequest mutable_request(request);
-
- // Set an Accept-Language header in the request, based on what the host has set through setHostLanguage.
- mutable_request.setRawHeader(QByteArray("Accept-Language"), QByteArray(mBrowser->mHostLanguage.c_str()));
-
- // this is undefine'd in 4.7.1 and leads to caching issues - setting it here explicitly
- mutable_request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork);
-
- if(op == GetOperation)
- {
- // GET requests should not have a Content-Type header, but it seems somebody somewhere is adding one.
- // This removes it.
- mutable_request.setRawHeader("Content-Type", QByteArray());
- }
-
-// qDebug() << "headers for request:" << mutable_request.rawHeaderList();
-
- // and pass this through to the parent implementation
- return QNetworkAccessManager::createRequest(op, mutable_request, outgoingData);
-}
-
-void LLNetworkAccessManager::sslErrorsSlot(QNetworkReply* reply, const QList& errors)
-{
- // Enabling this can help diagnose certificate verification issues.
- const bool ssl_debugging_on = false;
-
- // flag that indicates if the error that brought us here is one we care about or not
- bool valid_ssl_error = false;
-
- foreach( const QSslError &error, errors )
- {
- if ( ssl_debugging_on )
- {
- qDebug() << "SSL error details are (" << (int)(error.error()) << ") - " << error.error();
- }
-
- // SSL "error" codes we don't care about - if we get one of these, we want to continue
- if ( error.error() != QSslError::NoError
- // many more in src/network/ssl/qsslerror.h
- )
- {
- if ( ssl_debugging_on )
- {
- qDebug() << "Found valid SSL error - will not ignore";
- }
-
- valid_ssl_error = true;
- }
- else
- {
- if ( ssl_debugging_on )
- {
- qDebug() << "Found invalid SSL error - will ignore and continue";
- }
- }
- }
-
- if ( ssl_debugging_on )
- {
- qDebug() << "LLNetworkAccessManager" << __FUNCTION__ << "errors: " << errors
- << ", peer certificate chain: ";
-
- QSslCertificate cert;
- foreach(cert, reply->sslConfiguration().peerCertificateChain())
- {
- qDebug() << " cert: " << cert
- << ", issuer = " << cert.issuerInfo(QSslCertificate::CommonName)
- << ", subject = " << cert.subjectInfo(QSslCertificate::CommonName);
- }
- }
-
- if ( valid_ssl_error )
- {
- std::string url = llToStdString(reply->url());
- QString err_msg="";
- foreach( const QSslError &error, errors )
- {
- err_msg+=error.errorString();
- err_msg+="\n";
-
- QSslCertificate cert = error.certificate();
-
- QString issuer_info="";
- issuer_info+="C=";
- issuer_info+=cert.issuerInfo(QSslCertificate::CountryName);
- issuer_info+=", ST=";
- issuer_info+=cert.issuerInfo(QSslCertificate::StateOrProvinceName);
- issuer_info+=", L=";
- issuer_info+=cert.issuerInfo(QSslCertificate::LocalityName);
- issuer_info+=", O=";
- issuer_info+=cert.issuerInfo(QSslCertificate::Organization);
- issuer_info+=", OU=";
- issuer_info+=cert.issuerInfo(QSslCertificate::OrganizationalUnitName);
- issuer_info+=", CN=";
- issuer_info+=cert.issuerInfo(QSslCertificate::CommonName);
- err_msg+=issuer_info;
- err_msg+="\n";
-
- QString subject_info="";
- subject_info+="C=";
- subject_info+=cert.subjectInfo(QSslCertificate::CountryName);
- subject_info+=", ST=";
- subject_info+=cert.subjectInfo(QSslCertificate::StateOrProvinceName);
- subject_info+=", L=";
- subject_info+=cert.subjectInfo(QSslCertificate::LocalityName);
- subject_info+=", O=";
- subject_info+=cert.subjectInfo(QSslCertificate::Organization);
- subject_info+=", OU=";
- subject_info+=cert.subjectInfo(QSslCertificate::OrganizationalUnitName);
- subject_info+=", CN=";
- subject_info+=cert.subjectInfo(QSslCertificate::CommonName);
- err_msg+=subject_info;
- err_msg+="\n";
-
- err_msg+="Not valid before: ";
- err_msg+=cert.effectiveDate().toString();
- err_msg+="\n";
- err_msg+="Not valid after: ";
- err_msg+=cert.expiryDate().toString();
- err_msg+="\n";
- err_msg+="----------\n";
- }
-
- if(mBrowser->certError(url, llToStdString(err_msg)))
- {
- // signal we should ignore and continue processing
- reply->ignoreSslErrors();
- }
- else
- {
- // The user canceled, don't return yet so we can test ignore variable
- }
- }
-
- // we the SSL error is invalid (in our opinion) or we explicitly ignore all SSL errors
- if ( valid_ssl_error == false || ( mBrowser && mBrowser->mIgnoreSSLCertErrors ) )
- {
- // signal we should ignore and continue processing
- reply->ignoreSslErrors();
- };
-}
-
-void LLNetworkAccessManager::finishLoading(QNetworkReply* reply)
-{
- QVariant val = reply->attribute( QNetworkRequest::HttpStatusCodeAttribute );
- int http_status_code = val.toInt();
- if ( http_status_code >=400 && http_status_code <=499 )
- {
- if (mBrowser)
- {
- std::string current_url = llToStdString(reply->url());
- foreach (LLEmbeddedBrowserWindow *window, mBrowser->windows)
- {
- if (window->getCurrentUri() == current_url)
- {
- window->navigateErrorPage( http_status_code );
- }
- }
- }
- }
-
- // tests if navigation request resulted in a cache hit - useful for testing so leaving here for the moment.
- //QVariant from_cache = reply->attribute( QNetworkRequest::SourceIsFromCacheAttribute );
- //QString url = QString(reply->url().toEncoded());
- //qDebug() << url << " --- from cache?" << fromCache.toBool() << "\n";
-}
-
-void LLNetworkAccessManager:: authenticationRequiredSlot(QNetworkReply *reply, QAuthenticator *authenticator)
-{
- std::string username;
- std::string password;
- std::string url = llToStdString(reply->url());
- std::string realm = llToStdString(authenticator->realm());
-
- if(mBrowser->authRequest(url, realm, username, password))
- {
- // Got credentials to try, attempt auth with them.
- authenticator->setUser(QString::fromStdString(username));
- authenticator->setPassword(QString::fromStdString(password));
- }
- else
- {
- // The user cancelled, don't attempt auth.
- }
-}
-
diff --git a/indra/llqtwebkit/llnetworkaccessmanager.h b/indra/llqtwebkit/llnetworkaccessmanager.h
deleted file mode 100644
index 478b679aa..000000000
--- a/indra/llqtwebkit/llnetworkaccessmanager.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLNETWORKACCESSMANAGER_H
-#define LLNETWORKACCESSMANAGER_H
-
-#include
-#include
-
-#include "ui_passworddialog.h"
-
-class QGraphicsProxyWidget;
-
-class LLEmbeddedBrowserPrivate;
-class LLNetworkAccessManager: public QNetworkAccessManager
-{
- Q_OBJECT
-public:
- LLNetworkAccessManager(LLEmbeddedBrowserPrivate* browser, QObject* parent = 0);
-
-protected:
- virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request,
- QIODevice *outgoingData = 0);
-private slots:
- void finishLoading(QNetworkReply* reply);
- void authenticationRequiredSlot(QNetworkReply *reply, QAuthenticator *authenticator);
- void sslErrorsSlot(QNetworkReply* reply, const QList& errors);
-
-private:
- LLEmbeddedBrowserPrivate* mBrowser;
-
-};
-
-#endif // LLNETWORKACCESSMANAGER_H
-
diff --git a/indra/llqtwebkit/llqtwebkit.cpp b/indra/llqtwebkit/llqtwebkit.cpp
deleted file mode 100644
index 2be066d11..000000000
--- a/indra/llqtwebkit/llqtwebkit.cpp
+++ /dev/null
@@ -1,820 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include
-#include
-#include
-#include
-
-#include "llqtwebkit.h"
-
-#include "llembeddedbrowser.h"
-#include "llembeddedbrowserwindow.h"
-
-LLQtWebKit* LLQtWebKit::sInstance = 0;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-LLQtWebKit::LLQtWebKit() :
- mMaxBrowserWindows(16)
-{
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-LLQtWebKit* LLQtWebKit::getInstance()
-{
- if (! sInstance)
- {
- sInstance = new LLQtWebKit;
- }
-
- return sInstance;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-LLQtWebKit::~LLQtWebKit()
-{
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::init(std::string application_directory,
- std::string component_directory,
- std::string profile_directory,
- void* native_window_handle)
-{
- return LLEmbeddedBrowser::getInstance()->init(application_directory,
- component_directory,
- profile_directory,
- native_window_handle);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-int LLQtWebKit::getLastError()
-{
- return LLEmbeddedBrowser::getInstance()->getLastError();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::reset()
-{
- mBrowserWindowMap.clear();
- return LLEmbeddedBrowser::getInstance()->reset();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::clearCache()
-{
- return LLEmbeddedBrowser::getInstance()->clearCache();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-std::string LLQtWebKit::getVersion()
-{
- const int majorVersion = 2;
- const int minorVersion = 2;
-
- // number of hours since "time began" for this library - used to identify builds of same version
- const int magicNumber = static_cast< int >((time(NULL) / 3600L) - (321190L));
-
- // return as a string for now - don't think we need to expose actual version numbers
- std::ostringstream codec;
- codec << std::setw(1) << std::setfill('0');
- codec << majorVersion << ".";
- codec << std::setw(2) << std::setfill('0');
- codec << minorVersion << ".";
- codec << std::setw(5) << std::setfill('0');
- codec << magicNumber;
- codec << " (QtWebKit version ";
- codec << LLEmbeddedBrowser::getInstance()->getGREVersion();
- codec << ")";
-
- return codec.str();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::setBrowserAgentId(std::string id)
-{
- LLEmbeddedBrowser::getInstance()->setBrowserAgentId(id);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::enableProxy(bool enabled, std::string host_name, int port)
-{
- return LLEmbeddedBrowser::getInstance()->enableProxy(enabled, host_name, port);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::setHostLanguage(const std::string& host_language )
-{
- LLEmbeddedBrowser::getInstance()->setHostLanguage(host_language);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-int LLQtWebKit::createBrowserWindow(int width, int height, const std::string target)
-{
- LLEmbeddedBrowserWindow* browser_window = LLEmbeddedBrowser::getInstance()->createBrowserWindow(width, height, target);
-
- if (browser_window)
- {
- // arbitrary limit so we don't exhaust system resources
- int id(0);
- while (++id < mMaxBrowserWindows)
- {
- std::pair< BrowserWindowMapIter, bool > result = mBrowserWindowMap.insert(std::make_pair(id, browser_window));
-
- // find first place the insert succeeds and use that index as the id
- if (result.second)
- {
- browser_window->setWindowId(id);
- return id;
- }
- }
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::proxyWindowOpened(int browser_window_id, const std::string target, const std::string uuid)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->proxyWindowOpened(target, uuid);
- }
-}
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::proxyWindowClosed(int browser_window_id, const std::string uuid)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->proxyWindowClosed(uuid);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::destroyBrowserWindow(int browser_window_id)
-{
- // don't use the utility method here since we need the iteratorator to remove the entry from the map
- BrowserWindowMapIter iterator = mBrowserWindowMap.find(browser_window_id);
- LLEmbeddedBrowserWindow* browser_window = (*iterator).second;
-
- if (browser_window)
- {
- LLEmbeddedBrowser::getInstance()->destroyBrowserWindow(browser_window);
- }
-
- mBrowserWindowMap.erase(iterator);
-
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::setBackgroundColor(int browser_window_id, const int red, const int green, const int blue)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->setBackgroundColor(red, green, blue);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::setEnabled(int browser_window_id, bool enabled)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->setEnabled(enabled);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::setSize(int browser_window_id, int width, int height)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->setSize(width, height);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::scrollByLines(int browser_window_id, int lines)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->scrollByLines(lines);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::addObserver(int browser_window_id, LLEmbeddedBrowserWindowObserver* subject)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->addObserver(subject);
- }
-
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::remObserver(int browser_window_id, LLEmbeddedBrowserWindowObserver* subject)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->remObserver(subject);
- }
-
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::navigateTo(int browser_window_id, const std::string uri)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->navigateTo(uri) ? true : false;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::userAction(int browser_window_id, EUserAction action)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->userAction(action);
- }
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::userActionIsEnabled(int browser_window_id, EUserAction action)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->userActionIsEnabled(action);
- }
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-const unsigned char* LLQtWebKit::grabBrowserWindow(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->grabWindow(0, 0, browser_window->getBrowserWidth(), browser_window->getBrowserHeight());
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-const unsigned char* LLQtWebKit::getBrowserWindowPixels(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->getPageBuffer();
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::flipWindow(int browser_window_id, bool flip)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->flipWindow(flip);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-int LLQtWebKit::getBrowserWidth(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->getBrowserWidth();
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-int LLQtWebKit::getBrowserHeight(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->getBrowserHeight();
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-int LLQtWebKit::getBrowserDepth(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->getBrowserDepth();
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-int LLQtWebKit::getBrowserRowSpan(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->getBrowserRowSpan();
- }
-
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::mouseEvent(int browser_window_id, EMouseEvent mouse_event, int button, int x, int y, EKeyboardModifier modifiers)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->mouseEvent(mouse_event, button, x, y, modifiers);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::scrollWheelEvent(int browser_window_id, int x, int y, int scroll_x, int scroll_y, EKeyboardModifier modifiers)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->scrollWheelEvent(x, y, scroll_x, scroll_y, modifiers);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::keyboardEvent(
- int browser_window_id,
- EKeyEvent key_event,
- uint32_t key_code,
- const char *utf8_text,
- EKeyboardModifier modifiers,
- uint32_t native_scan_code,
- uint32_t native_virtual_key,
- uint32_t native_modifiers)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->keyboardEvent(key_event, key_code, utf8_text, modifiers, native_scan_code, native_virtual_key, native_modifiers);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::focusBrowser(int browser_window_id, bool focus_browser)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->focusBrowser(focus_browser);
- return true;
- }
-
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::setNoFollowScheme(int browser_window_id, std::string scheme)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->setNoFollowScheme(scheme);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-std::string LLQtWebKit::getNoFollowScheme(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->getNoFollowScheme();
- }
-
- return ("");
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::pump(int max_milliseconds)
-{
- LLEmbeddedBrowser::getInstance()->pump(max_milliseconds);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::enableCookies(bool enabled)
-{
- LLEmbeddedBrowser::getInstance()->enableCookies( enabled );
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::clearAllCookies()
-{
- return LLEmbeddedBrowser::getInstance()->clearAllCookies();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::setCookies(const std::string &cookies)
-{
- return LLEmbeddedBrowser::getInstance()->setCookies(cookies);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-std::string LLQtWebKit::getAllCookies()
-{
- return LLEmbeddedBrowser::getInstance()->getAllCookies();
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::enablePlugins(bool enabled)
-{
- LLEmbeddedBrowser::getInstance()->enablePlugins(enabled);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::enableJavaScript(bool enabled)
-{
- LLEmbeddedBrowser::getInstance()->enableJavaScript(enabled);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::showWebInspector(bool show)
-{
- return LLEmbeddedBrowser::getInstance()->showWebInspector(show);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-std::string LLQtWebKit::evaluateJavaScript(int browser_window_id, const std::string script)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->evaluateJavaScript(script);
- }
-
- return "";
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::prependHistoryUrl(int browser_window_id, std::string url)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->prependHistoryUrl(url);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::clearHistory(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->clearHistory();
- }
-}
-
-std::string LLQtWebKit::dumpHistory(int browser_window_id)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- return browser_window->dumpHistory();
- }
-
- return NULL;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::setCAFile(const std::string &ca_file)
-{
- return LLEmbeddedBrowser::getInstance()->setCAFile(ca_file);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::addCAFile(const std::string &ca_file)
-{
- return LLEmbeddedBrowser::getInstance()->addCAFile(ca_file);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLQtWebKit::setIgnoreSSLCertErrors(bool ignore)
-{
- LLEmbeddedBrowser::getInstance()->setIgnoreSSLCertErrors(ignore);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-bool LLQtWebKit::getIgnoreSSLCertErrors()
-{
- return LLEmbeddedBrowser::getInstance()-> getIgnoreSSLCertErrors();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-const std::vector< std::string > LLQtWebKit::getInstalledCertsList()
-{
- return LLEmbeddedBrowser::getInstance()->getInstalledCertsList();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// utility method to get an LLEmbeddedBrowserWindow* from a window id (int)
-LLEmbeddedBrowserWindow* LLQtWebKit::getBrowserWindowFromWindowId(int browser_window_id)
-{
- BrowserWindowMapIter iterator = mBrowserWindowMap.find(browser_window_id);
-
- if (iterator != mBrowserWindowMap.end())
- return (*iterator).second;
- else
- return 0;
-}
-
-LLEmbeddedBrowserWindowObserver::~LLEmbeddedBrowserWindowObserver()
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onCursorChanged(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onPageChanged(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onNavigateBegin(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onNavigateComplete(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onUpdateProgress(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onStatusTextChange(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onTitleChange(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onLocationChange(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onNavigateErrorPage(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onClickLinkHref(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onClickLinkNoFollow(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onCookieChanged(const EventType&)
-{
-}
-
-std::string LLEmbeddedBrowserWindowObserver::onRequestFilePicker(const EventType&)
-{
- return std::string();
-}
-
-void LLEmbeddedBrowserWindowObserver::onWindowCloseRequested(const EventType&)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onWindowGeometryChangeRequested(const EventType&)
-{
-}
-
-bool LLEmbeddedBrowserWindowObserver::onAuthRequest(const std::string &, const std::string &, std::string &, std::string &)
-{
- return false;
-}
-
-bool LLEmbeddedBrowserWindowObserver::onCertError(const std::string &, const std::string &)
-{
- return false; // cancel and abort after cert error
-}
-
-void LLEmbeddedBrowserWindowObserver::onQtDebugMessage( const std::string &, const std::string &)
-{
-}
-
-void LLEmbeddedBrowserWindowObserver::onLinkHovered(const EventType&)
-{
-}
-
-// set the regex used to determine if a page is trusted or not
-void LLQtWebKit::setWhiteListRegex( int browser_window_id, const std::string& regex )
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->setWhiteListRegex(regex);
- }
-}
-
-// Second Life viewer specific functions
-void LLQtWebKit::setSLObjectEnabled( bool enabled )
-{
- LLEmbeddedBrowser::getInstance()->setSLObjectEnabled( enabled );
-}
-
-void LLQtWebKit::setAgentLanguage( const std::string& agent_language )
-{
- LLEmbeddedBrowser::getInstance()->setAgentLanguage( agent_language );
-}
-
-void LLQtWebKit::setAgentRegion( const std::string& agent_region )
-{
- LLEmbeddedBrowser::getInstance()->setAgentRegion( agent_region );
-}
-
-void LLQtWebKit::setAgentLocation( double x, double y, double z )
-{
- LLEmbeddedBrowser::getInstance()->setAgentLocation( x, y, z );
-}
-
-void LLQtWebKit::setAgentGlobalLocation( double x, double y, double z )
-{
- LLEmbeddedBrowser::getInstance()->setAgentGlobalLocation( x, y, z );
-}
-
-void LLQtWebKit::setAgentOrientation( double angle )
-{
- LLEmbeddedBrowser::getInstance()->setAgentOrientation( angle );
-}
-
-
-void LLQtWebKit::setAgentMaturity( const std::string& agent_maturity )
-{
- LLEmbeddedBrowser::getInstance()->setAgentMaturity( agent_maturity );
-}
-
-void LLQtWebKit::emitLocation()
-{
- LLEmbeddedBrowser::getInstance()->emitLocation();
-}
-
-void LLQtWebKit::emitMaturity()
-{
- LLEmbeddedBrowser::getInstance()->emitMaturity();
-}
-
-void LLQtWebKit::emitLanguage()
-{
- LLEmbeddedBrowser::getInstance()->emitLanguage();
-}
-
-void LLQtWebKit::enableQtMessageHandler( bool enable )
-{
- LLEmbeddedBrowser::getInstance()->enableQtMessageHandler( enable );
-}
-
-void LLQtWebKit::enableLoadingOverlay( int browser_window_id, bool enable)
-{
- LLEmbeddedBrowserWindow* browser_window = getBrowserWindowFromWindowId(browser_window_id);
- if (browser_window)
- {
- browser_window->enableLoadingOverlay( enable );
- }
-}
-
-void LLQtWebKit::setPageZoomFactor( double factor )
-{
- LLEmbeddedBrowser::getInstance()->setPageZoomFactor( factor );
-}
diff --git a/indra/llqtwebkit/llqtwebkit.h b/indra/llqtwebkit/llqtwebkit.h
deleted file mode 100644
index 8e7ebd390..000000000
--- a/indra/llqtwebkit/llqtwebkit.h
+++ /dev/null
@@ -1,470 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLQTWEBKIT_H
-#define LLQTWEBKIT_H
-
-#if defined _MSC_VER && _MSC_VER < 1600
-// no pstdint.h in the client where this header is used
-typedef unsigned long uint32_t;
-#else
-#include // Use the C99 official header
-#endif
-
-#include
-#include
-#include
-
-class LLEmbeddedBrowser;
-class LLEmbeddedBrowserWindow;
-
-// Use this to conditionalize code that depends on particular changes to the llqtwebkit API.
-// This can be useful for times when we're waiting for a rebuild on one platform or another.
-// When you bump this number, please note what the changes were in a comment below the #define,
-// and keep the existing comments as history.
-#define LLQTWEBKIT_API_VERSION 16
-// version 16:
- // Added LLQtWebKit::enableLoadingOverlay()
-// version 15:
- // Added LLQtWebKit::setPageZoomFactor()
-// version 14:
- // Added LLEmbeddedBrowserWindowObserver::onQtDebugMessage
-// version 13:
- // Added LLEmbeddedBrowserWindowObserver::onCertError
-// version 12:
- // Pass over value to indicate if host for current URL is trusted as per whitelist regex or not
-// version 11:
- // Added initial support for url/host whitelist via a regex
-// version 10:
- // Added initial support for creating and displaying the Qt Web Inspector
-// version 9:
- // Added initial support for exposing certain Second Life viewer/agent variables to JavaScript
-// version 8:
- // Removed calls to set/clear 404 redirects and made the API now emit an event that the
- // consumer can catch and decide what to do when an HTTP status code after navigate is 400-499
-// version 7:
- // Added LLEmbeddedBrowserWindowEvent::setNavigationType() && LLEmbeddedBrowserWindowEvent::getNavigationType()
- // Used to pass (and retrieve) the type of navigation event that caused a link to be activated.
-// version 6:
- // Added LLQtWebKit::addCAFile()
-// version 5:
- // Added LLEmbeddedBrowserWindowObserver::onLinkHovered
-// version 4:
- // Added LLEmbeddedBrowserWindowObserver::onAuthRequest
-// version 3:
- // Added setIgnoreSSLCertErrors and getIgnoreSSLCertErrors
-// version 2:
- // Changed the usage of the event parameters in onClickLinkHref and onClickLinkNoFollow events slightly.
- // The clicked URI for both should now be retrieved with getEventUri() instead of getStringValue().
- // The "target" string in onClickLinkHref is now retrieved with getStringValue() instead of getStringValue2().
- // The contents of getStringValue2() in the onClickLinkHref event is now a unique ID for the window proxy the click targets.
- // Removed the "link target type" concept, since it doesn't really belong here.
- // Removed most of the construtor variants in LLEmbeddedBrowserWindowEvent and added setters in their place.
- // Removed setCaretColor, since it's done nothing for some time now.
- // Added LLEmbeddedBrowserWindowObserver::onWindowGeometryChangeRequested
- // Added
-// version 1:
- // Added the LLQTWEBKIT_API_VERSION define.
- // Added LLEmbeddedBrowserWindowObserver::onWindowCloseRequested
-
-////////////////////////////////////////////////////////////////////////////////
-// data class that is passed with an event
-class LLEmbeddedBrowserWindowEvent
-{
- public:
- LLEmbeddedBrowserWindowEvent(int window_id) :
- mEventWindowId(window_id)
- {
- };
-
- virtual ~LLEmbeddedBrowserWindowEvent() {}
-
- void setEventUri(const std::string &uri) { mEventUri = uri; }
- void setNavigationType(const std::string &type) { mNavigationType = type; }
- void setTrustedHost(const bool trusted) { mTrustedHost = trusted; }
- void setIntValue(int val) { mIntVal = val; }
- void setStringValue(const std::string &val) { mStringVal = val; }
- void setStringValue2(const std::string &val) { mStringVal2 = val; }
- void setRectValue(int x, int y, int width, int height)
- {
- mXVal = x;
- mYVal = y;
- mWidthVal = width;
- mHeightVal = height;
- }
-
- int getEventWindowId() const { return mEventWindowId; }
- std::string getEventUri() const { return mEventUri; }
- std::string getNavigationType() const { return mNavigationType; }
- bool getTrustedHost() const { return mTrustedHost; }
- int getIntValue() const { return mIntVal; };
- std::string getStringValue() const { return mStringVal; }
- std::string getStringValue2() const { return mStringVal2; }
- void getRectValue(int& x, int& y, int& width, int& height) const
- {
- x = mXVal;
- y = mYVal;
- width = mWidthVal;
- height = mHeightVal;
- };
-
- private:
- int mEventWindowId;
- std::string mEventUri;
- std::string mNavigationType;
- bool mTrustedHost;
- int mIntVal;
- std::string mStringVal;
- std::string mStringVal2;
- int mXVal;
- int mYVal;
- int mWidthVal;
- int mHeightVal;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// derrive from this class and override these methods to observe these events
-#ifdef __GNUC__
-#pragma GCC visibility push(default)
-#endif
-class LLEmbeddedBrowserWindowObserver
-{
- public:
- virtual ~LLEmbeddedBrowserWindowObserver();
- typedef LLEmbeddedBrowserWindowEvent EventType;
-
- virtual void onCursorChanged(const EventType& event);
- virtual void onPageChanged(const EventType& event);
- virtual void onNavigateBegin(const EventType& event);
- virtual void onNavigateComplete(const EventType& event);
- virtual void onNavigateErrorPage(const EventType& event);
- virtual void onUpdateProgress(const EventType& event);
- virtual void onStatusTextChange(const EventType& event);
- virtual void onTitleChange(const EventType& event);
- virtual void onLocationChange(const EventType& event);
- virtual void onClickLinkHref(const EventType& event);
- virtual void onClickLinkNoFollow(const EventType& event);
- virtual void onCookieChanged(const EventType& event);
- // mStringVal will be the cookie in RFC 2109 string format
- // mEventUri will be the url that caused the cookie change
- // mIntVal will be true if the cookie is dead (i.e. being deleted), false otherwise
- virtual std::string onRequestFilePicker(const EventType& event);
- virtual void onWindowCloseRequested(const EventType& event);
- virtual void onWindowGeometryChangeRequested(const EventType& event);
-
- // This should return true to attempt auth, or false to cancel.
- virtual bool onAuthRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password);
-
- // This should return true to continue after cert error, or false to cancel and abort.
- virtual bool onCertError(const std::string &in_url, const std::string &in_msg);
-
- virtual void onLinkHovered(const EventType& event);
- // mEventURI will be the link
- // mStringVal will be the title
- // mStringVal2 will be the text
-
- // catch qDebug() messages from Qt and pipe them back to host application
- virtual void onQtDebugMessage( const std::string& msg, const std::string& msg_type);
-};
-#ifdef __GNUC__
-#pragma GCC visibility pop
-#endif
-
-////////////////////////////////////////////////////////////////////////////////
-// main library class
-
-#ifdef __GNUC__
-#pragma GCC visibility push(default)
-#endif
-class LLQtWebKit
-{
- public:
- typedef enum e_cursor
- {
- C_ARROW,
- C_IBEAM,
- C_SPLITV,
- C_SPLITH,
- C_POINTINGHAND
- } ECursor;
-
- typedef enum e_user_action
- {
- UA_EDIT_CUT,
- UA_EDIT_COPY,
- UA_EDIT_PASTE,
- UA_NAVIGATE_STOP,
- UA_NAVIGATE_BACK,
- UA_NAVIGATE_FORWARD,
- UA_NAVIGATE_RELOAD
- } EUserAction;
-
- typedef enum e_key_event
- {
- KE_KEY_DOWN,
- KE_KEY_REPEAT,
- KE_KEY_UP
- }EKeyEvent;
-
- typedef enum e_mouse_event
- {
- ME_MOUSE_MOVE,
- ME_MOUSE_DOWN,
- ME_MOUSE_UP,
- ME_MOUSE_DOUBLE_CLICK
- }EMouseEvent;
-
- typedef enum e_mouse_button
- {
- MB_MOUSE_BUTTON_LEFT,
- MB_MOUSE_BUTTON_RIGHT,
- MB_MOUSE_BUTTON_MIDDLE,
- MB_MOUSE_BUTTON_EXTRA_1,
- MB_MOUSE_BUTTON_EXTRA_2,
- }EMouseButton;
-
- typedef enum e_keyboard_modifier
- {
- KM_MODIFIER_NONE = 0x00,
- KM_MODIFIER_SHIFT = 0x01,
- KM_MODIFIER_CONTROL = 0x02,
- KM_MODIFIER_ALT = 0x04,
- KM_MODIFIER_META = 0x08
- }EKeyboardModifier;
-
- virtual ~LLQtWebKit();
-
- // singleton access
- static LLQtWebKit* getInstance();
-
- // housekeeping
- bool init(std::string application_directory,
- std::string component_directory,
- std::string profile_directory,
- void* native_window_handle);
- bool reset();
- bool clearCache();
- int getLastError();
- std::string getVersion();
- void setBrowserAgentId(std::string id);
- bool enableProxy(bool enabled, std::string host_name, int port);
-
- void enableCookies(bool enabled);
- bool clearAllCookies();
-
- // The following two functions accept and return cookies in the same format that's used for the Set-Cookie: HTTP header
- // as defined in RFC 2109 ( http://www.ietf.org/rfc/rfc2109.txt ). The string should not contain the literal "Set-Cookie:",
- // just the cookie itself.
- // Multiple cookies within the string are separated by a newline character ('\n')
- void setCookies(const std::string &cookies);
- std::string getAllCookies();
-
- void enablePlugins(bool enabled);
- void enableJavaScript(bool enabled);
-
- // Web inspector - Firebug-esque debugger
- bool showWebInspector(bool show);
-
- // updates value of 'hostLanguage' in JavaScript 'Navigator' obect that
- // embedded pages can query to see what language the host app is set to
- void setHostLanguage(const std::string& host_language);
-
- // browser window - creation/deletion, mutation etc.
- int createBrowserWindow(int width, int height, const std::string target = std::string(""));
- void proxyWindowOpened(int browser_window_id, const std::string target, const std::string uuid);
- void proxyWindowClosed(int browser_window_id, const std::string uuid);
- bool destroyBrowserWindow(int browser_window_id);
- bool setSize(int browser_window_id, int width, int height);
- bool scrollByLines(int browser_window_id, int lines);
- bool setBackgroundColor(int browser_window_id, const int red, const int green, const int blue);
- bool setEnabled(int browser_window_id, bool enabled);
-
- // add/remove yourself as an observer on browser events - see LLEmbeddedBrowserWindowObserver declaration
- bool addObserver(int browser_window_id, LLEmbeddedBrowserWindowObserver* subject);
- bool remObserver(int browser_window_id, LLEmbeddedBrowserWindowObserver* subject);
-
- // navigation - self explanatory
- bool navigateTo(int browser_window_id, const std::string uri);
- bool userAction(int browser_window_id, EUserAction action);
- bool userActionIsEnabled(int browser_window_id, EUserAction action);
-
- // javascript access/control
- std::string evaluateJavaScript(int browser_window_id, const std::string script);
-
- // set/clear URL to redirect to when a 404 page is reached
- bool set404RedirectUrl(int browser_window_in, std::string redirect_url);
- bool clr404RedirectUrl(int browser_window_in);
-
- // access to rendered bitmap data
- const unsigned char* grabBrowserWindow(int browser_window_id); // renders page to memory and returns pixels
- const unsigned char* getBrowserWindowPixels(int browser_window_id); // just returns pixels - no render
- bool flipWindow(int browser_window_id, bool flip); // optionally flip window (pixels) you get back
- int getBrowserWidth(int browser_window_id); // current browser width (can vary slightly after page is rendered)
- int getBrowserHeight(int browser_window_id); // current height
- int getBrowserDepth(int browser_window_id); // depth in bytes
- int getBrowserRowSpan(int browser_window_id); // width in pixels * depth in bytes
-
- // mouse/keyboard interaction
- bool mouseEvent(int browser_window_id, EMouseEvent mouse_event, int button, int x, int y, EKeyboardModifier modifiers); // send a mouse event to a browser window at given XY in browser space
- bool scrollWheelEvent(int browser_window_id, int x, int y, int scroll_x, int scroll_y, EKeyboardModifier modifiers);
- bool keyboardEvent(
- int browser_window_id,
- EKeyEvent key_event,
- uint32_t key_code,
- const char *utf8_text,
- EKeyboardModifier modifiers,
- uint32_t native_scan_code = 0,
- uint32_t native_virtual_key = 0,
- uint32_t native_modifiers = 0);
-
- bool focusBrowser(int browser_window_id, bool focus_browser); // set/remove focus to given browser window
-
- // accessor/mutator for scheme that browser doesn't follow - e.g. secondlife.com://
- void setNoFollowScheme(int browser_window_id, std::string scheme);
- std::string getNoFollowScheme(int browser_window_id);
-
- void pump(int max_milliseconds);
-
- void prependHistoryUrl(int browser_window_id, std::string url);
- void clearHistory(int browser_window_id);
- std::string dumpHistory(int browser_window_id);
-
- // Specify a path to a .pem file containing a list of CA certificates the browser should trust.
- // NOTE that this will replace the default list of root certs (not add to it).
- // If the file isn't found or doesn't contain any certs in the correct format, this call will have no effect and will return false.
- // NOTE: Using this function causes strange cert verification issues on the Mac.
- // Using addCAFile() instead seems to work better.
- bool setCAFile(const std::string &ca_file);
-
- // This behaves similarly, but instead of replacing the entire list it appends additional trusted root certs to the current list.
- bool addCAFile(const std::string &ca_file);
-
- // Set a flag causing all SSL cert errors to be ignored.
- // NOTE: this should only be used for testing, as it negates the security model of https.
- void setIgnoreSSLCertErrors(bool ignore);
- bool getIgnoreSSLCertErrors();
-
- const std::vector< std::string > getInstalledCertsList();
-
- void enableQtMessageHandler( bool enable );
-
- void enableLoadingOverlay( int browser_window_id, bool enable);
-
- // Copied from indra_constants.h.
- // The key_code argument to keyboardEvent should either be one of these or a 7-bit ascii character.
- enum keyCodes
- {
- // Leading zeroes ensure that these won't sign-extend when assigned to a larger type.
- KEY_RETURN = 0x0081,
- KEY_LEFT = 0x0082,
- KEY_RIGHT = 0x0083,
- KEY_UP = 0x0084,
- KEY_DOWN = 0x0085,
- KEY_ESCAPE = 0x0086,
- KEY_BACKSPACE = 0x0087,
- KEY_DELETE = 0x0088,
- KEY_SHIFT = 0x0089,
- KEY_CONTROL = 0x008A,
- KEY_ALT = 0x008B,
- KEY_HOME = 0x008C,
- KEY_END = 0x008D,
- KEY_PAGE_UP = 0x008E,
- KEY_PAGE_DOWN = 0x008F,
- KEY_HYPHEN = 0x0090,
- KEY_EQUALS = 0x0091,
- KEY_INSERT = 0x0092,
- KEY_CAPSLOCK = 0x0093,
- KEY_TAB = 0x0094,
- KEY_ADD = 0x0095,
- KEY_SUBTRACT = 0x0096,
- KEY_MULTIPLY = 0x0097,
- KEY_DIVIDE = 0x0098,
- KEY_F1 = 0x00A1,
- KEY_F2 = 0x00A2,
- KEY_F3 = 0x00A3,
- KEY_F4 = 0x00A4,
- KEY_F5 = 0x00A5,
- KEY_F6 = 0x00A6,
- KEY_F7 = 0x00A7,
- KEY_F8 = 0x00A8,
- KEY_F9 = 0x00A9,
- KEY_F10 = 0x00AA,
- KEY_F11 = 0x00AB,
- KEY_F12 = 0x00AC,
-
- KEY_PAD_UP = 0x00C0,
- KEY_PAD_DOWN = 0x00C1,
- KEY_PAD_LEFT = 0x00C2,
- KEY_PAD_RIGHT = 0x00C3,
- KEY_PAD_HOME = 0x00C4,
- KEY_PAD_END = 0x00C5,
- KEY_PAD_PGUP = 0x00C6,
- KEY_PAD_PGDN = 0x00C7,
- KEY_PAD_CENTER = 0x00C8, // the 5 in the middle
- KEY_PAD_INS = 0x00C9,
- KEY_PAD_DEL = 0x00CA,
- KEY_PAD_RETURN = 0x00CB,
- KEY_PAD_ADD = 0x00CC,
- KEY_PAD_SUBTRACT = 0x00CD,
- KEY_PAD_MULTIPLY = 0x00CE,
- KEY_PAD_DIVIDE = 0x00CF,
-
- KEY_NONE = 0x00FF // not sent from keyboard. For internal use only.
- };
-
- // set the regex used to determine if a page is trusted or not
- void setWhiteListRegex( int browser_window_id, const std::string& regex );
-
- // Second Life specific functions
- // (Note, this is a departure from the generic nature of this library)
- void setSLObjectEnabled( bool enabled ); // enable or disaable feature
- void setAgentLanguage( const std::string& agent_language ); // viewer language selected by agent
- void setAgentRegion( const std::string& agent_region ); // name of region where agent is located
- void setAgentLocation( double x, double y, double z ); // agent's x,y,z location within a region
- void setAgentGlobalLocation( double x, double y, double z ); // agent's x,y,z location within the current grid
- void setAgentOrientation( double angle ); // direction (0..359) agent is facing
- void setAgentMaturity( const std::string& agent_maturity ); // selected maturity level of agent
- void emitLocation();
- void emitMaturity();
- void emitLanguage();
-
- // set the zoom factor for web pages ( can be less than 0.0)
- void setPageZoomFactor( double factor );
-
- private:
- LLQtWebKit();
- LLEmbeddedBrowserWindow* getBrowserWindowFromWindowId(int browser_window_id);
- static LLQtWebKit* sInstance;
- const int mMaxBrowserWindows;
- typedef std::map< int, LLEmbeddedBrowserWindow* > BrowserWindowMap;
- typedef std::map< int, LLEmbeddedBrowserWindow* >::iterator BrowserWindowMapIter;
- BrowserWindowMap mBrowserWindowMap;
-};
-
-#ifdef __GNUC__
-#pragma GCC visibility pop
-#endif
-
-#endif // LLQTWEBKIT_H
diff --git a/indra/llqtwebkit/llqtwebkit.pri b/indra/llqtwebkit/llqtwebkit.pri
deleted file mode 100644
index 4f85aa423..000000000
--- a/indra/llqtwebkit/llqtwebkit.pri
+++ /dev/null
@@ -1,47 +0,0 @@
-DEPENDPATH += $$PWD
-INCLUDEPATH += $$PWD
-
-!mac {
-unix {
- DEFINES += LL_LINUX
-}
-}
-
-mac {
- DEFINES += LL_OSX
-}
-
-win32{
- DEFINES += _WINDOWS
-}
-
-# Input
-HEADERS += llembeddedbrowser.h \
- llembeddedbrowser_p.h \
- llembeddedbrowserwindow.h \
- llembeddedbrowserwindow_p.h \
- llnetworkaccessmanager.h \
- llqtwebkit.h \
- llwebpage.h \
- llwebpageopenshim.h \
- llstyle.h \
- lljsobject.h
-
-SOURCES += llembeddedbrowser.cpp \
- llembeddedbrowserwindow.cpp \
- llnetworkaccessmanager.cpp \
- llqtwebkit.cpp \
- llwebpage.cpp \
- llwebpageopenshim.cpp \
- llstyle.cpp \
- lljsobject.cpp
-
-FORMS += passworddialog.ui
-
-RCC_DIR = .rcc
-UI_DIR = .ui
-MOC_DIR = .moc
-OBJECTS_DIR = .obj
-
-include(static.pri)
-include(qtwebkit_cookiejar/src/src.pri)
diff --git a/indra/llqtwebkit/llqtwebkit.pro b/indra/llqtwebkit/llqtwebkit.pro
deleted file mode 100644
index b6ff077bd..000000000
--- a/indra/llqtwebkit/llqtwebkit.pro
+++ /dev/null
@@ -1,18 +0,0 @@
-TEMPLATE = lib
-CONFIG += static staticlib # we always build as static lib whether Qt is static or not
-TARGET =
-DEPENDPATH += .
-INCLUDEPATH += .
-
-include(llqtwebkit.pri)
-
-QT += webkit opengl network gui
-
-win32:CONFIG(debug,debug|release) {
- TARGET = llqtwebkitd
-}
-
-RCC_DIR = $$PWD/.rcc
-UI_DIR = $$PWD/.ui
-MOC_DIR = $$PWD/.moc
-OBJECTS_DIR = $$PWD/.obj
diff --git a/indra/llqtwebkit/llstyle.cpp b/indra/llqtwebkit/llstyle.cpp
deleted file mode 100644
index 8822d481a..000000000
--- a/indra/llqtwebkit/llstyle.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "llstyle.h"
-
-#include "llembeddedbrowserwindow_p.h"
-#include
-#include
-#include
-
-LLStyle::LLStyle()
- : QPlastiqueStyle()
-{
-}
-
-void LLStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const
-{
-#ifdef Q_WS_MAC
- if (control == QStyle::CC_ScrollBar) {
- QStyleOptionSlider* opt = (QStyleOptionSlider*)option;
- const QPoint topLeft = opt->rect.topLeft();
- painter->translate(topLeft);
- opt->rect.moveTo(QPoint(0, 0));
- painter->fillRect(opt->rect, opt->palette.background());
- }
-#endif
- QPlastiqueStyle::drawComplexControl(control, option, painter, widget);
-}
-
-void LLStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
-{
- switch(element)
- {
- case CE_ScrollBarAddLine:
- case CE_ScrollBarSubLine:
- // This fixes the "scrollbar arrows pointing the wrong way" bug.
- if (const QStyleOptionSlider *scrollBar = qstyleoption_cast(option))
- {
- // Make the State_Horizontal bit in the option's state field match its orientation field.
- QStyleOptionSlider localOption(*scrollBar);
- if(localOption.orientation == Qt::Horizontal)
- {
- localOption.state |= State_Horizontal;
- }
- else
- {
- localOption.state &= ~State_Horizontal;
- }
- QPlastiqueStyle::drawControl(element, &localOption, painter, widget);
- return;
- }
- default:
- break;
- }
-
- QPlastiqueStyle::drawControl(element, option, painter, widget);
-}
diff --git a/indra/llqtwebkit/llstyle.h b/indra/llqtwebkit/llstyle.h
deleted file mode 100644
index 77c09b3bb..000000000
--- a/indra/llqtwebkit/llstyle.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLSTYLE_H
-#define LLSTYLE_H
-
-#include
-
-class LLStyle : public QPlastiqueStyle
-{
-
-public:
- explicit LLStyle();
- void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const;
- void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const;
-
-};
-
-#endif
-
diff --git a/indra/llqtwebkit/llwebpage.cpp b/indra/llqtwebkit/llwebpage.cpp
deleted file mode 100644
index 113c0c186..000000000
--- a/indra/llqtwebkit/llwebpage.cpp
+++ /dev/null
@@ -1,536 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "llwebpage.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#include "llqtwebkit.h"
-#include "llembeddedbrowser.h"
-#include "llembeddedbrowserwindow.h"
-#include "llembeddedbrowserwindow_p.h"
-#include "lljsobject.h"
-
-LLWebPage::LLWebPage(QObject *parent)
- : QWebPage(parent)
- , window(0)
- , mHostLanguage( "en" )
- , mWhiteListRegex( "" )
-{
- mJsObject = new LLJsObject( parent );
-
- connect(this, SIGNAL(loadProgress(int)),
- this, SLOT(loadProgressSlot(int)));
- connect(this, SIGNAL(linkHovered(const QString &, const QString &, const QString &)),
- this, SLOT(linkHoveredSlot(const QString &, const QString &, const QString &)));
- connect(this, SIGNAL(statusBarMessage(const QString &)),
- this, SLOT(statusBarMessageSlot(const QString &)));
- connect(mainFrame(), SIGNAL(urlChanged(const QUrl&)),
- this, SLOT(urlChangedSlot(const QUrl&)));
- connect(this, SIGNAL(loadStarted()),
- this, SLOT(loadStarted()));
- connect(this, SIGNAL(loadFinished(bool)),
- this, SLOT(loadFinished(bool)));
- connect(this, SIGNAL(windowCloseRequested()),
- this, SLOT(windowCloseRequested()));
- connect(this, SIGNAL(geometryChangeRequested(const QRect&)),
- this, SLOT(geometryChangeRequested(const QRect&)));
- connect(mainFrame(), SIGNAL(titleChanged(const QString&)),
- this, SLOT(titleChangedSlot(const QString&)));
- connect(mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
- this, SLOT(extendNavigatorObject()));
-}
-
-LLWebPage::~LLWebPage()
-{
- delete mJsObject;
-}
-
-void LLWebPage::loadProgressSlot(int progress)
-{
- if (!window)
- return;
- window->d->mPercentComplete = progress;
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- event.setIntValue(progress);
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onUpdateProgress, event);
-
- if ( progress >= 100 )
- window->d->mShowLoadingOverlay = false;
-
- window->d->mDirty = true;
- window->grabWindow(0,0,webView->boundingRect().width(),webView->boundingRect().height());
-
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onPageChanged, event);
-}
-
-void LLWebPage::linkHoveredSlot(const QString &link, const QString &title, const QString &textContent)
-{
- if (!window)
- return;
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(llToStdString(link));
- event.setStringValue(llToStdString(title));
- event.setStringValue2(llToStdString(textContent));
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onLinkHovered, event);
-}
-
-void LLWebPage::statusBarMessageSlot(const QString& text)
-{
- if (!window)
- return;
- window->d->mStatusText = llToStdString(text);
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- event.setStringValue(window->d->mStatusText);
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onStatusTextChange, event);
-}
-
-void LLWebPage::titleChangedSlot(const QString& text)
-{
- if (!window)
- return;
- window->d->mTitle = llToStdString(text);
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- event.setStringValue(window->d->mTitle);
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onTitleChange, event);
-}
-
-// set the regex used to determine if a page is trusted or not
-void LLWebPage::setWhiteListRegex( const std::string& regex )
-{
- mWhiteListRegex = regex;
-}
-
-void LLWebPage::configureTrustedPage( bool is_trusted )
-{
- // action happens in browser window parent
- LLEmbeddedBrowser* parent_browser = 0;
- if ( window && window->d && window->d->mParent )
- {
- parent_browser = window->d->mParent;
- if ( parent_browser )
- {
- if ( is_trusted )
- {
- //qDebug() << "Whitelist passed - turning on";
-
- // trusted so turn everything on
- parent_browser->enableJavaScriptTransient( true );
- parent_browser->enableCookiesTransient( true );
- parent_browser->enablePluginsTransient( true );
- }
- else
- {
- //qDebug() << "Whitelist failed - reverting to default state";
-
- // restore default state set by client
- parent_browser->enableJavaScript( parent_browser->isJavaScriptEnabled() );
- parent_browser->enableCookies( parent_browser->areCookiesEnabled() );
- parent_browser->enablePlugins( parent_browser->arePluginsEnabled() );
- }
- }
- }
-}
-
-bool LLWebPage::checkRegex( const QUrl& url )
-{
- QRegExp reg_exp( QString::fromStdString( mWhiteListRegex ) );
- reg_exp.setCaseSensitivity( Qt::CaseInsensitive );
- reg_exp.setMinimal( true );
-
- if ( reg_exp.exactMatch( url.host() ) )
- {
- return true;
- }
- else
- {
- return false;
- }
-}
-
-void LLWebPage::checkWhiteList( const QUrl& url )
-{
- if ( mWhiteListRegex.length() )
- {
- if ( checkRegex( url ) )
- {
- configureTrustedPage( true ); // page is "trusted" - go ahead and configure it as such
- }
- else
- {
- configureTrustedPage( false ); // page is "NOT trusted" - go ahead and configure it as such
- }
- }
- else
- // no regex specified, don't do anything (i.e. don't change trust state)
- {
- }
-}
-
-void LLWebPage::urlChangedSlot(const QUrl& url)
-{
- if (!window)
- return;
-
- checkWhiteList( url );
-
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onLocationChange, event);
-}
-
-bool LLWebPage::event(QEvent *event)
-{
- bool result = QWebPage::event(event);
-
- if (event->type() == QEvent::GraphicsSceneMousePress)
- currentPoint = ((QGraphicsSceneMouseEvent*)event)->pos().toPoint();
- else if(event->type() == QEvent::GraphicsSceneMouseRelease)
- currentPoint = QPoint();
-
- return result;
-}
-
-bool LLWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, NavigationType type)
-{
- Q_UNUSED( frame );
-
- if (!window)
- return false;
-
- if (request.url().scheme() == window->d->mNoFollowScheme)
- {
- QString encodedUrl = request.url().toEncoded();
- // QUrl is turning foo:///home/bar into foo:/home/bar for some reason while Firefox does not
- // http://bugs.webkit.org/show_bug.cgi?id=24695
- if (!encodedUrl.startsWith(window->d->mNoFollowScheme + "://")) {
- encodedUrl = encodedUrl.mid(window->d->mNoFollowScheme.length() + 1);
- encodedUrl = window->d->mNoFollowScheme + "://" + encodedUrl;
- }
- std::string rawUri = llToStdString(encodedUrl);
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(rawUri);
-
- // pass over the navigation type as per this page: http://apidocs.meego.com/1.1/core/html/qt4/qwebpage.html#NavigationType-enum
- // pass as strings because telling everyone who needs to know about enums is too invasive.
- std::string nav_type("unknown");
- if (type == QWebPage::NavigationTypeLinkClicked) nav_type="clicked";
- else
- if (type == QWebPage::NavigationTypeFormSubmitted) nav_type="form_submited";
- else
- if (type == QWebPage::NavigationTypeBackOrForward) nav_type="back_forward";
- else
- if (type == QWebPage::NavigationTypeReload) nav_type="reloaded";
- else
- if (type == QWebPage::NavigationTypeFormResubmitted) nav_type="form_resubmited";
- event.setNavigationType(nav_type);
-
- if ( mWhiteListRegex.length() )
- {
- if ( frame )
- {
- if ( checkRegex( frame->url() ) )
- {
- event.setTrustedHost( true );
- }
- else
- {
- event.setTrustedHost( false );
- }
- }
- else
- // no frame - no trust (TODO: when can this happen?)
- {
- event.setTrustedHost( false );
- }
- }
- else
- // no regex is like switching it off and indicating everything is trusted
- {
- event.setTrustedHost( true );
- }
-
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onClickLinkNoFollow, event);
-
- //qDebug() << "LLWebPage::acceptNavigationRequest: sending onClickLinkNoFollow, NavigationType is " << type << ", url is " << QString::fromStdString(rawUri) ;
- return false;
- }
-
-
- return true;
-}
-
-
-void LLWebPage::loadStarted()
-{
- if (!window)
- return;
-
- QUrl url( QString::fromStdString( window->getCurrentUri() ) );
- checkWhiteList( url );
-
- window->d->mShowLoadingOverlay = true;
-
- window->d->mTimeLoadStarted=time(NULL);
-
- window->d->mDirty = true;
- window->grabWindow(0,0,webView->boundingRect().width(),webView->boundingRect().height());
-
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onNavigateBegin, event);
-}
-
-void LLWebPage::loadFinished(bool)
-{
- if (!window)
- return;
-
- window->d->mShowLoadingOverlay = false;
-
- window->d->mDirty = true;
- window->grabWindow(0,0,webView->boundingRect().width(),webView->boundingRect().height());
-
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setEventUri(window->getCurrentUri());
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onPageChanged, event);
-
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onNavigateComplete, event);
-}
-
-void LLWebPage::windowCloseRequested()
-{
- if (!window)
- return;
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onWindowCloseRequested, event);
-}
-
-void LLWebPage::geometryChangeRequested(const QRect& geom)
-{
- if (!window)
- return;
-
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- // empty UUID indicates this is targeting the main window
-// event.setStringValue(window->getUUID());
- event.setRectValue(geom.x(), geom.y(), geom.width(), geom.height());
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onWindowGeometryChangeRequested, event);
-}
-
-QString LLWebPage::chooseFile(QWebFrame* parentFrame, const QString& suggestedFile)
-{
- Q_UNUSED(parentFrame);
- Q_UNUSED(suggestedFile);
-
- return QString::fromStdString( window->requestFilePicker() );
-}
-
-void LLWebPage::javaScriptAlert(QWebFrame* frame, const QString& msg)
-{
- Q_UNUSED(frame);
- QMessageBox *msgBox = new QMessageBox;
- msgBox->setWindowTitle(tr("JavaScript Alert - %1").arg(mainFrame()->url().host()));
- msgBox->setText(msg);
- msgBox->addButton(QMessageBox::Ok);
-
- QGraphicsProxyWidget *proxy = webView->scene()->addWidget(msgBox);
- proxy->setWindowFlags(Qt::Window); // this makes the item a panel (and will make it get a window 'frame')
- proxy->setPanelModality(QGraphicsItem::SceneModal);
- proxy->setPos((webView->boundingRect().width() - msgBox->sizeHint().width())/2,
- (webView->boundingRect().height() - msgBox->sizeHint().height())/2);
- proxy->setActive(true); // make it the active item
-
- connect(msgBox, SIGNAL(finished(int)), proxy, SLOT(deleteLater()));
- msgBox->show();
-
- webView->scene()->setFocusItem(proxy);
-}
-
-bool LLWebPage::javaScriptConfirm(QWebFrame* frame, const QString& msg)
-{
- Q_UNUSED(frame);
- Q_UNUSED(msg);
- qWarning() << "LLWebPage::" << __FUNCTION__ << "not implemented" << msg << "returning true";
- return true;
-}
-
-bool LLWebPage::javaScriptPrompt(QWebFrame* frame, const QString& msg, const QString& defaultValue, QString* result)
-{
- Q_UNUSED(frame);
- Q_UNUSED(msg);
- Q_UNUSED(defaultValue);
- Q_UNUSED(result);
- qWarning() << "LLWebPage::" << __FUNCTION__ << "not implemented" << msg << defaultValue << "returning false";
- return false;
-}
-
-void LLWebPage::extendNavigatorObject()
-{
- // legacy - will go away in the future
- QString q_host_language = QString::fromStdString( mHostLanguage );
- mainFrame()->evaluateJavaScript(QString("navigator.hostLanguage=\"%1\"").arg( q_host_language ));
-
- // the new way
- if ( mJsObject )
- {
- bool enabled = mJsObject->getSLObjectEnabled();
- if ( enabled )
- {
- mainFrame()->addToJavaScriptWindowObject("slviewer", mJsObject );
- };
- };
-}
-
-QWebPage *LLWebPage::createWindow(WebWindowType type)
-{
- Q_UNUSED(type);
- QWebPage *result = NULL;
-
- if(window)
- {
- result = window->createWindow();
- }
-
- return result;
-}
-
-void LLWebPage::setHostLanguage(const std::string& host_language)
-{
- mHostLanguage = host_language;
-}
-
-bool LLWebPage::supportsExtension(QWebPage::Extension extension) const
-{
- if (extension == QWebPage::ErrorPageExtension)
- return true;
- return false;
-}
-
-bool LLWebPage::extension(Extension, const ExtensionOption* option, ExtensionReturn* output)
-{
- const QWebPage::ErrorPageExtensionOption* info = static_cast(option);
- QWebPage::ErrorPageExtensionReturn* errorPage = static_cast(output);
-
- errorPage->content = QString("Failed loading page%1
")
- .arg(info->errorString).toUtf8();
-
- return true;
-}
-
-// Second Life viewer specific functions
-void LLWebPage::setSLObjectEnabled( bool enabled )
-{
- if ( mJsObject )
- mJsObject->setSLObjectEnabled( enabled );
-}
-
-void LLWebPage::setAgentLanguage( const std::string& agent_language )
-{
- if ( mJsObject )
- mJsObject->setAgentLanguage( QString::fromStdString( agent_language ) );
-}
-
-void LLWebPage::setAgentRegion( const std::string& agent_region )
-{
- if ( mJsObject )
- mJsObject->setAgentRegion( QString::fromStdString( agent_region ) );
-}
-
-void LLWebPage::setAgentLocation( double x, double y, double z )
-{
- if ( mJsObject )
- {
- QVariantMap location;
- location["x"] = x;
- location["y"] = y;
- location["z"] = z;
- mJsObject->setAgentLocation( location );
- }
-}
-
-void LLWebPage::setAgentGlobalLocation( double x, double y, double z )
-{
- if ( mJsObject )
- {
- QVariantMap global_location;
- global_location["x"] = x;
- global_location["y"] = y;
- global_location["z"] = z;
- mJsObject->setAgentGlobalLocation( global_location );
- }
-}
-
-void LLWebPage::setAgentOrientation( double angle )
-{
- if ( mJsObject )
- {
- mJsObject->setAgentOrientation( angle );
- }
-}
-
-void LLWebPage::setAgentMaturity( const std::string& agent_maturity )
-{
- if ( mJsObject )
- mJsObject->setAgentMaturity( QString::fromStdString( agent_maturity ) );
-}
-
-void LLWebPage::emitLocation()
-{
- if ( mJsObject )
- mJsObject->emitLocation();
-}
-
-void LLWebPage::emitMaturity()
-{
- if ( mJsObject )
- mJsObject->emitMaturity();
-}
-
-void LLWebPage::emitLanguage()
-{
- if ( mJsObject )
- mJsObject->emitLanguage();
-}
-
-void LLWebPage::setPageZoomFactor( double factor )
-{
- if ( webView )
- {
- webView->setZoomFactor( factor );
- }
-}
\ No newline at end of file
diff --git a/indra/llqtwebkit/llwebpage.h b/indra/llqtwebkit/llwebpage.h
deleted file mode 100644
index 1a882254f..000000000
--- a/indra/llqtwebkit/llwebpage.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLWEBPAGE_H
-#define LLWEBPAGE_H
-
-class QGraphicsWebView;
-#include
-#include "llqtwebkit.h"
-
-class LLEmbeddedBrowserWindow;
-class LLJsObject;
-
-class LLWebPage : public QWebPage
-{
- Q_OBJECT
-
- public:
- LLWebPage(QObject *parent = 0);
- ~LLWebPage();
-
- LLEmbeddedBrowserWindow *window;
- bool event(QEvent *event);
-
- QGraphicsWebView *webView;
-
- void setHostLanguage(const std::string& host_language);
- virtual bool supportsExtension(QWebPage::Extension extension) const;
- virtual bool extension(Extension extension, const ExtensionOption* option, ExtensionReturn* output);
-
- // set the regex used to determine if a page is trusted or not
- void setWhiteListRegex( const std::string& regex );
-
- // check the whitelist and update browser config as appropriate
- void checkWhiteList( const QUrl& url );
-
- // code to change settings if page is known to be trusted goes here
- void configureTrustedPage( bool is_trusted );
-
- // Second Life specific functions
- void setAgentRegion( const std::string& agent_region );
- void setAgentLocation( double x, double y, double z );
- void setAgentGlobalLocation( double x, double y, double z );
- void setAgentOrientation( double angle );
- void setSLObjectEnabled( bool enabled );
- void setAgentLanguage( const std::string& agent_language );
- void setAgentMaturity( const std::string& agent_maturity );
- void emitLocation();
- void emitMaturity();
- void emitLanguage();
-
- void setPageZoomFactor( double factor );
-
- protected:
- bool acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, NavigationType type);
-
- public slots:
- void loadProgressSlot(int progress);
- void linkHoveredSlot(const QString &link, const QString &title, const QString &textContent);
- void statusBarMessageSlot(const QString &);
- void titleChangedSlot(const QString &);
- void urlChangedSlot(const QUrl& url);
- void loadStarted();
- void loadFinished(bool ok);
- void windowCloseRequested();
- void geometryChangeRequested(const QRect& geom);
-
- private slots:
- void extendNavigatorObject();
-
- protected:
- QString chooseFile(QWebFrame* parentFrame, const QString& suggestedFile);
- void javaScriptAlert(QWebFrame* frame, const QString& msg);
- bool javaScriptConfirm(QWebFrame* frame, const QString& msg);
- bool javaScriptPrompt(QWebFrame* frame, const QString& msg, const QString& defaultValue, QString* result);
- QWebPage *createWindow(WebWindowType type);
-
- private:
- bool checkRegex( const QUrl& url );
- QPoint currentPoint;
- std::string mHostLanguage;
- std::string mWhiteListRegex;
- LLJsObject* mJsObject;
-};
-
-#endif
diff --git a/indra/llqtwebkit/llwebpageopenshim.cpp b/indra/llqtwebkit/llwebpageopenshim.cpp
deleted file mode 100644
index af9627907..000000000
--- a/indra/llqtwebkit/llwebpageopenshim.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "llwebpageopenshim.h"
-
-#include
-#include
-#include
-#include
-
-#include "llqtwebkit.h"
-#include "llembeddedbrowserwindow.h"
-#include "llembeddedbrowserwindow_p.h"
-
-LLWebPageOpenShim::LLWebPageOpenShim(LLEmbeddedBrowserWindow *in_window, QObject *parent)
- : QWebPage(parent)
- , window(in_window)
- , mOpeningSelf(false)
- , mGeometryChangeRequested(false)
- , mHasSentUUID(false)
-{
-// qDebug() << "LLWebPageOpenShim created";
-
- connect(this, SIGNAL(windowCloseRequested()),
- this, SLOT(windowCloseRequested()));
- connect(this, SIGNAL(geometryChangeRequested(const QRect&)),
- this, SLOT(geometryChangeRequested(const QRect&)));
-
- // Create a unique UUID for this proxy
- mUUID = llToStdString(QUuid::createUuid().toString());
-
- // mTarget starts out as the empty string, which is what we want.
-}
-
-LLWebPageOpenShim::~LLWebPageOpenShim()
-{
-// qDebug() << "LLWebPageOpenShim destroyed";
-}
-
-void LLWebPageOpenShim::windowCloseRequested()
-{
-// qDebug() << "LLWebPageOpenShim::windowCloseRequested";
- if(window)
- {
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setStringValue(mUUID);
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onWindowCloseRequested, event);
- }
-}
-
-void LLWebPageOpenShim::geometryChangeRequested(const QRect& geom)
-{
-// qDebug() << "LLWebPageOpenShim::geometryChangeRequested: " << geom ;
-
- // This seems to happen before acceptNavigationRequest is called. If this is the case, delay sending the message until afterwards.
-
- if(window && mHasSentUUID)
- {
- LLEmbeddedBrowserWindowEvent event(window->getWindowId());
- event.setStringValue(mUUID);
- event.setRectValue(geom.x(), geom.y(), geom.width(), geom.height());
- window->d->mEventEmitter.update(&LLEmbeddedBrowserWindowObserver::onWindowGeometryChangeRequested, event);
- }
- else
- {
- mGeometry = geom;
- mGeometryChangeRequested = true;
- }
-
-}
-
-bool LLWebPageOpenShim::matchesTarget(const std::string target)
-{
- return (target == mTarget);
-}
-
-bool LLWebPageOpenShim::matchesUUID(const std::string uuid)
-{
- return (uuid == mUUID);
-}
-
-void LLWebPageOpenShim::setProxy(const std::string &target, const std::string &uuid)
-{
- mTarget = target;
- mUUID = uuid;
-
- mHasSentUUID = false;
-
- mOpeningSelf = true;
-
- mainFrame()->evaluateJavaScript(QString("window.open("", \"%1\");").arg( QString::fromStdString(target) ));
-}
-
-bool LLWebPageOpenShim::acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, NavigationType type)
-{
- Q_UNUSED(type);
- if (!window)
- {
- return false;
- }
-
- if(mOpeningSelf)
- {
- qDebug() << "LLWebPageOpenShim::acceptNavigationRequest: reopening self to set target name.";
- return true;
- }
-
-#if 0
- qDebug() << "LLWebPageOpenShim::acceptNavigationRequest called, NavigationType is " << type
- << ", web frame is " << frame
- << ", frame->page is " << frame->page()
- << ", url is " << request.url()
- << ", frame name is " << frame->frameName()
- ;
-#endif
-
- if (request.url().scheme() == QString("file"))
- {
- // For some reason, I'm seeing a spurious call to this function with a file:/// URL that points to the current working directory.
- // Ignoring file:/// URLs here isn't a perfect solution (since it could potentially break content in local HTML files),
- // but it's the best I could come up with for now.
-
- return false;
- }
-
- // The name of the incoming frame has been set to the link target that was used when opening this window.
- std::string click_href = llToStdString(request.url());
- mTarget = llToStdString(frame->frameName());
-
- // build event based on the data we have and emit it
- LLEmbeddedBrowserWindowEvent event( window->getWindowId());
- event.setEventUri(click_href);
- event.setStringValue(mTarget);
- event.setStringValue2(mUUID);
-
- window->d->mEventEmitter.update( &LLEmbeddedBrowserWindowObserver::onClickLinkHref, event );
-
- mHasSentUUID = true;
-
- if(mGeometryChangeRequested)
- {
- geometryChangeRequested(mGeometry);
- mGeometryChangeRequested = false;
- }
-
- return false;
-}
-
-QWebPage *LLWebPageOpenShim::createWindow(WebWindowType type)
-{
- Q_UNUSED(type);
-
- return this;
-}
diff --git a/indra/llqtwebkit/llwebpageopenshim.h b/indra/llqtwebkit/llwebpageopenshim.h
deleted file mode 100644
index 322f832ce..000000000
--- a/indra/llqtwebkit/llwebpageopenshim.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (c) 2006-2010, Linden Research, Inc.
- *
- * LLQtWebKit Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in GPL-license.txt in this distribution, or online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLWEBPAGEOPENSHIM_H
-#define LLWEBPAGEOPENSHIM_H
-
-#include
-
-class LLEmbeddedBrowserWindow;
-class LLWebPageOpenShim : public QWebPage
-{
- Q_OBJECT
-
- public:
- LLWebPageOpenShim(LLEmbeddedBrowserWindow *in_window, QObject *parent = 0);
- ~LLWebPageOpenShim();
- LLEmbeddedBrowserWindow *window;
- bool matchesTarget(const std::string target);
- bool matchesUUID(const std::string uuid);
- void setProxy(const std::string &target, const std::string &uuid);
-
- public slots:
- void windowCloseRequested();
- void geometryChangeRequested(const QRect& geom);
-
- protected:
- bool acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, NavigationType type);
- QWebPage *createWindow(WebWindowType type);
-
- private:
- std::string mUUID;
- std::string mTarget;
- bool mOpeningSelf;
- bool mGeometryChangeRequested;
- bool mHasSentUUID;
- QRect mGeometry;
-
-};
-
-#endif
-
diff --git a/indra/llqtwebkit/passworddialog.ui b/indra/llqtwebkit/passworddialog.ui
deleted file mode 100644
index 033514eff..000000000
--- a/indra/llqtwebkit/passworddialog.ui
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
- PasswordDialog
-
-