#lang racket/base

(require "main.rkt")

(makefile 'racket-makefile
  (default-target 'all)
  (phony 'all 'commit 'push 'status 'pull 'clean 'package 'doc 'showdoc 'refresh)

  (target 'all
    (displayln "use (make 'clean), (make 'package), or (make 'commit)"))

  (target 'commit
    (let ([st (git 'status)])
      (displayln st)
      (when (> (length st) 0)
        (git 'add '-A)
        (git 'commit)
        (git 'push))))

  (target 'push
    (git 'push))

  (target 'status
    (displayln "git status:")
    (for-each
     (λ (e)
       (displayln
        (format "~a\t:\t~a (remote ~a)" (caddr e) (cadr e) (car e))))
     (git 'status)))

  (target 'pull
    (git 'pull))

  (target 'clean
          
    (for-each (λ (f) (displayln f) (rm-f f))
              (list-files "." #px"([.]bak|~)$" #:recursive #t))
    (for-each (λ (d) (displayln d) (rm-rf d))
              (list-dirs "." #px"(compiled|doc|docs)$" #:recursive #t))
    (for-each (λ (f) (displayln f) (rm-f f))
              (list-files "scrbl" #px"[.](css|js|html)$")))

  (target 'version
          (displayln (format "Next version: ~a" (git 'next-version))))

  (target 'package
    (deps 'clean)
    (zip-package))

  (target 'zip
          (deps 'package))

  (target "docs/racket-makefile.html"
    (deps "scrbl/racket-makefile.scrbl")
    (unless (directory-exists? "docs")
      (make-directory "docs"))
    (raco '(scribble --html +m --dest "docs" scrbl/racket-makefile.scrbl)))

  (target 'doc
    (deps "docs/racket-makefile.html")
    (displayln "Documentation built"))

  (target 'showdoc
    (deps 'doc)
    (send-url/file "docs/racket-makefile.html"))

  (target 'refresh
    (displayln "Refreshing makefile")
    (refresh-makefile)
    (displayln "done.")))
