content: {-# LANGUAGE MultiWayIf #-}
  
  module GHC.Linker.Static.Utils where
  
  import GHC.Prelude
  import GHC.Platform
  import System.FilePath
  
  -- | Compute the output file name of a program.
  --
  -- StaticLink boolean is used to indicate if the program is actually a static library
  -- (e.g., on iOS).
  --
  -- Use the provided filename (if any), otherwise use "main.exe" (Windows),
  -- "a.out (otherwise without StaticLink set), "liba.a". In every case, add the
  -- extension if it is missing.
  exeFileName :: ArchOS -> Bool -> Maybe FilePath -> FilePath
  exeFileName (ArchOS arch os) staticLink output_fn
    | Just s <- output_fn = if
        | OSMinGW32      <- os   -> s <?.> "exe"
        | ArchJavaScript <- arch -> s <?.> "jsexe"
        | ArchWasm32     <- arch -> s <?.> "wasm"
        | staticLink             -> s <?.> "a"
        | otherwise              -> s
    | otherwise = if
        | OSMinGW32      <- os   -> "main.exe"
        | ArchJavaScript <- arch -> "main.jsexe"
        | staticLink             -> "liba.a"
        | otherwise              -> "a.out"
   where s <?.> ext | null (takeExtension s) = s <.> ext
                    | otherwise              = s
  