/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġrespective Ġauthors Ġand Ġdevelopers . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . compose . desktop . application . internal Ċ Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġorg . gradle . api . tasks . Internal Ċ import Ġorg . jetbrains . compose . desktop . application . dsl . Target Format Ċ import Ġorg . jetbrains . compose . desktop . application . tasks . MIN _ JAVA _ RUNTIME _ VERSION Ċ import Ġjava . io . File Ċ Ċ internal Ġenum Ġclass ĠOS ( val Ġid : ĠString ) Ġ{ ĊĠĠĠ ĠLinux (" linux "), ĊĠĠĠ ĠWindows (" windows "), ĊĠĠĠ ĠMacOS (" macos ") Ċ } Ċ Ċ internal Ġenum Ġclass ĠArch ( val Ġid : ĠString ) Ġ{ ĊĠĠĠ ĠX 6 4 (" x 6 4 "), ĊĠĠĠ ĠArm 6 4 (" arm 6 4 ") Ċ } Ċ Ċ internal Ġdata Ġclass ĠTarget ( val Ġos : ĠOS , Ġval Ġarch : ĠArch ) Ġ{ ĊĠĠĠ Ġval Ġid : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ os . id }-${ arch . id }" Ċ } Ċ Ċ internal Ġval Ġcurrent Target Ġby Ġlazy Ġ{ ĊĠĠĠ ĠTarget ( current OS , Ġcurrent Arch ) Ċ } Ċ Ċ internal Ġval Ġcurrent Arch Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġos Arch Ġ= ĠSystem . getProperty (" os . arch ") ĊĠĠĠ Ġwhen Ġ( os Arch ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" x 8 6 _ 6 4 ", Ġ" amd 6 4 " Ġ-> ĠArch . X 6 4 ĊĠĠĠĠĠĠĠ Ġ" aarch 6 4 " Ġ-> ĠArch . Arm 6 4 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported ĠOS Ġarch : Ġ$ os Arch ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġval Ġcurrent OS : ĠOS Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġos Ġ= ĠSystem . getProperty (" os . name ") ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġos . equals (" Mac ĠOS ĠX ", Ġignore Case Ġ= Ġtrue ) Ġ-> ĠOS . MacOS ĊĠĠĠĠĠĠĠ Ġos . startsWith (" Win ", Ġignore Case Ġ= Ġtrue ) Ġ-> ĠOS . Windows ĊĠĠĠĠĠĠĠ Ġos . startsWith (" Linux ", Ġignore Case Ġ= Ġtrue ) Ġ-> ĠOS . Linux ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unknown ĠOS Ġname : Ġ$ os ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġexecutable Name ( name Without Extension : ĠString ): ĠString Ġ= ĊĠĠĠ Ġif Ġ( current OS Ġ== ĠOS . Windows ) Ġ"$ name Without Extension . exe " Ġelse Ġname Without Extension Ċ Ċ internal Ġfun Ġjava Executable ( java Home : ĠString ): ĠString Ġ= ĊĠĠĠ ĠFile ( java Home ). resolve (" bin /${ executable Name (" java ")} "). absolute Path Ċ Ċ internal Ġobject ĠMac Utils Ġ{ ĊĠĠĠ Ġval Ġcode sign : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / code sign "). check Existing File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsecurity : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / security "). check Existing File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġxc run : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / xc run "). check Existing File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġx code Build : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / xcode build "). check Existing File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmake : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / make "). check Existing File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġopen : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / open "). check Existing File () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ internal Ġobject ĠUnix Utils Ġ{ ĊĠĠĠ Ġval Ġgit : ĠFile Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ usr / bin / git "). check Existing File () ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġj vm Tool File ( tool Name : ĠString , Ġjava Home : ĠProvider < String >): ĠFile Ġ{ ĊĠĠĠ Ġval Ġj tool Ġ= ĠFile ( java Home . get ()). resolve (" bin /${ executable Name ( tool Name )} ") ĊĠĠĠ Ġcheck ( j tool . isFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Invalid ĠJDK : Ġ$ j tool Ġis Ġnot Ġa Ġfile ! Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ensure ĠJAVA _ HOME Ġor Ġbuild Settings . java Home Ġis Ġset Ġto ĠJDK Ġ$ MIN _ JAVA _ RUNTIME _ VERSION Ġor Ġnewer " ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġj tool Ċ } Ċ Ċ @ Internal Ċ internal Ġfun Ġfind OutputFile Or Dir ( dir : ĠFile , Ġtarget Format : ĠTarget Format ): ĠFile Ġ= ĊĠĠĠ Ġwhen Ġ( target Format ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTarget Format . App Image Ġ-> Ġdir ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdir . walk (). first Ġ{ Ġit . isFile Ġ&& Ġit . name . endsWith ( target Format . file Ext ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ internal Ġfun ĠFile . check Existing File (): ĠFile Ġ= ĊĠĠĠ Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( isFile ) Ġ{ Ġ"' $ absolute Path ' Ġdoes Ġnot Ġexist " Ġ} ĊĠĠĠ Ġ} Ċ Ċ internal Ġval ĠFile . is Jar File : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġname . endsWith (". jar ", Ġignore Case Ġ= Ġtrue ) Ġ&& Ġis File Ċ