content: {-# OPTIONS_GHC -Wunused-imports #-}
  
  -- | A program which either tries to add setup code for Agda's Emacs
  -- mode to the users .emacs file, or provides information to Emacs
  -- about where the Emacs mode is installed.
  --
  -- This executable is deprecated, its functionality covered since 2.8
  -- by the @--emacs-mode@ flag of the agda executable.
  --
  -- However, we will continue to ship it with Agda
  -- because the emacs mode of older Agda versions assumes its existence
  -- for the version switching functionality @agda2-set-program-version@.
  
  module Main (main) where
  
  import System.Environment ( getArgs, getProgName )
  import System.Exit        ( exitFailure )
  import System.FilePath    ( takeFileName )
  
  import Agda.Setup as Agda ( getDataDir, setup )
  import Agda.Setup.EmacsMode
  import Agda.Version       ( version )
  
  -- | The program.
  
  main :: IO ()
  main = do
    self <- takeFileName <$> getProgName
  
    args <- getArgs
    case args of
      [arg]
        | arg == locateFlag -> do
  
            -- Ensure that Agda has been setup so the Emacs mode is available.
            Agda.setup False
  
            printEmacsModeFile
  
        | arg == setupFlag  -> do
            inform $ deprecation self
  
            -- Ensure that Agda has been setup so the Emacs mode is available.
            Agda.setup False
  
            setupDotEmacs "agda"
  
        | arg == compileFlag -> do
            inform $ deprecation self
  
            -- Ensure that Agda has been setup so the Emacs mode is available.
            Agda.setup False
  
            compileElispFiles
  
      _  -> do
        dir <- getDataDir
        inform $ deprecation self
        inform $ usage dir
        exitFailure
  
  -- | Usage information.
  
  usage :: FilePath -> String
  usage dataDir = unlines
    [ "This program, which is part of Agda version " ++ version ++ ", can be run"
    , "in three modes, depending on which option it is invoked with:"
    , ""
    , setupFlag
    , ""
    , "  The program unloads Agda's data files, including the Emacs mode,"
    , "  to the following location:"
    , ""
    , "    " ++ dataDir
    , ""
    , "  It then tries to add setup code for Agda's Emacs mode to the"
    , "  current user's .emacs file. It is assumed that the .emacs file"
    , "  uses the character encoding specified by the locale."
    , ""
    , locateFlag
    , ""
    , "  The path to the Emacs mode's main file is printed on standard"
    , "  output (using the UTF-8 character encoding and no trailing"
    , "  newline)."
    , ""
    , compileFlag
    , ""
    , "  The program unloads Agda's data files, including the Emacs mode,"
    , "  to the following location:"
    , ""
    , "    " ++ dataDir
    , ""
    , "  It then tries to compile Agda's Emacs mode's source files."
    , ""
    , "  WARNING: If you reinstall the Agda mode without recompiling the Emacs"
    , "  Lisp files, then Emacs may continue using the old, compiled files."
    ]
  
  -- | Deprecation warning.
  
  deprecation :: String -> String
  deprecation self = unlines
    [ "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    , "@  Warning: " ++ self ++ " has been deprecated with Agda 2.8.0   @"
    , "@  and will be removed in the future.                       @"
    , "@  From Agda 2.8.0 on, use `agda --emacs-mode` instead.     @"
    , "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    , ""
    ]
  