summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md34
-rw-r--r--indra/CMakeLists.txt2
-rw-r--r--indra/cmake/00-Common.cmake2
-rw-r--r--indra/cmake/APR.cmake2
-rw-r--r--indra/cmake/Boost.cmake12
-rw-r--r--indra/cmake/CEFPlugin.cmake10
-rw-r--r--indra/cmake/CMakeLists.txt1
-rw-r--r--indra/cmake/CURL.cmake5
-rw-r--r--indra/cmake/FMODSTUDIO.cmake32
-rw-r--r--indra/cmake/GLEXT.cmake4
-rw-r--r--indra/cmake/LLPrimitive.cmake73
-rw-r--r--indra/cmake/LLWindow.cmake2
-rw-r--r--indra/cmake/LibVLCPlugin.cmake7
-rw-r--r--indra/cmake/NVAPI.cmake4
-rw-r--r--indra/cmake/OpenSSL.cmake5
-rw-r--r--indra/cmake/WebRTC.cmake2
-rw-r--r--indra/cmake/cpuinfo.cmake5
-rw-r--r--indra/llcommon/CMakeLists.txt9
-rw-r--r--indra/llcommon/StackWalker.cpp8
-rw-r--r--indra/llcommon/always_return.h16
-rw-r--r--indra/llcommon/llexception.cpp44
-rw-r--r--indra/llcommon/llexception.h114
-rw-r--r--indra/llcommon/llfasttimer.h8
-rw-r--r--indra/llcommon/llpreprocessor.h4
-rw-r--r--indra/llcommon/llprocessor.cpp63
-rw-r--r--indra/llcommon/llsdjson.cpp4
-rw-r--r--indra/llcommon/llstring.cpp2
-rw-r--r--indra/llcommon/llstring.h4
-rw-r--r--indra/llcommon/llwin32headers.h1
-rw-r--r--indra/llfilesystem/lldir.cpp4
-rw-r--r--indra/llfilesystem/lldiriterator.cpp8
-rw-r--r--indra/llfilesystem/lldiskcache.cpp31
-rw-r--r--indra/llmath/llquaternion2.inl5
-rw-r--r--indra/llmath/llvector4a.cpp10
-rw-r--r--indra/llmath/llvector4a.inl15
-rw-r--r--indra/llplugin/llpluginclassmedia.cpp4
-rw-r--r--indra/llplugin/llpluginprocessparent.cpp3
-rw-r--r--indra/llplugin/slplugin/CMakeLists.txt12
-rw-r--r--indra/llrender/llfontfreetype.cpp2
-rw-r--r--indra/llrender/llgl.cpp5
-rw-r--r--indra/llwebrtc/CMakeLists.txt13
-rw-r--r--indra/llwindow/CMakeLists.txt3
-rw-r--r--indra/llwindow/llwindowwin32.cpp13
-rw-r--r--indra/media_plugins/cef/CMakeLists.txt39
-rw-r--r--indra/media_plugins/libvlc/CMakeLists.txt13
-rw-r--r--indra/newview/CMakeLists.txt266
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rw-r--r--indra/newview/ViewerInstall.cmake107
-rw-r--r--indra/newview/app_settings/commands.xml4
-rw-r--r--indra/newview/app_settings/settings.xml20
-rw-r--r--indra/newview/icons/test/secondlife.icobin76861 -> 9662 bytes
-rw-r--r--indra/newview/icons/test/secondlife_256.BMPbin196662 -> 262954 bytes
-rwxr-xr-xindra/newview/linux_tools/launch_url.sh1
-rw-r--r--indra/newview/llappviewer.cpp16
-rw-r--r--indra/newview/llappviewerwin32.cpp46
-rw-r--r--indra/newview/llfloateravatarwelcomepack.cpp (renamed from indra/newview/llfloateravatar.cpp)19
-rw-r--r--indra/newview/llfloateravatarwelcomepack.h (renamed from indra/newview/llfloateravatar.h)25
-rw-r--r--indra/newview/lllogchat.cpp2
-rw-r--r--indra/newview/llprogressview.cpp132
-rw-r--r--indra/newview/llprogressview.h19
-rw-r--r--indra/newview/llstartup.cpp24
-rw-r--r--indra/newview/llviewerfloaterreg.cpp4
-rw-r--r--indra/newview/llviewerwindow.cpp10
-rw-r--r--indra/newview/llvoiceclient.cpp82
-rwxr-xr-xindra/newview/res/viewerRes.rc12
-rw-r--r--indra/newview/skins/default/textures/3p_icons/fmod_logo.pngbin0 -> 14486 bytes
-rw-r--r--indra/newview/skins/default/textures/3p_icons/havok_logo.pngbin0 -> 41488 bytes
-rw-r--r--indra/newview/skins/default/xui/de/panel_progress.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml109
-rw-r--r--indra/newview/skins/default/xui/en/floater_avatar_welcome_pack.xml25
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_progress.xml40
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_progress.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_progress.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_progress.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_progress.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/panel_progress.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_progress.xml2
-rw-r--r--indra/test/test.cpp70
84 files changed, 1181 insertions, 564 deletions
diff --git a/README.md b/README.md
index a5fd7a08e0..6c657e4972 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@ As a third party maintained fork of the [Second Life][] viewer, which includes A
## Download
-Most people use a pre-built viewer release to access Second Life. macOS, GNU/Linux and FreeBSD builds are
+Most people use a pre-built viewer release to access Second Life. FreeBSD, GNU/Linux, macOS and Windows builds are
[published on the official website][download]. More experimental viewers, such as release candidates and
project viewers, would be detailed on the same page, [in-world group][] notices, or [Discord][] server.
@@ -54,7 +54,7 @@ $ megapahit
### FreeBSD
```
-$ sudo su -
+$ su -
# portmaster devel/cmake devel/pkgconf audio/freealut devel/apr1 devel/boost-libs x11-toolkits/fltk math/glm textproc/hunspell misc/meshoptimizer archivers/minizip graphics/nanosvg www/libnghttp2 graphics/openjpeg devel/sdl20 multimedia/vlc audio/libvorbis devel/xxhash
# exit
$ setenv LL_BUILD "-O3 -std=c++20 -fPIC"
@@ -75,6 +75,7 @@ $ megapahit
### Gentoo
```
$ su -
+# emerge -a eselect-repository
# eselect repository add megapahit git git://megapahit.org/ebuild.git
# emaint sync -r megapahit
# emerge -a megapahit
@@ -96,7 +97,7 @@ $ open newview/Megapahit.app
### openSUSE Tumbleweed
```
-$ sudo zypper install gcc-c++ patchelf apr-util-devel boost-devel libboost_program_options-devel libboost_url1_87_0-devel libboost_context-devel libboost_fiber-devel libboost_filesystem-devel libboost_regex-devel libboost_system-devel libboost_thread-devel libexpat-devel fltk-devel glu-devel hunspell-devel minizip-devel nanosvg-devel libnghttp2-devel openjpeg2-devel pipewire-devel libpulse-devel libSDL2_gfx-1_0-0 libSDL2_gfx-devel sdl2-compat-devel vlc-devel libvorbis-devel xxhash-devel zlib-ng-devel libXrender-devel libXcursor-devel libXfixes-devel libXext-devel libXft-devel libXinerama-devel freetype2-devel fontconfig-devel libjpeg8-devel libjpeg8-devel freealut-devel
+$ sudo zypper install gcc-c++ patchelf apr-util-devel boost-devel libboost_program_options-devel libboost_url1_88_0-devel libboost_context-devel libboost_fiber-devel libboost_filesystem-devel libboost_regex-devel libboost_system-devel libboost_thread-devel libexpat-devel fltk-devel glu-devel hunspell-devel minizip-devel nanosvg-devel libnghttp2-devel openjpeg2-devel pipewire-devel libpulse-devel libSDL2_gfx-1_0-0 libSDL2_gfx-devel sdl2-compat-devel vlc-devel libvorbis-devel xxhash-devel zlib-ng-devel libXrender-devel libXcursor-devel libXfixes-devel libXext-devel libXft-devel libXinerama-devel freetype2-devel fontconfig-devel libjpeg8-devel libjpeg8-devel freealut-devel
$ export LL_BUILD="-O3 -std=c++20 -fPIC -DLL_LINUX=1"
$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DADDRESS_SIZE:STRING=64 -DUSE_OPENAL:BOOL=ON -DENABLE_MEDIA_PLUGINS:BOOL=ON -DLL_TESTS:BOOL=OFF -DNDOF:BOOL=ON -DROOT_PROJECT_NAME:STRING=Megapahit -DVIEWER_CHANNEL:STRING=Megapahit -DVIEWER_BINARY_NAME:STRING=megapahit -DBUILD_SHARED_LIBS:BOOL=OFF -DINSTALL:BOOL=ON -DPACKAGE:BOOL=ON ../indra
$ make -j`nproc`
@@ -118,14 +119,31 @@ $ sudo apt install ./megapahit-`cat newview/viewer_version.txt`-Linux.deb
$ megapahit
```
-### Windows
+### Windows arm64
+```
+$ vcpkg install pkgconf python3 freealut apr-util boost cpuinfo curl freetype glm hunspell libjpeg-turbo meshoptimizer minizip nghttp2 openjpeg sse2neon libvorbis libxml2[tools] xxhash
+$ vcpkg install --allow-unsupported boost-fiber
+$ export LL_BUILD="/MD /O2 /Ob2 /std:c++20 /Zc:wchar_t- /Zi /GR /DLL_RELEASE=1 /DLL_RELEASE_FOR_DOWNLOAD=1 /DNDEBUG /D_SECURE_STL=0 /D_HAS_ITERATOR_DEBUGGING=0 /DWIN32 /D_WINDOWS /DLL_WINDOWS=1 /DUNICODE /D_UNICODE /DWINVER=0x0602 /D_WIN32_WINNT=0x0602 /Zc:preprocessor"
+$ export PATH="$VCPKG_ROOT/downloads/tools/cmake-3.30.1-windows/cmake-3.30.1-windows-arm64/bin:$VCPKG_ROOT/downloads/tools/msys2/2db36fb050d01f45/usr/bin:$VCPKG_ROOT/installed/arm64-windows/tools/libxml2:/c/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin:$PATH"
+$ export PKG_CONFIG_LIBDIR="$VCPKG_ROOT/installed/arm64-windows/lib/pkgconfig"
+$ export PYTHON="$VCPKG_ROOT/installed/arm64-windows/tools/python3/python.exe"
+$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DADDRESS_SIZE:STRING=64 -DUSE_OPENAL:BOOL=ON -DUSE_FMODSTUDIO:BOOL=OFF -DENABLE_MEDIA_PLUGINS:BOOL=OFF -DLL_TESTS:BOOL=OFF -DNDOF:BOOL=OFF -DROOT_PROJECT_NAME:STRING=Megapahit -DVIEWER_CHANNEL:STRING=Megapahit -DVIEWER_BINARY_NAME:STRING=Megapahit -DBUILD_SHARED_LIBS:BOOL=OFF -DINSTALL:BOOL=ON -DPACKAGE:BOOL=ON -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVS_DISABLE_FATAL_WARNINGS:BOOL=ON ../indra
+$ MSBuild.exe Megapahit.sln -p:Configuration=Release
+$ cpack -G NSIS
+$ start Megapahit-`cat newview/viewer_version.txt`-win64.exe
+```
+
+### Windows x64
```
$ vcpkg install pkgconf python3 freealut apr-util boost freetype glm hunspell libjpeg-turbo meshoptimizer minizip nghttp2 openjpeg libvorbis libxml2[tools] xxhash
$ export LL_BUILD="/MD /O2 /Ob2 /std:c++20 /Zc:wchar_t- /Zi /GR /DLL_RELEASE=1 /DLL_RELEASE_FOR_DOWNLOAD=1 /DNDEBUG /D_SECURE_STL=0 /D_HAS_ITERATOR_DEBUGGING=0 /DWIN32 /D_WINDOWS /DLL_WINDOWS=1 /DUNICODE /D_UNICODE /DWINVER=0x0602 /D_WIN32_WINNT=0x0602"
-$ export PATH="/c/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin:$VCPKG_ROOT/downloads/tools/msys2/21caed2f81ec917b/mingw64/bin:$VCPKG_ROOT/installed/`uname -m|sed 's/86_//'`-windows/tools/libxml2:$PATH"
-$ export PKG_CONFIG_LIBDIR="$VCPKG_ROOT/installed/`uname -m|sed 's/86_//'`-windows/lib/pkgconfig"
-$ export PYTHON="$VCPKG_ROOT/installed/`uname -m|sed 's/86_//'`-windows/tools/python3/python.exe"
-$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DADDRESS_SIZE:STRING=64 -DUSE_OPENAL:BOOL=ON -DUSE_FMODSTUDIO:BOOL=OFF -DENABLE_MEDIA_PLUGINS:BOOL=OFF -DLL_TESTS:BOOL=OFF -DNDOF:BOOL=OFF -DROOT_PROJECT_NAME:STRING=Megapahit -DVIEWER_CHANNEL:STRING=Megapahit -DVIEWER_BINARY_NAME:STRING=megapahit -DBUILD_SHARED_LIBS:BOOL=OFF -DINSTALL:BOOL=OFF -DPACKAGE:BOOL=OFF ../indra
+$ export PATH="$VCPKG_ROOT/downloads/tools/cmake-3.30.1-windows/cmake-3.30.1-windows-i386/bin:$VCPKG_ROOT/downloads/tools/msys2/2db36fb050d01f45/usr/bin:$VCPKG_ROOT/installed/x64-windows/tools/libxml2:/c/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin:$PATH"
+$ export PKG_CONFIG_LIBDIR="$VCPKG_ROOT/installed/x64-windows/lib/pkgconfig"
+$ export PYTHON="$VCPKG_ROOT/installed/x64-windows/tools/python3/python.exe"
+$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DADDRESS_SIZE:STRING=64 -DUSE_OPENAL:BOOL=ON -DUSE_FMODSTUDIO:BOOL=OFF -DENABLE_MEDIA_PLUGINS:BOOL=ON -DLL_TESTS:BOOL=OFF -DNDOF:BOOL=OFF -DROOT_PROJECT_NAME:STRING=Megapahit -DVIEWER_CHANNEL:STRING=Megapahit -DVIEWER_BINARY_NAME:STRING=Megapahit -DBUILD_SHARED_LIBS:BOOL=OFF -DINSTALL:BOOL=ON -DPACKAGE:BOOL=ON -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVS_DISABLE_FATAL_WARNINGS:BOOL=ON ../indra
+$ MSBuild.exe Megapahit.sln -p:Configuration=Release
+$ cpack -G NSIS
+$ start Megapahit-`cat newview/viewer_version.txt`-win64.exe
```
## Contribute
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index b1970fba35..9224b04549 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -59,7 +59,7 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llmessage)
add_subdirectory(${LIBS_OPEN_PREFIX}llprimitive)
add_subdirectory(${LIBS_OPEN_PREFIX}llrender)
add_subdirectory(${LIBS_OPEN_PREFIX}llfilesystem)
-if (NOT CMAKE_SYSTEM_NAME MATCHES FreeBSD)
+if (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64)))
add_subdirectory(${LIBS_OPEN_PREFIX}llwebrtc)
endif ()
add_subdirectory(${LIBS_OPEN_PREFIX}llwindow)
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 0e3b89e98e..5cb0c23d6d 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -35,6 +35,8 @@ add_compile_definitions(BOOST_BIND_GLOBAL_PLACEHOLDERS)
if(CMAKE_OSX_ARCHITECTURES MATCHES arm64 OR CMAKE_SYSTEM_PROCESSOR MATCHES aarch64)
add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES=1 GLM_FORCE_NEON=1 GLM_ENABLE_EXPERIMENTAL=1)
+elseif($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES=1 GLM_ENABLE_EXPERIMENTAL=1)
else()
# Force enable SSE2 instructions in GLM per the manual
# https://github.com/g-truc/glm/blob/master/manual.md#section2_10
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index fa3b8a4ffb..58a00c74da 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -8,7 +8,7 @@ add_library( ll::apr INTERFACE IMPORTED )
if (WINDOWS)
target_include_directories(ll::apr SYSTEM INTERFACE ${prefix_result}/../include)
target_link_directories(ll::apr INTERFACE ${prefix_result})
- target_link_libraries(ll::apr INTERFACE apr-1 apr-util-1)
+ target_link_libraries(ll::apr INTERFACE libapr-1 libaprutil-1)
else ()
include(FindPkgConfig)
pkg_check_modules(Apr REQUIRED apr-1 apr-util-1)
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 9ea1f6c9a6..8459214f59 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -12,7 +12,11 @@ if (DARWIN)
elseif (WINDOWS)
target_include_directories( ll::boost SYSTEM INTERFACE ${prefix_result}/../include)
target_link_directories( ll::boost INTERFACE ${prefix_result})
- set(sfx -vc143-mt-x64-1_88)
+ if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ set(sfx -vc143-mt-a64-1_88)
+ else ()
+ set(sfx -vc143-mt-x64-1_88)
+ endif ()
else ()
find_package( Boost REQUIRED )
endif ()
@@ -21,11 +25,15 @@ target_link_libraries( ll::boost INTERFACE
boost_fiber${sfx}
boost_filesystem${sfx}
boost_program_options${sfx}
- boost_regex${sfx}
boost_system${sfx}
boost_thread${sfx}
boost_url${sfx}
)
+if (WINDOWS)
+ target_link_libraries( ll::boost INTERFACE boost_json${sfx})
+else ()
+ target_link_libraries( ll::boost INTERFACE boost_regex${sfx})
+endif ()
target_compile_definitions( ll::boost INTERFACE BOOST_BIND_GLOBAL_PLACEHOLDERS )
return()
diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake
index 70e6c366a4..b70be7926f 100644
--- a/indra/cmake/CEFPlugin.cmake
+++ b/indra/cmake/CEFPlugin.cmake
@@ -88,12 +88,10 @@ else (CMAKE_OSX_ARCHITECTURES MATCHES arm64)
use_prebuilt_binary(dullahan)
endif (CMAKE_OSX_ARCHITECTURES MATCHES arm64)
-if (${LINUX_DISTRO} MATCHES fedora)
- execute_process(
- COMMAND patchelf --remove-rpath bin/release/dullahan_host
- WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}
- )
-endif (${LINUX_DISTRO} MATCHES fedora)
+execute_process(
+ COMMAND patchelf --remove-rpath bin/release/dullahan_host
+ WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}
+ )
target_include_directories( ll::cef SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/cef)
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index 746d242560..5525ac9f24 100644
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -24,6 +24,7 @@ set(cmake_SOURCE_FILES
FindAutobuild.cmake
FMODSTUDIO.cmake
FreeType.cmake
+ GLEXT.cmake
GLH.cmake
GLM.cmake
Havok.cmake
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
index 06d5927174..211c3ae9a0 100644
--- a/indra/cmake/CURL.cmake
+++ b/indra/cmake/CURL.cmake
@@ -5,8 +5,9 @@ include(Linking)
include_guard()
add_library( ll::libcurl INTERFACE IMPORTED )
-#use_system_binary(libcurl)
-if (LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 OR DARWIN OR WINDOWS)
+if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+use_system_binary(libcurl)
+elseif (LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 OR DARWIN OR WINDOWS)
use_prebuilt_binary(curl)
if (DARWIN)
execute_process(
diff --git a/indra/cmake/FMODSTUDIO.cmake b/indra/cmake/FMODSTUDIO.cmake
index fb4734fe7b..8cac756ead 100644
--- a/indra/cmake/FMODSTUDIO.cmake
+++ b/indra/cmake/FMODSTUDIO.cmake
@@ -34,7 +34,7 @@ if (USE_FMODSTUDIO)
file(MAKE_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE})
if (DARWIN)
execute_process(
- COMMAND hdiutil attach -noverify fmodstudioapi20228mac-installer.dmg
+ COMMAND hdiutil attach -noverify fmodstudioapi20229mac-installer.dmg
WORKING_DIRECTORY $ENV{HOME}/Downloads
)
file(
@@ -64,36 +64,36 @@ if (USE_FMODSTUDIO)
file(WRITE ${PREBUILD_TRACKING_DIR}/fmodstudio_installed "${fmodstudio_installed}")
else ()
file(ARCHIVE_EXTRACT
- INPUT $ENV{HOME}/Downloads/fmodstudioapi20228linux.tar.gz
+ INPUT $ENV{HOME}/Downloads/fmodstudioapi20229linux.tar.gz
DESTINATION ${CMAKE_BINARY_DIR}
)
file(
COPY
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod.h
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod.hpp
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod_codec.h
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod_common.h
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod_dsp.h
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod_dsp_effects.h
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod_errors.h
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/inc/fmod_output.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod.hpp
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod_codec.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod_common.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod_dsp.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod_dsp_effects.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod_errors.h
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/inc/fmod_output.h
DESTINATION ${LIBS_PREBUILT_DIR}/include/fmodstudio
)
if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64)
file(
COPY
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/lib/arm64/libfmod.so
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/lib/arm64/libfmod.so.13
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/lib/arm64/libfmod.so.13.28
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/lib/arm64/libfmod.so
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/lib/arm64/libfmod.so.13
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/lib/arm64/libfmod.so.13.29
DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE}
FOLLOW_SYMLINK_CHAIN
)
else ()
file(
COPY
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13
- ${CMAKE_BINARY_DIR}/fmodstudioapi20228linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13.28
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13
+ ${CMAKE_BINARY_DIR}/fmodstudioapi20229linux/api/core/lib/${CMAKE_SYSTEM_PROCESSOR}/libfmod.so.13.29
DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE}
FOLLOW_SYMLINK_CHAIN
)
diff --git a/indra/cmake/GLEXT.cmake b/indra/cmake/GLEXT.cmake
index a780966f0c..f45b27e7b8 100644
--- a/indra/cmake/GLEXT.cmake
+++ b/indra/cmake/GLEXT.cmake
@@ -3,7 +3,9 @@ include(Prebuilt)
include(GLH)
add_library( ll::glext INTERFACE IMPORTED )
-use_system_binary(glext)
+#use_system_binary(glext)
+if (WINDOWS)
use_prebuilt_binary(glext)
+endif ()
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index 3429a744f5..e6adea477f 100644
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -18,44 +18,53 @@ if( USE_CONAN )
"${CONAN_INCLUDE_DIRS_COLLADADOM}/collada-dom/1.4/" )
endif()
-if( LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD )
+if (LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)
# Build of the collada-dom for Linux and FreeBSD is done in
# indra/llprimitive/CMakeLists.txt
return()
-elseif ( NOT WINDOWS )
+else ()
include(FindPkgConfig)
pkg_check_modules(Minizip REQUIRED minizip)
pkg_check_modules(Libxml2 REQUIRED libxml-2.0)
target_link_libraries( ll::minizip-ng INTERFACE ${Minizip_LIBRARIES} )
target_link_libraries( ll::libxml INTERFACE ${Libxml2_LIBRARIES} )
- if( ${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/colladadom_installed OR NOT ${colladadom_installed} EQUAL 0 )
- if( NOT EXISTS ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz )
+ if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/colladadom_installed OR NOT ${colladadom_installed} EQUAL 0)
+ if (NOT EXISTS ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz)
file(DOWNLOAD
https://github.com/secondlife/3p-colladadom/archive/refs/tags/v2.3-r8.tar.gz
${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz
)
- endif()
+ endif ()
file(ARCHIVE_EXTRACT
INPUT ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz
DESTINATION ${CMAKE_BINARY_DIR}
)
- if ( WINDOWS )
+ if (WINDOWS)
execute_process(
- COMMAND sed -i "s/SHARED/STATIC/g" CMakeLists.txt
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/src/1.4
+ COMMAND sed -i "s/SHARED/STATIC/" 1.4/CMakeLists.txt
+ COMMAND sed -i "/#include <cstdarg>/a #define WIN32" dae/daeUtils.cpp
+ COMMAND sed -i "/using namespace cdom;/a namespace boost{void boost::throw_exception(class std::exception const &){}}" dae/daeURI.cpp
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/src
)
- set(BOOST_LIBRARY_SUFFIX -vc143-mt-x64-1_88)
else ()
execute_process(
- COMMAND sed -i "" -e "s/SHARED/STATIC/g" CMakeLists.txt
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/src/1.4
+ COMMAND sed -i "" -e "s/SHARED/STATIC/" src/1.4/CMakeLists.txt
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8
)
endif ()
- if( DARWIN )
+ if (DARWIN)
set(BOOST_CFLAGS -I${Libxml2_LIBRARY_DIRS}exec/boost/1.87/include)
set(BOOST_LIBS -L${Minizip_LIBRARY_DIRS}exec/boost/1.87/lib)
set(BOOST_LIBRARY_SUFFIX -mt)
- endif()
+ elseif (WINDOWS)
+ set(BOOST_CFLAGS -I${prefix_result}/../include)
+ set(BOOST_LIBS -L${prefix_result})
+ if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ set(BOOST_LIBRARY_SUFFIX -vc143-mt-a64-1_88)
+ else ()
+ set(BOOST_LIBRARY_SUFFIX -vc143-mt-x64-1_88)
+ endif ()
+ endif ()
file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/collada/1.4)
try_compile(COLLADADOM_RESULT
PROJECT colladadom
@@ -78,7 +87,27 @@ elseif ( NOT WINDOWS )
-DOPT_COLLADA14:BOOL=ON
-DCOLLADA_DOM_INCLUDE_INSTALL_DIR:PATH=${LIBS_PREBUILT_DIR}/include/collada
)
- if( ${COLLADADOM_RESULT} )
+ if (WINDOWS)
+ execute_process(
+ COMMAND MSBuild.exe ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/Project.sln -p:Configuration=${CMAKE_BUILD_TYPE}
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8
+ OUTPUT_VARIABLE colladadom_installed
+ )
+ file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/include/collada)
+ file(
+ COPY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/include
+ DESTINATION ${LIBS_PREBUILT_DIR}/include
+ )
+ file(RENAME
+ ${LIBS_PREBUILT_DIR}/include/include
+ ${LIBS_PREBUILT_DIR}/include/collada
+ )
+ file(MAKE_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE})
+ file(RENAME
+ ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/src/1.4/${CMAKE_BUILD_TYPE}/collada14dom.lib
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom23-s.lib
+ )
+ elseif (${COLLADADOM_RESULT})
execute_process(
COMMAND ${CMAKE_MAKE_PROGRAM} install
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8
@@ -88,17 +117,15 @@ elseif ( NOT WINDOWS )
${ARCH_PREBUILT_DIRS}/libcollada14dom.a
${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom.a
)
- file(WRITE ${PREBUILD_TRACKING_DIR}/colladadom_installed "${colladadom_installed}")
- endif()
- endif()
-endif()
+ endif ()
+ file(WRITE ${PREBUILD_TRACKING_DIR}/colladadom_installed "${colladadom_installed}")
+ endif ()
+endif ()
-#use_system_binary( colladadom )
+if (FALSE)
+use_system_binary( colladadom )
-if (WINDOWS)
use_prebuilt_binary(colladadom)
-endif ()
-if( FALSE )
use_prebuilt_binary(minizip-ng) # needed for colladadom
use_prebuilt_binary(libxml2)
@@ -113,7 +140,7 @@ if (WINDOWS)
else()
target_link_libraries( ll::libxml INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libxml2.a)
endif()
-endif( FALSE )
+endif (FALSE)
target_include_directories( ll::colladadom SYSTEM INTERFACE
${LIBS_PREBUILT_DIR}/include/collada
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index 34df3ad33b..007b8dfba6 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -1,7 +1,7 @@
# -*- cmake -*-
include(Variables)
-include(GLH)
+include(GLEXT)
include(Prebuilt)
include_guard()
diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake
index 5ed77af0c2..45ef25a63c 100644
--- a/indra/cmake/LibVLCPlugin.cmake
+++ b/indra/cmake/LibVLCPlugin.cmake
@@ -27,6 +27,12 @@ if (DARWIN)
target_include_directories( ll::libvlc SYSTEM INTERFACE /Volumes/VLC\ media\ player/VLC.app/Contents/MacOS/include)
target_link_directories( ll::libvlc INTERFACE /Volumes/VLC\ media\ player/VLC.app/Contents/MacOS/lib)
target_link_libraries( ll::libvlc INTERFACE vlc vlccore )
+elseif (WINDOWS)
+use_prebuilt_binary(vlc-bin)
+ target_link_libraries( ll::libvlc INTERFACE
+ libvlc.lib
+ libvlccore.lib
+ )
else ()
include(FindPkgConfig)
pkg_check_modules(Libvlc REQUIRED libvlc vlc-plugin)
@@ -35,7 +41,6 @@ else ()
target_link_libraries( ll::libvlc INTERFACE ${Libvlc_LIBRARIES} )
endif ()
-#use_prebuilt_binary(vlc-bin)
set(LIBVLCPLUGIN ON CACHE BOOL
"LIBVLCPLUGIN support for the llplugin/llmedia test apps.")
diff --git a/indra/cmake/NVAPI.cmake b/indra/cmake/NVAPI.cmake
index ff5a5428e0..1bec691a18 100644
--- a/indra/cmake/NVAPI.cmake
+++ b/indra/cmake/NVAPI.cmake
@@ -4,10 +4,10 @@ include(Prebuilt)
set(NVAPI ON CACHE BOOL "Use NVAPI.")
if (NVAPI)
- if (WINDOWS)
+ if (WINDOWS AND NOT ($ENV{MSYSTEM_CARCH} MATCHES aarch64))
add_library( ll::nvapi INTERFACE IMPORTED )
target_link_libraries( ll::nvapi INTERFACE nvapi)
use_prebuilt_binary(nvapi)
- endif (WINDOWS)
+ endif ()
endif (NVAPI)
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index ef90068993..afa2ba377d 100644
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -5,8 +5,9 @@ include(Linking)
include_guard()
add_library( ll::openssl INTERFACE IMPORTED )
-#use_system_binary(openssl)
-if (LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 OR DARWIN OR WINDOWS)
+if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+use_system_binary(openssl)
+elseif (LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES x86_64 OR DARWIN OR WINDOWS)
use_prebuilt_binary(openssl)
if (DARWIN)
execute_process(
diff --git a/indra/cmake/WebRTC.cmake b/indra/cmake/WebRTC.cmake
index 454ed8c0a1..5a750fe7f3 100644
--- a/indra/cmake/WebRTC.cmake
+++ b/indra/cmake/WebRTC.cmake
@@ -8,7 +8,7 @@ add_library( ll::webrtc INTERFACE IMPORTED )
target_include_directories( ll::webrtc SYSTEM INTERFACE "${LIBS_PREBUILT_DIR}/include/webrtc" "${LIBS_PREBUILT_DIR}/include/webrtc/third_party/abseil-cpp")
if (${LINUX_DISTRO} MATCHES debian OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64 OR WINDOWS)
use_prebuilt_binary(webrtc)
-elseif (NOT CMAKE_SYSTEM_NAME MATCHES FreeBSD)
+elseif (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64)))
target_compile_definitions(ll::webrtc INTERFACE CM_WEBRTC=1)
if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/webrtc_installed OR NOT ${webrtc_installed} EQUAL 0)
if (DARWIN)
diff --git a/indra/cmake/cpuinfo.cmake b/indra/cmake/cpuinfo.cmake
new file mode 100644
index 0000000000..10fcab8e40
--- /dev/null
+++ b/indra/cmake/cpuinfo.cmake
@@ -0,0 +1,5 @@
+include(Prebuilt)
+
+add_library( ll::cpuinfo INTERFACE IMPORTED )
+
+use_system_binary(cpuinfo)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 6c1e1ef64a..07d2c4afeb 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -11,6 +11,9 @@ include(LLSharedLibs)
include(ZLIBNG)
include(Tracy)
+if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ include(cpuinfo)
+endif ()
set(llcommon_SOURCE_FILES
apply.cpp
@@ -282,6 +285,10 @@ target_link_libraries(
ll::tracy
)
+if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ target_link_libraries(llcommon ll::cpuinfo)
+endif ()
+
target_include_directories(llcommon INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(llcommon PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
@@ -297,6 +304,8 @@ if (CMAKE_OSX_ARCHITECTURES MATCHES arm64 OR CMAKE_SYSTEM_PROCESSOR MATCHES aarc
file(WRITE ${PREBUILD_TRACKING_DIR}/sse2neon_installed "0")
endif ()
target_include_directories(llcommon PUBLIC ${LIBS_PREBUILT_DIR}/include/sse2neon)
+elseif ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ target_include_directories(llcommon PUBLIC ${prefix_result}/../include/sse2neon)
endif ()
if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu) OR (${LINUX_DISTRO} MATCHES opensuse-tumbleweed))
diff --git a/indra/llcommon/StackWalker.cpp b/indra/llcommon/StackWalker.cpp
index e9ae1723fb..027df80df5 100644
--- a/indra/llcommon/StackWalker.cpp
+++ b/indra/llcommon/StackWalker.cpp
@@ -1100,6 +1100,14 @@ bool StackWalker::ShowCallstack(bool verbose, HANDLE hThread, const CONTEXT *con
s.AddrBStore.Mode = AddrModeFlat;
s.AddrStack.Offset = c.IntSp;
s.AddrStack.Mode = AddrModeFlat;
+#elif _M_ARM64
+ imageType = IMAGE_FILE_MACHINE_ARM64;
+ s.AddrPC.Offset = c.Pc;
+ s.AddrPC.Mode = AddrModeFlat;
+ s.AddrFrame.Offset = c.Fp;
+ s.AddrFrame.Mode = AddrModeFlat;
+ s.AddrStack.Offset = c.Sp;
+ s.AddrStack.Mode = AddrModeFlat;
#else
#error "Platform not supported!"
#endif
diff --git a/indra/llcommon/always_return.h b/indra/llcommon/always_return.h
index b99eb49096..a206471da5 100644
--- a/indra/llcommon/always_return.h
+++ b/indra/llcommon/always_return.h
@@ -79,22 +79,6 @@ namespace LL
DESIRED mDefault;
};
- // specialize for AlwaysReturn<void>
- template <>
- struct AlwaysReturn<void>
- {
- public:
- AlwaysReturn() {}
-
- // callable returns a type not convertible to DESIRED, return default
- template <typename CALLABLE, typename... ARGS>
- void operator()(CALLABLE&& callable, ARGS&&... args)
- {
- // discard whatever callable(args) returns
- std::forward<CALLABLE>(callable)(std::forward<ARGS>(args)...);
- }
- };
-
/**
* always_return<T>(some_function, some_args...) calls
* some_function(some_args...). It is guaranteed to return a value of type
diff --git a/indra/llcommon/llexception.cpp b/indra/llcommon/llexception.cpp
index 107fdc2b2d..c0154a569f 100644
--- a/indra/llcommon/llexception.cpp
+++ b/indra/llcommon/llexception.cpp
@@ -15,12 +15,7 @@
#include "llexception.h"
// STL headers
// std headers
-#include <iomanip>
-#include <sstream>
#include <typeinfo>
-#if LL_WINDOWS
-#include <excpt.h>
-#endif // LL_WINDOWS
// external library headers
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception/error_info.hpp>
@@ -34,6 +29,7 @@
// On Windows, header-only implementation causes macro collisions -- use
// prebuilt library
#define BOOST_STACKTRACE_LINK
+#include <excpt.h>
#endif // LL_WINDOWS
#include <boost/stacktrace.hpp>
@@ -98,47 +94,25 @@ void annotate_exception_(boost::exception& exc)
// For windows SEH exception handling we sometimes need a filter that will
// separate C++ exceptions from C SEH exceptions
-static constexpr U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
-static constexpr U32 STATUS_STACK_FULL = 0xC00000FD;
+static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
-void LL::seh::fill_stacktrace(std::string& stacktrace, U32 code)
+U32 msc_exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop)
{
- // Sadly, despite its diagnostic importance, trying to capture a
- // stacktrace when the stack is already blown only terminates us faster.
- if (code == STATUS_STACK_FULL)
- {
- stacktrace = "(stack overflow, no traceback)";
- }
- else
- {
- stacktrace = to_string(boost::stacktrace::stacktrace());
- }
-}
+ const auto stack = to_string(boost::stacktrace::stacktrace());
+ LL_WARNS() << "SEH Exception handled (that probably shouldn't be): Code " << code
+ << "\n Stack trace: \n"
+ << stack << LL_ENDL;
-U32 LL::seh::common_filter(U32 code, struct _EXCEPTION_POINTERS*)
-{
if (code == STATUS_MSC_EXCEPTION)
{
- // C++ exception, don't stop at this handler
+ // C++ exception, go on
return EXCEPTION_CONTINUE_SEARCH;
}
else
{
- // This is a non-C++ exception, e.g. hardware check.
- // Pass control into the handler block.
+ // handle it
return EXCEPTION_EXECUTE_HANDLER;
}
}
-void LL::seh::rethrow(U32 code, const std::string& stacktrace)
-{
- std::ostringstream out;
- out << "Windows exception 0x" << std::hex << code;
- if (! stacktrace.empty())
- {
- out << '\n' << stacktrace;
- }
- LLTHROW(Windows_SEH_exception(out.str()));
-}
-
#endif //LL_WINDOWS
diff --git a/indra/llcommon/llexception.h b/indra/llcommon/llexception.h
index f58a553eb3..68e609444e 100644
--- a/indra/llcommon/llexception.h
+++ b/indra/llcommon/llexception.h
@@ -12,7 +12,6 @@
#if ! defined(LL_LLEXCEPTION_H)
#define LL_LLEXCEPTION_H
-#include "always_return.h"
#include <stdexcept>
#include <boost/exception/exception.hpp>
#include <boost/throw_exception.hpp>
@@ -103,115 +102,14 @@ void crash_on_unhandled_exception_(const char*, int, const char*, const std::str
log_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, CONTEXT)
void log_unhandled_exception_(const char*, int, const char*, const std::string&);
-/*****************************************************************************
-* Structured Exception Handling
-*****************************************************************************/
-// this is used in platform-generic code -- define outside #if LL_WINDOWS
-struct Windows_SEH_exception: public LLException
-{
- Windows_SEH_exception(const std::string& what): LLException(what) {}
-};
-
-namespace LL
-{
-namespace seh
-{
-
-#if LL_WINDOWS //-------------------------------------------------------------
-
-void fill_stacktrace(std::string& stacktrace, U32 code);
-
-// wrapper around caller's U32 filter(U32 code, struct _EXCEPTION_POINTERS*)
-// filter function: capture a stacktrace, if possible, before forwarding the
-// call to the caller's filter() function
-template <typename FILTER>
-U32 filter_(std::string& stacktrace, FILTER&& filter,
- U32 code, struct _EXCEPTION_POINTERS* exptrs)
-{
- // By the time the handler gets control, the stack has been unwound,
- // so report the stack trace now at filter() time.
- fill_stacktrace(stacktrace, code);
- return std::forward<FILTER>(filter)(code, exptrs);
-}
-
-template <typename TRYCODE, typename FILTER, typename HANDLER>
-auto catcher_inner(std::string& stacktrace,
- TRYCODE&& trycode, FILTER&& filter, HANDLER&& handler)
-{
- __try
- {
- return std::forward<TRYCODE>(trycode)();
- }
- __except (filter_(stacktrace,
- std::forward<FILTER>(filter),
- GetExceptionCode(), GetExceptionInformation()))
- {
- return always_return<decltype(trycode())>(
- std::forward<HANDLER>(handler), GetExceptionCode(), stacktrace);
- }
-}
-
-// triadic variant specifies try(), filter(U32, struct _EXCEPTION_POINTERS*),
-// handler(U32, const std::string& stacktrace)
-// stacktrace may or may not be available
-template <typename TRYCODE, typename FILTER, typename HANDLER>
-auto catcher(TRYCODE&& trycode, FILTER&& filter, HANDLER&& handler)
-{
- // Construct and destroy this stacktrace string in the outer function
- // because we can't do either in the function with __try/__except.
- std::string stacktrace;
- return catcher_inner(stacktrace,
- std::forward<TRYCODE>(trycode),
- std::forward<FILTER>(filter),
- std::forward<HANDLER>(handler));
-}
-// common_filter() handles the typical case in which we want our handler
-// clause to handle only Structured Exceptions rather than explicitly-thrown
-// C++ exceptions
-U32 common_filter(U32 code, struct _EXCEPTION_POINTERS*);
-
-// dyadic variant specifies try(), handler(U32, stacktrace), assumes common_filter()
-template <typename TRYCODE, typename HANDLER>
-auto catcher(TRYCODE&& trycode, HANDLER&& handler)
-{
- return catcher(std::forward<TRYCODE>(trycode),
- common_filter,
- std::forward<HANDLER>(handler));
-}
-
-// monadic variant specifies try(), assumes default filter and handler
-template <typename TRYCODE>
-auto catcher(TRYCODE&& trycode)
-{
- return catcher(std::forward<TRYCODE>(trycode), rethrow);
-}
-
-[[noreturn]] void rethrow(U32 code, const std::string& stacktrace);
-
-#else // not LL_WINDOWS -----------------------------------------------------
-
-template <typename TRYCODE, typename FILTER, typename HANDLER>
-auto catcher(TRYCODE&& trycode, FILTER&&, HANDLER&&)
-{
- return std::forward<TRYCODE>(trycode)();
-}
-
-template <typename TRYCODE, typename HANDLER>
-auto catcher(TRYCODE&& trycode, HANDLER&&)
-{
- return std::forward<TRYCODE>(trycode)();
-}
-
-template <typename TRYCODE>
-auto catcher(TRYCODE&& trycode)
-{
- return std::forward<TRYCODE>(trycode)();
-}
+#if LL_WINDOWS
-#endif // not LL_WINDOWS -----------------------------------------------------
+// SEH exception filtering for use in __try __except
+// Separates C++ exceptions from C SEH exceptions
+// Todo: might be good idea to do some kind of seh_to_msc_wrapper(function, ARGS&&);
+U32 msc_exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop);
-} // namespace LL::seh
-} // namespace LL
+#endif //LL_WINDOWS
#endif /* ! defined(LL_LLEXCEPTION_H) */
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index a69a03e419..8499655bfa 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -99,7 +99,11 @@ public:
#if LL_FASTTIMER_USE_RDTSC
static U32 getCPUClockCount32()
{
+#if _M_ARM64
+ unsigned __int64 val = _ReadStatusReg(ARM64_PMCCNTR_EL0);
+#else
unsigned __int64 val = __rdtsc();
+#endif
val = val >> 8;
return static_cast<U32>(val);
}
@@ -107,7 +111,11 @@ public:
// return full timer value, *not* shifted by 8 bits
static U64 getCPUClockCount64()
{
+#if _M_ARM64
+ return static_cast<U64>( _ReadStatusReg(ARM64_PMCCNTR_EL0) );
+#else
return static_cast<U64>( __rdtsc() );
+#endif
}
#else
diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h
index e9f07f6fdf..268109e8b7 100644
--- a/indra/llcommon/llpreprocessor.h
+++ b/indra/llcommon/llpreprocessor.h
@@ -169,7 +169,11 @@
#define LL_TO_STRING_HELPER(x) #x
#define LL_TO_STRING(x) LL_TO_STRING_HELPER(x)
+#if _M_ARM64
+#define LL_TO_WSTRING_HELPER(x) L## #x
+#else
#define LL_TO_WSTRING_HELPER(x) L#x
+#endif
#define LL_TO_WSTRING(x) LL_TO_WSTRING_HELPER(x)
#define LL_FILE_LINENO_MSG(msg) __FILE__ "(" LL_TO_STRING(__LINE__) ") : " msg
#define LL_GLUE_IMPL(x, y) x##y
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
index 9b3cdf4df5..434501af77 100644
--- a/indra/llcommon/llprocessor.cpp
+++ b/indra/llcommon/llprocessor.cpp
@@ -40,6 +40,9 @@
# include <intrin.h>
# undef _interlockedbittestandset
# undef _interlockedbittestandreset
+#if _M_ARM64
+# include <cpuinfo.h>
+#endif
#endif
#include "llsd.h"
@@ -439,13 +442,21 @@ static F64 calculate_cpu_frequency(U32 measure_msecs)
//// completed now (serialization)
//__asm cpuid
int cpu_info[4] = {-1};
+#if _M_ARM64
+ std::fill(cpu_info, cpu_info + 4, 0);
+#else
__cpuid(cpu_info, 0);
+#endif
// We ask the high-res timer for the start time
QueryPerformanceCounter((LARGE_INTEGER *) &starttime);
// Then we get the current cpu clock and store it
+#if _M_ARM64
+ start = _ReadStatusReg(ARM64_PMCCNTR_EL0);
+#else
start = __rdtsc();
+#endif
// Now we wart for some msecs
_Delay(measure_msecs);
@@ -455,7 +466,11 @@ static F64 calculate_cpu_frequency(U32 measure_msecs)
QueryPerformanceCounter((LARGE_INTEGER *) &endtime);
// And also for the end cpu clock
+#if _M_ARM64
+ end = _ReadStatusReg(ARM64_PMCCNTR_EL0);
+#else
end = __rdtsc();
+#endif
// Now we can restore the default process and thread priorities
SetProcessAffinityMask(hProcess, dwProcessMask);
@@ -495,17 +510,60 @@ private:
// the other three array elements. The CPU identification string is
// not in linear order. The code below arranges the information
// in a human readable form.
+#if _M_ARM64
+ cpuinfo_initialize();
+#else
int cpu_info[4] = {-1};
__cpuid(cpu_info, 0);
unsigned int ids = (unsigned int)cpu_info[0];
setConfig(eMaxID, (S32)ids);
+#endif
char cpu_vendor[0x20];
memset(cpu_vendor, 0, sizeof(cpu_vendor));
+#if _M_ARM64
+ switch (cpuinfo_get_current_core()->vendor)
+ {
+ case cpuinfo_vendor_unknown:
+ setInfo(eVendor, "Unknown");
+ break;
+ case cpuinfo_vendor_arm:
+ setInfo(eVendor, "ARM");
+ break;
+ case cpuinfo_vendor_qualcomm:
+ setInfo(eVendor, "Qualcomm");
+ break;
+ case cpuinfo_vendor_apple:
+ setInfo(eVendor, "Apple");
+ break;
+ case cpuinfo_vendor_samsung:
+ setInfo(eVendor, "Samsung");
+ break;
+ case cpuinfo_vendor_nvidia:
+ setInfo(eVendor, "Nvidia");
+ break;
+ case cpuinfo_vendor_cavium:
+ setInfo(eVendor, "Cavium");
+ break;
+ case cpuinfo_vendor_broadcom:
+ setInfo(eVendor, "Broadcom");
+ break;
+ case cpuinfo_vendor_apm:
+ setInfo(eVendor, "APM");
+ break;
+ case cpuinfo_vendor_huawei:
+ setInfo(eVendor, "Huawei");
+ break;
+ default:
+ setInfo(eVendor, "Unknown");
+ break;
+ }
+#else
*((int*)cpu_vendor) = cpu_info[1];
*((int*)(cpu_vendor+4)) = cpu_info[3];
*((int*)(cpu_vendor+8)) = cpu_info[2];
setInfo(eVendor, cpu_vendor);
+#endif
std::string cmp_vendor(cpu_vendor);
bool is_amd = false;
if (cmp_vendor == "AuthenticAMD")
@@ -513,6 +571,10 @@ private:
is_amd = true;
}
+#if _M_ARM64
+ setInfo(eModel, cpuinfo_get_package(0)->name);
+ setInfo(eType, cpuinfo_get_uarch(0)->uarch);
+#else
// Get the information associated with each valid Id
for(unsigned int i=0; i<=ids; ++i)
{
@@ -623,6 +685,7 @@ private:
setConfig(eCacheSizeK, (cpu_info[2] >> 16) & 0xffff);
}
}
+#endif
}
};
diff --git a/indra/llcommon/llsdjson.cpp b/indra/llcommon/llsdjson.cpp
index 655869a704..a4b45ed80d 100644
--- a/indra/llcommon/llsdjson.cpp
+++ b/indra/llcommon/llsdjson.cpp
@@ -35,7 +35,11 @@
#include "llerror.h"
#include "../llmath/llmath.h"
+#if LL_WINDOWS
+#include <boost/json.hpp>
+#else
#include <boost/json/src.hpp>
+#endif
//=========================================================================
LLSD LlsdFromJson(const boost::json::value& val)
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 07adf71d18..bb6d091a97 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -260,7 +260,7 @@ 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 auto *const utf16_chars = &(*(utf16str.begin()));
S32 i = 0;
while (i < utf16_len)
{
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index 7a8edc176d..2e579a4d2d 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -635,7 +635,11 @@ LL_COMMON_API std::string rawstr_to_utf8(const std::string& raw);
//
// This typedef may or may not be identical to std::wstring, depending on
// LL_WCHAR_T_NATIVE.
+#if __FreeBSD__
+typedef std::basic_string<char16_t> llutf16string;
+#else
typedef std::basic_string<U16> llutf16string;
+#endif
// Considering wchar_t, llwchar and U16, there are three relevant cases:
#if LLWCHAR_IS_WCHAR_T // every which way but Windows
diff --git a/indra/llcommon/llwin32headers.h b/indra/llcommon/llwin32headers.h
index df433deb7a..32139821d5 100644
--- a/indra/llcommon/llwin32headers.h
+++ b/indra/llcommon/llwin32headers.h
@@ -29,6 +29,7 @@
#ifdef LL_WINDOWS
#include <windows.h> // Does not include winsock.h because WIN32_LEAN_AND_MEAN is defined
+#include <ws2tcpip.h>
#include <winsock2.h> // Requires windows.h
#endif
diff --git a/indra/llfilesystem/lldir.cpp b/indra/llfilesystem/lldir.cpp
index e8e5d6538b..d12080aafa 100644
--- a/indra/llfilesystem/lldir.cpp
+++ b/indra/llfilesystem/lldir.cpp
@@ -121,7 +121,11 @@ std::vector<std::string> LLDir::getFilesInDir(const std::string &dirname)
{
if (boost::filesystem::is_regular_file(dir_itr->status()))
{
+#if LL_WINDOWS
+ v.push_back(utf16str_to_utf8str(dir_itr->path().filename().wstring()));
+#else
v.push_back(dir_itr->path().filename().string());
+#endif
}
}
}
diff --git a/indra/llfilesystem/lldiriterator.cpp b/indra/llfilesystem/lldiriterator.cpp
index 61f768c512..cd99c79357 100644
--- a/indra/llfilesystem/lldiriterator.cpp
+++ b/indra/llfilesystem/lldiriterator.cpp
@@ -72,7 +72,11 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
if (!is_dir)
{
+#if LL_WINDOWS
+ LL_WARNS() << "Invalid path: \"" << utf16str_to_utf8str(dir_path.wstring()) << "\"" << LL_ENDL;
+#else
LL_WARNS() << "Invalid path: \"" << dir_path.string() << "\"" << LL_ENDL;
+#endif
return;
}
@@ -130,7 +134,11 @@ bool LLDirIterator::Impl::next(std::string &fname)
while (mIter != end_itr && !found)
{
boost::smatch match;
+#if LL_WINDOWS
+ std::string name = utf16str_to_utf8str(mIter->path().filename().wstring());
+#else
std::string name = mIter->path().filename().string();
+#endif
found = ll_regex_match(name, match, mFilterExp);
if (found)
{
diff --git a/indra/llfilesystem/lldiskcache.cpp b/indra/llfilesystem/lldiskcache.cpp
index 49904911a9..d9b223fb49 100644
--- a/indra/llfilesystem/lldiskcache.cpp
+++ b/indra/llfilesystem/lldiskcache.cpp
@@ -114,14 +114,22 @@ void LLDiskCache::purge()
{
if (boost::filesystem::is_regular_file(*iter, ec) && !ec.failed())
{
+#if LL_WINDOWS
+ if (utf16str_to_utf8str((*iter).path().wstring()).find(CACHE_FILENAME_PREFIX) != std::string::npos)
+#else
if ((*iter).path().string().find(CACHE_FILENAME_PREFIX) != std::string::npos)
+#endif
{
uintmax_t file_size = boost::filesystem::file_size(*iter, ec);
if (ec.failed())
{
continue;
}
+#if LL_WINDOWS
+ const std::string file_path = utf16str_to_utf8str((*iter).path().wstring());
+#else
const std::string file_path = (*iter).path().string();
+#endif
const std::time_t file_time = boost::filesystem::last_write_time(*iter, ec);
if (ec.failed())
{
@@ -159,10 +167,16 @@ void LLDiskCache::purge()
}
if (should_remove)
{
+#if LL_WINDOWS
+ boost::filesystem::remove(utf8str_to_utf16str(entry.second.second), ec);
+#else
boost::filesystem::remove(entry.second.second, ec);
+#endif
if (ec.failed())
{
+#if !LL_WINDOWS
LL_WARNS() << "Failed to delete cache file " << entry.second.second << ": " << ec.message() << LL_ENDL;
+#endif
}
}
}
@@ -237,12 +251,18 @@ void LLDiskCache::clearCache()
{
if (boost::filesystem::is_regular_file(*iter, ec) && !ec.failed())
{
+#if LL_WINDOWS
+ if (utf16str_to_utf8str((*iter).path().wstring()).find(CACHE_FILENAME_PREFIX) != std::string::npos)
+#else
if ((*iter).path().string().find(CACHE_FILENAME_PREFIX) != std::string::npos)
+#endif
{
boost::filesystem::remove(*iter, ec);
if (ec.failed())
{
+#if !LL_WINDOWS
LL_WARNS() << "Failed to delete cache file " << *iter << ": " << ec.message() << LL_ENDL;
+#endif
}
}
}
@@ -270,13 +290,20 @@ void LLDiskCache::removeOldVFSFiles()
{
if (boost::filesystem::is_regular_file(*iter, ec) && !ec.failed())
{
+#if LL_WINDOWS
+ if ((utf16str_to_utf8str((*iter).path().wstring()).find(CACHE_FORMAT) != std::string::npos) ||
+ (utf16str_to_utf8str((*iter).path().wstring()).find(DB_FORMAT) != std::string::npos))
+#else
if (((*iter).path().string().find(CACHE_FORMAT) != std::string::npos) ||
((*iter).path().string().find(DB_FORMAT) != std::string::npos))
+#endif
{
boost::filesystem::remove(*iter, ec);
if (ec.failed())
{
+#if !LL_WINDOWS
LL_WARNS() << "Failed to delete cache file " << *iter << ": " << ec.message() << LL_ENDL;
+#endif
}
}
}
@@ -311,7 +338,11 @@ uintmax_t LLDiskCache::dirFileSize(const std::string& dir)
{
if (boost::filesystem::is_regular_file(*iter, ec) && !ec.failed())
{
+#if LL_WINDOWS
+ if (utf16str_to_utf8str((*iter).path().wstring()).find(CACHE_FILENAME_PREFIX) != std::string::npos)
+#else
if ((*iter).path().string().find(CACHE_FILENAME_PREFIX) != std::string::npos)
+#endif
{
uintmax_t file_size = boost::filesystem::file_size(*iter, ec);
if (!ec.failed())
diff --git a/indra/llmath/llquaternion2.inl b/indra/llmath/llquaternion2.inl
index ce5ed73926..b431d5766c 100644
--- a/indra/llmath/llquaternion2.inl
+++ b/indra/llmath/llquaternion2.inl
@@ -26,8 +26,13 @@
#include "llquaternion2.h"
+#if _M_ARM64
+static const LLQuad LL_V4A_PLUS_ONE = {.n128_f32 = {1.f, 1.f, 1.f, 1.f}};
+static const LLQuad LL_V4A_MINUS_ONE = {.n128_f32 = {-1.f, -1.f, -1.f, -1.f}};
+#else
static const LLQuad LL_V4A_PLUS_ONE = {1.f, 1.f, 1.f, 1.f};
static const LLQuad LL_V4A_MINUS_ONE = {-1.f, -1.f, -1.f, -1.f};
+#endif
// Ctor from LLQuaternion
inline LLQuaternion2::LLQuaternion2( const LLQuaternion& quat )
diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp
index b81d50f0f9..df20585d16 100644
--- a/indra/llmath/llvector4a.cpp
+++ b/indra/llmath/llvector4a.cpp
@@ -30,6 +30,15 @@
#include "llmath.h"
#include "llquantize.h"
+#if _M_ARM64
+extern const LLQuad F_ZERO_4A = {.n128_f32 = {0, 0, 0, 0}};
+extern const LLQuad F_APPROXIMATELY_ZERO_4A = {.n128_f32 = {
+ F_APPROXIMATELY_ZERO,
+ F_APPROXIMATELY_ZERO,
+ F_APPROXIMATELY_ZERO,
+ F_APPROXIMATELY_ZERO
+}};
+#else
extern const LLQuad F_ZERO_4A = { 0, 0, 0, 0 };
extern const LLQuad F_APPROXIMATELY_ZERO_4A = {
F_APPROXIMATELY_ZERO,
@@ -37,6 +46,7 @@ extern const LLQuad F_APPROXIMATELY_ZERO_4A = {
F_APPROXIMATELY_ZERO,
F_APPROXIMATELY_ZERO
};
+#endif
extern const LLVector4a LL_V4A_ZERO = reinterpret_cast<const LLVector4a&> ( F_ZERO_4A );
extern const LLVector4a LL_V4A_EPSILON = reinterpret_cast<const LLVector4a&> ( F_APPROXIMATELY_ZERO_4A );
diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl
index 36dbec078c..17e7de6eeb 100644
--- a/indra/llmath/llvector4a.inl
+++ b/indra/llmath/llvector4a.inl
@@ -335,8 +335,13 @@ inline void LLVector4a::normalize3()
LLVector4a lenSqrd; lenSqrd.setAllDot3( *this, *this );
// rsqrt = approximate reciprocal square (i.e., { ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2 }
const LLQuad rsqrt = _mm_rsqrt_ps(lenSqrd.mQ);
+#if _M_ARM64
+ static const LLQuad half = {.n128_f32 = {0.5f, 0.5f, 0.5f, 0.5f}};
+ static const LLQuad three = {.n128_f32 = {3.f, 3.f, 3.f, 3.f }};
+#else
static const LLQuad half = { 0.5f, 0.5f, 0.5f, 0.5f };
static const LLQuad three = {3.f, 3.f, 3.f, 3.f };
+#endif
// Now we do one round of Newton-Raphson approximation to get full accuracy
// According to the Newton-Raphson method, given a first 'w' for the root of f(x) = 1/x^2 - a (i.e., x = 1/sqrt(a))
// the next better approximation w[i+1] = w - f(w)/f'(w) = w - (1/w^2 - a)/(-2*w^(-3))
@@ -359,8 +364,13 @@ inline void LLVector4a::normalize4()
LLVector4a lenSqrd; lenSqrd.setAllDot4( *this, *this );
// rsqrt = approximate reciprocal square (i.e., { ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2 }
const LLQuad rsqrt = _mm_rsqrt_ps(lenSqrd.mQ);
+#if _M_ARM64
+ static const LLQuad half = {.n128_f32 = {0.5f, 0.5f, 0.5f, 0.5f}};
+ static const LLQuad three = {.n128_f32 = {3.f, 3.f, 3.f, 3.f}};
+#else
static const LLQuad half = { 0.5f, 0.5f, 0.5f, 0.5f };
static const LLQuad three = {3.f, 3.f, 3.f, 3.f };
+#endif
// Now we do one round of Newton-Raphson approximation to get full accuracy
// According to the Newton-Raphson method, given a first 'w' for the root of f(x) = 1/x^2 - a (i.e., x = 1/sqrt(a))
// the next better approximation w[i+1] = w - f(w)/f'(w) = w - (1/w^2 - a)/(-2*w^(-3))
@@ -383,8 +393,13 @@ inline LLSimdScalar LLVector4a::normalize3withLength()
LLVector4a lenSqrd; lenSqrd.setAllDot3( *this, *this );
// rsqrt = approximate reciprocal square (i.e., { ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2 }
const LLQuad rsqrt = _mm_rsqrt_ps(lenSqrd.mQ);
+#if _M_ARM64
+ static const LLQuad half = {.n128_f32 = {0.5f, 0.5f, 0.5f, 0.5f}};
+ static const LLQuad three = {.n128_f32 = {3.f, 3.f, 3.f, 3.f}};
+#else
static const LLQuad half = { 0.5f, 0.5f, 0.5f, 0.5f };
static const LLQuad three = {3.f, 3.f, 3.f, 3.f };
+#endif
// Now we do one round of Newton-Raphson approximation to get full accuracy
// According to the Newton-Raphson method, given a first 'w' for the root of f(x) = 1/x^2 - a (i.e., x = 1/sqrt(a))
// the next better approximation w[i+1] = w - f(w)/f'(w) = w - (1/w^2 - a)/(-2*w^(-3))
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 17f403e8e8..5eb22332d4 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -33,9 +33,7 @@
#include "llpluginmessageclasses.h"
#include "llcontrol.h"
-#if LL_DARWIN || LL_LINUX || __FreeBSD__
extern LLControlGroup gSavedSettings;
-#endif
#if LL_DARWIN
extern bool gHiDPISupport;
#endif
@@ -936,10 +934,8 @@ void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path_cache
message.setValue("username", username); // cef shares cache between users but creates user-based contexts
message.setValue("cef_log_file", user_data_path_cef_log);
-#if LL_DARWIN || LL_LINUX || __FreeBSD__
bool cef_verbose_log = gSavedSettings.getBOOL("CefVerboseLog");
message.setValueBoolean("cef_verbose_log", cef_verbose_log);
-#endif
sendMessage(message);
}
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index 19a0ce639a..9e4640d20a 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -275,6 +275,9 @@ void LLPluginProcessParent::init(const std::string &launcher_filename, const std
{
mProcessParams.executable = launcher_filename;
mProcessParams.cwd = plugin_dir;
+#if LL_WINDOWS
+ mProcessParams.envs.add(llformat("SYSTEMROOT=%s", getenv("SYSTEMROOT")));
+#endif
mPluginFile = plugin_filename;
mPluginDir = plugin_dir;
mCPUUsage = 0.0f;
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index d29731894f..03a057fbcb 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -49,6 +49,10 @@ target_link_libraries(SLPlugin
ll::pluginlibraries
)
+if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ target_link_libraries(${PROJECT_NAME} clog)
+endif ()
+
if (DARWIN)
# Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later)
add_custom_command(
@@ -66,14 +70,14 @@ if (BUILD_SHARED_LIBS)
endif ()
if (INSTALL)
- if (DARWIN)
+ if (DARWIN OR WINDOWS)
install(TARGETS ${PROJECT_NAME} DESTINATION .)
elseif (${LINUX_DISTRO} MATCHES arch)
install(TARGETS ${PROJECT_NAME} DESTINATION lib/${VIEWER_BINARY_NAME})
- else (DARWIN)
+ else ()
install(TARGETS ${PROJECT_NAME} DESTINATION libexec/${VIEWER_BINARY_NAME})
- endif (DARWIN)
-endif (INSTALL)
+ endif ()
+endif ()
if (LL_TESTS)
ll_deploy_sharedlibs_command(SLPlugin)
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 41d0a1af31..e93c98970b 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -32,7 +32,7 @@
// Freetype stuff
#include <ft2build.h>
#ifdef LL_WINDOWS
-#include <freetype2\freetype\ftsystem.h>
+#include <freetype/ftsystem.h>
#endif
#include "llfontfreetypesvg.h"
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index 70a28a1740..ac66faaf5a 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -238,8 +238,6 @@ PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC wglBlitContextFramebufferAMD = n
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = nullptr;
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = nullptr;
-/*
-
// GL_VERSION_1_2
//PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements = nullptr;
//PFNGLTEXIMAGE3DPROC glTexImage3D = nullptr;
@@ -984,7 +982,6 @@ PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glMultiDrawArraysIndirectCount = nullpt
PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glMultiDrawElementsIndirectCount = nullptr;
PFNGLPOLYGONOFFSETCLAMPPROC glPolygonOffsetClamp = nullptr;
-*/
#endif
LLGLManager gGLManager;
@@ -1434,7 +1431,6 @@ void LLGLManager::initExtensions()
mInited = true;
-/*
#if LL_WINDOWS
LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL;
@@ -2272,7 +2268,6 @@ void LLGLManager::initExtensions()
glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC)GLH_EXT_GET_PROC_ADDRESS("glPolygonOffsetClamp");
#endif
-*/
}
void rotate_quat(LLQuaternion& rotation)
diff --git a/indra/llwebrtc/CMakeLists.txt b/indra/llwebrtc/CMakeLists.txt
index 6c0216234c..a64a3e4dac 100644
--- a/indra/llwebrtc/CMakeLists.txt
+++ b/indra/llwebrtc/CMakeLists.txt
@@ -82,8 +82,13 @@ if (INSTALL)
set(_LIB lib/${ARCH}-linux-gnu)
elseif (${LINUX_DISTRO} MATCHES fedora OR (${LINUX_DISTRO} MATCHES opensuse-tumbleweed) OR (${LINUX_DISTRO} MATCHES gentoo))
set(_LIB lib${ADDRESS_SIZE})
- else (DARWIN)
+ else ()
set(_LIB lib)
- endif (DARWIN)
- install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
-endif (INSTALL)
+ endif ()
+
+ if (WINDOWS)
+ install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}.dll DESTINATION .)
+ else ()
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+ endif ()
+endif ()
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index 1f0820a9f6..6debd54665 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -55,6 +55,7 @@ set(llwindow_LINK_LIBRARIES
llfilesystem
llxml
ll::glm
+ ll::glext
ll::uilibraries
ll::SDL
)
@@ -63,7 +64,7 @@ include_directories(${CMAKE_SOURCE_DIR}/llrender)
# Libraries on which this library depends, needed for Linux builds
# Sort by high-level to low-level
-if (NOT DARWIN)
+if (NOT (DARWIN OR WINDOWS))
list(APPEND viewer_SOURCE_FILES
llkeyboardsdl.cpp
llwindowsdl.cpp
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index a781e638ee..4fca74497f 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -160,7 +160,18 @@ HGLRC SafeCreateContext(HDC &hdc)
GLuint SafeChoosePixelFormat(HDC &hdc, const PIXELFORMATDESCRIPTOR *ppfd)
{
- return LL::seh::catcher([hdc, ppfd]{ return ChoosePixelFormat(hdc, ppfd); });
+ __try
+ {
+ return ChoosePixelFormat(hdc, ppfd);
+ }
+ __except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ // convert to C++ styled exception
+ // C exception don't allow classes, so it's a regular char array
+ char integer_string[32];
+ sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode());
+ throw std::exception(integer_string);
+ }
}
//static
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 9142a4516a..97b82ba050 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -193,8 +193,39 @@ if (INSTALL)
DIRECTORY ${AUTOBUILD_INSTALL_DIR}/resources/locales
DESTINATION ${_LIB}
)
- else (DARWIN)
+ elseif (WINDOWS)
+ set(_LIB llplugin)
+ install(
+ PROGRAMS
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/chrome_elf.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/d3dcompiler_47.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host.exe
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/libEGL.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/libGLESv2.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/libcef.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/libvlc.dll
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/libvlccore.dll
+ DESTINATION llplugin
+ )
+ install(
+ FILES
+ ${AUTOBUILD_INSTALL_DIR}/resources/chrome_100_percent.pak
+ ${AUTOBUILD_INSTALL_DIR}/resources/chrome_200_percent.pak
+ ${AUTOBUILD_INSTALL_DIR}/resources/icudtl.dat
+ ${AUTOBUILD_INSTALL_DIR}/resources/resources.pak
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/snapshot_blob.bin
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/v8_context_snapshot.bin
+ DESTINATION llplugin
+ )
+ install(
+ DIRECTORY ${AUTOBUILD_INSTALL_DIR}/resources/locales
+ DESTINATION llplugin
+ )
+ else ()
set(_LIB lib)
- endif (DARWIN)
- install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
-endif (INSTALL)
+ endif ()
+ if (NOT WINDOWS)
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+ endif ()
+endif ()
diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt
index e99f25a1df..1919f54a82 100644
--- a/indra/media_plugins/libvlc/CMakeLists.txt
+++ b/indra/media_plugins/libvlc/CMakeLists.txt
@@ -95,8 +95,13 @@ if (INSTALL)
set(_LIB lib/${ARCH}-linux-gnu)
elseif (${LINUX_DISTRO} MATCHES fedora OR (${LINUX_DISTRO} MATCHES opensuse-tumbleweed) OR (${LINUX_DISTRO} MATCHES gentoo))
set(_LIB lib${ADDRESS_SIZE})
- else (DARWIN)
+ else ()
set(_LIB lib)
- endif (DARWIN)
- install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
-endif (INSTALL)
+ endif ()
+ if (WINDOWS)
+ install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}.dll DESTINATION llplugin)
+ install(DIRECTORY ${AUTOBUILD_INSTALL_DIR}/bin/release/plugins DESTINATION llplugin)
+ else ()
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+ endif ()
+endif ()
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 764f1f6b21..744c876c37 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -184,11 +184,11 @@ set(viewer_SOURCE_FILES
llflexibleobject.cpp
llfloater360capture.cpp
llfloaterabout.cpp
+ llfloateravatarwelcomepack.cpp
llfloaterbvhpreview.cpp
llfloateraddpaymentmethod.cpp
llfloaterauction.cpp
llfloaterautoreplacesettings.cpp
- llfloateravatar.cpp
llfloateravatarpicker.cpp
llfloateravatarrendersettings.cpp
llfloateravatartextures.cpp
@@ -746,7 +746,7 @@ set(viewer_SOURCE_FILES
rlvhandler.cpp
)
-if (CMAKE_SYSTEM_NAME MATCHES FreeBSD)
+if (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64))
list(REMOVE_ITEM viewer_SOURCE_FILES llvoicewebrtc.cpp)
endif ()
@@ -867,11 +867,11 @@ set(viewer_HEADER_FILES
llflexibleobject.h
llfloater360capture.h
llfloaterabout.h
+ llfloateravatarwelcomepack.h
llfloaterbvhpreview.h
llfloateraddpaymentmethod.h
llfloaterauction.h
llfloaterautoreplacesettings.h
- llfloateravatar.h
llfloateravatarpicker.h
llfloateravatarrendersettings.h
llfloateravatartextures.h
@@ -1494,7 +1494,7 @@ if (DARWIN)
list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
endif (DARWIN)
-if (NOT DARWIN)
+if (NOT (DARWIN OR WINDOWS))
LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp)
set_source_files_properties(
llappviewerlinux.cpp
@@ -1752,6 +1752,74 @@ list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST})
set(PACKAGE ON CACHE BOOL
"Add a package target that builds an installer package.")
+if (PACKAGE)
+ set(CPACK_PACKAGE_NAME ${VIEWER_BINARY_NAME}
+ CACHE STRING "Viewer binary name.")
+ set(CPACK_PACKAGE_VERSION ${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}
+ CACHE STRING "Viewer major.minor.patch.revision versions.")
+ set(VIEWER_PACKAGE_COMMENT "A fork of the Second Life viewer")
+ set(VIEWER_PACKAGE_DESCRIPTION "An entrance to virtual empires in only megabytes. A shelter for the metaverse refugees, especially those from less supported operating systems.")
+ set(VIEWER_PACKAGE_DOMAIN_NAME ${VIEWER_BINARY_NAME}.net)
+endif ()
+
+if (CMAKE_COMMAND MATCHES /usr/bin/cmake OR WINDOWS)
+ add_custom_command(
+ TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+ COMMAND sed
+ ARGS -e '/Linden Lab.*/d' ${CMAKE_HOME_DIRECTORY}/../doc/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/following residents.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/along with.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^$$/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/\t.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ B.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ C.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ M.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ O.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ S.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ s.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '/^ V.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sort
+ ARGS -R contributions.txt -o ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND paste
+ ARGS -s -d, ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
+ COMMAND sed
+ ARGS -i 's/,/, /g' ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
+ )
+else ()
+ add_custom_command(
+ TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+ COMMAND sed
+ ARGS -e '/Linden Lab.*/d' ${CMAKE_HOME_DIRECTORY}/../doc/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '' -e '/following residents.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '' -e '/along with.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '' -e '/^$$/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '' -e '/\t.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sed
+ ARGS -i '' -e '/^ .*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND sort
+ ARGS -R contributions.txt -o ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
+ COMMAND paste
+ ARGS -s -d, ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
+ COMMAND sed
+ ARGS -i '' -e 's/,/, /g' ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
+ )
+endif ()
+
if(USE_PRECOMPILED_HEADERS)
target_precompile_headers( ${VIEWER_BINARY_NAME} PRIVATE llviewerprecompiledheaders.h )
endif(USE_PRECOMPILED_HEADERS)
@@ -1909,6 +1977,17 @@ if (WINDOWS)
endif (NOT UNATTENDED)
if (PACKAGE)
+
+ set(CPACK_NSIS_DISPLAY_NAME ${VIEWER_BINARY_NAME})
+ set(CPACK_NSIS_PACKAGE_NAME ${VIEWER_BINARY_NAME})
+ set(CPACK_NSIS_HELP_LINK https://${VIEWER_PACKAGE_DOMAIN_NAME})
+ set(CPACK_NSIS_URL_INFO_ABOUT https://${VIEWER_PACKAGE_DOMAIN_NAME})
+ set(CPACK_NSIS_CONTACT $ENV{USER}@${VIEWER_PACKAGE_DOMAIN_NAME})
+ set(CPACK_NSIS_WELCOME_TITLE "Welcome to ${VIEWER_BINARY_NAME}!")
+ set(CPACK_NSIS_MENU_LINKS Megapahit.exe "Megapahit Viewer")
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY ${VIEWER_BINARY_NAME})
+
+ if (FALSE)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.xz
COMMAND ${PYTHON_EXECUTABLE}
@@ -1955,6 +2034,7 @@ if (WINDOWS)
# temporarily disable packaging of event_host until hg subrepos get
# sorted out on the parabuild cluster...
#${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.xz)
+ endif (FALSE)
endif (PACKAGE)
elseif (DARWIN)
@@ -2025,10 +2105,14 @@ target_link_libraries(${VIEWER_BINARY_NAME}
ll::openxr
)
-if (NOT CMAKE_SYSTEM_NAME MATCHES FreeBSD)
+if (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64)))
target_link_libraries(${VIEWER_BINARY_NAME} llwebrtc )
endif ()
+if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ target_link_libraries(${VIEWER_BINARY_NAME} clog)
+endif ()
+
if (ENABLE_MEDIA_PLUGINS)
target_link_libraries(${VIEWER_BINARY_NAME} ll::libvlc )
if (DARWIN OR LINUX)
@@ -2047,8 +2131,9 @@ endif()
set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
"Path to artwork files.")
-set_source_files_properties(llinventorygallery.cpp PROPERTIES COMPILE_FLAGS
- -Wno-unused-but-set-variable)
+if (NOT WINDOWS)
+ set_source_files_properties(llinventorygallery.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-but-set-variable)
+endif ()
if (CMAKE_CXX_COMPILER_ID MATCHES Clang)
set_source_files_properties(llappviewerlinux.cpp PROPERTIES
COMPILE_FLAGS -Wno-dangling-gsl
@@ -2125,38 +2210,47 @@ foreach(elem ${country_codes})
configure_file(${emoji_mapping_src_file} ${emoji_mapping_dst_file} COPYONLY)
endforeach()
-if (PACKAGE)
- set(CPACK_PACKAGE_NAME ${VIEWER_BINARY_NAME}
- CACHE STRING "Viewer binary name.")
- set(CPACK_PACKAGE_VERSION ${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}
- CACHE STRING "Viewer major.minor.patch.revision versions.")
- set(VIEWER_PACKAGE_COMMENT "A fork of the Second Life viewer")
- set(VIEWER_PACKAGE_DESCRIPTION "An entrance to virtual empires in only megabytes. A shelter for the metaverse refugees, especially those from less supported operating systems.")
- set(VIEWER_PACKAGE_DOMAIN_NAME ${VIEWER_BINARY_NAME}.net)
-endif ()
-
if (LINUX)
- add_custom_command(
- TARGET ${VIEWER_BINARY_NAME} POST_BUILD
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -e '/Linden Lab.*/d' ${CMAKE_HOME_DIRECTORY}/../doc/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -i '/following residents.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -i '/along with.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -i '/^$$/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -i '/\t.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -i '/^ .*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sort
- ARGS -R contributions.txt -o ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND paste
- ARGS -s -d, ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
- COMMAND ${CMAKE_SYSROOT}/usr/bin/sed
- ARGS -i 's/,/, /g' ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
+ if (FALSE)
+ set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION})
+
+ # These are the generated targets that are copied to package/
+ set(COPY_INPUT_DEPENDENCIES
+ ${VIEWER_BINARY_NAME}
+ SLPlugin
+ #media_plugin_gstreamer010
+ llcommon
)
+
+ #if (NOT USE_BUGSPLAT)
+ # LIST(APPEND COPY_INPUT_DEPENDENCIES linux-crash-logger)
+ #endif (NOT USE_BUGSPLAT)
+
+ add_custom_command(
+ OUTPUT ${product}.tar.xz
+ COMMAND ${PYTHON_EXECUTABLE}
+ ARGS
+ ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ --arch=${ARCH}
+ --artwork=${ARTWORK_DIR}
+ "--bugsplat=${BUGSPLAT_DB}"
+ "--openal=${USE_OPENAL}"
+ "--tracy=${USE_TRACY}"
+ --build=${CMAKE_CURRENT_BINARY_DIR}
+ --buildtype=${CMAKE_BUILD_TYPE}
+ "--channel=${VIEWER_CHANNEL}"
+ --configuration=${CMAKE_CFG_INTDIR}
+ --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
+ --grid=${GRID}
+ --source=${CMAKE_CURRENT_SOURCE_DIR}
+ --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
+ --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+ DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ ${COPY_INPUT_DEPENDENCIES}
+ )
+ endif (FALSE)
+
if (PACKAGE)
if (${LINUX_DISTRO} MATCHES arch)
configure_file(
@@ -2198,54 +2292,13 @@ if (LINUX)
set(CPACK_RPM_PACKAGE_REQUIRES "apr-util, boost-fiber, boost-program-options, boost-regex, boost-thread, boost-url, expat, fltk, mesa-libGLU, hunspell, libnghttp2, openjpeg2, SDL2, vlc-libs, vlc-plugins-base, libvorbis"
CACHE STRING "RPM package requirements.")
else ()
- set(CPACK_RPM_PACKAGE_REQUIRES "libapr-util1-0, libboost_fiber1_87_0, libboost_program_options1_87_0, libboost_regex1_87_0, libboost_thread1_87_0, libboost_url1_87_0, libboost_url1_87_0-x86-64-v3, expat, libfltk1_3, libGLU1, libhunspell-1_7-0, libnghttp2-14, openjpeg2, libSDL2-2_0-0, libvlc5, vlc-codecs, libvorbis0"
+ set(CPACK_RPM_PACKAGE_REQUIRES "libapr-util1-0, libboost_fiber1_88_0, libboost_program_options1_88_0, libboost_regex1_88_0, libboost_thread1_88_0, libboost_url1_88_0, libboost_url1_88_0-x86-64-v3, expat, libfltk1_3, libGLU1, libhunspell-1_7-0, libnghttp2-14, openjpeg2, libSDL2-2_0-0, libvlc5, vlc-codecs, libvorbis0"
CACHE STRING "RPM package requirements.")
endif ()
endif ()
endif (PACKAGE)
if (FALSE)
- set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION})
-
- # These are the generated targets that are copied to package/
- set(COPY_INPUT_DEPENDENCIES
- ${VIEWER_BINARY_NAME}
- SLPlugin
- #media_plugin_gstreamer010
- llcommon
- )
-
- #if (NOT USE_BUGSPLAT)
- # LIST(APPEND COPY_INPUT_DEPENDENCIES linux-crash-logger)
- #endif (NOT USE_BUGSPLAT)
-
- add_custom_command(
- OUTPUT ${product}.tar.xz
- COMMAND ${PYTHON_EXECUTABLE}
- ARGS
- ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
- --arch=${ARCH}
- --artwork=${ARTWORK_DIR}
- "--bugsplat=${BUGSPLAT_DB}"
- "--openal=${USE_OPENAL}"
- "--tracy=${USE_TRACY}"
- --build=${CMAKE_CURRENT_BINARY_DIR}
- --buildtype=${CMAKE_BUILD_TYPE}
- "--channel=${VIEWER_CHANNEL}"
- --configuration=${CMAKE_CFG_INTDIR}
- --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
- --grid=${GRID}
- --source=${CMAKE_CURRENT_SOURCE_DIR}
- --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
- --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
- DEPENDS
- ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
- ${COPY_INPUT_DEPENDENCIES}
- )
-
- if (PACKAGE)
- endif (PACKAGE)
-
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched
COMMAND ${PYTHON_EXECUTABLE}
@@ -2281,45 +2334,22 @@ if (LINUX)
endif (PACKAGE)
endif (FALSE)
-else (LINUX)
- add_custom_command(
- TARGET ${VIEWER_BINARY_NAME} POST_BUILD
- COMMAND sed
- ARGS -e '/Linden Lab.*/d' ${CMAKE_HOME_DIRECTORY}/../doc/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sed
- ARGS -i '' -e '/following residents.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sed
- ARGS -i '' -e '/along with.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sed
- ARGS -i '' -e '/^$$/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sed
- ARGS -i '' -e '/\t.*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sed
- ARGS -i '' -e '/^ .*/d' ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND sort
- ARGS -R contributions.txt -o ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt
- COMMAND paste
- ARGS -s -d, ${CMAKE_CURRENT_BINARY_DIR}/contributions.txt > ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
- COMMAND sed
- ARGS -i '' -e 's/,/, /g' ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
- )
- if (CMAKE_SYSTEM_NAME MATCHES FreeBSD AND PACKAGE)
- set(CPACK_BINARY_FREEBSD ON CACHE BOOL "Able to package FreeBSD PKG.")
- set(CPACK_FREEBSD_PACKAGE_COMMENT ${VIEWER_PACKAGE_COMMENT}
- CACHE STRING "FreeBSD package comment.")
- set(CPACK_FREEBSD_PACKAGE_DESCRIPTION ${VIEWER_PACKAGE_DESCRIPTION}
- CACHE STRING "FreeBSD package description.")
- set(CPACK_FREEBSD_PACKAGE_WWW https://${VIEWER_PACKAGE_DOMAIN_NAME}
- CACHE STRING "FreeBSD package WWW.")
- set(CPACK_FREEBSD_PACKAGE_LICENSE LGPL21
- CACHE STRING "FreeBSD package license.")
- set(CPACK_FREEBSD_PACKAGE_MAINTAINER $ENV{USER}@${VIEWER_PACKAGE_DOMAIN_NAME}
- CACHE STRING "FreeBSD package maintainer.")
- set(CPACK_FREEBSD_PACKAGE_ORIGIN net/${VIEWER_BINARY_NAME}
- CACHE STRING "FreeBSD package origin.")
- set(CPACK_FREEBSD_PACKAGE_DEPS "audio/freealut;devel/apr;devel/boost-libs;x11-toolkits/fltk;textproc/hunspell;misc/meshoptimizer;archivers/minizip;www/libnghttp2;graphics/openjpeg;devel/sdl2;multimedia/vlc;audio/libvorbis"
- CACHE STRING "FreeBSD package dependencies.")
- endif ()
+elseif (CMAKE_SYSTEM_NAME MATCHES FreeBSD AND PACKAGE)
+ set(CPACK_BINARY_FREEBSD ON CACHE BOOL "Able to package FreeBSD PKG.")
+ set(CPACK_FREEBSD_PACKAGE_COMMENT ${VIEWER_PACKAGE_COMMENT}
+ CACHE STRING "FreeBSD package comment.")
+ set(CPACK_FREEBSD_PACKAGE_DESCRIPTION ${VIEWER_PACKAGE_DESCRIPTION}
+ CACHE STRING "FreeBSD package description.")
+ set(CPACK_FREEBSD_PACKAGE_WWW https://${VIEWER_PACKAGE_DOMAIN_NAME}
+ CACHE STRING "FreeBSD package WWW.")
+ set(CPACK_FREEBSD_PACKAGE_LICENSE LGPL21
+ CACHE STRING "FreeBSD package license.")
+ set(CPACK_FREEBSD_PACKAGE_MAINTAINER $ENV{USER}@${VIEWER_PACKAGE_DOMAIN_NAME}
+ CACHE STRING "FreeBSD package maintainer.")
+ set(CPACK_FREEBSD_PACKAGE_ORIGIN net/${VIEWER_BINARY_NAME}
+ CACHE STRING "FreeBSD package origin.")
+ set(CPACK_FREEBSD_PACKAGE_DEPS "audio/freealut;devel/apr;devel/boost-libs;x11-toolkits/fltk;textproc/hunspell;misc/meshoptimizer;archivers/minizip;www/libnghttp2;graphics/openjpeg;devel/sdl2;multimedia/vlc;audio/libvorbis"
+ CACHE STRING "FreeBSD package dependencies.")
endif (LINUX)
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 099f298456..6329380f96 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-7.1.14
+7.1.15
diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake
index 1281136cef..343c3fb9c7 100644
--- a/indra/newview/ViewerInstall.cmake
+++ b/indra/newview/ViewerInstall.cmake
@@ -84,22 +84,107 @@ if (DARWIN)
endif (PACKAGE)
install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake)
+elseif (WINDOWS)
+
+ install(DIRECTORY
+ app_settings
+ character
+ fonts
+ skins
+ DESTINATION .
+ )
+
+ install(FILES
+ ${AUTOBUILD_INSTALL_DIR}/ca-bundle.crt
+ cube.dae
+ featuretable.txt
+ DESTINATION .
+ )
+
+ install(FILES
+ licenses-win32.txt
+ RENAME licenses.txt
+ DESTINATION .
+ )
+
+ install(FILES
+ ${SCRIPTS_DIR}/messages/message_template.msg
+ ${SCRIPTS_DIR}/../etc/message.xml
+ ${CMAKE_CURRENT_BINARY_DIR}/contributors.txt
+ DESTINATION app_settings
+ )
+
+ install(DIRECTORY
+ ${AUTOBUILD_INSTALL_DIR}/dictionaries
+ DESTINATION app_settings
+ )
+
+ if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
+ install(
+ PROGRAMS
+ ${prefix_result}/../bin/libcrypto-3-arm64.dll
+ ${prefix_result}/../bin/libssl-3-arm64.dll
+ ${prefix_result}/../bin/libcurl.dll
+ DESTINATION .
+ )
+ set(BOOST_PLATFORM a${ADDRESS_SIZE})
+ else ()
+ set(BOOST_PLATFORM x${ADDRESS_SIZE})
+ endif ()
+
+ install(
+ PROGRAMS
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${VIEWER_BINARY_NAME}.exe
+ ${prefix_result}/../bin/OpenAL32.dll
+ ${prefix_result}/../bin/alut.dll
+ ${prefix_result}/../bin/boost_context-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_fiber-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_filesystem-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_json-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_program_options-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_thread-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_url-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/brotlicommon.dll
+ ${prefix_result}/../bin/brotlidec.dll
+ ${prefix_result}/../bin/bz2.dll
+ ${prefix_result}/../bin/fmt.dll
+ ${prefix_result}/../bin/freetype.dll
+ ${prefix_result}/../bin/hunspell-1.7-0.dll
+ ${prefix_result}/../bin/iconv-2.dll
+ ${prefix_result}/../bin/jpeg62.dll
+ ${prefix_result}/../bin/libapr-1.dll
+ ${prefix_result}/../bin/libaprutil-1.dll
+ ${prefix_result}/../bin/libexpat.dll
+ ${prefix_result}/../bin/libpng16.dll
+ ${prefix_result}/../bin/libxml2.dll
+ ${prefix_result}/../bin/meshoptimizer.dll
+ ${prefix_result}/../bin/minizip.dll
+ ${prefix_result}/../bin/nghttp2.dll
+ ${prefix_result}/../bin/ogg.dll
+ ${prefix_result}/../bin/openjp2.dll
+ ${prefix_result}/../bin/vorbis.dll
+ ${prefix_result}/../bin/vorbisenc.dll
+ ${prefix_result}/../bin/vorbisfile.dll
+ ${prefix_result}/../bin/zlib1.dll
+ DESTINATION .
+ )
+
+ install(
+ PROGRAMS
+ ${prefix_result}/../bin/boost_context-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/boost_fiber-vc143-mt-${BOOST_PLATFORM}-1_88.dll
+ ${prefix_result}/../bin/libapr-1.dll
+ ${prefix_result}/../bin/libaprutil-1.dll
+ ${prefix_result}/../bin/libexpat.dll
+ DESTINATION llplugin
+ )
+
else (DARWIN)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}
DESTINATION bin
)
-if (${LINUX_DISTRO} MATCHES arch)
- install(PROGRAMS linux_tools/launch_url.sh
- DESTINATION lib/${VIEWER_BINARY_NAME}
- )
-else (${LINUX_DISTRO} MATCHES arch)
- install(PROGRAMS linux_tools/launch_url.sh
- DESTINATION libexec/${VIEWER_BINARY_NAME}
- )
-endif (${LINUX_DISTRO} MATCHES arch)
-
if (LINUX)
if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES ubuntu))
set(_LIB lib/${ARCH}-linux-gnu)
@@ -112,7 +197,7 @@ if (LINUX)
install(FILES
${ARCH_PREBUILT_DIRS_RELEASE}/libfmod.so
${ARCH_PREBUILT_DIRS_RELEASE}/libfmod.so.13
- ${ARCH_PREBUILT_DIRS_RELEASE}/libfmod.so.13.28
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libfmod.so.13.29
DESTINATION ${_LIB})
endif (USE_FMODSTUDIO)
endif (LINUX)
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index 635e5e40f5..6a05466e06 100644
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -26,9 +26,9 @@
label_ref="Command_Avatar_Label"
tooltip_ref="Command_Avatar_Tooltip"
execute_function="Floater.ToggleOrBringToFront"
- execute_parameters="avatar"
+ execute_parameters="avatar_welcome_pack"
is_running_function="Floater.IsOpen"
- is_running_parameters="avatar"
+ is_running_parameters="avatar_welcome_pack"
/>
<command name="build"
available_in_toybox="true"
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index dee3ffa7e4..315018bbee 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -643,16 +643,16 @@
<key>Value</key>
<real>16.0</real>
</map>
- <key>AvatarPickerURL</key>
+ <key>AvatarWelcomePack</key>
<map>
- <key>Comment</key>
- <string>Avatar picker contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html</string>
+ <key>Comment</key>
+ <string>Avatar Welcome Pack contents</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/vawp/index.html</string>
</map>
<!--AvatarBakedTextureUploadTimeout is in use by QA-->
<key>AvatarBakedTextureUploadTimeout</key>
@@ -14980,7 +14980,7 @@
<key>Comment</key>
<string>Avatar follows cursor with avatars eyes, when disabled, avatar will look forward</string>
<key>Persist</key>
- <integer>0</integer>
+ <integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
diff --git a/indra/newview/icons/test/secondlife.ico b/indra/newview/icons/test/secondlife.ico
index ceb8e8e6eb..c8430a6bd3 100644
--- a/indra/newview/icons/test/secondlife.ico
+++ b/indra/newview/icons/test/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_256.BMP b/indra/newview/icons/test/secondlife_256.BMP
index e23fcfdbe9..829db82c52 100644
--- a/indra/newview/icons/test/secondlife_256.BMP
+++ b/indra/newview/icons/test/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/linux_tools/launch_url.sh b/indra/newview/linux_tools/launch_url.sh
index 7c4ebf2291..404ea36f26 100755
--- a/indra/newview/linux_tools/launch_url.sh
+++ b/indra/newview/linux_tools/launch_url.sh
@@ -61,7 +61,6 @@ fi
# will be tried first, which is a debian alternative.
BROWSER_COMMANDS=" \
x-www-browser \
- chrome \
firefox \
mozilla-firefox \
iceweasel \
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 7580100977..d9596164eb 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -131,10 +131,10 @@
#include "stringize.h"
#include "llcoros.h"
#include "llexception.h"
-#if LL_DARWIN || LL_LINUX || __FreeBSD__
+#if !_M_ARM64 // !LL_LINUX
#include "cef/dullahan_version.h"
-#endif
#include "vlc/libvlc_version.h"
+#endif // LL_LINUX
#if LL_DARWIN
#if LL_SDL
@@ -987,7 +987,7 @@ bool LLAppViewer::init()
return false;
}
-#if defined(__i386__) || defined(__x86_64__) || defined(__amd64__)
+#if defined(__i386__) || defined(__x86_64__) || defined(__amd64__) || _M_X64
// Without SSE2 support we will crash almost immediately, warn here.
if (!gSysCPU.hasSSE2())
{
@@ -1544,7 +1544,11 @@ bool LLAppViewer::doFrame()
if(fpsLimitSleepFor)
{
+#if LL_WINDOWS
+ std::this_thread::sleep_for(std::chrono::microseconds(fpsLimitSleepFor));
+#else
usleep(fpsLimitSleepFor);
+#endif
}
// yield some time to the os based on command line option
@@ -3423,7 +3427,7 @@ LLSD LLAppViewer::getViewerInfo() const
info["VOICE_VERSION"] = LLTrans::getString("NotConnected");
}
-#if LL_DARWIN || LL_LINUX || __FreeBSD__
+#if !_M_ARM64 // !LL_LINUX
std::ostringstream cef_ver_codec;
cef_ver_codec << "Dullahan: ";
cef_ver_codec << DULLAHAN_VERSION_MAJOR;
@@ -3453,7 +3457,7 @@ LLSD LLAppViewer::getViewerInfo() const
info["LIBCEF_VERSION"] = "Undefined";
#endif
-//#if !LL_LINUX
+#if !_M_ARM64 // !LL_LINUX
std::ostringstream vlc_ver_codec;
vlc_ver_codec << LIBVLC_VERSION_MAJOR;
vlc_ver_codec << ".";
@@ -3461,11 +3465,9 @@ LLSD LLAppViewer::getViewerInfo() const
vlc_ver_codec << ".";
vlc_ver_codec << LIBVLC_VERSION_REVISION;
info["LIBVLC_VERSION"] = vlc_ver_codec.str();
-/*
#else
info["LIBVLC_VERSION"] = "Undefined";
#endif
-*/
S32 packets_in = (S32)LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_IN);
if (packets_in > 0)
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index ef609026ad..3e51a900ce 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -47,8 +47,10 @@
#include "llviewercontrol.h"
#include "lldxhardware.h"
+#if !_M_ARM64
#include "nvapi/nvapi.h"
#include "nvapi/NvApiDriverSettings.h"
+#endif
#include <stdlib.h>
@@ -206,6 +208,7 @@ LONG WINAPI catchallCrashHandler(EXCEPTION_POINTERS * /*ExceptionInfo*/)
const std::string LLAppViewerWin32::sWindowClass = "Second Life";
+#if !_M_ARM64
/*
This function is used to print to the command line a text message
describing the nvapi error and quits
@@ -219,6 +222,7 @@ void nvapi_error(NvAPI_Status status)
//should always trigger when asserts are enabled
//llassert(status == NVAPI_OK);
}
+#endif
// Create app mutex creates a unique global windows object.
// If the object can be created it returns true, otherwise
@@ -241,6 +245,7 @@ bool create_app_mutex()
return result;
}
+#if !_M_ARM64
void ll_nvapi_init(NvDRSSessionHandle hSession)
{
// (2) load all the system settings into the session
@@ -395,11 +400,19 @@ void ll_nvapi_init(NvDRSSessionHandle hSession)
return;
}
}
+#endif
-int APIENTRY wWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- PWSTR pCmdLine,
- int nCmdShow)
+//#define DEBUGGING_SEH_FILTER 1
+#if DEBUGGING_SEH_FILTER
+# define WINMAIN DebuggingWinMain
+#else
+# define WINMAIN wWinMain
+#endif
+
+int APIENTRY WINMAIN(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ PWSTR pCmdLine,
+ int nCmdShow)
{
// Call Tracy first thing to have it allocate memory
// https://github.com/wolfpld/tracy/issues/196
@@ -457,6 +470,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
return -1;
}
+#if !_M_ARM64
NvDRSSessionHandle hSession = 0;
static LLCachedControl<bool> use_nv_api(gSavedSettings, "NvAPICreateApplicationProfile", true);
if (use_nv_api)
@@ -481,6 +495,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
}
}
}
+#endif
// Have to wait until after logging is initialized to display LFH info
if (num_heaps > 0)
@@ -538,16 +553,39 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
delete viewer_app_ptr;
viewer_app_ptr = NULL;
+#if !_M_ARM64
// (NVAPI) (6) We clean up. This is analogous to doing a free()
if (hSession)
{
NvAPI_DRS_DestroySession(hSession);
hSession = 0;
}
+#endif
return 0;
}
+#if DEBUGGING_SEH_FILTER
+// The compiler doesn't like it when you use __try/__except blocks
+// in a method that uses object destructors. Go figure.
+// This winmain just calls the real winmain inside __try.
+// The __except calls our exception filter function. For debugging purposes.
+int APIENTRY wWinMain(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ PWSTR lpCmdLine,
+ int nCmdShow)
+{
+ __try
+ {
+ WINMAIN(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
+ }
+ __except( viewer_windows_exception_handler( GetExceptionInformation() ) )
+ {
+ _tprintf( _T("Exception handled.\n") );
+ }
+}
+#endif
+
void LLAppViewerWin32::disableWinErrorReporting()
{
std::string executable_name = gDirUtilp->getExecutableFilename();
diff --git a/indra/newview/llfloateravatar.cpp b/indra/newview/llfloateravatarwelcomepack.cpp
index 404316275d..82e44d1398 100644
--- a/indra/newview/llfloateravatar.cpp
+++ b/indra/newview/llfloateravatarwelcomepack.cpp
@@ -1,7 +1,7 @@
/**
- * @file llfloateravatar.h
- * @author Leyla Farazha
- * @brief floater for the avatar changer
+ * @file llfloateravatarwelcomepack.cpp
+ * @author Callum Prentice (callum@lindenlab.com)
+ * @brief Floater container for the Avatar Welcome Pack we app
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -27,17 +27,16 @@
#include "llviewerprecompiledheaders.h"
-#include "llfloateravatar.h"
+#include "llfloateravatarwelcomepack.h"
#include "lluictrlfactory.h"
#include "llmediactrl.h"
-
-LLFloaterAvatar::LLFloaterAvatar(const LLSD& key)
+LLFloaterAvatarWelcomePack::LLFloaterAvatarWelcomePack(const LLSD& key)
: LLFloater(key)
{
}
-LLFloaterAvatar::~LLFloaterAvatar()
+LLFloaterAvatarWelcomePack::~LLFloaterAvatarWelcomePack()
{
if (mAvatarPicker)
{
@@ -47,15 +46,13 @@ LLFloaterAvatar::~LLFloaterAvatar()
}
}
-bool LLFloaterAvatar::postBuild()
+bool LLFloaterAvatarWelcomePack::postBuild()
{
mAvatarPicker = findChild<LLMediaCtrl>("avatar_picker_contents");
if (mAvatarPicker)
{
mAvatarPicker->clearCache();
}
- enableResizeCtrls(true, true, false);
+
return true;
}
-
-
diff --git a/indra/newview/llfloateravatar.h b/indra/newview/llfloateravatarwelcomepack.h
index fb591c8306..a332d46708 100644
--- a/indra/newview/llfloateravatar.h
+++ b/indra/newview/llfloateravatarwelcomepack.h
@@ -1,7 +1,7 @@
/**
- * @file llfloateravatar.h
- * @author Leyla Farazha
- * @brief floater for the avatar changer
+ * @file llfloateravatarwelcomepack.h
+ * @author Callum Prentice (callum@lindenlab.com)
+ * @brief Floater container for the Avatar Welcome Pack we app
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -25,22 +25,21 @@
* $/LicenseInfo$
*/
-#ifndef LL_FLOATER_AVATAR_H
-#define LL_FLOATER_AVATAR_H
+#pragma once
#include "llfloater.h"
+
class LLMediaCtrl;
-class LLFloaterAvatar:
+class LLFloaterAvatarWelcomePack:
public LLFloater
{
friend class LLFloaterReg;
-private:
- LLFloaterAvatar(const LLSD& key);
- ~LLFloaterAvatar();
- bool postBuild() override;
- LLMediaCtrl* mAvatarPicker;
-};
+ private:
+ LLFloaterAvatarWelcomePack(const LLSD& key);
+ ~LLFloaterAvatarWelcomePack();
+ bool postBuild() override;
-#endif
+ LLMediaCtrl* mAvatarPicker;
+};
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 5e230d95bd..e86599035e 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -78,7 +78,7 @@ const static std::string MULTI_LINE_PREFIX(" ");
*
* Note: "You" was used as an avatar names in viewers of previous versions
*/
-const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}\\]\\s+)?(.*)$");
+const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}\\]\\s+)?(.*)$");
const static boost::regex TIMESTAMP("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}\\]|\\[\\d{1,2}:\\d{2}\\]).*");
/**
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 2c09943b83..c77fc6dc84 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -81,6 +81,8 @@ bool LLProgressView::postBuild()
{
mProgressBar = getChild<LLProgressBar>("login_progress_bar");
+ mLogosLabel = getChild<LLTextBox>("logos_lbl");
+
mProgressText = getChild<LLTextBox>("progress_text");
mMessageText = getChild<LLTextBox>("message_text");
mMessageTextRectInitial = mMessageText->getRect(); // auto resizes, save initial size
@@ -239,6 +241,33 @@ void LLProgressView::drawStartTexture(F32 alpha)
gGL.popMatrix();
}
+void LLProgressView::drawLogos(F32 alpha)
+{
+ if (mLogosList.empty())
+ {
+ return;
+ }
+
+ // logos are tied to label,
+ // due to potential resizes we have to figure offsets out on draw or resize
+ S32 offset_x, offset_y;
+ mLogosLabel->localPointToScreen(0, 0, &offset_x, &offset_y);
+ std::vector<TextureData>::const_iterator iter = mLogosList.begin();
+ std::vector<TextureData>::const_iterator end = mLogosList.end();
+ for (; iter != end; iter++)
+ {
+ gl_draw_scaled_image_with_border(iter->mDrawRect.mLeft + offset_x,
+ iter->mDrawRect.mBottom + offset_y,
+ iter->mDrawRect.getWidth(),
+ iter->mDrawRect.getHeight(),
+ iter->mTexturep.get(),
+ UI_VERTEX_COLOR % alpha,
+ false,
+ iter->mClipRect,
+ iter->mOffsetRect);
+ }
+}
+
void LLProgressView::draw()
{
static LLTimer timer;
@@ -254,6 +283,7 @@ void LLProgressView::draw()
}
LLPanel::draw();
+ drawLogos(alpha);
return;
}
@@ -266,6 +296,7 @@ void LLProgressView::draw()
drawStartTexture(alpha);
LLPanel::draw();
+ drawLogos(alpha);
// faded out completely - remove panel and reveal world
if (mFadeToWorldTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME )
@@ -300,6 +331,7 @@ void LLProgressView::draw()
drawStartTexture(1.0f);
// draw children
LLPanel::draw();
+ drawLogos(1.0f);
}
void LLProgressView::setText(const std::string& text)
@@ -330,6 +362,98 @@ void LLProgressView::setMessage(const std::string& msg)
}
}
+void LLProgressView::loadLogo(const std::string &path,
+ const U8 image_codec,
+ const LLRect &pos_rect,
+ const LLRectf &clip_rect,
+ const LLRectf &offset_rect)
+{
+ // We need these images very early, so we have to force-load them, otherwise they might not load in time.
+ if (!gDirUtilp->fileExists(path))
+ {
+ return;
+ }
+
+ LLPointer<LLImageFormatted> start_image_frmted = LLImageFormatted::createFromType(image_codec);
+ if (!start_image_frmted->load(path))
+ {
+ LL_WARNS("AppInit") << "Image load failed: " << path << LL_ENDL;
+ return;
+ }
+
+ LLPointer<LLImageRaw> raw = new LLImageRaw;
+ if (!start_image_frmted->decode(raw, 0.0f))
+ {
+ LL_WARNS("AppInit") << "Image decode failed " << path << LL_ENDL;
+ return;
+ }
+ // HACK: getLocalTexture allows only power of two dimentions
+ raw->expandToPowerOfTwo();
+
+ TextureData data;
+ data.mTexturep = LLViewerTextureManager::getLocalTexture(raw.get(), false);
+ data.mDrawRect = pos_rect;
+ data.mClipRect = clip_rect;
+ data.mOffsetRect = offset_rect;
+ mLogosList.push_back(data);
+}
+
+void LLProgressView::initLogos()
+{
+ mLogosList.clear();
+
+#if LL_FMODSTUDIO || LL_HAVOK
+ const U8 image_codec = IMG_CODEC_PNG;
+ const LLRectf default_clip(0.f, 1.f, 1.f, 0.f);
+ //const S32 default_height = 28;
+ const S32 default_pad = 15;
+
+ S32 icon_width, icon_height;
+
+ // We don't know final screen rect yet, so we can't precalculate position fully
+ S32 texture_start_x = (S32)mLogosLabel->getFont()->getWidthF32(mLogosLabel->getWText().c_str()) + default_pad;
+ S32 texture_start_y = -7;
+#endif //LL_FMODSTUDIO || LL_HAVOK
+
+ // Normally we would just preload these textures from textures.xml,
+ // and display them via icon control, but they are only needed on
+ // startup and preloaded/UI ones stay forever
+ // (and this code was done already so simply reused it)
+ std::string temp_str = gDirUtilp->getExpandedFilename(LL_PATH_DEFAULT_SKIN, "textures", "3p_icons");
+
+ temp_str += gDirUtilp->getDirDelimiter();
+
+#ifdef LL_FMODSTUDIO
+ // original image size is 264x96, it is on longer side but
+ // with no internal paddings so it gets additional padding
+ icon_width = 77;
+ icon_height = 21;
+ S32 pad_fmod_y = 4;
+ texture_start_x++;
+ loadLogo(temp_str + "fmod_logo.png",
+ image_codec,
+ LLRect(texture_start_x, texture_start_y + pad_fmod_y + icon_height, texture_start_x + icon_width, texture_start_y + pad_fmod_y),
+ default_clip,
+ default_clip);
+
+ texture_start_x += icon_width + default_pad + 1;
+#endif //LL_FMODSTUDIO
+#ifdef LL_HAVOK
+ // original image size is 342x113, central element is on a larger side
+ // plus internal padding, so it gets slightly more height than desired 32
+ icon_width = 88;
+ icon_height = 29;
+ S32 pad_havok_y = -1;
+ loadLogo(temp_str + "havok_logo.png",
+ image_codec,
+ LLRect(texture_start_x, texture_start_y + pad_havok_y + icon_height, texture_start_x + icon_width, texture_start_y + pad_havok_y),
+ default_clip,
+ default_clip);
+
+ texture_start_x += icon_width + default_pad;
+#endif //LL_HAVOK
+}
+
void LLProgressView::initStartTexture(S32 location_id, bool is_in_production)
{
if (gStartTexture.notNull())
@@ -408,11 +532,19 @@ void LLProgressView::initStartTexture(S32 location_id, bool is_in_production)
void LLProgressView::initTextures(S32 location_id, bool is_in_production)
{
initStartTexture(location_id, is_in_production);
+ initLogos();
+
+ childSetVisible("panel_icons", !mLogosList.empty());
+ childSetVisible("panel_top_spacer", mLogosList.empty());
}
void LLProgressView::releaseTextures()
{
gStartTexture = NULL;
+ mLogosList.clear();
+
+ childSetVisible("panel_top_spacer", true);
+ childSetVisible("panel_icons", false);
}
void LLProgressView::setCancelButtonVisible(bool b, const std::string& label)
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index 250ee511d7..f529c16c1d 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -53,6 +53,7 @@ public:
/*virtual*/ void draw();
void drawStartTexture(F32 alpha);
+ void drawLogos(F32 alpha);
/*virtual*/ bool handleHover(S32 x, S32 y, MASK mask);
/*virtual*/ bool handleKeyHere(KEY key, MASK mask);
@@ -85,6 +86,7 @@ public:
protected:
LLProgressBar* mProgressBar;
LLMediaCtrl* mMediaCtrl;
+ LLTextBox* mLogosLabel = nullptr;
LLTextBox* mProgressText = nullptr;
LLTextBox* mMessageText = nullptr;
F32 mPercentDone;
@@ -110,8 +112,25 @@ protected:
bool handleUpdate(const LLSD& event_data);
static void onIdle(void* user_data);
+ void loadLogo(const std::string &path, const U8 image_codec, const LLRect &pos_rect, const LLRectf &clip_rect, const LLRectf &offset_rect);
+ // logos have unusual location and need to be preloaded to not appear grey, then deleted
+ void initLogos();
// Loads a bitmap to display during load
void initStartTexture(S32 location_id, bool is_in_production);
+
+private:
+ // We need to draw textures on login, but only once.
+ // So this vector gets filled up for textures to render and gets cleaned later
+ // Some textures have unusual requirements, so we are rendering directly
+ class TextureData
+ {
+ public:
+ LLPointer<LLViewerTexture> mTexturep;
+ LLRect mDrawRect;
+ LLRectf mClipRect;
+ LLRectf mOffsetRect;
+ };
+ std::vector<TextureData> mLogosList;
};
#endif // LL_LLPROGRESSVIEW_H
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 858c7b6656..3450792d30 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2133,9 +2133,6 @@ bool idle_startup()
do_startup_frame();
- // We're successfully logged in.
- gSavedSettings.setBOOL("FirstLoginThisInstall", false);
-
LLFloaterReg::showInitialVisibleInstances();
LLFloaterGridStatus::getInstance()->startGridStatusTimer();
@@ -2481,6 +2478,27 @@ bool idle_startup()
LLPerfStats::StatsRecorder::setAutotuneInit();
+ // Display Avatar Welcome Pack the first time a user logs in
+ // (or clears their settings....)
+ if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
+ {
+ LLFloater* avatar_welcome_pack_floater = LLFloaterReg::findInstance("avatar_welcome_pack");
+ if (avatar_welcome_pack_floater != nullptr)
+ {
+ // There is a (very - 1 in ~50 times) hard to repro bug where the login
+ // page is not hidden when the AWP floater is presented. This (agressive)
+ // approach to always close it seems like the best fix for now.
+ LLPanelLogin::closePanel();
+
+ avatar_welcome_pack_floater->setVisible(true);
+ }
+ }
+
+ //// We're successfully logged in.
+ // 2025-06 Moved lower down in the state machine so the Avatar Welcome Pack
+ // floater display can be triggered correctly.
+ gSavedSettings.setBOOL("FirstLoginThisInstall", false);
+
return true;
}
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 89ccf49f14..fed6cd11db 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -38,8 +38,8 @@
#include "llfloateraddpaymentmethod.h"
#include "llfloaterauction.h"
#include "llfloaterautoreplacesettings.h"
-#include "llfloateravatar.h"
#include "llfloateravatarpicker.h"
+#include "llfloateravatarwelcomepack.h"
#include "llfloateravatarrendersettings.h"
#include "llfloateravatartextures.h"
#include "llfloaterbanduration.h"
@@ -335,8 +335,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("appearance", "floater_my_appearance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
LLFloaterReg::add("associate_listing", "floater_associate_listing.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAssociateListing>);
LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>);
- LLFloaterReg::add("avatar", "floater_avatar.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatar>);
LLFloaterReg::add("avatar_picker", "floater_avatar_picker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarPicker>);
+ LLFloaterReg::add("avatar_welcome_pack", "floater_avatar_welcome_pack.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarWelcomePack>);
LLFloaterReg::add("avatar_render_settings", "floater_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarRenderSettings>);
LLFloaterReg::add("avatar_textures", "floater_avatar_textures.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarTextures>);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index d32e3f4cbd..5c84346917 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2293,13 +2293,13 @@ void LLViewerWindow::initWorldUI()
url = LLWeb::expandURLSubstitutions(url, LLSD());
destinations->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
}
- LLMediaCtrl* avatar_picker = LLFloaterReg::getInstance("avatar")->findChild<LLMediaCtrl>("avatar_picker_contents");
- if (avatar_picker)
+ LLMediaCtrl* avatar_welcome_pack = LLFloaterReg::getInstance("avatar_welcome_pack")->findChild<LLMediaCtrl>("avatar_picker_contents");
+ if (avatar_welcome_pack)
{
- avatar_picker->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
- std::string url = gSavedSettings.getString("AvatarPickerURL");
+ avatar_welcome_pack->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
+ std::string url = gSavedSettings.getString("AvatarWelcomePack");
url = LLWeb::expandURLSubstitutions(url, LLSD());
- avatar_picker->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
+ avatar_welcome_pack->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
}
}
}
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index e5eb2f8008..9b1f54437e 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -26,7 +26,7 @@
#include "llvoiceclient.h"
#include "llvoicevivox.h"
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
#include "llvoicewebrtc.h"
#endif
#include "llviewernetwork.h"
@@ -122,7 +122,7 @@ LLVoiceModuleInterface *getVoiceModule(const std::string &voice_server_type)
{
return (LLVoiceModuleInterface *) LLVivoxVoiceClient::getInstance();
}
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
else if (voice_server_type == WEBRTC_VOICE_SERVER_TYPE)
{
return (LLVoiceModuleInterface *) LLWebRTCVoiceClient::getInstance();
@@ -169,7 +169,7 @@ void LLVoiceClient::init(LLPumpIO *pump)
{
// Initialize all of the voice modules
m_servicePump = pump;
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->init(pump);
#endif
LLVivoxVoiceClient::getInstance()->init(pump);
@@ -182,7 +182,7 @@ void LLVoiceClient::userAuthorized(const std::string& user_id, const LLUUID &age
mRegionChangedCallbackSlot.disconnect();
}
mRegionChangedCallbackSlot = gAgent.addRegionChangedCallback(boost::bind(&LLVoiceClient::onRegionChanged, this));
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->userAuthorized(user_id, agentID);
#endif
LLVivoxVoiceClient::getInstance()->userAuthorized(user_id, agentID);
@@ -294,7 +294,7 @@ void LLVoiceClient::setNonSpatialVoiceModule(const std::string &voice_server_typ
void LLVoiceClient::setHidden(bool hidden)
{
LL_INFOS("Voice") << "( " << (hidden ? "true" : "false") << " )" << LL_ENDL;
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setHidden(hidden);
#endif
LLVivoxVoiceClient::getInstance()->setHidden(hidden);
@@ -337,7 +337,7 @@ void LLVoiceClient::updateSettings()
updateMicMuteLogic();
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->updateSettings();
#endif
LLVivoxVoiceClient::getInstance()->updateSettings();
@@ -348,7 +348,7 @@ void LLVoiceClient::updateSettings()
void LLVoiceClient::tuningStart()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->tuningStart();
#endif
LLVivoxVoiceClient::getInstance()->tuningStart();
@@ -356,7 +356,7 @@ void LLVoiceClient::tuningStart()
void LLVoiceClient::tuningStop()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->tuningStop();
#endif
LLVivoxVoiceClient::getInstance()->tuningStop();
@@ -364,7 +364,7 @@ void LLVoiceClient::tuningStop()
bool LLVoiceClient::inTuningMode()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->inTuningMode();
#else
return LLVivoxVoiceClient::getInstance()->inTuningMode();
@@ -373,7 +373,7 @@ bool LLVoiceClient::inTuningMode()
void LLVoiceClient::tuningSetMicVolume(float volume)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->tuningSetMicVolume(volume);
#else
LLVivoxVoiceClient::getInstance()->tuningSetMicVolume(volume);
@@ -382,7 +382,7 @@ void LLVoiceClient::tuningSetMicVolume(float volume)
void LLVoiceClient::tuningSetSpeakerVolume(float volume)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->tuningSetSpeakerVolume(volume);
#else
LLVivoxVoiceClient::getInstance()->tuningSetSpeakerVolume(volume);
@@ -391,7 +391,7 @@ void LLVoiceClient::tuningSetSpeakerVolume(float volume)
float LLVoiceClient::tuningGetEnergy(void)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->tuningGetEnergy();
#else
return LLVivoxVoiceClient::getInstance()->tuningGetEnergy();
@@ -403,7 +403,7 @@ float LLVoiceClient::tuningGetEnergy(void)
bool LLVoiceClient::deviceSettingsAvailable()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->deviceSettingsAvailable();
#else
return LLVivoxVoiceClient::getInstance()->deviceSettingsAvailable();
@@ -412,7 +412,7 @@ bool LLVoiceClient::deviceSettingsAvailable()
bool LLVoiceClient::deviceSettingsUpdated()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->deviceSettingsUpdated();
#else
return LLVivoxVoiceClient::getInstance()->deviceSettingsUpdated();
@@ -421,7 +421,7 @@ bool LLVoiceClient::deviceSettingsUpdated()
void LLVoiceClient::refreshDeviceLists(bool clearCurrentList)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->refreshDeviceLists(clearCurrentList);
#else
LLVivoxVoiceClient::getInstance()->refreshDeviceLists(clearCurrentList);
@@ -431,7 +431,7 @@ void LLVoiceClient::refreshDeviceLists(bool clearCurrentList)
void LLVoiceClient::setCaptureDevice(const std::string& name)
{
LLVivoxVoiceClient::getInstance()->setCaptureDevice(name);
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setCaptureDevice(name);
#endif
}
@@ -439,14 +439,14 @@ void LLVoiceClient::setCaptureDevice(const std::string& name)
void LLVoiceClient::setRenderDevice(const std::string& name)
{
LLVivoxVoiceClient::getInstance()->setRenderDevice(name);
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setRenderDevice(name);
#endif
}
const LLVoiceDeviceList& LLVoiceClient::getCaptureDevices()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->getCaptureDevices();
#else
return LLVivoxVoiceClient::getInstance()->getCaptureDevices();
@@ -456,7 +456,7 @@ const LLVoiceDeviceList& LLVoiceClient::getCaptureDevices()
const LLVoiceDeviceList& LLVoiceClient::getRenderDevices()
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->getRenderDevices();
#else
return LLVivoxVoiceClient::getInstance()->getRenderDevices();
@@ -469,7 +469,7 @@ const LLVoiceDeviceList& LLVoiceClient::getRenderDevices()
void LLVoiceClient::getParticipantList(std::set<LLUUID> &participants) const
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->getParticipantList(participants);
#endif
LLVivoxVoiceClient::getInstance()->getParticipantList(participants);
@@ -477,7 +477,7 @@ void LLVoiceClient::getParticipantList(std::set<LLUUID> &participants) const
bool LLVoiceClient::isParticipant(const LLUUID &speaker_id) const
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->isParticipant(speaker_id) ||
#else
return
@@ -574,7 +574,7 @@ void LLVoiceClient::activateSpatialChannel(bool activate)
bool LLVoiceClient::isCurrentChannel(const LLSD& channelInfo)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->isCurrentChannel(channelInfo) ||
#else
return
@@ -584,7 +584,7 @@ bool LLVoiceClient::isCurrentChannel(const LLSD& channelInfo)
bool LLVoiceClient::compareChannels(const LLSD &channelInfo1, const LLSD &channelInfo2)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->compareChannels(channelInfo1, channelInfo2) ||
#else
return
@@ -630,7 +630,7 @@ LLVoiceP2POutgoingCallInterface *LLVoiceClient::getOutgoingCallInterface(const L
void LLVoiceClient::setVoiceVolume(F32 volume)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setVoiceVolume(volume);
#endif
LLVivoxVoiceClient::getInstance()->setVoiceVolume(volume);
@@ -638,7 +638,7 @@ void LLVoiceClient::setVoiceVolume(F32 volume)
void LLVoiceClient::setMicGain(F32 gain)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setMicGain(gain);
#endif
LLVivoxVoiceClient::getInstance()->setMicGain(gain);
@@ -687,7 +687,7 @@ bool LLVoiceClient::voiceEnabled()
void LLVoiceClient::setVoiceEnabled(bool enabled)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
if (LLWebRTCVoiceClient::instanceExists())
{
LLWebRTCVoiceClient::getInstance()->setVoiceEnabled(enabled);
@@ -715,7 +715,7 @@ void LLVoiceClient::updateMicMuteLogic()
// Either of these always overrides any other PTT setting.
new_mic_mute = true;
}
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setMuteMic(new_mic_mute);
#endif
LLVivoxVoiceClient::getInstance()->setMuteMic(new_mic_mute);
@@ -812,7 +812,7 @@ bool LLVoiceClient::getVoiceEnabled(const LLUUID& id) const
std::string LLVoiceClient::getDisplayName(const LLUUID& id) const
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
std::string result = LLWebRTCVoiceClient::getInstance()->getDisplayName(id);
if (result.empty())
{
@@ -826,7 +826,7 @@ std::string LLVoiceClient::getDisplayName(const LLUUID& id) const
bool LLVoiceClient::isVoiceWorking() const
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLVivoxVoiceClient::getInstance()->isVoiceWorking() ||
LLWebRTCVoiceClient::getInstance()->isVoiceWorking();
#else
@@ -846,7 +846,7 @@ bool LLVoiceClient::isOnlineSIP(const LLUUID& id)
bool LLVoiceClient::getIsSpeaking(const LLUUID& id)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->getIsSpeaking(id) ||
#else
return
@@ -858,7 +858,7 @@ bool LLVoiceClient::getIsModeratorMuted(const LLUUID& id)
{
// don't bother worrying about p2p calls, as
// p2p calls don't have mute.
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return LLWebRTCVoiceClient::getInstance()->getIsModeratorMuted(id) ||
#else
return
@@ -868,7 +868,7 @@ bool LLVoiceClient::getIsModeratorMuted(const LLUUID& id)
F32 LLVoiceClient::getCurrentPower(const LLUUID& id)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return std::fmax(LLVivoxVoiceClient::getInstance()->getCurrentPower(id),
LLWebRTCVoiceClient::getInstance()->getCurrentPower(id));
#else
@@ -885,7 +885,7 @@ bool LLVoiceClient::getOnMuteList(const LLUUID& id)
F32 LLVoiceClient::getUserVolume(const LLUUID& id)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
return std::fmax(LLVivoxVoiceClient::getInstance()->getUserVolume(id), LLWebRTCVoiceClient::getInstance()->getUserVolume(id));
#else
return LLVivoxVoiceClient::getInstance()->getUserVolume(id);
@@ -894,7 +894,7 @@ F32 LLVoiceClient::getUserVolume(const LLUUID& id)
void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume)
{
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->setUserVolume(id, volume);
#endif
LLVivoxVoiceClient::getInstance()->setUserVolume(id, volume);
@@ -906,7 +906,7 @@ void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume)
void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer)
{
LLVivoxVoiceClient::getInstance()->addObserver(observer);
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->addObserver(observer);
#endif
}
@@ -917,7 +917,7 @@ void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer)
{
LLVivoxVoiceClient::getInstance()->removeObserver(observer);
}
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
if (LLWebRTCVoiceClient::instanceExists())
{
LLWebRTCVoiceClient::getInstance()->removeObserver(observer);
@@ -928,7 +928,7 @@ void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer)
void LLVoiceClient::addObserver(LLFriendObserver* observer)
{
LLVivoxVoiceClient::getInstance()->addObserver(observer);
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->addObserver(observer);
#endif
}
@@ -939,7 +939,7 @@ void LLVoiceClient::removeObserver(LLFriendObserver* observer)
{
LLVivoxVoiceClient::getInstance()->removeObserver(observer);
}
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
if (LLWebRTCVoiceClient::instanceExists())
{
LLWebRTCVoiceClient::getInstance()->removeObserver(observer);
@@ -950,7 +950,7 @@ void LLVoiceClient::removeObserver(LLFriendObserver* observer)
void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
{
LLVivoxVoiceClient::getInstance()->addObserver(observer);
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
LLWebRTCVoiceClient::getInstance()->addObserver(observer);
#endif
}
@@ -961,7 +961,7 @@ void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer)
{
LLVivoxVoiceClient::getInstance()->removeObserver(observer);
}
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
if (LLWebRTCVoiceClient::instanceExists())
{
LLWebRTCVoiceClient::getInstance()->removeObserver(observer);
@@ -1029,7 +1029,7 @@ class LLViewerRequiredVoiceVersion : public LLHTTPNode
{
voiceModule = (LLVoiceModuleInterface *) LLVivoxVoiceClient::getInstance();
}
-#if !__FreeBSD__
+#if !__FreeBSD__ && !_M_ARM64
else if (voice_server_type == "webrtc")
{
voiceModule = (LLVoiceModuleInterface *) LLWebRTCVoiceClient::getInstance();
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 4ee26a312a..b01f5e700d 100755
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -152,13 +152,13 @@ BEGIN
BEGIN
BLOCK "040904b0"
BEGIN
- VALUE "CompanyName", "Linden Lab"
- VALUE "FileDescription", "Second Life"
+ VALUE "CompanyName", "Megapahit"
+ VALUE "FileDescription", "Megapahit viewer"
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
- VALUE "InternalName", "Second Life"
- VALUE "LegalCopyright", "Copyright (c) 2020, Linden Research, Inc."
- VALUE "OriginalFilename", "SecondLife.exe"
- VALUE "ProductName", "Second Life"
+ VALUE "InternalName", "Megapahit"
+ VALUE "LegalCopyright", "Copyright (c) 2025, Megapahit."
+ VALUE "OriginalFilename", "Megapahit.exe"
+ VALUE "ProductName", "Megapahit viewer"
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
END
END
diff --git a/indra/newview/skins/default/textures/3p_icons/fmod_logo.png b/indra/newview/skins/default/textures/3p_icons/fmod_logo.png
new file mode 100644
index 0000000000..5a50e0ad34
--- /dev/null
+++ b/indra/newview/skins/default/textures/3p_icons/fmod_logo.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/3p_icons/havok_logo.png b/indra/newview/skins/default/textures/3p_icons/havok_logo.png
new file mode 100644
index 0000000000..ff1ea3a72e
--- /dev/null
+++ b/indra/newview/skins/default/textures/3p_icons/havok_logo.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/de/panel_progress.xml b/indra/newview/skins/default/xui/de/panel_progress.xml
index c9bed9fd9b..a3813c91d0 100644
--- a/indra/newview/skins/default/xui/de/panel_progress.xml
+++ b/indra/newview/skins/default/xui/de/panel_progress.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" ?>
<panel name="login_progress_panel">
+ <layout_panel name="panel_icons"/>
<layout_stack name="vertical_centering"/>
<layout_panel name="panel4"/>
<layout_panel name="center"/>
<layout_stack name="horizontal_centering">
+ <text name="logos_lbl">Megapahit verwendet</text>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index 89c6e41a85..a251b3c5c5 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -81,36 +81,29 @@
top="0"
width="435"
wrap="true">
-Megapahit is brought to you by (in order of appearance):
+Megapahit is brought to you by:
</text>
<text_editor
enabled="false"
+ font="Monospace"
follows="top|left"
- height="245"
+ height="200"
bg_readonly_color="Transparent"
left="5"
text_color="LtGray"
max_length="65536"
top_pad="5"
- width="545"
- word_wrap="true">
-Erik Kundiman
-LinneNoir
-milo (observeur)
-Fritigern Gothly
-Kou Ayashi
-Hadet Sonnenkern
-Remmy (Secret Foxtail)
-Eris Ravenwood
-gwigz (nya)
-EmilyAmiee
-Bavid Dailey
-Aria (Tashia Redrose)
-Cate (32a)
-Hiroo Ono
-Melodey
-Keysin (scoutkeysin)
-Yikes Lopez
+ width="475"
+ word_wrap="false">
+Erik Kundiman LinneNoir
+milo (observeur) Fritigern Gothly
+Kou Ayashi Hadet Sonnenkern
+Remmy (Secret Foxtail) Eris Ravenwood
+gwigz (nya) EmilyAmiee
+Bavid Dailey Aria (Tashia Redrose)
+Cate (32a) Hiroo Ono
+Melodey Keysin (scoutkeysin)
+Yikes Lopez ~ ( ^-^ ) ~ (cutie_qu)
</text_editor>
<text
follows="top|left"
@@ -121,7 +114,7 @@ Yikes Lopez
top_pad="5"
width="465"
wrap="true">
-with special thanks to (in order of appearance):
+with special thanks to:
</text>
<text_editor
enabled="false"
@@ -135,12 +128,12 @@ with special thanks to (in order of appearance):
top_pad="5"
width="450"
word_wrap="true">
-Chorazin Allen and Nicky Perian for involving Erik Kundiman in viewer developments;
-JenniWindrider for the pre-MP donation that was used to help build the website;
-Vir Linden for making it possible for the project to have a place (in every sense of the word) in SL;
-nutsobvious for the early testing and video proof;
-Soft Linden for the security testing; and
-Kyle Linden for selling TPV parcel 2 to Erik Kundiman at L$0 price.
+Chorazin Allen and Nicky Perian - Involving Erik Kundiman in viewer development
+JenniWindrider - Pre-MP donation used to help build the website
+Vir Linden - Making it possible for the project to have a place in SL
+nutsobvious - Early testing and video proof
+Soft Linden - Security testing
+Kyle Linden - Giving TPV parcel 2 to Erik Kundiman
</text_editor>
</panel>
</accordion_tab>
@@ -196,7 +189,7 @@ Dummy Name replaced at run time
<text_editor
enabled="false"
follows="left|top"
- height="375"
+ height="450"
bg_readonly_color="Transparent"
left="5"
text_color="LtGray"
@@ -205,27 +198,43 @@ Dummy Name replaced at run time
top="5"
width="465"
word_wrap="true">
- 3Dconnexion SDK Copyright (C) 1992-2009 3Dconnexion
- APR Copyright (C) 2011 The Apache Software Foundation
- Collada DOM Copyright 2006 Sony Computer Entertainment Inc.
- cURL Copyright (C) 1996-2010, Daniel Stenberg, (daniel@haxx.se)
- expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
- FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm, and Werner Lemberg.
- GL Copyright (C) 1999-2004 Brian Paul.
- jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
- llphysicsextensions_tpv Copyright (c) 2010, Linden Research, Inc.
- meshoptimizer Copyright (c) 2016-2021 Arseny Kapoulkine
- ogg/vorbis Copyright (C) 2002, Xiphophorus
- OpenSSL Copyright (C) 1998-2008 The OpenSSL Project.
- PCRE Copyright (c) 1997-2012 University of Cambridge
- SDL Copyright (C) 1997-2024 Sam Lantinga
- SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- xxHash Copyright (C) 2012-2020 Yann Collet.
- zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler.
-
- This software contains source code provided by NVIDIA Corporation.
-
- All rights reserved. See licenses.txt for details.
+3Dconnexion SDK Copyright (C) 1992-2009 3Dconnexion
+
+APR Copyright (C) 2011 The Apache Software Foundation
+
+Collada DOM Copyright 2006 Sony Computer Entertainment Inc.
+
+cURL Copyright (C) 1996-2010, Daniel Stenberg, (daniel@haxx.se)
+
+expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+
+FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm, and Werner Lemberg.
+
+GL Copyright (C) 1999-2004 Brian Paul.
+
+jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+
+llphysicsextensions_tpv Copyright (c) 2010, Linden Research, Inc.
+
+meshoptimizer Copyright (c) 2016-2021 Arseny Kapoulkine
+
+ogg/vorbis Copyright (C) 2002, Xiphophorus
+
+OpenSSL Copyright (C) 1998-2008 The OpenSSL Project.
+
+PCRE Copyright (c) 1997-2012 University of Cambridge
+
+SDL Copyright (C) 1997-2024 Sam Lantinga
+
+SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+
+xxHash Copyright (C) 2012-2020 Yann Collet.
+
+zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler.
+
+This software contains source code provided by NVIDIA Corporation.
+
+All rights reserved. See licenses.txt for details.
</text_editor>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_welcome_pack.xml b/indra/newview/skins/default/xui/en/floater_avatar_welcome_pack.xml
new file mode 100644
index 0000000000..795d642755
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_avatar_welcome_pack.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater
+ positioning="cascading"
+ legacy_header_height="225"
+ can_minimize="true"
+ can_close="true"
+ can_resize="false"
+ min_height="438"
+ min_width="530"
+ height="438"
+ layout="topleft"
+ name="Avatar Welcome Pack"
+ single_instance="true"
+ save_rect="true"
+ save_visibility="true"
+ title="AVATAR WELCOME PACK"
+ width="530">
+ <web_browser
+ top="25"
+ height="438"
+ width="530"
+ follows="all"
+ name="avatar_picker_contents"
+ trusted_content="true"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index f52e1cc952..1ec59bf2eb 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -418,11 +418,11 @@
</menu_item_call>
<menu_item_separator/>
<menu_item_call
- label="Complete avatars..."
- name="Avatar Picker">
+ label="Avatar Welcome Pack..."
+ name="Avatar Welcome Pack">
<menu_item_call.on_click
function="Floater.ToggleOrBringToFront"
- parameter="avatar" />
+ parameter="avatar_welcome_pack" />
</menu_item_call>
<menu_item_separator/>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
index 66c35558b1..cdbfd4ac56 100644
--- a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
@@ -36,16 +36,16 @@
left_delta="0"
name="classifieds_edit"
top="29"
- width="651" />
+ width="650" />
<combo_box
follows="right|top"
layout="topleft"
height="23"
allow_text_entry="false"
top_delta="0"
- left_pad="2"
+ left_pad="1"
name="classifieds_category"
- width="122">
+ width="120">
<combo_box.commit_callback
function="CommitSearch" />
</combo_box>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
index 57cb4990e4..00f5de5ed4 100644
--- a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
@@ -74,15 +74,15 @@
left="6"
name="events_edit"
top="29"
- width="651" />
+ width="650" />
<combo_box
follows="right|top"
layout="topleft"
height="23"
top_delta="0"
- left_pad="2"
+ left_pad="1"
name="events_category"
- width="122">
+ width="120">
<combo_box.item label="Any Category" name="any" value="0" />
<combo_box.item label="" value="filter_separator" enabled="false" />
<combo_box.item label="Discussion" name="discussion" value="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
index 09c142b8fc..c63818f8e3 100644
--- a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
@@ -36,16 +36,16 @@
left_delta="0"
name="places_edit"
top="29"
- width="651" />
+ width="650" />
<combo_box
follows="right|top"
layout="topleft"
height="23"
allow_text_entry="false"
top_delta="0"
- left_pad="2"
+ left_pad="1"
name="places_category"
- width="122">
+ width="120">
<combo_box.commit_callback
function="CommitSearch" />
</combo_box>
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index da900c783b..7b404ef5ca 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -203,7 +203,7 @@ background_visible="false"
name="button_row_ls"
left="6"
orientation="horizontal"
- top_pad="5"
+ top_pad="2"
width="297">
<layout_panel
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 6b19907372..9f1f741b52 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -44,9 +44,9 @@
width="670" />
<layout_panel
auto_resize="false"
- height="220"
+ height="255"
layout="topleft"
- min_height="220"
+ min_height="255"
name="panel4"
width="670">
<icon
@@ -56,11 +56,11 @@
layout="topleft"
left="0"
top="0"
- height="220"
+ height="255"
width="670" />
<layout_stack
follows="left|right|top|bottom"
- height="220"
+ height="255"
layout="topleft"
left="0"
orientation="vertical"
@@ -70,6 +70,14 @@
width="670">
<layout_panel
auto_resize="false"
+ height="30"
+ layout="topleft"
+ min_height="30"
+ name="panel_top_spacer"
+ width="670">
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
height="100"
layout="topleft"
min_height="100"
@@ -134,6 +142,30 @@
right="-90"
word_wrap="true"/>
</layout_panel>
+ <layout_panel
+ auto_resize="false"
+ height="40"
+ layout="topleft"
+ min_height="40"
+ name="panel_icons"
+ width="670">
+ <!--Logos are tied to following label from code-->
+ <text
+ follows="left|right|top"
+ layout="topleft"
+ font="SansSerifLarge"
+ font_shadow="none"
+ halign="left"
+ height="16"
+ width="240"
+ left="47"
+ top="6"
+ line_spacing.pixels="2"
+ name="logos_lbl"
+ text_color="LoginProgressBoxTextColor">
+ Megapahit uses
+ </text>
+ </layout_panel>
</layout_stack>
</layout_panel>
<layout_panel
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index c5a59fac2a..76b14590f6 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2942,13 +2942,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .anim
<string name="None">None</string>
<string name="Linden Location">Linden Location</string>
<string name="Adult">Adult</string>
- <string name="Arts&amp;Culture">Arts &amp; Culture</string>
+ <string name="Arts and Culture">Arts and Culture</string>
<string name="Business">Business</string>
<string name="Educational">Educational</string>
<string name="Gaming">Gaming</string>
<string name="Hangout">Hangout</string>
<string name="Newcomer Friendly">Newcomer Friendly</string>
- <string name="Parks&amp;Nature">Parks &amp; Nature</string>
+ <string name="Parks and Nature">Parks and Nature</string>
<string name="Residential">Residential</string>
<!--<string name="Shopping">Shopping</string> -->
<string name="Stage">Stage</string>
@@ -4187,7 +4187,7 @@ Try enclosing path to the editor with double quotes.
name="Command_360_Capture_Label">360 snapshot</string>
<string name="Command_AboutLand_Label">About land</string>
<string name="Command_Appearance_Label">Outfits</string>
- <string name="Command_Avatar_Label">Complete avatars</string>
+ <string name="Command_Avatar_Label">Avatar Welcome Pack</string>
<string name="Command_Build_Label">Build</string>
<string name="Command_Chat_Label">Chat</string>
<string name="Command_Conversations_Label">Conversations</string>
diff --git a/indra/newview/skins/default/xui/es/panel_progress.xml b/indra/newview/skins/default/xui/es/panel_progress.xml
index c9bed9fd9b..377badc89e 100644
--- a/indra/newview/skins/default/xui/es/panel_progress.xml
+++ b/indra/newview/skins/default/xui/es/panel_progress.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" ?>
<panel name="login_progress_panel">
+ <layout_panel name="panel_icons"/>
<layout_stack name="vertical_centering"/>
<layout_panel name="panel4"/>
<layout_panel name="center"/>
<layout_stack name="horizontal_centering">
+ <text name="logos_lbl">Usos de Megapahit</text>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_progress.xml b/indra/newview/skins/default/xui/fr/panel_progress.xml
index c9bed9fd9b..7d31bb7138 100644
--- a/indra/newview/skins/default/xui/fr/panel_progress.xml
+++ b/indra/newview/skins/default/xui/fr/panel_progress.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" ?>
<panel name="login_progress_panel">
+ <layout_panel name="panel_icons"/>
<layout_stack name="vertical_centering"/>
<layout_panel name="panel4"/>
<layout_panel name="center"/>
<layout_stack name="horizontal_centering">
+ <text name="logos_lbl">Megapahit utilise</text>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_progress.xml b/indra/newview/skins/default/xui/it/panel_progress.xml
index c9bed9fd9b..ab906cbedb 100644
--- a/indra/newview/skins/default/xui/it/panel_progress.xml
+++ b/indra/newview/skins/default/xui/it/panel_progress.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" ?>
<panel name="login_progress_panel">
+ <layout_panel name="panel_icons"/>
<layout_stack name="vertical_centering"/>
<layout_panel name="panel4"/>
<layout_panel name="center"/>
<layout_stack name="horizontal_centering">
+ <text name="logos_lbl">Utilizzi di Megapahit</text>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_progress.xml b/indra/newview/skins/default/xui/ja/panel_progress.xml
index 1edada6098..cafc7c2d1d 100644
--- a/indra/newview/skins/default/xui/ja/panel_progress.xml
+++ b/indra/newview/skins/default/xui/ja/panel_progress.xml
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="login_progress_panel">
+ <layout_panel name="panel_icons"/>
<layout_stack name="vertical_centering"/>
<layout_panel name="panel4"/>
<layout_panel name="center"/>
<layout_stack name="horizontal_centering">
+ <text name="logos_lbl">
+ メガパイト使用
+ </text>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_progress.xml b/indra/newview/skins/default/xui/pl/panel_progress.xml
index 8da982cc3f..3f68a32a7f 100644
--- a/indra/newview/skins/default/xui/pl/panel_progress.xml
+++ b/indra/newview/skins/default/xui/pl/panel_progress.xml
@@ -5,6 +5,11 @@
<layout_stack name="vertical_centering1">
<layout_panel name="panel4">
<layout_stack name="vertical_centering2">
+ <layout_panel name="panel_icons">
+ <text name="logos_lbl">
+ Megapahit używa
+ </text>
+ </layout_panel>
</layout_stack>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pt/panel_progress.xml b/indra/newview/skins/default/xui/pt/panel_progress.xml
index c9bed9fd9b..be0364a70a 100644
--- a/indra/newview/skins/default/xui/pt/panel_progress.xml
+++ b/indra/newview/skins/default/xui/pt/panel_progress.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" ?>
<panel name="login_progress_panel">
+ <layout_panel name="panel_icons"/>
<layout_stack name="vertical_centering"/>
<layout_panel name="panel4"/>
<layout_panel name="center"/>
<layout_stack name="horizontal_centering">
+ <text name="logos_lbl">Usos do Megapahit</text>
</layout_stack>
</panel>
diff --git a/indra/test/test.cpp b/indra/test/test.cpp
index 6e280819df..09147a65a3 100644
--- a/indra/test/test.cpp
+++ b/indra/test/test.cpp
@@ -36,7 +36,6 @@
#include "linden_common.h"
#include "llerrorcontrol.h"
-#include "llexception.h"
#include "lltut.h"
#include "chained_callback.h"
#include "stringize.h"
@@ -57,6 +56,13 @@
#include <boost/iostreams/tee.hpp>
#include <boost/iostreams/stream.hpp>
+// On Mac, got:
+// #error "Boost.Stacktrace requires `_Unwind_Backtrace` function. Define
+// `_GNU_SOURCE` macro or `BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED` if
+// _Unwind_Backtrace is available without `_GNU_SOURCE`."
+#define BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED
+#include <boost/stacktrace.hpp>
+
#include <fstream>
void wouldHaveCrashed(const std::string& message);
@@ -506,6 +512,64 @@ void wouldHaveCrashed(const std::string& message)
static LLTrace::ThreadRecorder* sMasterThreadRecorder = NULL;
+// this is used in platform-generic code -- define outside #if LL_WINDOWS
+struct Windows_SEH_exception: public std::runtime_error
+{
+ Windows_SEH_exception(const std::string& what): std::runtime_error(what) {}
+};
+
+#if LL_WINDOWS
+
+static constexpr U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
+static constexpr U32 STATUS_STACK_FULL = 0xC00000FD;
+
+U32 seh_filter(U32 code, struct _EXCEPTION_POINTERS*)
+{
+ if (code == STATUS_MSC_EXCEPTION)
+ {
+ // C++ exception, go on -- but TUT is supposed to have caught those already?!
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+ else
+ {
+ // This is a non-C++ exception, e.g. hardware check.
+ // By the time the handler gets control, the stack has been unwound,
+ // so report the stack trace now at filter() time.
+ // Sadly, even though, at the time of this writing, stack overflow is
+ // the problem we would most like to diagnose, calling another
+ // function when the stack is already blown only terminates us faster.
+ if (code != STATUS_STACK_FULL)
+ {
+ std::cerr << boost::stacktrace::stacktrace() << std::endl;
+ }
+ // pass control into the handler block
+ return EXCEPTION_EXECUTE_HANDLER;
+ }
+}
+
+template <typename CALLABLE0, typename CALLABLE1>
+void seh_catcher(CALLABLE0&& trycode, CALLABLE1&& handler)
+{
+ __try
+ {
+ trycode();
+ }
+ __except (seh_filter(GetExceptionCode(), GetExceptionInformation()))
+ {
+ handler(GetExceptionCode());
+ }
+}
+
+#else // not LL_WINDOWS
+
+template <typename CALLABLE0, typename CALLABLE1>
+void seh_catcher(CALLABLE0&& trycode, CALLABLE1&&)
+{
+ trycode();
+}
+
+#endif // not LL_WINDOWS
+
int main(int argc, char **argv)
{
ll_init_apr();
@@ -638,7 +702,7 @@ int main(int argc, char **argv)
// a chained_callback subclass must be linked with previous
mycallback->link();
- LL::seh::catcher(
+ seh_catcher(
// __try
[test_group]
{
@@ -652,7 +716,7 @@ int main(int argc, char **argv)
}
},
// __except
- [mycallback](U32 code, const std::string& /*stacktrace*/)
+ [mycallback](U32 code)
{
static std::map<U32, const char*> codes = {
{ 0xC0000005, "Access Violation" },