diff --git a/doc/supporters.txt b/doc/supporters.txt new file mode 100644 index 0000000000000000000000000000000000000000..ced03eca136dc58fc2fbb09992355c3ea3ace3b1 --- /dev/null +++ b/doc/supporters.txt @@ -0,0 +1,15 @@ +These are the generous donors to the Alchemy project. +Sorry if I've missed anyone just ping me on discord! + +Anarcho Rodentia Autonomous Zone + Sam McGregor#1312 +Bellimora Bunny + Bellimora#9570 +Farlado UwU + Farlado#1018 +Rhea Mercury + Vid#6143 +Todd Lygon + Todd Lygon#3391 +Tyler C + Vault108#0001 diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp index e01aba402e50ccb7a8f73679cc59fce1ded48094..c9093da553c1fb47fd7836f56727d03b5a2e4dc0 100644 --- a/indra/llui/lliconctrl.cpp +++ b/indra/llui/lliconctrl.cpp @@ -42,6 +42,9 @@ static LLDefaultChildRegistry::Register<LLIconCtrl> r("icon"); LLIconCtrl::Params::Params() : image("image_name"), color("color"), +// [SL:KB] - Patch: Control-IconCtrl | Checked: Catznip-3.6 + commit_on_click("commit_on_click", false), +// [/SL:KB] use_draw_context_alpha("use_draw_context_alpha", true), interactable("interactable", false), scale_image("scale_image"), @@ -65,6 +68,14 @@ LLIconCtrl::LLIconCtrl(const LLIconCtrl::Params& p) { LLUICtrl::setValue(mImagep->getName()); } + +// [SL:KB] - Patch: Control-IconCtrl | Checked: Catznip-3.6 + if (p.commit_on_click) + { + // There's several ways we can do this but this just seems like the easiest + setMouseDownCallback(boost::bind(&LLIconCtrl::onCommit, this)); + } +// [/SL:KB] } LLIconCtrl::~LLIconCtrl() diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h index 9c3b517bca8d4451f1d7d4ae16345026282ca1fe..1a7965e861997932f825527901b784929c1dbe6f 100644 --- a/indra/llui/lliconctrl.h +++ b/indra/llui/lliconctrl.h @@ -48,6 +48,9 @@ class LLIconCtrl { Optional<LLUIImage*> image; Optional<LLUIColor> color; +// [SL:KB] - Patch: Control-IconCtrl | Checked: Catznip-3.6 + Optional<bool> commit_on_click; +// [/SL:KB] Optional<bool> use_draw_context_alpha, interactable; Optional<S32> min_width, diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 896b0bd513e5dd8707a368aee83e364496637d7e..097598af3a65fd70f57f2c8b72ad422c8c539f46 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -32,6 +32,9 @@ #include "llfloaterabout.h" // Viewer includes +#if LL_WINDOWS +#include "alsquirrelupdater.h" +#endif #include "llagent.h" #include "llagentui.h" #include "llappviewer.h" @@ -63,6 +66,7 @@ #include "lleventapi.h" #include "llcorehttputil.h" #include "lldir.h" +#include "lliconctrl.h" #if LL_WINDOWS #include "lldxhardware.h" @@ -90,17 +94,10 @@ class LLFloaterAbout final static LLSD getInfo(); void onClickCopyToClipboard(); void onClickUpdateCheck(); - static void setUpdateListener(); private: void setSupportText(const std::string& server_release_notes_url); - // notifications for user requested checks - static void showCheckUpdateNotification(S32 state); - - // callback method for manual checks - static bool callbackCheckUpdate(LLSD const & event); - // listener name for update checks static const std::string sCheckUpdateListenerName; @@ -129,7 +126,10 @@ BOOL LLFloaterAbout::postBuild() getChild<LLViewerTextEditor>("support_editor", true); LLViewerTextEditor *contrib_names_widget = - getChild<LLViewerTextEditor>("contrib_names", true); + getChild<LLViewerTextEditor>("contrib_names", true); + + LLViewerTextEditor *suppoter_names_widget = + getChild<LLViewerTextEditor>("alchemy_supporter_names", true); LLViewerTextEditor *licenses_widget = getChild<LLViewerTextEditor>("licenses_editor", true); @@ -140,6 +140,26 @@ BOOL LLFloaterAbout::postBuild() getChild<LLUICtrl>("update_btn")->setCommitCallback( boost::bind(&LLFloaterAbout::onClickUpdateCheck, this)); + auto viewer_logo = getChild<LLIconCtrl>("viewer_logo"); + + auto viewer_maturity = LLVersionInfo::instance().getViewerMaturity(); + switch(viewer_maturity) + { + case LLVersionInfo::TEST_VIEWER: + viewer_logo->setImage(LLUI::getUIImage("AlchemyTest128")); + break; + case LLVersionInfo::PROJECT_VIEWER: + viewer_logo->setImage(LLUI::getUIImage("AlchemyProject128")); + break; + case LLVersionInfo::BETA_VIEWER: + viewer_logo->setImage(LLUI::getUIImage("AlchemyBeta128")); + break; + default: + case LLVersionInfo::RELEASE_VIEWER: + viewer_logo->setImage(LLUI::getUIImage("AlchemyRelease128")); + break; + } + static const LLUIColor about_color = LLUIColorTable::instance().getColor("TextFgReadOnlyColor"); if (gAgent.getRegion()) @@ -160,23 +180,45 @@ BOOL LLFloaterAbout::postBuild() support_widget->setEnabled(FALSE); support_widget->startOfDoc(); - // Get the names of contributors, extracted from .../doc/contributions.txt by viewer_manifest.py at build time - std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt"); - llifstream contrib_file; - std::string contributors; - contrib_file.open(contributors_path.c_str()); /* Flawfinder: ignore */ - if (contrib_file.is_open()) { - std::getline(contrib_file, contributors); // all names are on a single line - contrib_file.close(); + // Get the names of contributors, extracted from .../doc/contributions.txt by viewer_manifest.py at build time + std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt"); + llifstream contrib_file; + std::string contributors; + contrib_file.open(contributors_path.c_str()); /* Flawfinder: ignore */ + if (contrib_file.is_open()) + { + std::getline(contrib_file, contributors); // all names are on a single line + contrib_file.close(); + } + else + { + LL_WARNS("AboutInit") << "Could not read contributors file at " << contributors_path << LL_ENDL; + } + contrib_names_widget->setText(contributors); + contrib_names_widget->setEnabled(FALSE); + contrib_names_widget->startOfDoc(); } - else + { - LL_WARNS("AboutInit") << "Could not read contributors file at " << contributors_path << LL_ENDL; + // Get the names of supporters, extracted from .../doc/supporters.txt by viewer_manifest.py at build time + std::string supporters_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"supporters.txt"); + llifstream supporters_file; + std::string supporters; + supporters_file.open(supporters_path.c_str()); /* Flawfinder: ignore */ + if (supporters_file.is_open()) + { + std::getline(supporters_file, supporters); // all names are on a single line + supporters_file.close(); + } + else + { + LL_WARNS("AboutInit") << "Could not read supporters file at " << supporters_path << LL_ENDL; + } + suppoter_names_widget->setText(supporters); + suppoter_names_widget->setEnabled(FALSE); + suppoter_names_widget->startOfDoc(); } - contrib_names_widget->setText(contributors); - contrib_names_widget->setEnabled(FALSE); - contrib_names_widget->startOfDoc(); // Get the Versions and Copyrights, created at build time std::string licenses_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"packages-info.txt"); @@ -317,7 +359,12 @@ void LLFloaterAbout::onClickCopyToClipboard() void LLFloaterAbout::onClickUpdateCheck() { - setUpdateListener(); +#if LL_WINDOWS + if (ALUpdateHandler::isSupported()) + { + ALUpdateHandler::getInstance()->check(); + } +#endif } void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url) @@ -340,94 +387,6 @@ void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url) FALSE, LLStyle::Params() .color(about_color)); } -//This is bound as a callback in postBuild() -void LLFloaterAbout::setUpdateListener() -{ - typedef std::vector<std::string> vec; - - //There are four possibilities: - //no downloads directory or version directory in "getOSUserAppDir()/downloads" - // => no update - //version directory exists and .done file is not present - // => download in progress - //version directory exists and .done file exists - // => update ready for install - //version directory, .done file and either .skip or .next file exists - // => update deferred - BOOL downloads = false; - std::string downloadDir = ""; - BOOL done = false; - BOOL next = false; - BOOL skip = false; - - LLSD info(LLFloaterAbout::getInfo()); - std::string version = info["VIEWER_VERSION_STR"].asString(); - std::string appDir = gDirUtilp->getOSUserAppDir(); - - //drop down two directory levels so we aren't searching for markers among the log files and crash dumps - //or among other possible viewer upgrade directories if the resident is running multiple viewer versions - //we should end up with a path like ../downloads/1.2.3.456789 - vec file_vec = gDirUtilp->getFilesInDir(appDir); - - for(vec::const_iterator iter=file_vec.begin(); iter!=file_vec.end(); ++iter) - { - if ( (iter->rfind("downloads") ) ) - { - vec dir_vec = gDirUtilp->getFilesInDir(*iter); - for(vec::const_iterator dir_iter=dir_vec.begin(); dir_iter!=dir_vec.end(); ++dir_iter) - { - if ( (dir_iter->rfind(version))) - { - downloads = true; - downloadDir = *dir_iter; - } - } - } - } - - if ( downloads ) - { - for(vec::const_iterator iter=file_vec.begin(); iter!=file_vec.end(); ++iter) - { - if (iter->rfind(version) != std::string::npos) - { - if (iter->rfind(".done") != std::string::npos) - { - done = true; - } - else if (iter->rfind(".next") != std::string::npos) - { - next = true; - } - else if (iter->rfind(".skip") != std::string::npos) - { - skip = true; - } - } - } - } - - if ( !downloads ) - { - LLNotificationsUtil::add("UpdateViewerUpToDate"); - } - else - { - if ( !done ) - { - LLNotificationsUtil::add("UpdateDownloadInProgress"); - } - else if ( (!next) && (!skip) ) - { - LLNotificationsUtil::add("UpdateDownloadComplete"); - } - else //done and there is a next or skip - { - LLNotificationsUtil::add("UpdateDeferred"); - } - } -} - ///---------------------------------------------------------------------------- /// LLFloaterAboutUtil ///---------------------------------------------------------------------------- @@ -436,9 +395,3 @@ void LLFloaterAboutUtil::registerFloater() LLFloaterReg::add("sl_about", "floater_about.xml", &LLFloaterReg::build<LLFloaterAbout>); } - -void LLFloaterAboutUtil::checkUpdatesAndNotify() -{ - LLFloaterAbout::setUpdateListener(); -} - diff --git a/indra/newview/llfloaterabout.h b/indra/newview/llfloaterabout.h index be34b631ccec8d903ea577b72b6299ea384ec82e..8fc1aa4f29e5aa9f6e545b8d900f5d1f69d18558 100644 --- a/indra/newview/llfloaterabout.h +++ b/indra/newview/llfloaterabout.h @@ -30,9 +30,6 @@ namespace LLFloaterAboutUtil { void registerFloater(); - - // Support for user initialized update/state checks - void checkUpdatesAndNotify(); } #endif // LL_LLFLOATERABOUT_H diff --git a/indra/newview/skins/default/textures/alchemy/alchemy_128.png b/indra/newview/skins/default/textures/alchemy/alchemy_128.png new file mode 100644 index 0000000000000000000000000000000000000000..671eb63c23268d14a171525331f0c3f4ab3d6c5e Binary files /dev/null and b/indra/newview/skins/default/textures/alchemy/alchemy_128.png differ diff --git a/indra/newview/skins/default/textures/alchemy/alchemybeta_128.png b/indra/newview/skins/default/textures/alchemy/alchemybeta_128.png new file mode 100644 index 0000000000000000000000000000000000000000..473acb24e102038a8f7ffb721dbcd7c15b8c7071 Binary files /dev/null and b/indra/newview/skins/default/textures/alchemy/alchemybeta_128.png differ diff --git a/indra/newview/skins/default/textures/alchemy/alchemyproject_128.png b/indra/newview/skins/default/textures/alchemy/alchemyproject_128.png new file mode 100644 index 0000000000000000000000000000000000000000..90ac9c602f8aec98e1804ff2e1edebdb1d304092 Binary files /dev/null and b/indra/newview/skins/default/textures/alchemy/alchemyproject_128.png differ diff --git a/indra/newview/skins/default/textures/alchemy/alchemytest_128.png b/indra/newview/skins/default/textures/alchemy/alchemytest_128.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb868dcd22a0b73613d52389c4da224ebbc8ca4 Binary files /dev/null and b/indra/newview/skins/default/textures/alchemy/alchemytest_128.png differ diff --git a/indra/newview/skins/default/textures/alchemy/discord_32.png b/indra/newview/skins/default/textures/alchemy/discord_32.png new file mode 100644 index 0000000000000000000000000000000000000000..a3df8176afe37ca1ab61cbeb1375172c6efac11f Binary files /dev/null and b/indra/newview/skins/default/textures/alchemy/discord_32.png differ diff --git a/indra/newview/skins/default/textures/alchemy/mastodon_32.png b/indra/newview/skins/default/textures/alchemy/mastodon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd2e1b29634547886cf46bcd1d5265cb72004e Binary files /dev/null and b/indra/newview/skins/default/textures/alchemy/mastodon_32.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index be53e5d145959b6012572fc3338700763a274152..53004b040d36dc22138902c6c7a82893d714c49e 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -910,4 +910,12 @@ with the same filename but different name <texture name="System_Notification" file_name="icons/SL_Logo.png" preload="true"/> <texture name="Icon_Attachment_Small" file_name="icons/Icon_Attachment_Small.png" preload="true"/> <texture name="Icon_Attachment_Large" file_name="icons/Icon_Attachment_Large.png" preload="true"/> + + <texture name="AlchemyRelease128" file_name="alchemy/alchemy_128.png" preload="false" /> + <texture name="AlchemyBeta128" file_name="alchemy/alchemybeta_128.png" preload="false" /> + <texture name="AlchemyProject128" file_name="alchemy/alchemyproject_128.png" preload="false" /> + <texture name="AlchemyTest128" file_name="alchemy/alchemytest_128.png" preload="false" /> + + <texture name="social_discord" file_name="alchemy/discord_32.png" preload="false" /> + <texture name="social_mastodon" file_name="alchemy/mastodon_32.png" preload="false" /> </textures> diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 4f8ab4f1a879ef083a4009d34c58f50019f03961..4b2684af4c67c64f6f251bb66a919c71a16902f4 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -1,62 +1,218 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater - positioning="centered" - legacy_header_height="18" - height="440" - layout="topleft" - name="floater_about" + can_close="true" + can_minimize="true" + can_resize="false" + height="380" help_topic="floater_about" + name="floater_about" + positioning="centered" save_rect="true" + save_visibility="false" title="ABOUT [CAPITALIZED_APP_NAME]" - width="500"> - -RestrainedLove API: [RLV_VERSION] + width="580"> + <tab_container follows="all" - top="25" - left="10" - height="405" - width="480" + layout="topleft" + left="4" + height="378" + right="-4" + tab_height="25" + tab_min_width="120" name="about_tab" - tab_position="top"> + tab_position="top" + top="2"> <panel - border="true" - label="Info" + border="true" + has_border="true" + label="INFO" help_topic="about_support_tab" name="support_panel"> + <icon + height="128" + image_name="AlchemyRelease128" + layout="topleft" + left="0" + mouse_opaque="true" + name="viewer_logo" + top="4" + width="128" /> + <icon + interactable="true" + commit_on_click="true" + height="32" + image_name="social_discord" + layout="topleft" + left="20" + mouse_opaque="true" + name="discord_icon" + tooltip="[APP_NAME] on Discord" + top="140" + width="42"> + <icon.commit_callback + function="Advanced.ShowURL" + parameter="https://discordapp.com/invite/KugCgs6" /> + </icon> + <icon + interactable="true" + commit_on_click="true" + height="32" + image_name="social_mastodon" + layout="topleft" + left_pad="20" + mouse_opaque="true" + name="mastodon_icon" + tooltip="[APP_NAME] on Mastodon" + top="140" + width="30"> + <icon.commit_callback + function="Advanced.ShowURL" + parameter="https://mastodon.social/@alchemyviewer" /> + </icon> + <button + follows="bottom|left" + tool_tip="Check for and download updates." + name="copy_btn" + label="Check for Updates" + left="3" + bottom="-30" + height="22" + width="125" /> + <button + follows="bottom|left" + image_overlay="Copy" + image_overlay_alignment="left" + tool_tip="Copy the info the clipboard." + name="copy_btn" + label="Copy Info" + left="3" + bottom="4" + height="22" + width="125" /> <text_editor - parse_urls="true" + parse_urls="true" follows="top|left" font="SansSerif" - height="343" + height="341" bg_readonly_color="Transparent" - left="5" + left="133" max_length="65536" name="support_editor" top="5" - width="465" + right="-5" word_wrap="true" /> - <button - follows="left|top" - label="Copy to Clipboard" - name="copy_btn" - left="10" - top_pad="5" - height="25" - width="180" /> </panel> <panel - border="true" - label="Credits" + border="true" + has_border="true" + label="CREDITS" help_topic="about_credits_tab" name="credits_panel"> +<accordion + fit_parent="false" + follows="all" + layout="topleft" + left="2" + name="credits_accordion" + single_expansion="true" + top="0" + right="-1"> +<!-- Credits --> + <accordion_tab + expanded="true" + fit_panel="false" + layout="topleft" + name="alchemy_credits_tab" + title="Alchemy"> + <panel + border="false" + follows="all" + left="10" + name="alchemy_credits_panel" + height="295" + top="10"> <text follows="top|left|right" + font.style="BOLD" + height="10" + layout="topleft" + left="5" + name="alchemy_intro" + top="0" + width="435" + wrap="true"> +Alchemy is brought to you by the Alchemy Development Group: + </text> + <text_editor + enabled="false" + follows="top|left" + height="100" + bg_readonly_color="Transparent" + left="5" + text_color="LtGray" + max_length="65536" + name="alchemy_names" + top_pad="5" + width="545" + word_wrap="true"> +Rye Cogtail +Luminous Luminos +Unexpectedly Dismantled +Cinder Roxley +Inusaito Kanya +Zanibar Darkstone +Doug Falta + </text_editor> + <text + follows="top|left" + font.style="BOLD" + height="10" + layout="topleft" + left="5" + name="alchemy_thanks_intro" + top_pad="5" + width="435" + wrap="true"> +with special thanks to: + </text> + <text_editor + enabled="false" + follows="top|left" + height="150" + bg_readonly_color="Transparent" + left="5" + text_color="LtGray" + max_length="65536" + name="alchemy_supporter_names" + top_pad="5" + width="545" + word_wrap="true"> +Dummy Name replaced at run time + </text_editor> + </panel> + </accordion_tab> + <accordion_tab + expanded="true" + fit_panel="false" + layout="topleft" + name="sl_credits_tab" + title="Second Life"> + <panel + border="false" + follows="all" + left="10" + name="sl_credits_panel" + height="332" + top="10"> + <text + follows="top|left|right" + font.style="BOLD" height="20" layout="topleft" left="5" name="linden_intro" - top="10" + top="0" width="465" wrap="true"> Second Life is brought to you by the Lindens, @@ -65,63 +221,74 @@ with open source contributions from: <text_editor enabled="false" follows="top|left" - height="340" + height="270" bg_readonly_color="Transparent" left="5" text_color="LtGray" max_length="65536" name="contrib_names" - top_pad="10" - width="465" + top_pad="5" + width="545" word_wrap="true"> Dummy Name replaced at run time </text_editor> </panel> + </accordion_tab> +</accordion> + </panel> +<!-- Licences --> <panel border="true" - label="Licenses" + has_border="true" + label="LICENCES" help_topic="about_licenses_tab" name="licenses_panel"> <text_editor enabled="false" follows="left|top" - height="375" + height="340" bg_readonly_color="Transparent" left="5" text_color="LtGray" max_length="65536" name="licenses_editor" 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) - DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. - 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. - google-perftools Copyright (c) 2005, Google Inc. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - 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, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler. + right="-5" + word_wrap="true" + parse_urls="true"> +This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; version 2.1 of the License only which can be found in doc/LGPL-licence.txt in this distribution (or online at https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt). + +This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +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) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +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. +google-perftools Copyright (c) 2005, Google Inc. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +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, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler. + +Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. - Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. +This software contains source code provided by NVIDIA Corporation. - This software contains source code provided by NVIDIA Corporation. +All rights reserved. See licenses.txt for details. - All rights reserved. See licenses.txt for details. +Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index bc003fc1f821f3d727dc7f60a7f808af58557881..d7b4f56e2b061b4f5db025541fca7952585c80bf 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -84,6 +84,11 @@ def construct(self): contributor_names = self.extract_names(contributions_path) self.put_in_file(contributor_names, "contributors.txt", src=contributions_path) + # include the extracted list of supporters + supporters_path = "../../doc/supporters.txt" + supporters_names = self.extract_names(supporters_path) + self.put_in_file(supporters_names, "supporters.txt", src=supporters_path) + # ... and the default camera position settings self.path("camera")