/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . build . gradle . internal . cxx . settings Ċ Ċ import Ġcom . android . build . gradle . internal . cxx . logging . error ln Ċ import Ġcom . android . build . gradle . internal . cxx . model . Cxx Ab i Model Ċ import Ġcom . android . build . gradle . internal . cxx . settings . Macro . N DK _ ABI Ċ import Ġcom . android . build . gradle . internal . cxx . settings . Macro . N DK _ CONFIGURATION _ HASH Ċ import Ġcom . android . build . gradle . internal . cxx . settings . Macro . N DK _ FULL _ CONFIGURATION _ HASH Ċ import Ġcom . android . build . gradle . internal . cxx . settings . Macro . N DK _ PLATFORM _ SYSTEM _ VERSION Ċ Ċ /** Ċ Ġ* ĠExpand Ġ${ nd k . abi } Ġand Ġ${ abi . system Version } Ġin Ġenvironment Ġnames . Ċ Ġ*/ Ċ fun ĠSettings . expand Inherit Environment Macros ( abi : ĠC xx Ab i Model ) Ġ: ĠSettings Ġ{ ĊĠĠĠ Ġval Ġenvironments Ġ= Ġenvironments . map Ġ{ Ġconfiguration Ġ-> ĊĠĠĠĠĠĠĠ Ġconfiguration . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinherit Environments Ġ= Ġconfiguration . inherit Environments . map Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġenvironment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( N DK _ ABI . ref , Ġabi . abi . tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( N DK _ PLATFORM _ SYSTEM _ VERSION . ref , Ġabi . abi Platform Version . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcopy ( environments Ġ= Ġenvironments ) Ċ } Ċ Ċ /** Ċ Ġ* ĠRe ify Ġ[ Settings Configuration ] Ġby Ġreplacing Ġmacro Ġvalues Ġusing Ġ[ Settings Environment Name Resolver ]. Ċ Ġ*/ Ċ fun Ġre ify Requested Configuration ( ĊĠĠĠĠĠĠĠ Ġresolver : ĠSettings Environment Name Resolver , ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠSettings Configuration ) ĊĠĠĠĠĠĠĠ Ġ: ĠSettings Configuration ? Ġ{ ĊĊĠĠĠ Ġfun ĠString ?. re ify () Ġ= Ġre ify String ( this ) Ġ{ Ġtoken Macro Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen ( token Macro ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExclude Ġproperties Ġthat Ġshouldn 't Ġbe Ġevaluated Ġbefore Ġthe Ġconfiguration Ġhash . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN DK _ ABI . qualified Name Ġ-> ĠN DK _ ABI . ref ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN DK _ CONFIGURATION _ HASH . qualified Name Ġ-> ĠN DK _ CONFIGURATION _ HASH . ref ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN DK _ FULL _ CONFIGURATION _ HASH . qualified Name Ġ-> ĠN DK _ FULL _ CONFIGURATION _ HASH . ref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresolver . resolve ( token Macro , Ġconfiguration . inherit Environments ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġconfiguration . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Root Ġ= Ġconfiguration . build Root . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Type Ġ= Ġconfiguration . configuration Type . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Root Ġ= Ġconfiguration . install Root . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcmake Command Args Ġ= Ġconfiguration . cmake Command Args . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Command Args Ġ= Ġconfiguration . build Command Args . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc test Command Args Ġ= Ġconfiguration . ctest Command Args . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcmake Executable Ġ= Ġconfiguration . cmake Executable . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcmake Tool chain Ġ= Ġconfiguration . cmake Tool chain . re ify (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariables Ġ= Ġconfiguration . variables . map Ġ{ Ġ( name , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Configuration Variable ( name , Ġvalue . re ify () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠToken ize Ġ[ value ] Ġand Ġreplace Ġmacro Ġtokens Ġwith Ġthe Ġvalue Ġreturned Ġby Ġ[ re ifier ]. Ċ Ġ* ĠA Ġmacro , Ġwhen Ġexpanded , Ġmay Ġinclude Ġother Ġmacros Ġso Ġthis Ġfunction Ġloops Ġuntil Ġthere Ġare Ġno Ċ Ġ* Ġmacros Ġto Ġexpand . Ċ Ġ*/ Ċ fun Ġre ify String ( value Ġ: ĠString ?, Ġre ifier Ġ: Ġ( String ) Ġ-> ĠString ?) Ġ: ĠString Ġ{ ĊĠĠĠ Ġvar Ġprior Ġ= Ġvalue Ġ?: Ġreturn Ġ"" ĊĠĠĠ Ġvar Ġreplaced : ĠBoolean ĊĠĠĠ Ġval Ġseen Ġ= Ġmutable Set Of < String >() ĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrecursion Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreplaced Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġtokenize Macro String ( prior ) Ġ{ Ġtoken Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToken . Literal Token Ġ-> Ġsb . append ( token . literal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToken . Macro Token Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Macro Ġ= Ġtoken . macro ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seen . contains ( token Macro )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ln (" Settings . json Ġvalue Ġ'$ value ' Ġhas Ġrecursive Ġmacro Ġexpansion Ġ\ ${ $ token Macro }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecursion Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Ġ= Ġre ifier ( token Macro ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġresolved Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġ"\ ${ $ token Macro }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseen Ġ+= Ġtoken Macro ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplaced Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( recursion Error ) Ġreturn Ġvalue ĊĠĠĠĠĠĠĠ Ġprior Ġ= Ġsb . toString () ĊĠĠĠ Ġ} Ġwhile Ġ( re placed ) ĊĊĠĠĠ Ġreturn Ġprior Ċ } ĊĊĊ