From f89cffa66e087aa23a2b988e5b53ab41c964d51a Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Tue, 3 Nov 2009 16:59:53 -0600 Subject: Second Life viewer sources 1.23.5 --- linden/indra/cmake/CopyWinLibs.cmake | 48 +++++++++++++++++- linden/indra/lib/python/indra/util/llversion.py | 17 ++++--- linden/indra/llcommon/llversionserver.h | 2 +- linden/indra/llcommon/llversionviewer.h | 6 +-- .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- linden/indra/newview/app_settings/settings.xml | 2 +- linden/indra/newview/build_win32_appConfig.py | 58 ++++++++++++++++++++++ linden/indra/newview/llassetuploadresponders.cpp | 3 +- linden/indra/newview/llfloaterbulkpermission.cpp | 36 ++++++++++++-- linden/indra/newview/llpreview.cpp | 28 +++++++++++ linden/indra/newview/llpreview.h | 1 + linden/indra/newview/res/viewerRes.rc | 8 +-- linden/indra/newview/viewer_manifest.py | 47 +++++++++++------- 14 files changed, 218 insertions(+), 44 deletions(-) create mode 100644 linden/indra/newview/build_win32_appConfig.py (limited to 'linden') diff --git a/linden/indra/cmake/CopyWinLibs.cmake b/linden/indra/cmake/CopyWinLibs.cmake index b1291df..6612528 100644 --- a/linden/indra/cmake/CopyWinLibs.cmake +++ b/linden/indra/cmake/CopyWinLibs.cmake @@ -169,6 +169,20 @@ if (MSVC80) ${debug_msvc8_files} ) set(all_targets ${all_targets} ${out_targets}) + + set(debug_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/Debug/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${debug_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLifeDebug.exe.config + ${debug_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest + COMMENT "Creating debug app config file" + ) + endif (EXISTS ${debug_msvc8_redist_path}) FIND_PATH(release_msvc8_redist_path msvcr80.dll @@ -201,10 +215,42 @@ if (MSVC80) ) set(all_targets ${all_targets} ${out_targets}) + set(release_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/Release/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${release_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config + ${release_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest + COMMENT "Creating release app config file" + ) + + set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config) + add_custom_command( + OUTPUT ${relwithdebinfo_appconfig_file} + COMMAND ${PYTHON_EXECUTABLE} + ARGS + ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py + ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest + ${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config + ${relwithdebinfo_appconfig_file} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest + COMMENT "Creating relwithdebinfo app config file" + ) + endif (EXISTS ${release_msvc8_redist_path}) endif (MSVC80) -add_custom_target(copy_win_libs ALL DEPENDS ${all_targets}) +add_custom_target(copy_win_libs ALL + DEPENDS + ${all_targets} + ${release_appconfig_file} + ${relwithdebinfo_appconfig_file} + ${debug_appconfig_file} + ) if(EXISTS ${internal_llkdu_path}) add_dependencies(copy_win_libs llkdu) diff --git a/linden/indra/lib/python/indra/util/llversion.py b/linden/indra/lib/python/indra/util/llversion.py index 770b861..77fa5a2 100644 --- a/linden/indra/lib/python/indra/util/llversion.py +++ b/linden/indra/lib/python/indra/util/llversion.py @@ -43,7 +43,7 @@ def get_version_file_contents(version_type): file.close() return file_str -def get_version(version_type): +def get_version(version_type, revision=0): file_str = get_version_file_contents(version_type) m = re.search('const S32 LL_VERSION_MAJOR = (\d+);', file_str) VER_MAJOR = m.group(1) @@ -51,8 +51,11 @@ def get_version(version_type): VER_MINOR = m.group(1) m = re.search('const S32 LL_VERSION_PATCH = (\d+);', file_str) VER_PATCH = m.group(1) - m = re.search('const S32 LL_VERSION_BUILD = (\d+);', file_str) - VER_BUILD = m.group(1) + if revision > 0: + VER_BUILD = revision + else: + m = re.search('const S32 LL_VERSION_BUILD = (\d+);', file_str) + VER_BUILD = m.group(1) version = "%(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s" % locals() return version @@ -61,11 +64,11 @@ def get_channel(version_type): m = re.search('const char \* const LL_CHANNEL = "(.+)";', file_str) return m.group(1) -def get_viewer_version(): - return get_version('viewer') +def get_viewer_version(revision=0): + return get_version('viewer', revision) -def get_server_version(): - return get_version('server') +def get_server_version(revision=0): + return get_version('server', revision) def get_viewer_channel(): return get_channel('viewer') diff --git a/linden/indra/llcommon/llversionserver.h b/linden/indra/llcommon/llversionserver.h index 479b06d..3831479 100644 --- a/linden/indra/llcommon/llversionserver.h +++ b/linden/indra/llcommon/llversionserver.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 27; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 123523; +const S32 LL_VERSION_BUILD = 136262; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index eb84643..56711ce 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -35,9 +35,9 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 23; -const S32 LL_VERSION_PATCH = 4; -const S32 LL_VERSION_BUILD = 123523; +const S32 LL_VERSION_PATCH = 5; +const S32 LL_VERSION_BUILD = 136262; -const char * const LL_CHANNEL = "Second Life Release Candidate"; +const char * const LL_CHANNEL = "Second Life Release"; #endif diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index ed4dd60..7bb58d2 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -2,6 +2,6 @@ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.23.4.123523"; -CFBundleGetInfoString = "Second Life version 1.23.4.123523, Copyright 2004-2008 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.23.5.136262"; +CFBundleGetInfoString = "Second Life version 1.23.5.136262, Copyright 2004-2008 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index 5c5388d..de71a64 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ CFBundleVersion - 1.23.4.123523 + 1.23.5.136262 CSResourcesFileMapped diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 5ebf14d..b696cac 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -7491,7 +7491,7 @@ Type S32 Value - 4096 + 8192 RenderMaxVBOSize diff --git a/linden/indra/newview/build_win32_appConfig.py b/linden/indra/newview/build_win32_appConfig.py new file mode 100644 index 0000000..fb6a025 --- /dev/null +++ b/linden/indra/newview/build_win32_appConfig.py @@ -0,0 +1,58 @@ +# @file build_win32_appConfig.py +# @brief Create the windows app.config file to redirect crt linkage. +# +# $LicenseInfo:firstyear=2009&license=viewergpl$ +# +# Copyright (c) 2009, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at +# http://secondlifegrid.net/programs/open_source/licensing/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. +# $/LicenseInfo$ + +import sys, os, re +from xml.dom.minidom import parse + +def main(): + src_manifest_name = sys.argv[1] + src_config_name = sys.argv[2] + dst_config_name = sys.argv[3] + + manifest_dom = parse(src_manifest_name) + node = manifest_dom.getElementsByTagName('assemblyIdentity')[0] + manifest_assm_ver = node.getAttribute('version') + + config_dom = parse(src_config_name) + node = config_dom.getElementsByTagName('bindingRedirect')[0] + node.setAttribute('newVersion', manifest_assm_ver) + src_old_ver = re.match('([^-]*-).*', node.getAttribute('oldVersion')).group(1) + node.setAttribute('oldVersion', src_old_ver + manifest_assm_ver) + comment = config_dom.createComment("This file is automatically generated by the build. see indra/newview/build_win32_appConfig.py") + config_dom.insertBefore(comment, config_dom.childNodes[0]) + + f = open(dst_config_name, 'w') + config_dom.writexml(f) + f.close() + + return 0 + +if __name__ == "__main__": + main() diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp index 4fca9b1..571dea9 100644 --- a/linden/indra/newview/llassetuploadresponders.cpp +++ b/linden/indra/newview/llassetuploadresponders.cpp @@ -524,7 +524,6 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) { case LLAssetType::AT_NOTECARD: { - // Update the UI with the new asset. LLPreviewNotecard* nc; nc = (LLPreviewNotecard*)LLPreview::find(item_id); @@ -542,7 +541,7 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) content["new_asset"].asUUID(), LLAssetType::AT_NOTECARD); } - + nc->setAssetId(content["new_asset"].asUUID()); nc->refreshFromInventory(); } } diff --git a/linden/indra/newview/llfloaterbulkpermission.cpp b/linden/indra/newview/llfloaterbulkpermission.cpp index d4e1e98..6721661 100644 --- a/linden/indra/newview/llfloaterbulkpermission.cpp +++ b/linden/indra/newview/llfloaterbulkpermission.cpp @@ -281,6 +281,35 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); LLViewerInventoryItem* new_item = (LLViewerInventoryItem*)item; LLPermissions perm(new_item->getPermissions()); + U32 flags = new_item->getFlags(); + + U32 desired_next_owner_perms = LLFloaterPerms::getNextOwnerPerms("BulkChange"); + U32 desired_everyone_perms = LLFloaterPerms::getEveryonePerms("BulkChange"); + U32 desired_group_perms = LLFloaterPerms::getGroupPerms("BulkChange"); + + // If next owner permissions have changed (and this is an object) + // then set the slam permissions flag so that they are applied on rez. + if((perm.getMaskNextOwner() != desired_next_owner_perms) + && (new_item->getType() == LLAssetType::AT_OBJECT)) + { + flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; + } + // If everyone permissions have changed (and this is an object) + // then set the overwrite everyone permissions flag so they + // are applied on rez. + if ((perm.getMaskEveryone() != desired_everyone_perms) + && (new_item->getType() == LLAssetType::AT_OBJECT)) + { + flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; + } + // If group permissions have changed (and this is an object) + // then set the overwrite group permissions flag so they + // are applied on rez. + if ((perm.getMaskGroup() != desired_group_perms) + && (new_item->getType() == LLAssetType::AT_OBJECT)) + { + flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; + } // chomp the inventory name so it fits in the scroll window nicely // and the user can see the [OK] @@ -303,10 +332,11 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent //|| something else // for next owner perms ) { - perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("BulkChange")); - perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("BulkChange")); - perm.setMaskGroup(LLFloaterPerms::getGroupPerms("BulkChange")); + perm.setMaskNext(desired_next_owner_perms); + perm.setMaskEveryone(desired_everyone_perms); + perm.setMaskGroup(desired_group_perms); new_item->setPermissions(perm); // here's the beef + new_item->setFlags(flags); // and the tofu updateInventory(object,new_item,TASK_INVENTORY_ITEM_KEY,FALSE); //status_text.setArg("[STATUS]", getString("status_ok_text")); status_text.setArg("[STATUS]", ""); diff --git a/linden/indra/newview/llpreview.cpp b/linden/indra/newview/llpreview.cpp index 6d7082b..5979ff6 100644 --- a/linden/indra/newview/llpreview.cpp +++ b/linden/indra/newview/llpreview.cpp @@ -597,3 +597,31 @@ void LLMultiPreview::setAutoOpenInstance(LLMultiPreview* previewp, const LLUUID& sAutoOpenPreviewHandles[id] = previewp->getHandle(); } } + +void LLPreview::setAssetId(const LLUUID& asset_id) +{ + const LLViewerInventoryItem* item = getItem(); + if(NULL == item) + { + return; + } + + if(mObjectUUID.isNull()) + { + // Update avatar inventory asset_id. + LLPointer new_item = new LLViewerInventoryItem(item); + new_item->setAssetUUID(asset_id); + gInventory.updateItem(new_item); + gInventory.notifyObservers(); + } + else + { + // Update object inventory asset_id. + LLViewerObject* object = gObjectList.findObject(mObjectUUID); + if(NULL == object) + { + return; + } + object->updateViewerInventoryAsset(item, asset_id); + } +} diff --git a/linden/indra/newview/llpreview.h b/linden/indra/newview/llpreview.h index ff084be..fba4ef2 100644 --- a/linden/indra/newview/llpreview.h +++ b/linden/indra/newview/llpreview.h @@ -84,6 +84,7 @@ public: void setItemID(const LLUUID& item_id); void setObjectID(const LLUUID& object_id); void setSourceID(const LLUUID& source_id); + void setAssetId(const LLUUID& asset_id); const LLViewerInventoryItem *getItem() const; // searches if not constructed with it static LLPreview* find(const LLUUID& item_uuid); diff --git a/linden/indra/newview/res/viewerRes.rc b/linden/indra/newview/res/viewerRes.rc index ee25195..3bb6813 100644 --- a/linden/indra/newview/res/viewerRes.rc +++ b/linden/indra/newview/res/viewerRes.rc @@ -138,8 +138,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,23,4,123523 - PRODUCTVERSION 1,23,4,123523 + FILEVERSION 1,23,5,136262 + PRODUCTVERSION 1,23,5,136262 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -156,12 +156,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.23.4.123523" + VALUE "FileVersion", "1.23.5.136262" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.23.4.123523" + VALUE "ProductVersion", "1.23.5.136262" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py index c645245..f365016 100755 --- a/linden/indra/newview/viewer_manifest.py +++ b/linden/indra/newview/viewer_manifest.py @@ -202,6 +202,18 @@ class WindowsManifest(ViewerManifest): self.path("Microsoft.VC80.CRT.manifest") self.end_prefix() + # The config file name needs to match the exe's name. + self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst=self.final_exe() + ".config") + + # We need this one too, so that llkdu loads at runtime - DEV-41194 + self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst="llkdu.dll.2.config") + + # We need this one too, so that win_crash_logger.exe loads at runtime - DEV-19004 + self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst="win_crash_logger.exe.config") + + # same thing for auto-updater. + self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst="updater.exe.config") + # Mozilla runtime DLLs (CP) if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): self.path("freebl3.dll") @@ -230,9 +242,6 @@ class WindowsManifest(ViewerManifest): # Mozilla hack to get it to accept newer versions of msvc*80.dll than are listed in manifest # necessary as llmozlib2-vc80.lib refers to an old version of msvc*80.dll - can be removed when new version of llmozlib is built - Nyx - # The config file name needs to match the exe's name. - self.path("SecondLife.exe.config", dst=self.final_exe() + ".config") - # Vivox runtimes if self.prefix(src="vivox-runtime/i686-win32", dst=""): self.path("SLVoice.exe") @@ -242,12 +251,12 @@ class WindowsManifest(ViewerManifest): self.path("wrap_oal.dll") self.end_prefix() -# # pull in the crash logger and updater from other projects -# self.path(src=self.find_existing_file( # tag:"crash-logger" here as a cue to the exporter -# "../win_crash_logger/debug/windows-crash-logger.exe", -# "../win_crash_logger/release/windows-crash-logger.exe", -# "../win_crash_logger/relwithdebinfo/windows-crash-logger.exe"), -# dst="win_crash_logger.exe") + # pull in the crash logger and updater from other projects + self.path(src=self.find_existing_file( # tag:"crash-logger" here as a cue to the exporter + "../win_crash_logger/debug/windows-crash-logger.exe", + "../win_crash_logger/release/windows-crash-logger.exe", + "../win_crash_logger/relwithdebinfo/windows-crash-logger.exe"), + dst="win_crash_logger.exe") self.path(src=self.find_existing_file( "../win_updater/debug/windows-updater.exe", "../win_updater/release/windows-updater.exe", @@ -459,13 +468,13 @@ class DarwinManifest(ViewerManifest): self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice") # llkdu dynamic library -# self.path("../../libraries/universal-darwin/lib_release/libllkdu.dylib", "libllkdu.dylib") + self.path("../../libraries/universal-darwin/lib_release/libllkdu.dylib", "libllkdu.dylib") #libfmodwrapper.dylib self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib") # our apps -# self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app") + self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app") self.path("../mac_updater/" + self.args['configuration'] + "/mac-updater.app", "mac-updater.app") # command line arguments for connecting to the proper grid @@ -634,20 +643,20 @@ class Linux_i686Manifest(LinuxManifest): def construct(self): super(Linux_i686Manifest, self).construct() -# # install either the libllkdu we just built, or a prebuilt one, in + # install either the libllkdu we just built, or a prebuilt one, in # decreasing order of preference. for linux package, this goes to bin/ try: -# self.path(self.find_existing_file('../llkdu/libllkdu.so', -# '../../libraries/i686-linux/lib_release_client/libllkdu.so'), -# dst='bin/libllkdu.so') + self.path(self.find_existing_file('../llkdu/libllkdu.so', + '../../libraries/i686-linux/lib_release_client/libllkdu.so'), + dst='bin/libllkdu.so') # keep this one to preserve syntax, open source mangling removes previous lines pass except: -# print "Skipping libllkdu.so - not found" + print "Skipping libllkdu.so - not found" pass self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin") -# self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin") + self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin") self.path("linux_tools/launch_url.sh","launch_url.sh") if self.prefix("res-sdl"): self.path("*") @@ -660,7 +669,7 @@ class Linux_i686Manifest(LinuxManifest): self.path("app_settings/mozilla-runtime-linux-i686") if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"): -# self.path("libkdu_v42R.so", "libkdu.so") + self.path("libkdu_v42R.so", "libkdu.so") self.path("libfmod-3.75.so") self.path("libapr-1.so.0") self.path("libaprutil-1.so.0") @@ -689,7 +698,7 @@ class Linux_x86_64Manifest(LinuxManifest): def construct(self): super(Linux_x86_64Manifest, self).construct() self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin") -# self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin") + self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin") self.path("linux_tools/launch_url.sh","launch_url.sh") if self.prefix("res-sdl"): self.path("*") -- cgit v1.1