package Ġcom . ed ward stock . cmake build Ċ Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . io . Print Stream Ċ import Ġjava . util .* Ċ Ċ internal Ġfun ĠString . escape (): ĠString Ġ{ ĊĠĠĠ Ġreturn ĠString . format ("\" % s \"", Ġthis ) Ċ } Ċ Ċ internal Ġfun Ġis Not Windows (): ĠBoolean Ġ= ĠOs Check . operating System Type Ġ!= ĠOs Check . OS Type . Windows Ċ Ċ internal Ġfun Ġfind N inja Build (): ĠString Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠProcess Runner ( ĊĠĠĠĠĠĠĠ Ġ" where . exe ", Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ F ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ R ", Ġ" c :\\ Program ĠFiles ". escape (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ninja . exe " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). run () ĊĊĠĠĠ Ġif Ġ( result . is Ok ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" RESULT Ġof Ġfind Ġcmake : Ġ${ result . stdout }") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . stdout . contains ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . stdout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" N inja Ġbinary : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġthrow ĠCMake Exception (" Unable Ġto Ġfind ĠN inja Ġbinary : Ġ[ ${ result . exit Code }] Ġ${ result . stderr }") Ċ } Ċ Ċ internal Ġfun Ġfind CMake Bin (): ĠString Ġ{ ĊĊĠĠĠ Ġif Ġ( isNot Windows ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProcess Runner (" which ", Ġ" cmake "). run () ĊĠĠĠĠĠĠĠ Ġif Ġ(! result . is Ok () Ġ|| Ġresult . stdout . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCMake Exception (" Unable Ġto Ġfind Ġcmake Ġbinary : Ġ[ ${ result . exit Code }] Ġ${ result . stderr }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . stdout . trim () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠProcess Runner ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" where . exe ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ F ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ R ", Ġ" c :\\ Program ĠFiles ". escape (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cmake . exe " ĊĠĠĠĠĠĠĠ Ġ). run () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . stdout . contains ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . stdout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" CMake Ġbinary : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠCMake Exception (" Unable Ġto Ġfind Ġcmake Ġbinary : Ġ[ ${ result . exit Code }] Ġ${ result . stderr }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠList < String >. to Os Path (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġjoin ToString ("/") Ċ } Ċ Ċ internal Ġfun Ġprocess Reader ( stream : ĠInputStream , Ġoutput : ĠPrint Stream Ġ= ĠSystem . out ) Ġ= ĠRunnable Ġ{ ĊĠĠĠ Ġval Ġbr Ġ= ĠBufferedReader ( InputStream Reader ( stream )) ĊĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( br . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . println ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ("[ CMake ] Ġ% s ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġbr . close () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠOs Check Ġ{ ĊĠĠĠ Ġ// Ġcached Ġresult Ġof ĠOS Ġdetection ĊĠĠĠ Ġprivate Ġvar Ġdetected OS : ĠOS Type ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdetect Ġthe Ġoperating Ġsystem Ġfrom Ġthe Ġos . name ĠSystem Ġproperty Ġand Ġcache ĊĠĠĠĠ Ġ* Ġthe Ġresult ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ returns Ġ- Ġthe Ġoperating Ġsystem Ġdetected ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġval Ġoperating System Type : ĠOS Type ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠSystem . getProperty (" os . name ", Ġ" generic "). toLowerCase ( Locale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdetected OS Ġ?: Ġ( if Ġ( os . indexOf (" mac ") Ġ>= Ġ 0 Ġ|| Ġos . indexOf (" darwin ") Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Type . MacOS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( os . indexOf (" win ") Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Type . Windows ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( os . indexOf (" nux ") Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Type . Linux ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS Type . Default ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). also Ġ{ Ġdetected OS Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtypes Ġof ĠOperating ĠSystems ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠOS Type Ġ{ ĊĠĠĠĠĠĠĠ ĠWindows , ĠMacOS , ĠLinux , ĠDefault ĊĠĠĠ Ġ} Ċ } Ċ