diff options
Diffstat (limited to 'indra')
41 files changed, 270 insertions, 267 deletions
| diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 572422d080..16367f1d91 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -46,6 +46,13 @@ endif()  set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release" CACHE STRING      "Supported build types." FORCE) +# The viewer code base can now be successfully compiled with -std=c++14. But +# turning that on in the generic viewer-build-variables/variables file would +# potentially require tweaking each of our ~50 third-party library builds. +# Until we decide to set -std=c++14 in viewer-build-variables/variables, set +# it locally here: we want to at least prevent inadvertently reintroducing +# viewer code that would fail with C++14. +set(CMAKE_CXX_STANDARD 17)  # Platform-specific compilation flags. @@ -173,13 +180,7 @@ if (DARWIN)    # see Variables.cmake.    string(REPLACE "-gdwarf-2" "-g${CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT}"      CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -  # The viewer code base can now be successfully compiled with -std=c++14. But -  # turning that on in the generic viewer-build-variables/variables file would -  # potentially require tweaking each of our ~50 third-party library builds. -  # Until we decide to set -std=c++14 in viewer-build-variables/variables, set -  # it locally here: we want to at least prevent inadvertently reintroducing -  # viewer code that would fail with C++14. -  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags} -std=c++14") +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  ${DARWIN_extra_cstar_flags}")    # NOTE: it's critical that the optimization flag is put in front.    # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index ff705101de..fbec709f0c 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -105,6 +105,8 @@ if(WINDOWS)          set(MSVC_VER 140)      elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019          set(MSVC_VER 140) +    elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) # Visual Studio 2022 +        set(MSVC_VER 140)      else (MSVC80)          MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake")      endif (MSVC80) @@ -151,6 +153,11 @@ elseif(DARWIN)      set(SHARED_LIB_STAGING_DIR_DEBUG            "${SHARED_LIB_STAGING_DIR}/Debug/Resources")      set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO   "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources")      set(SHARED_LIB_STAGING_DIR_RELEASE          "${SHARED_LIB_STAGING_DIR}/Release/Resources") +    # Support our "@executable_path/../Resources" load path for executables +    # that end up in any of the above SHARED_LIB_STAGING_DIR_MUMBLE +    # directories. +    file(CREATE_LINK "Release/Resources" "${SHARED_LIB_STAGING_DIR}/Resources" +         SYMBOLIC)      set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}")      set(slvoice_files SLVoice) diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake index ed595f6966..dbf5033ce5 100644 --- a/indra/cmake/Python.cmake +++ b/indra/cmake/Python.cmake @@ -5,32 +5,49 @@ set(PYTHONINTERP_FOUND)  if (WINDOWS)    # On Windows, explicitly avoid Cygwin Python. -  find_program(PYTHON_EXECUTABLE -    NAMES python.exe +  # if the user has their own version of Python installed, prefer that +  foreach(hive HKEY_CURRENT_USER HKEY_LOCAL_MACHINE) +    # prefer more recent Python versions to older ones, if multiple versions +    # are installed +    foreach(pyver 3.11 3.10 3.9 3.8 3.7) +      list(APPEND regpaths "[${hive}\\SOFTWARE\\Python\\PythonCore\\${pyver}\\InstallPath]") +    endforeach() +  endforeach() + +  # TODO: This logic has the disadvantage that if you have multiple versions +  # of Python installed, the selected path won't necessarily be the newest - +  # e.g. this GLOB will prefer Python310 to Python311. But since pymaybe is +  # checked AFTER the registry entries, this will only surface as a problem if +  # no installed Python appears in the registry. +  file(GLOB pymaybe +    "$ENV{PROGRAMFILES}/Python*" +##  "$ENV{PROGRAMFILES(X86)}/Python*" +    # The Windows environment variable is in fact as shown above, but CMake +    # disallows querying an environment variable containing parentheses - +    # thanks, Windows. Fudge by just appending " (x86)" to $PROGRAMFILES and +    # hoping for the best. +    "$ENV{PROGRAMFILES} (x86)/Python*" +    "c:/Python*") + +  find_program(python +    NAMES python3.exe python.exe      NO_DEFAULT_PATH # added so that cmake does not find cygwin python      PATHS -    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.7\\InstallPath] -    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.8\\InstallPath] -    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.9\\InstallPath] -    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.10\\InstallPath] -    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.11\\InstallPath] -    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.7\\InstallPath] -    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.8\\InstallPath] -    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.9\\InstallPath] -    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.10\\InstallPath] -    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.11\\InstallPath] +    ${regpaths} +    ${pymaybe}      )      include(FindPythonInterp)  else() -  find_program(PYTHON_EXECUTABLE python3) +  find_program(python python3) -  if (PYTHON_EXECUTABLE) +  if (python)      set(PYTHONINTERP_FOUND ON) -  endif (PYTHON_EXECUTABLE) +  endif (python)  endif (WINDOWS) -if (NOT PYTHON_EXECUTABLE) +if (NOT python)    message(FATAL_ERROR "No Python interpreter found") -endif (NOT PYTHON_EXECUTABLE) +endif (NOT python) +set(PYTHON_EXECUTABLE "${python}" CACHE FILEPATH "Python interpreter for builds")  mark_as_advanced(PYTHON_EXECUTABLE) diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py index 1e92868ae7..1f040bded5 100755 --- a/indra/cmake/run_build_test.py +++ b/indra/cmake/run_build_test.py @@ -73,7 +73,7 @@ def main(command, arguments=[], libpath=[], vars={}):      if sys.platform == "win32":          lpvars = ["PATH"]      elif sys.platform == "darwin": -        lpvars = ["LD_LIBRARY_PATH", "DYLD_LIBRARY_PATH"] +        lpvars = ["LD_LIBRARY_PATH"] # , "DYLD_LIBRARY_PATH"]      elif sys.platform.startswith("linux"):          lpvars = ["LD_LIBRARY_PATH"]      else: diff --git a/indra/llcommon/apply.h b/indra/llcommon/apply.h new file mode 100644 index 0000000000..7c58d63bc0 --- /dev/null +++ b/indra/llcommon/apply.h @@ -0,0 +1,115 @@ +/** + * @file   apply.h + * @author Nat Goodspeed + * @date   2022-06-18 + * @brief  C++14 version of std::apply() + *  + * $LicenseInfo:firstyear=2022&license=viewerlgpl$ + * Copyright (c) 2022, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_APPLY_H) +#define LL_APPLY_H + +#include <boost/type_traits/function_traits.hpp> +#include <tuple> + +namespace LL +{ + +/** + * USAGE NOTE: + * https://stackoverflow.com/a/40523474/5533635 + * + * If you're trying to pass apply() a variadic function, the compiler + * complains that it can't deduce the callable type, presumably because it + * doesn't know which arity to reify to pass. + * + * But it works to wrap the variadic function in a generic lambda, e.g.: + * + * @CODE + * LL::apply( + *     [](auto&&... args) + *     { + *         return variadic(std::forward<decltype(args)>(args)...); + *     }, + *     args); + * @ENDCODE + * + * Presumably this is because there's only one instance of the generic lambda + * @em type, with a variadic <tt>operator()()</tt>. + * + * It's pointless to provide a wrapper @em function that implicitly supplies + * the generic lambda. You couldn't pass your variadic function to our wrapper + * function, for the same original reason! + * + * Instead we provide a wrapper @em macro. Sorry, Dr. Stroustrup. + */ +#define VAPPLY(FUNC, ARGS)                                          \ +    LL::apply(                                                      \ +        [](auto&&... args)                                          \ +        {                                                           \ +            return (FUNC)(std::forward<decltype(args)>(args)...);   \ +        },                                                          \ +        (ARGS)) + +#if __cplusplus >= 201703L + +// C++17 implementation +using std::apply; + +#else // C++14 + +// Derived from https://stackoverflow.com/a/20441189 +// and https://en.cppreference.com/w/cpp/utility/apply +template <typename CALLABLE, typename TUPLE, std::size_t... I> +auto apply_impl(CALLABLE&& func, TUPLE&& args, std::index_sequence<I...>) +{ +    // call func(unpacked args) +    return std::forward<CALLABLE>(func)(std::move(std::get<I>(args))...); +} + +template <typename CALLABLE, typename... ARGS> +auto apply(CALLABLE&& func, const std::tuple<ARGS...>& args) +{ +    // std::index_sequence_for is the magic sauce here, generating an argument +    // pack of indexes for each entry in args. apply_impl() can then pass +    // those to std::get() to unpack args into individual arguments. +    return apply_impl(std::forward<CALLABLE>(func), +                      args, +                      std::index_sequence_for<ARGS...>{}); +} + +// per https://stackoverflow.com/a/57510428/5533635 +template <typename CALLABLE, typename T, size_t SIZE> +auto apply(CALLABLE&& func, const std::array<T, SIZE>& args) +{ +    return apply(std::forward<CALLABLE>(func), std::tuple_cat(args)); +} + +// per https://stackoverflow.com/a/28411055/5533635 +template <typename CALLABLE, typename T, std::size_t... I> +auto apply_impl(CALLABLE&& func, const std::vector<T>& args, std::index_sequence<I...>) +{ +    return apply_impl(std::forward<CALLABLE>(func), +                      std::make_tuple(std::forward<T>(args[I])...), +                      I...); +} + +// this goes beyond C++17 std::apply() +template <typename CALLABLE, typename T> +auto apply(CALLABLE&& func, const std::vector<T>& args) +{ +    constexpr auto arity = boost::function_traits<CALLABLE>::arity; +    assert(args.size() == arity); +    return apply_impl(std::forward<CALLABLE>(func), +                      args, +                      std::make_index_sequence<arity>()); +} + +#endif // C++14 + +} // namespace LL + +#endif /* ! defined(LL_APPLY_H) */ diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h index 24cb9bbce1..3daaef44fc 100644 --- a/indra/llcommon/llsd.h +++ b/indra/llcommon/llsd.h @@ -421,42 +421,42 @@ public:  	static std::string		typeString(Type type);		// Return human-readable type as a string  }; -struct llsd_select_bool : public std::unary_function<LLSD, LLSD::Boolean> +struct llsd_select_bool  {  	LLSD::Boolean operator()(const LLSD& sd) const  	{  		return sd.asBoolean();  	}  }; -struct llsd_select_integer : public std::unary_function<LLSD, LLSD::Integer> +struct llsd_select_integer  {  	LLSD::Integer operator()(const LLSD& sd) const  	{  		return sd.asInteger();  	}  }; -struct llsd_select_real : public std::unary_function<LLSD, LLSD::Real> +struct llsd_select_real  {  	LLSD::Real operator()(const LLSD& sd) const  	{  		return sd.asReal();  	}  }; -struct llsd_select_float : public std::unary_function<LLSD, F32> +struct llsd_select_float  {  	F32 operator()(const LLSD& sd) const  	{  		return (F32)sd.asReal();  	}  }; -struct llsd_select_uuid : public std::unary_function<LLSD, LLSD::UUID> +struct llsd_select_uuid  {  	LLSD::UUID operator()(const LLSD& sd) const  	{  		return sd.asUUID();  	}  }; -struct llsd_select_string : public std::unary_function<LLSD, LLSD::String> +struct llsd_select_string  {  	LLSD::String operator()(const LLSD& sd) const  	{ diff --git a/indra/llcommon/llstl.h b/indra/llcommon/llstl.h index a90c2c7e08..25131291f9 100644 --- a/indra/llcommon/llstl.h +++ b/indra/llcommon/llstl.h @@ -142,7 +142,7 @@ struct DeletePairedPointerArray  //                     llselect2nd<map_type::value_type>()));  template<typename T> -struct DeletePointerFunctor : public std::unary_function<T*, bool> +struct DeletePointerFunctor  {  	bool operator()(T* ptr) const  	{ @@ -153,7 +153,7 @@ struct DeletePointerFunctor : public std::unary_function<T*, bool>  // See notes about DeleteArray for why you should consider avoiding this.  template<typename T> -struct DeleteArrayFunctor : public std::unary_function<T*, bool> +struct DeleteArrayFunctor  {  	bool operator()(T* ptr) const  	{ @@ -395,16 +395,17 @@ OutputIter ll_transform_n(  // select... with the stl. Look up usage on the sgi website.  template <class _Pair> -struct _LLSelect1st : public std::unary_function<_Pair, typename _Pair::first_type> { -  const typename _Pair::first_type& operator()(const _Pair& __x) const { +struct _LLSelect1st +{ +  const auto& operator()(const _Pair& __x) const {      return __x.first;    }  };  template <class _Pair> -struct _LLSelect2nd : public std::unary_function<_Pair, typename _Pair::second_type> +struct _LLSelect2nd  { -  const typename _Pair::second_type& operator()(const _Pair& __x) const { +  const auto& operator()(const _Pair& __x) const {      return __x.second;    }  }; @@ -416,9 +417,7 @@ template <class _Pair> struct llselect2nd : public _LLSelect2nd<_Pair> {};  // compose... with the stl. Look up usage on the sgi website.  template <class _Operation1, class _Operation2> -class ll_unary_compose : -	public std::unary_function<typename _Operation2::argument_type, -							   typename _Operation1::result_type> +class ll_unary_compose  {  protected:    _Operation1 __op1; @@ -426,8 +425,9 @@ protected:  public:    ll_unary_compose(const _Operation1& __x, const _Operation2& __y)      : __op1(__x), __op2(__y) {} -  typename _Operation1::result_type -  operator()(const typename _Operation2::argument_type& __x) const { +  template <typename _Op2Arg> +  auto +  operator()(const _Op2Arg& __x) const {      return __op1(__op2(__x));    }  }; @@ -441,8 +441,7 @@ llcompose1(const _Operation1& __op1, const _Operation2& __op2)  template <class _Operation1, class _Operation2, class _Operation3>  class ll_binary_compose -  : public std::unary_function<typename _Operation2::argument_type, -							   typename _Operation1::result_type> { +{  protected:    _Operation1 _M_op1;    _Operation2 _M_op2; @@ -451,8 +450,9 @@ public:    ll_binary_compose(const _Operation1& __x, const _Operation2& __y,  					const _Operation3& __z)      : _M_op1(__x), _M_op2(__y), _M_op3(__z) { } -  typename _Operation1::result_type -  operator()(const typename _Operation2::argument_type& __x) const { +  template<typename OP2ARG> +  auto +  operator()(const OP2ARG& __x) const {      return _M_op1(_M_op2(__x), _M_op3(__x));    }  }; @@ -468,54 +468,51 @@ llcompose2(const _Operation1& __op1, const _Operation2& __op2,  // helpers to deal with the fact that MSDev does not package  // bind... with the stl. Again, this is from sgi. -template <class _Operation> -class llbinder1st : -	public std::unary_function<typename _Operation::second_argument_type, -							   typename _Operation::result_type> { +template <class _Operation, typename _Arg1> +class llbinder1st +{  protected:    _Operation op; -  typename _Operation::first_argument_type value; +  _Arg1 value;  public: -  llbinder1st(const _Operation& __x, -			  const typename _Operation::first_argument_type& __y) +  llbinder1st(const _Operation& __x, const _Arg1& __y)        : op(__x), value(__y) {} -	typename _Operation::result_type -	operator()(const typename _Operation::second_argument_type& __x) const { -		return op(value, __x); -	} +    template <typename _Arg2> +    auto +    operator()(const _Arg2& __x) const { +        return op(value, __x); +    }  };  template <class _Operation, class _Tp> -inline llbinder1st<_Operation> +inline auto  llbind1st(const _Operation& __oper, const _Tp& __x)  { -  typedef typename _Operation::first_argument_type _Arg1_type; -  return llbinder1st<_Operation>(__oper, _Arg1_type(__x)); +  return llbinder1st<_Operation, _Tp>(__oper, __x);  } -template <class _Operation> +template <class _Operation, typename _Arg2>  class llbinder2nd -	: public std::unary_function<typename _Operation::first_argument_type, -								 typename _Operation::result_type> { +{  protected:  	_Operation op; -	typename _Operation::second_argument_type value; +	_Arg2 value;  public:  	llbinder2nd(const _Operation& __x, -				const typename _Operation::second_argument_type& __y) +				const _Arg2& __y)  		: op(__x), value(__y) {} -	typename _Operation::result_type -	operator()(const typename _Operation::first_argument_type& __x) const { +	template <typename _Arg1> +	auto +	operator()(const _Arg1& __x) const {  		return op(__x, value);  	}  };  template <class _Operation, class _Tp> -inline llbinder2nd<_Operation> +inline auto  llbind2nd(const _Operation& __oper, const _Tp& __x)  { -  typedef typename _Operation::second_argument_type _Arg2_type; -  return llbinder2nd<_Operation>(__oper, _Arg2_type(__x)); +  return llbinder2nd<_Operation, _Tp>(__oper, __x);  }  /** @@ -548,8 +545,7 @@ bool before(const std::type_info* lhs, const std::type_info* rhs)  namespace std  {  	template <> -	struct less<const std::type_info*>: -		public std::binary_function<const std::type_info*, const std::type_info*, bool> +	struct less<const std::type_info*>  	{  		bool operator()(const std::type_info* lhs, const std::type_info* rhs) const  		{ @@ -558,8 +554,7 @@ namespace std  	};  	template <> -	struct less<std::type_info*>: -		public std::binary_function<std::type_info*, std::type_info*, bool> +	struct less<std::type_info*>  	{  		bool operator()(std::type_info* lhs, std::type_info* rhs) const  		{ diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp index 9754353ab0..7ee36a9ea6 100644 --- a/indra/llcommon/tests/llleap_test.cpp +++ b/indra/llcommon/tests/llleap_test.cpp @@ -15,10 +15,10 @@  #include "llleap.h"  // STL headers  // std headers +#include <functional>  // external library headers  #include <boost/assign/list_of.hpp>  #include <boost/phoenix/core/argument.hpp> -#include <boost/foreach.hpp>  // other Linden headers  #include "../test/lltut.h"  #include "../test/namedtempfile.h" @@ -29,7 +29,6 @@  #include "llstring.h"  #include "stringize.h"  #include "StringVec.h" -#include <functional>  using boost::assign::list_of; @@ -110,11 +109,6 @@ namespace tut                     "import os\n"                     "import sys\n"                     "\n" -                   // Don't forget that this Python script is written to some -                   // temp directory somewhere! Its __file__ is useless in -                   // finding indra/lib/python. Use our __FILE__, with -                   // raw-string syntax to deal with Windows pathnames. -                   "mydir = os.path.dirname(r'" << __FILE__ << "')\n"                     "from llbase import llsd\n"                     "\n"                     "class ProtocolError(Exception):\n" @@ -241,9 +235,9 @@ namespace tut                               "import sys\n"                               "sys.stderr.write('''Hello from Python!\n"                               "note partial line''')\n"); +        StringVec vcommand{ PYTHON, script.getName() };          CaptureLog log(LLError::LEVEL_INFO); -        waitfor(LLLeap::create(get_test_name(), -                               sv(list_of(PYTHON)(script.getName())))); +        waitfor(LLLeap::create(get_test_name(), vcommand));          log.messageWith("Hello from Python!");          log.messageWith("note partial line");      } @@ -531,7 +525,7 @@ namespace tut          result.ensure();      } -    struct TestLargeMessage: public std::binary_function<size_t, size_t, bool> +    struct TestLargeMessage      {          TestLargeMessage(const std::string& PYTHON_, const std::string& reader_module_,                           const std::string& test_name_): diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index e25dae8a90..8db926fddf 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -1268,5 +1268,5 @@ U32 LLParcel::countExperienceKeyType( U32 type )  	return std::count_if(  		boost::begin(mExperienceKeys | boost::adaptors::map_values),   		boost::end(mExperienceKeys | boost::adaptors::map_values),  -		std::bind2nd(std::equal_to<U32>(), type)); +		[type](U32 key){ return (key == type); });  } diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 4a069b0f63..ac6fb9acb3 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1625,9 +1625,6 @@ BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split,  			//genNGon(params, llfloor(MIN_DETAIL_FACES * detail), 4.f, 0.f);  			genNGon(params, llfloor(MIN_DETAIL_FACES * detail)); -			F32 t     = 0.f; -			F32 tStep = 1.0f / mPath.size(); -  			F32 toggle = 0.5f;  			for (S32 i=0;i<(S32)mPath.size();i++)  			{ @@ -1636,7 +1633,6 @@ BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split,  					toggle = -0.5f;  				else  					toggle = 0.5f; -				t += tStep;  			}  		} diff --git a/indra/llmessage/lldatapacker.cpp b/indra/llmessage/lldatapacker.cpp index 96c1297e0d..b6adc102d2 100644 --- a/indra/llmessage/lldatapacker.cpp +++ b/indra/llmessage/lldatapacker.cpp @@ -127,13 +127,7 @@ BOOL LLDataPacker::unpackFixed(F32 &value, const char *name,  		total_bits++;  	} -	S32 min_val;  	U32 max_val; -	if (is_signed) -	{ -		min_val = 1 << int_bits; -		min_val *= -1; -	}  	max_val = 1 << int_bits;  	F32 fixed_val; diff --git a/indra/llmessage/llioutil.h b/indra/llmessage/llioutil.h index e8d245f530..c404a98bed 100644 --- a/indra/llmessage/llioutil.h +++ b/indra/llmessage/llioutil.h @@ -147,7 +147,7 @@ protected:   * }   * </code>   */ -class LLChangeChannel //: public unary_function<T, void> +class LLChangeChannel  {  public:  	/**  diff --git a/indra/llmessage/llmessagethrottle.cpp b/indra/llmessage/llmessagethrottle.cpp index 579d6d7187..14582aaf32 100644 --- a/indra/llmessage/llmessagethrottle.cpp +++ b/indra/llmessage/llmessagethrottle.cpp @@ -32,18 +32,8 @@  #include "llframetimer.h"  // This is used for the stl search_n function. -#if _MSC_VER >= 1500 // VC9 has a bug in search_n -struct eq_message_throttle_entry : public std::binary_function< LLMessageThrottleEntry, LLMessageThrottleEntry, bool > -{ -	bool operator()(const LLMessageThrottleEntry& a, const LLMessageThrottleEntry& b) const -	{ -		return a.getHash() == b.getHash(); -	} -}; -#else  bool eq_message_throttle_entry(LLMessageThrottleEntry a, LLMessageThrottleEntry b)   		{ return a.getHash() == b.getHash(); } -#endif  const U64 SEC_TO_USEC = 1000000; @@ -118,14 +108,8 @@ BOOL LLMessageThrottle::addViewerAlert(const LLUUID& to, const std::string& mesg  	LLMessageThrottleEntry entry(hash, LLFrameTimer::getTotalTime());  	// Check if this message is already in the list. -#if _MSC_VER >= 1500 // VC9 has a bug in search_n -	// SJB: This *should* work but has not been tested yet *TODO: Test! -	message_list_iterator_t found = std::find_if(message_list->begin(), message_list->end(), -												 std::bind2nd(eq_message_throttle_entry(), entry)); -#else   	message_list_iterator_t found = std::search_n(message_list->begin(), message_list->end(),   												  1, entry, eq_message_throttle_entry); -#endif  	if (found == message_list->end())  	{  		// This message was not found.  Add it to the list. @@ -152,15 +136,8 @@ BOOL LLMessageThrottle::addAgentAlert(const LLUUID& agent, const LLUUID& task, c  	LLMessageThrottleEntry entry(hash, LLFrameTimer::getTotalTime());  	// Check if this message is already in the list. -#if _MSC_VER >= 1500 // VC9 has a bug in search_n -	// SJB: This *should* work but has not been tested yet *TODO: Test! -	message_list_iterator_t found = std::find_if(message_list->begin(), message_list->end(), -												 std::bind2nd(eq_message_throttle_entry(), entry)); -#else  	message_list_iterator_t found = std::search_n(message_list->begin(), message_list->end(),  												  1, entry, eq_message_throttle_entry); -#endif -	  	if (found == message_list->end())  	{  		// This message was not found.  Add it to the list. diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp index 7605da4d3f..e659414e8c 100644 --- a/indra/llmessage/llthrottle.cpp +++ b/indra/llmessage/llthrottle.cpp @@ -374,7 +374,6 @@ BOOL LLThrottleGroup::dynamicAdjust()  	}  	mDynamicAdjustTime = mt_sec; -	S32 total = 0;  	// Update historical information  	for (i = 0; i < TC_EOF; i++)  	{ @@ -391,7 +390,6 @@ BOOL LLThrottleGroup::dynamicAdjust()  		}  		mBitsSentThisPeriod[i] = 0; -		total += ll_round(mBitsSentHistory[i]);  	}  	// Look for busy channels @@ -437,12 +435,6 @@ BOOL LLThrottleGroup::dynamicAdjust()  		{  			channel_over_nominal[i] = FALSE;  		} - -		//if (total) -		//{ -		//	LL_INFOS() << i << ": B" << channel_busy[i] << " I" << channel_idle[i] << " N" << channel_over_nominal[i]; -		//	LL_CONT << " Nom: " << mNominalBPS[i] << " Cur: " << mCurrentBPS[i] << " BS: " << mBitsSentHistory[i] << LL_ENDL; -		//}  	}  	if (channels_busy) diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 285c5f656b..4b505a79c4 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -889,7 +889,6 @@ LLSD LLModel::writeModel(  LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BOOL as_slm)  { -	U32 bytes = 0;  	std::string::size_type cur_offset = 0; @@ -912,7 +911,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO  			header["skin"]["offset"] = (LLSD::Integer) cur_offset;  			header["skin"]["size"] = (LLSD::Integer) size;  			cur_offset += size; -			bytes += size;  		}  	} @@ -928,7 +926,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO  			header["physics_convex"]["offset"] = (LLSD::Integer) cur_offset;  			header["physics_convex"]["size"] = (LLSD::Integer) size;  			cur_offset += size; -			bytes += size;  		}  	} @@ -950,7 +947,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO  			header[model_names[i]]["offset"] = (LLSD::Integer) cur_offset;  			header[model_names[i]]["size"] = (LLSD::Integer) size;  			cur_offset += size; -			bytes += size;  		}  	} diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h index 89c9852f4a..5d90b3ef4e 100644 --- a/indra/llui/lldockablefloater.h +++ b/indra/llui/lldockablefloater.h @@ -30,6 +30,7 @@  #include "llerror.h"  #include "llfloater.h"  #include "lldockcontrol.h" +#include <memory>  /**   * Represents floater that can dock. @@ -131,7 +132,7 @@ protected:  	boost::function<BOOL ()> mIsDockedStateForcedCallback;  private: -	std::auto_ptr<LLDockControl> mDockControl; +	std::unique_ptr<LLDockControl> mDockControl;  	LLUIImagePtr mDockTongue;  	static LLHandle<LLFloater> sInstanceHandle;  	/** diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index aac28e04b9..77938edf27 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -395,7 +395,6 @@ void LLLayoutStack::updateLayout()  	space_to_distribute += panelp ? ll_round((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0;  	S32 remaining_space = space_to_distribute; -	F32 fraction_distributed = 0.f;  	if (space_to_distribute > 0 && total_visible_fraction > 0.f)  	{	// give space proportionally to visible auto resize panels  		BOOST_FOREACH(LLLayoutPanel* panelp, mPanels) @@ -404,7 +403,6 @@ void LLLayoutStack::updateLayout()  			{  				F32 fraction_to_distribute = (panelp->mFractionalSize * panelp->getAutoResizeFactor()) / (total_visible_fraction);  				S32 delta = ll_round((F32)space_to_distribute * fraction_to_distribute); -				fraction_distributed += fraction_to_distribute;  				panelp->mTargetDim += delta;  				remaining_space -= delta;  			} diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index bc4f07941b..b44c6138f4 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -621,8 +621,6 @@ void LLWindowMacOSX::getMouseDeltas(float* delta)  BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL enable_vsync)  { -	BOOL			glNeedsInit = FALSE; -  	mFullscreen = fullscreen;  	if (mWindow == NULL) @@ -636,10 +634,6 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits  		// Get the view instead.  		mGLView = createOpenGLView(mWindow, mFSAASamples, enable_vsync);  		mContext = getCGLContextObj(mGLView); -		 -		// Since we just created the context, it needs to be set up. -		glNeedsInit = TRUE; -		  		gGLManager.mVRAM = getVramSize(mGLView);  	} @@ -1719,12 +1713,6 @@ void LLSplashScreenMacOSX::showImpl()  void LLSplashScreenMacOSX::updateImpl(const std::string& mesg)  { -	if(mWindow != NULL) -	{ -		CFStringRef string = NULL; - -		string = CFStringCreateWithCString(NULL, mesg.c_str(), kCFStringEncodingUTF8); -	}  } diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 8a55a848db..cf953d21ac 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -35,6 +35,7 @@  #include "llinventoryobserver.h"  #include "llviewerinventory.h"  #include "llcorehttputil.h" +#include <memory>  class LLWearableHoldingPattern;  class LLInventoryCallback; @@ -276,7 +277,7 @@ private:  	LLUUID mCOFImageID; -	std::auto_ptr<LLOutfitUnLockTimer> mUnlockOutfitTimer; +	std::unique_ptr<LLOutfitUnLockTimer> mUnlockOutfitTimer;  	// Set of temp attachment UUIDs that should be removed  	typedef std::set<LLUUID> doomed_temp_attachments_t; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 60797c87d9..1e62b88dfa 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1185,12 +1185,8 @@ bool LLAppViewer::init()      {          LL_WARNS("InitInfo") << "Skipping updater check." << LL_ENDL;      } +#endif //LL_RELEASE_FOR_DOWNLOAD -    if (mUpdaterNotFound) -    { -        LL_WARNS("InitInfo") << "Failed to launch updater. Skipping Leap commands." << LL_ENDL; -    } -    else      {          // Iterate over --leap command-line options. But this is a bit tricky: if          // there's only one, it won't be an array at all. @@ -1223,7 +1219,6 @@ bool LLAppViewer::init()                               << "lleventhost no longer supported as a dynamic library"                               << LL_ENDL;      } -#endif //LL_RELEASE_FOR_DOWNLOAD  	LLTextUtil::TextHelpers::iconCallbackCreationFunction = create_text_segment_icon_from_url_match; diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 1605e4133d..9bb3bac104 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -504,20 +504,6 @@ void LLFastTimerView::exportCharts(const std::string& base, const std::string& t  		is.close();  	} -	//get time domain -	LLSD::Real cur_total_time = 0.0; - -	for (U32 i = 0; i < cur_data.size(); ++i) -	{ -		cur_total_time += cur_data[i]["Total"]["Time"].asReal(); -	} - -	LLSD::Real base_total_time = 0.0; -	for (U32 i = 0; i < base_data.size(); ++i) -	{ -		base_total_time += base_data[i]["Total"]["Time"].asReal(); -	} -  	//allocate raw scratch space  	LLPointer<LLImageRaw> scratch = new LLImageRaw(1024, 512, 3); diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index a02bb56489..4f2769a507 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -848,8 +848,11 @@ void LLFavoritesBarCtrl::updateButtons(bool force_update)  		if (getChildList()->size() > 0)  		{  			//find last visible child to get the rightest button offset -			child_list_const_reverse_iter_t last_visible_it = std::find_if(childs->rbegin(), childs->rend(),  -					std::mem_fun(&LLView::getVisible)); +			child_list_const_reverse_iter_t last_visible_it = +				std::find_if( +					childs->rbegin(), childs->rend(),  +					[](const child_list_t::value_type& child) +					{ return child->getVisible(); });  			if(last_visible_it != childs->rend())  			{  				last_right_edge = (*last_visible_it)->getRect().mRight; diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index ffbb0bbee9..279a8f68ea 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -889,8 +889,10 @@ const std::string LLFloater360Capture::generate_proposed_filename()          // this looks complex but it's straightforward - removes all non-alpha chars from a string          // which in this case is the SL region name - we use it as a proposed filename but the user is free to change          std::string region_name = region->getName(); -        std::replace_if(region_name.begin(), region_name.end(), std::not1(std::ptr_fun(isalnum)), '_'); -        if (region_name.length() > 0) +        std::replace_if(region_name.begin(), region_name.end(), +                        [](char c){ return ! std::isalnum(c); }, +                        '_'); +        if (! region_name.empty())          {              filename << region_name;              filename << "_"; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 296e155d28..bf38a495bb 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -656,13 +656,11 @@ void LLFloaterRegionInfo::refreshFromRegion(LLViewerRegion* region)  	}  	// call refresh from region on all panels -	std::for_each( -		mInfoPanels.begin(), -		mInfoPanels.end(), -		llbind2nd( -			std::mem_fun(&LLPanelRegionInfo::refreshFromRegion), -			region)); -    mEnvironmentPanel->refreshFromRegion(region); +	for (const auto& infoPanel : mInfoPanels) +	{ +		infoPanel->refreshFromRegion(region); +	} +	mEnvironmentPanel->refreshFromRegion(region);  }  // public diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index 489d34edca..c0f773968d 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -757,11 +757,11 @@ S32 LLGestureMgr::getPlayingCount() const  } -struct IsGesturePlaying : public std::unary_function<LLMultiGesture*, bool> +struct IsGesturePlaying  {  	bool operator()(const LLMultiGesture* gesture) const  	{ -		return gesture->mPlaying ? true : false; +		return bool(gesture->mPlaying);  	}  }; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 37500176ea..ad957fa039 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -3132,7 +3132,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32  		gInventory.accountForUpdate(update);  	} -	U32 changes = 0x0;  	if (account)  	{  		mask |= LLInventoryObserver::CREATE; @@ -3140,7 +3139,7 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32  	//as above, this loop never seems to loop more than once per call  	for (item_array_t::iterator it = items.begin(); it != items.end(); ++it)  	{ -		changes |= gInventory.updateItem(*it, mask); +		gInventory.updateItem(*it, mask);  	}  	gInventory.notifyObservers();  	gViewerWindow->getWindow()->decBusyCount(); @@ -4551,13 +4550,11 @@ void LLInventoryModel::FetchItemHttpHandler::processData(LLSD & content, LLCore:  	}  	// as above, this loop never seems to loop more than once per call -	U32 changes(0U);  	for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)  	{ -		changes |= gInventory.updateItem(*it); +		gInventory.updateItem(*it);  	} -	// *HUH:  Have computed 'changes', nothing uses it. -	 +  	gInventory.notifyObservers();  	gViewerWindow->getWindow()->decBusyCount();  } diff --git a/indra/newview/lllegacyatmospherics.cpp b/indra/newview/lllegacyatmospherics.cpp index 1364067949..bbbde0711f 100644 --- a/indra/newview/lllegacyatmospherics.cpp +++ b/indra/newview/lllegacyatmospherics.cpp @@ -386,7 +386,6 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)  		return;  	} -	const BOOL hide_clip_plane = TRUE;  	LLColor4 target_fog(0.f, 0.2f, 0.5f, 0.f);  	const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f; @@ -472,25 +471,12 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)  	render_fog_color = sky_fog_color; -	F32 fog_density = 0.f;  	fog_distance = mFogRatio * distance;  	if (camera_height > water_height)  	{  		LLColor4 fog(render_fog_color);  		mGLFogCol = fog; - -		if (hide_clip_plane) -		{ -			// For now, set the density to extend to the cull distance. -			const F32 f_log = 2.14596602628934723963618357029f; // sqrt(fabs(log(0.01f))) -			fog_density = f_log/fog_distance; -		} -		else -		{ -			const F32 f_log = 4.6051701859880913680359829093687f; // fabs(log(0.01f)) -			fog_density = (f_log)/fog_distance; -		}  	}  	else  	{ @@ -498,8 +484,6 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)  		F32 depth = water_height - camera_height;  		// get the water param manager variables -        float water_fog_density = pwater->getModifiedWaterFogDensity(depth <= 0.0f); -  		LLColor4 water_fog_color(pwater->getWaterFogColor());  		// adjust the color based on depth.  We're doing linear approximations @@ -512,9 +496,6 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)  		// set the gl fog color  		mGLFogCol = fogCol; - -		// set the density based on what the shaders use -		fog_density = water_fog_density * gSavedSettings.getF32("WaterGLFogDensityScale");  	}  	mFogColor = sky_fog_color; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index d28e929b48..a6d55b4ae9 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -2055,16 +2055,6 @@ EMeshProcessingResult LLMeshRepoThread::physicsShapeReceived(const LLUUID& mesh_  		if (volume->unpackVolumeFaces(stream, data_size))  		{  			//load volume faces into decomposition buffer -			S32 vertex_count = 0; -			S32 index_count = 0; - -			for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) -			{ -				const LLVolumeFace& face = volume->getVolumeFace(i); -				vertex_count += face.mNumVertices; -				index_count += face.mNumIndices; -			} -  			d->mPhysicsShapeMesh.clear();  			std::vector<LLVector3>& pos = d->mPhysicsShapeMesh.mPositions; diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index 3bca4fde83..54ec41026d 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -2680,8 +2680,6 @@ void LLModelPreview::clearBuffers()  void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)  { -    U32 tri_count = 0; -    U32 vertex_count = 0;      U32 mesh_count = 0; @@ -2817,8 +2815,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)              mVertexBuffer[lod][mdl].push_back(vb); -            vertex_count += num_vertices; -            tri_count += num_indices / 3;              ++mesh_count;          } diff --git a/indra/newview/llpatchvertexarray.cpp b/indra/newview/llpatchvertexarray.cpp index 6e3e375488..a7011dfad5 100644 --- a/indra/newview/llpatchvertexarray.cpp +++ b/indra/newview/llpatchvertexarray.cpp @@ -69,11 +69,9 @@ void LLPatchVertexArray::create(U32 surface_width, U32 patch_width, F32 meters_p  	// (The -1 is there because an LLSurface has a buffer of 1 on   	// its East and North edges).  	U32 power_of_two = 1; -	U32 surface_order = 0;  	while (power_of_two < (surface_width-1))  	{  		power_of_two *= 2; -		surface_order += 1;  	}  	if (power_of_two == (surface_width-1)) diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index c267c3c699..30d0a22ef0 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -332,7 +332,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n  	else  	{  		ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPresetType"); -		bool new_camera_offsets = false;  		if (IS_CAMERA)  		{  			if (isDefaultCameraPreset(name)) @@ -354,7 +353,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n  			{  				new_camera_preset = CAMERA_PRESET_CUSTOM;  			} -			new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPresetType") != new_camera_preset);  		}  		for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)  		{ diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp index f7aa63e34d..5e339a52bf 100644 --- a/indra/newview/llsceneview.cpp +++ b/indra/newview/llsceneview.cpp @@ -207,7 +207,7 @@ void LLSceneView::draw()  			for (U32 i = 0; i < count; ++i)  			{  				F32 rad = size[idx][i]; -				total += rad;	 +				total += rad;  				F32 y = (rad-size_domain[0])/size_range*size_rect.getHeight()+size_rect.mBottom;  				F32 x = (F32) i / count * size_rect.getWidth() + size_rect.mLeft; @@ -266,14 +266,11 @@ void LLSceneView::draw()  			U32 count = triangles[idx].size(); -			U32 total = 0; -  			gGL.begin(LLRender::LINE_STRIP);  			//plot triangles  			for (U32 i = 0; i < count; ++i)  			{  				U32 tri_count = triangles[idx][i]; -				total += tri_count;	  				F32 y = (F32) (tri_count-tri_domain[0])/triangle_range*tri_rect.getHeight()+tri_rect.mBottom;  				F32 x = (F32) i / count * tri_rect.getWidth() + tri_rect.mLeft; @@ -290,15 +287,8 @@ void LLSceneView::draw()  			gGL.end();  			gGL.flush(); -			U32 total_visible = 0;  			count = visible_triangles[idx].size(); -			for (U32 i = 0; i < count; ++i) -			{ -				U32 tri_count = visible_triangles[idx][i]; -				total_visible += tri_count;	 -			} -  			std::string label = llformat("%s Object Triangle Counts (Ktris) -- Visible: %.2f/%.2f (%.2f KB Visible)",  				category[idx], total_visible_triangles[idx]/1024.f, total_triangles[idx]/1024.f, total_visible_bytes[idx]/1024.f); diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp index cf3519c1c7..8bdccfd9f6 100644 --- a/indra/newview/llskinningutil.cpp +++ b/indra/newview/llskinningutil.cpp @@ -264,6 +264,9 @@ void LLSkinningUtil::getPerVertexSkinMatrix(      // SL-366 - with weight validation/cleanup code, it should no longer be      // possible to hit the bad scale case.      llassert(valid_weights); +    // When building for Release, the above llassert() goes away. Ward off +    // variable-set-but-unused error. +    (void)valid_weights;  }  void LLSkinningUtil::initJointNums(LLMeshSkinInfo* skin, LLVOAvatar *avatar) diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 69074b1670..ab559f1e6f 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -35,6 +35,7 @@  #include "llviewercontrol.h"  #include "lltexteditor.h" +#include <memory>  #define MOUSE_LEAVE false  #define MOUSE_ENTER true @@ -222,7 +223,7 @@ private:  	LLPanel*	 mWrapperPanel;  	// timer counts a lifetime of a toast -	std::auto_ptr<LLToastLifeTimer> mTimer; +	std::unique_ptr<LLToastLifeTimer> mTimer;  	F32			mToastLifetime; // in seconds  	F32			mToastFadingTime; // in seconds diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index d603f584ff..815d8e9486 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1148,15 +1148,14 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)  			total_update_count--;  		}  	} -	 -	S32 fetch_count = 0; +  	size_t min_update_count = llmin(MIN_UPDATE_COUNT,(S32)(entries.size()-max_priority_count));  	S32 min_count = max_priority_count + min_update_count;  	for (entries_list_t::iterator iter3 = entries.begin();  		 iter3 != entries.end(); )  	{  		LLViewerFetchedTexture* imagep = *iter3++; -		fetch_count += (imagep->updateFetch() ? 1 : 0); +		imagep->updateFetch();  		if (min_count <= min_update_count)  		{  			mLastFetchKey = LLTextureKey(imagep->getID(), (ETexListType)imagep->getTextureListType()); diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 068e8a131d..51cf5f20c6 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -845,9 +845,6 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)  	std::sort(mFaceList.begin(), mFaceList.end(), LLFace::CompareDistanceGreater()); -	U32 index_count = 0; -	U32 vertex_count = 0; -  	group->clearDrawMap();  	LLVertexBuffer* buffer = group->mVertexBuffer; @@ -912,10 +909,6 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)  		llassert(facep->getGeomCount() == 4);  		llassert(facep->getIndicesCount() == 6); - -		vertex_count += facep->getGeomCount(); -		index_count += facep->getIndicesCount(); -  		S32 idx = draw_vec.size()-1;  		BOOL fullbright = facep->isState(LLFace::FULLBRIGHT); diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp index 0aa0280b25..ceff5cc8ee 100644 --- a/indra/newview/llwatchdog.cpp +++ b/indra/newview/llwatchdog.cpp @@ -222,18 +222,17 @@ void LLWatchdog::run()  	if(current_run_delta > (WATCHDOG_SLEEP_TIME_USEC * TIME_ELAPSED_MULTIPLIER))  	{  		LL_INFOS() << "Watchdog thread delayed: resetting entries." << LL_ENDL; -		std::for_each(mSuspects.begin(),  -			mSuspects.end(),  -			std::mem_fun(&LLWatchdogEntry::reset) -			); +		for (const auto& suspect : mSuspects) +		{ +			suspect->reset(); +		}  	}  	else  	{  		SuspectsRegistry::iterator result =   			std::find_if(mSuspects.begin(),  -				mSuspects.end(),  -				std::not1(std::mem_fun(&LLWatchdogEntry::isAlive)) -				); +				mSuspects.end(), +				[](const LLWatchdogEntry* suspect){ return ! suspect->isAlive(); });  		if(result != mSuspects.end())  		{  			// error!!! diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 8abb49fba8..05e3aa783f 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -762,15 +762,11 @@ void LLWorld::updateParticles()  void LLWorld::renderPropertyLines()  { -	S32 region_count = 0; -	S32 vertex_count = 0; -  	for (region_list_t::iterator iter = mVisibleRegionList.begin();  		 iter != mVisibleRegionList.end(); ++iter)  	{  		LLViewerRegion* regionp = *iter; -		region_count++; -		vertex_count += regionp->renderPropertyLines(); +		regionp->renderPropertyLines();  	}  } @@ -778,7 +774,6 @@ void LLWorld::renderPropertyLines()  void LLWorld::updateNetStats()  {  	F64Bits bits; -	U32 packets = 0;  	for (region_list_t::iterator iter = mActiveRegionList.begin();  		 iter != mActiveRegionList.end(); ++iter) @@ -786,7 +781,6 @@ void LLWorld::updateNetStats()  		LLViewerRegion* regionp = *iter;  		regionp->updateNetStats();  		bits += regionp->mBitsReceived; -		packets += llfloor( regionp->mPacketsReceived );  		regionp->mBitsReceived = (F32Bits)0.f;  		regionp->mPacketsReceived = 0.f;  	} diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index de5ac5ed3d..2e0b3506f9 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -908,7 +908,7 @@ class DarwinManifest(ViewerManifest):                      # Let exception, if any, propagate -- if this doesn't                      # work, we need the build to noisily fail!                      oldpath = subprocess.check_output( -                        ['objdump', '-macho', '-dylib-id', '-non-verbose', +                        ['objdump', '--macho', '--dylib-id', '--non-verbose',                           os.path.join(relpkgdir, "BugsplatMac.framework", "BugsplatMac")]                          ).splitlines()[-1]  # take the last line of output                      self.run_command( diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt index 084aa8d9f7..161e957784 100644 --- a/indra/test/CMakeLists.txt +++ b/indra/test/CMakeLists.txt @@ -116,14 +116,21 @@ if (WINDOWS)            LINK_FLAGS "/NODEFAULTLIB:LIBCMT"            LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""            ) +elseif (DARWIN) +  # Support our "@executable_path/../Resources" load path for our test +  # executable. This SHOULD properly be "$<TARGET_FILE_DIR:lltest>/Resources", +  # but the CMake $<TARGET_FILE_DIR> generator expression isn't evaluated by +  # CREATE_LINK, so fudge it. +  file(CREATE_LINK "../sharedlibs/Release/Resources" "${CMAKE_BINARY_DIR}/test/Resources" +       SYMBOLIC)  endif (WINDOWS)  set(TEST_EXE $<TARGET_FILE:lltest>) -SET_TEST_PATH(DYLD_LIBRARY_PATH) +SET_TEST_PATH(LD_LIBRARY_PATH)  LL_TEST_COMMAND(command  -  "${DYLD_LIBRARY_PATH}" +  "${LD_LIBRARY_PATH}"    "${TEST_EXE}"    "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt"     "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt") diff --git a/indra/test/lldoubledispatch_tut.cpp b/indra/test/lldoubledispatch_tut.cpp index ad8f6454d4..dbf55e666f 100644 --- a/indra/test/lldoubledispatch_tut.cpp +++ b/indra/test/lldoubledispatch_tut.cpp @@ -35,8 +35,9 @@  #include "lldoubledispatch.h"  // STL headers  // std headers -#include <string>  #include <iostream> +#include <memory> +#include <string>  #include <typeinfo>  // external library headers  // other Linden headers @@ -135,10 +136,10 @@ namespace tut          // Instantiate a few GameObjects.  Make sure we refer to them          // polymorphically, and don't let them leak. -        std::auto_ptr<GameObject> home; -        std::auto_ptr<GameObject> obstacle; -        std::auto_ptr<GameObject> tug; -        std::auto_ptr<GameObject> patrol; +        std::unique_ptr<GameObject> home; +        std::unique_ptr<GameObject> obstacle; +        std::unique_ptr<GameObject> tug; +        std::unique_ptr<GameObject> patrol;          // prototype objects          Asteroid dummyAsteroid; | 
