1*4882a593SmuzhiyunFrom bdfe3eeabbdadedb3981fb14ae4e04b7b9dcb4ff Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Samuli Piippo <samuli.piippo@qt.io> 3*4882a593SmuzhiyunDate: Thu, 30 Mar 2017 11:37:24 +0300 4*4882a593SmuzhiyunSubject: [PATCH 03/14] chromium: workaround for too long .rps file name 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunNinja may fail when the build directory is too long: 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunninja: error: WriteFile(__third_party_WebKit_Source_bindings_modules_\ 9*4882a593Smuzhiyuninterfaces_info_individual_modules__home_qt_work_build_build-nitrogen\ 10*4882a593Smuzhiyun6x_tmp_work_cortexa9hf-neon-mx6qdl-poky-linux-gnueabi_qtwebengine_5.9\ 11*4882a593Smuzhiyun.0_gitAUTOINC_29afdb0a34_049134677a-r0_build_src_toolchain_target__ru\ 12*4882a593Smuzhiyunle.rsp): Unable to create file. File name too long 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunTask-number: QTBUG-59769 15*4882a593SmuzhiyunChange-Id: I73c5e64ae5174412be2a675e35b0b6047f2bf4c1 16*4882a593Smuzhiyun--- 17*4882a593Smuzhiyun gn/tools/gn/ninja_action_target_writer.cc | 9 +++++++++ 18*4882a593Smuzhiyun 1 file changed, 9 insertions(+) 19*4882a593Smuzhiyun 20*4882a593Smuzhiyundiff --git a/gn/tools/gn/ninja_action_target_writer.cc b/gn/tools/gn/ninja_action_target_writer.cc 21*4882a593Smuzhiyunindex 5f4fbaad8..1c074a219 100644 22*4882a593Smuzhiyun--- a/gn/tools/gn/ninja_action_target_writer.cc 23*4882a593Smuzhiyun+++ b/gn/tools/gn/ninja_action_target_writer.cc 24*4882a593Smuzhiyun@@ -119,9 +119,18 @@ std::string NinjaActionTargetWriter::WriteRuleDefinition() { 25*4882a593Smuzhiyun // strictly necessary for regular one-shot actions, but it's easier to 26*4882a593Smuzhiyun // just always define unique_name. 27*4882a593Smuzhiyun std::string rspfile = custom_rule_name; 28*4882a593Smuzhiyun+ 29*4882a593Smuzhiyun+ //quick workaround if filename length > 255 - ".rsp", just cut the dirs starting from the end 30*4882a593Smuzhiyun+ //please note ".$unique_name" is not used at the moment 31*4882a593Smuzhiyun+ int pos = 0; 32*4882a593Smuzhiyun+ std::string delimiter("_"); 33*4882a593Smuzhiyun+ while (rspfile.length() > 250 && (pos = rspfile.find_last_of(delimiter)) != std::string::npos) 34*4882a593Smuzhiyun+ rspfile = rspfile.substr(0,pos); 35*4882a593Smuzhiyun+ 36*4882a593Smuzhiyun if (!target_->sources().empty()) 37*4882a593Smuzhiyun rspfile += ".$unique_name"; 38*4882a593Smuzhiyun rspfile += ".rsp"; 39*4882a593Smuzhiyun+ 40*4882a593Smuzhiyun out_ << " rspfile = " << rspfile << std::endl; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun // Response file contents. 43*4882a593Smuzhiyun-- 44*4882a593Smuzhiyun2.20.1 45*4882a593Smuzhiyun 46