;;; lang/fortran/autoload.el -*- lexical-binding: t; -*-

;; --- GFORTRAN --- ;;

;;;###autoload
(defun +fortran/gfortran-compile ()
  "Compile the current buffer using gfortran."
  (interactive)
  (compile (format "gfortran %s %s"
                   (+fortran/fortran-std)
                   buffer-file-name)))

;;;###autoload
(defun +fortran/gfortran-run ()
  "Run the current buffer using gfortran."
  (interactive)
  (delete-file "./a.out")
  (+fortran/gfortran-compile)
  (while (not (file-exists-p "./a.out"))
    (sleep-for 1))
  (compile "./a.out"))

(defun +fortran/fortran-std ()
  "Which version of Fortran should we target?"
  (cl-case major-mode
    (fortran-mode "-std=legacy")
    (t "")))

;; --- FPM --- ;;

;;;###autoload
(defun +fortran/fpm-build ()
  "Build the current project using fpm."
  (interactive)
  (compile "fpm build"))

;;;###autoload
(defun +fortran/fpm-run ()
  "Run the current project using fpm."
  (interactive)
  (compile "fpm run"))

;;;###autoload
(defun +fortran/fpm-test ()
  "Test the current project using fpm."
  (interactive)
  (compile "fpm test"))

;; --- MISC. --- ;;
;;;###autoload
(defun +fortran/compilation-buffer-name (mode)
  "The name of the buffer produced by `compile'."
  (interactive)
  "*fortran-compilation*")