diff --git a/autobuild.xml b/autobuild.xml index 81a2acd9d1..028b63da5c 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -202,9 +202,9 @@ archive hash - 94fc457c46e1fb94b31251bd4747d10f + 439af4161d99a3d12e0d6d90cb948687 url - https://3p.firestormviewer.org/glod-1.0pre3.171101143-darwin64-171101143.tar.bz2 + https://3p.firestormviewer.org/glod-1.0pre3.252621603-darwin64-252621603.tar.bz2 name darwin64 @@ -249,14 +249,14 @@ gntp-growl platforms - darwin + darwin64 archive hash - 33300134846d0f00ac4f31c1a190e3e6 + 5362f98bf0b0c5b12acacd6b7b1e427e url - https://3p.firestormviewer.org/gntp_growl-1.0-darwin-201505101047-r12.tar.bz2 + https://3p.firestormviewer.org/gntp_growl-1.0-darwin64-252631716.tar.bz2 name darwin @@ -330,9 +330,9 @@ archive hash - 3bc297a0fa47094bb52d361f80186387 + 91b24b83d3f8461286f783f28fcd9a66 url - https://3p.firestormviewer.org/discord_rpc-3.4.0-darwin64-192522358.tar.bz2 + https://3p.firestormviewer.org/discord_rpc-3.4.0-darwin64-252621453.tar.bz2 name darwin64 @@ -720,11 +720,11 @@ archive hash - d44256458ff0ef4db4c91e8e8cc83e8f98b4f1b8 + 126e0fa4c16dfd433c9fb7d1d242da98f213d933 hash_algorithm sha1 url - https://github.com/secondlife/dullahan/releases/download/v1.21.0-CEF_139.0.28/dullahan-1.21.0.202508272158_139.0.28_g55ab8a8_chromium-139.0.7258.139-darwin64-17279703032.tar.zst + https://github.com/secondlife/dullahan/releases/download/v1.24.0-CEF_139.0.40/dullahan-1.24.0.202510081737_139.0.40_g465474a_chromium-139.0.7258.139-darwin64-18353103947.tar.zst name darwin64 @@ -748,11 +748,11 @@ archive hash - 9d5af766a87052808e4062978504e9af124fb558 + 20de62c9e57d9e6539c1e2437ec4b46c3ca237bc hash_algorithm sha1 url - https://github.com/secondlife/dullahan/releases/download/v1.21.0-CEF_139.0.28/dullahan-1.21.0.202508272159_139.0.28_g55ab8a8_chromium-139.0.7258.139-windows64-17279703032.tar.zst + https://github.com/secondlife/dullahan/releases/download/v1.24.0-CEF_139.0.40/dullahan-1.24.0.202510081738_139.0.40_g465474a_chromium-139.0.7258.139-windows64-18353103947.tar.zst name windows64 @@ -765,7 +765,7 @@ copyright Copyright (c) 2017, Linden Research, Inc. version - 1.21.0.202508272158_139.0.28_g55ab8a8_chromium-139.0.7258.139 + 1.24.0.202510081737_139.0.40_g465474a_chromium-139.0.7258.139 name dullahan description @@ -1319,7 +1319,7 @@ copyright Kakadu software version - 8.5 + 8.6 name kdu description @@ -1646,53 +1646,21 @@ platforms - darwin64 + common archive creds github hash - 7facda95e2f00c260513f3d4db42588fa8ba703c + fff82c79edb900c547c40dca9a0e3ebac5a8c7da hash_algorithm sha1 url - https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/196289774 + https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/299858950 name - darwin64 - - linux64 - - archive - - creds - github - hash - 01d08f13c7bc8d1b95b0330fa6833b7d8274e4d0 - hash_algorithm - sha1 - url - https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/196289775 - - name - linux64 - - windows64 - - archive - - creds - github - hash - 6d00345c7d3471bc5f7c1218e014dd0f1a2c069b - hash_algorithm - sha1 - url - https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/196289778 - - name - windows64 + common license diff --git a/build.sh b/build.sh index bba84bc7cd..50c170e792 100755 --- a/build.sh +++ b/build.sh @@ -158,7 +158,6 @@ pre_build() if [[ "$arch" == "Darwin" ]] then - HAVOK=OFF SIGNING=("-DENABLE_SIGNING:BOOL=YES" \ "-DSIGNING_IDENTITY:STRING=Developer ID Application: Linden Research, Inc.") fi @@ -262,8 +261,8 @@ build() done fi - # *TODO: Make this a build extension. - package_llphysicsextensions_tpv || fatal "failed building llphysicsextensions packages" + # *TODO: Make this a build extension. disabled for now + # package_llphysicsextensions_tpv || fatal "failed building llphysicsextensions packages" end_section "extensions $variant" else diff --git a/indra/cmake/Discord.cmake b/indra/cmake/Discord.cmake index 9741ff17f0..7ec96939b3 100644 --- a/indra/cmake/Discord.cmake +++ b/indra/cmake/Discord.cmake @@ -20,13 +20,13 @@ add_library(fs::discord INTERFACE IMPORTED) include(Prebuilt) use_prebuilt_binary(discord-rpc) -if (WINDOWS) - target_link_libraries(fs::discord INTERFACE discord-rpc) -elseif (LINUX) - target_link_libraries(fs::discord INTERFACE discord-rpc) -elseif (DARWIN) - target_link_libraries(fs::discord INTERFACE discord-rpc) -endif (WINDOWS) +find_library(DISCORD_LIBRARY + NAMES + discord-rpc.lib + libdiscord-rpc.a + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + +target_link_libraries(fs::discord INTERFACE ${DISCORD_LIBRARY}) target_include_directories(fs::discord SYSTEM INTERFACE ${AUTOBUILD_INSTALL_DIR}/include/discord-rpc diff --git a/indra/cmake/FMODSTUDIO.cmake b/indra/cmake/FMODSTUDIO.cmake index 6f8912f7f1..f6b4a5c4d5 100644 --- a/indra/cmake/FMODSTUDIO.cmake +++ b/indra/cmake/FMODSTUDIO.cmake @@ -33,14 +33,15 @@ if (USE_FMODSTUDIO) # as accessing the private LL location will fail if you don't have the credential include(Prebuilt) use_prebuilt_binary(fmodstudio) - if (WINDOWS) - target_link_libraries( ll::fmodstudio INTERFACE fmod_vc) - elseif (DARWIN) - #despite files being called libfmod.dylib, we are searching for fmod - target_link_libraries( ll::fmodstudio INTERFACE fmod) - elseif (LINUX) - target_link_libraries( ll::fmodstudio INTERFACE fmod) - endif (WINDOWS) + + find_library(FMOD_LIBRARY + NAMES + fmod_vc.lib + libfmod.dylib + libfmod.so + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + + target_link_libraries(ll::fmodstudio INTERFACE ${FMOD_LIBRARY}) target_include_directories( ll::fmodstudio SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/fmodstudio) endif (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR) diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake index 9a61267d50..9a0bc842a9 100644 --- a/indra/cmake/GLOD.cmake +++ b/indra/cmake/GLOD.cmake @@ -5,13 +5,24 @@ add_library( fs::glod INTERFACE IMPORTED ) include(Prebuilt) use_prebuilt_binary(glod) -if (WINDOWS) - target_link_libraries( fs::glod INTERFACE glod.lib) -elseif (DARWIN) - target_link_libraries( fs::glod INTERFACE libGLOD.dylib) + +find_library(GLOD_LIBRARY + NAMES + GLOD.lib + libGLOD.dylib + libGLOD.a + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + +if (WINDOWS OR DARWIN) + target_link_libraries(fs::glod INTERFACE ${GLOD_LIBRARY}) elseif (LINUX) - target_link_libraries( fs::glod INTERFACE libGLOD.a libvds.a) -endif (WINDOWS) + find_library(VDS_LIBRARY + NAMES + libvds.a + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + + target_link_libraries(fs::glod INTERFACE ${GLOD_LIBRARY} ${VDS_LIBRARY}) +endif () target_include_directories( fs::glod SYSTEM INTERFACE ${AUTOBUILD_INSTALL_DIR}/include/glod diff --git a/indra/cmake/Growl.cmake b/indra/cmake/Growl.cmake index dc77e1c51e..a2cff584e9 100644 --- a/indra/cmake/Growl.cmake +++ b/indra/cmake/Growl.cmake @@ -9,11 +9,20 @@ add_library( fs::growl INTERFACE IMPORTED ) include(Prebuilt) use_prebuilt_binary(gntp-growl) -if (WINDOWS) - target_link_libraries( fs::growl INTERFACE growl.lib growl++.lib) -elseif (DARWIN) - target_link_libraries( fs::growl INTERFACE libgrowl.dylib libgrowl++.dylib) -endif (WINDOWS) + +find_library(GROWL_LIBRARY + NAMES + growl.lib + libgrowl.dylib + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + +find_library(GROWL_PLUSPLUS_LIBRARY + NAMES + growl++.lib + libgrowl++.dylib + PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) + +target_link_libraries(fs::growl INTERFACE ${GROWL_LIBRARY} ${GROWL_PLUSPLUS_LIBRARY}) target_include_directories( fs::growl SYSTEM INTERFACE ${AUTOBUILD_INSTALL_DIR}/include/Growl diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake index 626748c291..7634c1ef64 100644 --- a/indra/cmake/LLPhysicsExtensions.cmake +++ b/indra/cmake/LLPhysicsExtensions.cmake @@ -22,7 +22,14 @@ if (HAVOK) include(Havok) use_prebuilt_binary(llphysicsextensions_source) set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/src) - target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions) + if(DARWIN) + set(LLPHYSICSEXTENSIONS_STUB_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/stub) + # can't set these library dependencies per-arch here, need to do it using XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=*] in newview/CMakeLists.txt + #target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions) + #target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensionsstub) + else() + target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions) + endif() target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1 ) elseif (HAVOK_TPV) use_prebuilt_binary(llphysicsextensions_tpv) diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index c08080223a..997987850e 100644 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -97,6 +97,10 @@ # define LL_ARM64 1 #elif LL_GNUC && (defined(__arm64__) || defined(__aarch64__)) # define LL_ARM64 1 +// Check if using clang +#elif LL_CLANG && (defined(__arm64__) || defined(__aarch64__)) +# define LL_ARM64 1 +// #elif LL_MSVC && _M_X64 # define LL_X86_64 1 # define LL_X86 1 @@ -105,6 +109,13 @@ #elif LL_GNUC && ( defined(__amd64__) || defined(__x86_64__) ) # define LL_X86_64 1 # define LL_X86 1 +// Check if using clang +#elif LL_CLANG && ( defined(__amd64__) || defined(__x86_64__) ) +# define LL_X86_64 1 +# define LL_X86 1 +#elif LL_CLANG && ( defined(__i386__) ) +# define LL_X86 1 +// #elif LL_GNUC && ( defined(__i386__) ) # define LL_X86 1 #endif diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index c9d5d17fc1..ec78501354 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -2452,13 +2452,16 @@ bool LLWindowMacOSX::getInputDevices(U32 device_type_filter, void LLWindowMacOSX::openFile(const std::string& file_name ) { - LL_INFOS() << "Opening file " << file_name << LL_ENDL; - FSRef appRef; - OSStatus os_result = FSPathMakeRef((UInt8*)file_name.c_str(), - &appRef,NULL); - if(os_result >= 0) + LL_INFOS() << "Opening file " << file_name << LL_ENDL; + CFURLRef url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, + (const UInt8*)file_name.c_str(), + (CFIndex)file_name.size(), + false); + + if (url) { - os_result = LSOpenFSRef(&appRef, NULL); + OSStatus os_result = LSOpenCFURLRef(url, NULL); + CFRelease(url); } } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1f74594434..9daca1fdad 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -69,6 +69,11 @@ if (NOT HAVOK_TPV) # which means we need to duct tape this togther ... add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) + if (NOT "${LLPHYSICSEXTENSIONS_STUB_DIR}" STREQUAL "") + # for darwin universal builds we need both real llphysicsextensions and the stub for aarch64 fallback + # this will only be set when HAVOK is ON, otherwise the normal stub fallback will be in effect + add_subdirectory(${LLPHYSICSEXTENSIONS_STUB_DIR} llphysicsextensionsstub) + endif() # Another hack that works with newer cmake versions: cmake_policy( SET CMP0079 NEW) @@ -2499,14 +2504,27 @@ if (WINDOWS) elseif (DARWIN) set_target_properties(${VIEWER_BINARY_NAME} PROPERTIES - RESOURCE SecondLife.xib - #LINK_FLAGS_RELEASE "${LINK_FLAGS_RELEASE} -Xlinker -dead_strip -Xlinker -map -Xlinker ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}.MAP" + RESOURCE Firestorm.xib LINK_FLAGS_RELEASE "${LINK_FLAGS_RELEASE} -Xlinker -dead_strip" # Force the SDK version in the linked executable to be 10.12. This will fool # macOS into using the pre-Mojave display system, avoiding the blurry display that # otherwise occurs when upscaling the viewer to Retina resolution levels. LINK_FLAGS_RELEASE "${LINK_FLAGS_RELEASE} -Xlinker -platform_version -Xlinker macos -Xlinker ${CMAKE_OSX_DEPLOYMENT_TARGET} -Xlinker 10.12" + + # We can only do these if building with Havok ) + if(HAVOK OR HAVOK_TPV) + set_target_properties(${VIEWER_BINARY_NAME} + PROPERTIES + # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=arm64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_STUB" + # only generate the .MAP file for llphysicsextensions_tpv on x86_64 + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${CMAKE_CURRENT_BINARY_DIR}/llphysicsextensions/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensions -Xlinker -map -Xlinker ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}.MAP" + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) -L${CMAKE_CURRENT_BINARY_DIR}/llphysicsextensionsstub/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensionsstub" + ) + endif() + # else (WINDOWS) # Linux set_target_properties(${VIEWER_BINARY_NAME} diff --git a/indra/newview/fsfloaterim.h b/indra/newview/fsfloaterim.h index 3d20957063..182f0d6ae3 100644 --- a/indra/newview/fsfloaterim.h +++ b/indra/newview/fsfloaterim.h @@ -292,7 +292,6 @@ private: S32 mInputEditorPad; S32 mChatLayoutPanelHeight; - S32 mFloaterHeight; uuid_vec_t mInvitedParticipants; uuid_vec_t mPendingParticipants; diff --git a/indra/newview/fsfloaternearbychat.h b/indra/newview/fsfloaternearbychat.h index ee485e5498..f707fe35c9 100644 --- a/indra/newview/fsfloaternearbychat.h +++ b/indra/newview/fsfloaternearbychat.h @@ -161,7 +161,6 @@ private: S32 mInputEditorPad; S32 mChatLayoutPanelHeight; - S32 mFloaterHeight; std::vector mMessageArchive; diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h index cd42328d28..11e72a4dc2 100644 --- a/indra/newview/llpanelface.h +++ b/indra/newview/llpanelface.h @@ -395,7 +395,7 @@ private: LLButton* mBtnAlign { nullptr }; LLButton* mBtnAlignTex { nullptr }; - LLButton* mBtnPbrFromInv { nullptr }; + //LLButton* mBtnPbrFromInv { nullptr }; // Done via texture picker LLButton* mBtnEditBbr { nullptr }; LLButton* mBtnSaveBbr { nullptr }; diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 279573e478..f171c5a5e0 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -169,7 +169,7 @@ private: // FIRE-4740: Friend counter in people panel LLTabContainer* mFriendsTabContainer; - LLAccordionCtrl* mFriendsAccordion = nullptr; + //LLAccordionCtrl* mFriendsAccordion = nullptr; // Friend list accordion replacement LLAccordionCtrlTab* mFriendsAllTab = nullptr; LLAccordionCtrlTab* mFriendsOnlineTab = nullptr; diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index b397cd3807..efde612f76 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -1009,11 +1009,11 @@ void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face) mTexture->bind(channel); } } + + gIrradianceGenProgram.unbind(); } mMipChain[0].flush(); - - gIrradianceGenProgram.unbind(); } } diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 20d15c34a2..600084fd48 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -321,13 +321,9 @@ public: void setRebakeStuck(bool stuck) { mRebakeStuck = stuck;} // FIRE-7639 - Stop the blinking after a while private: - LLTextBox *mTextBalance; - LLTextBox *mTextHealth; LLTextBox *mTextTime; LLTextBox *mFPSText; // FIRE-14482: Show FPS in status bar - LLTextBox* mTextParcelName; - LLStatGraph *mSGBandwidth; LLStatGraph *mSGPacketLoss; @@ -361,7 +357,6 @@ private: LLPanelNearByMedia* mPanelNearByMedia; LLPanel* mParcelInfoPanel; - LLButton* mInfoBtn; LLTextBox* mParcelInfoText; LLTextBox* mDamageText; LLIconCtrl* mParcelIcon[ICON_COUNT]; diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 2455847453..1079c4cfda 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1588,12 +1588,6 @@ class Darwin_x86_64_Manifest(ViewerManifest): self.path("*.dylib") self.path("plugins.dat") - # do this install_name_tool *after* media plugin is copied over - dylibexecutablepath = self.dst_path_of('llplugin/media_plugin_cef.dylib') - self.run_command_shell('install_name_tool -change ' - '"@rpath/Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework" ' - '"@executable_path/../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework" "%s"' % dylibexecutablepath) - # NOTE: the -S argument to strip causes it to keep enough info for # annotated backtraces (i.e. function names in the crash log). 'strip' with no # arguments yields a slightly smaller binary but makes crash logs mostly useless. @@ -1711,52 +1705,56 @@ class Darwin_x86_64_Manifest(ViewerManifest): if identity == '': identity = 'Developer ID Application' + ad_hoc_sign = False # Look for an environment variable set via build.sh when running in Team City. try: build_secrets_checkout = os.environ['build_secrets_checkout'] except KeyError: - pass - else: - # variable found so use it to unlock keychain followed by codesign - home_path = os.environ['HOME'] - keychain_pwd_path = os.path.join(build_secrets_checkout,'code-signing-osx','password.txt') - keychain_pwd = open(keychain_pwd_path).read().rstrip() + ad_hoc_sign = True # A minimum of ad-hoc signing is a requirement for arm64 builds to behave correctly + identity = '-' # Ad-hoc identity + finally: + if not ad_hoc_sign: + # variable found so use it to unlock keychain followed by codesign + home_path = os.environ['HOME'] + keychain_pwd_path = os.path.join(build_secrets_checkout,'code-signing-osx','password.txt') + keychain_pwd = open(keychain_pwd_path).read().rstrip() - # Note: As of macOS Sierra, keychains are created with - # names postfixed with '-db' so for example, the SL - # Viewer keychain would by default be found in - # ~/Library/Keychains/viewer.keychain-db instead of - # just ~/Library/Keychains/viewer.keychain in - # earlier versions. - # - # Because we have old OS files from previous - # versions of macOS on the build hosts, the - # configurations are different on each host. Some - # have viewer.keychain, some have viewer.keychain-db - # and some have both. As you can see in the line - # below, this script expects the Linden Developer - # cert/keys to be in viewer.keychain. - # - # To correctly sign builds you need to make sure - # ~/Library/Keychains/viewer.keychain exists on the - # host and that it contains the correct cert/key. If - # a build host is set up with a clean version of - # macOS Sierra (or later) then you will need to - # change this line (and the one for 'codesign' - # command below) to point to right place or else - # pull in the cert/key into the default viewer - # keychain 'viewer.keychain-db' and export it to - # 'viewer.keychain' - viewer_keychain = os.path.join(home_path, 'Library', - 'Keychains', 'viewer.keychain') - if not os.path.isfile( viewer_keychain ): - viewer_keychain += "-db" + # Note: As of macOS Sierra, keychains are created with + # names postfixed with '-db' so for example, the SL + # Viewer keychain would by default be found in + # ~/Library/Keychains/viewer.keychain-db instead of + # just ~/Library/Keychains/viewer.keychain in + # earlier versions. + # + # Because we have old OS files from previous + # versions of macOS on the build hosts, the + # configurations are different on each host. Some + # have viewer.keychain, some have viewer.keychain-db + # and some have both. As you can see in the line + # below, this script expects the Linden Developer + # cert/keys to be in viewer.keychain. + # + # To correctly sign builds you need to make sure + # ~/Library/Keychains/viewer.keychain exists on the + # host and that it contains the correct cert/key. If + # a build host is set up with a clean version of + # macOS Sierra (or later) then you will need to + # change this line (and the one for 'codesign' + # command below) to point to right place or else + # pull in the cert/key into the default viewer + # keychain 'viewer.keychain-db' and export it to + # 'viewer.keychain' + viewer_keychain = os.path.join(home_path, 'Library', + 'Keychains', 'viewer.keychain') + if not os.path.isfile( viewer_keychain ): + viewer_keychain += "-db" + + if not os.path.isfile( viewer_keychain ): + raise "No keychain named viewer found" + + self.run_command(['security', 'unlock-keychain', + '-p', keychain_pwd, viewer_keychain]) - if not os.path.isfile( viewer_keychain ): - raise "No keychain named viewer found" - - self.run_command(['security', 'unlock-keychain', - '-p', keychain_pwd, viewer_keychain]) sign_retry_wait=15 resources = app_in_dmg + "/Contents/Resources/" plain_sign = glob.glob(resources + "llplugin/*.dylib") @@ -1766,7 +1764,7 @@ class Darwin_x86_64_Manifest(ViewerManifest): # We could selectively sign those, or repackage them and then sign them. For an easy clean sweet we just resign them al plain_sign += glob.glob(resources + "*.dylib") plain_sign += glob.glob(resources + "llplugin/lib/*.dylib") - plain_sign += glob.glob( app_in_dmg + "/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/*.dylib" ) + plain_sign += glob.glob(resources + "SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/*.dylib") deep_sign = [ # Firestorm does not ship SLVersionChecker @@ -1785,24 +1783,28 @@ class Darwin_x86_64_Manifest(ViewerManifest): try: # Note: See blurb above about names of keychains for signee in plain_sign: - self.run_command( - ['codesign', - '--force', - '--timestamp', - '--keychain', viewer_keychain, - '--sign', identity, - signee]) + args = [ + 'codesign', + '--force', + '--timestamp' + ] + if not ad_hoc_sign: + args += ['--keychain', viewer_keychain] + args += ['--sign', identity, signee] + self.run_command(args) for signee in deep_sign: - self.run_command( - ['codesign', - '--verbose', - '--deep', - '--force', - '--entitlements', self.src_path_of("slplugin.entitlements"), - '--options', 'runtime', - '--keychain', viewer_keychain, - '--sign', identity, - signee]) + args = [ + 'codesign', + '--verbose', + '--deep', + '--force', + '--entitlements', self.src_path_of("slplugin.entitlements"), + '--options', 'runtime' + ] + if not ad_hoc_sign: + args += ['--keychain', viewer_keychain] + args += ['--sign', identity, signee] + self.run_command(args) break # if no exception was raised, the codesign worked except ManifestError as err: # 'err' goes out of scope @@ -1810,10 +1812,12 @@ class Darwin_x86_64_Manifest(ViewerManifest): else: print("Maximum codesign attempts exceeded; giving up", file=sys.stderr) raise sign_failed - # This fails sometimes and works other times. Even when notarization (down below) is a success - # Remove it for now and investigate after we did notarize a few times - #self.run_command(['spctl', '-a', '-texec', '-vvvv', app_in_dmg]) - self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"), app_in_dmg]) + + if not ad_hoc_sign: + # This fails sometimes and works other times. Even when notarization (down below) is a success + # Remove it for now and investigate after we did notarize a few times + #self.run_command(['spctl', '-a', '-texec', '-vvvv', app_in_dmg]) + self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"), app_in_dmg]) finally: # Unmount the image even if exceptions from any of the above