FILES := $(wildcard *.el)

PACKAGE_TARGETS := $(addprefix package-,$(FILES))

package: $(PACKAGE_TARGETS) package-oni-conf package-oni-css package-oni-elisp \
    package-oni-haml package-oni-html package-oni-nxml package-oni-org \
    package-oni-php package-oni-python package-oni-ruby package-oni-twig

package-%: %
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-upload-file "$^")'

package-oni-conf:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-conf/dist/*.tar\") #'string>)))"
	cp oni-conf/dist/oni-conf-readme.txt bin/

package-oni-css:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-css/dist/*.tar\") #'string>)))"
	cp oni-css/dist/oni-css-readme.txt bin/

package-oni-elisp:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-elisp/dist/*tar\") #'string>)))"
	cp oni-elisp/dist/oni-elisp-readme.txt bin/

package-oni-haml:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-haml/dist/*.tar\") #'string>)))"
	cp oni-haml/dist/oni-haml-readme.txt bin/

package-oni-html:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-html/dist/*.tar\") #'string>)))"
	cp oni-html/dist/oni-html-readme.txt bin/

package-oni-nxml:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-nxml/dist/*.tar\") #'string>)))"
	cp oni-nxml/dist/oni-nxml-readme.txt bin/

package-oni-org:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-org/dist/*.tar\") #'string>)))"
	cp oni-org/dist/oni-org-readme.txt bin/

package-oni-php:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-php/dist/*.tar\") #'string>)))"
	cp oni-php/dist/oni-php-readme.txt bin/

package-oni-python:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-python/dist/*.tar\") #'string>)))"
	cp oni-python/dist/oni-python-readme.txt bin/

package-oni-ruby:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-ruby/dist/*.tar\") #'string>)))"
	cp oni-ruby/dist/oni-ruby-readme.txt bin/

package-oni-twig:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval "(package-upload-file (car (sort (file-expand-wildcards \"oni-twig/dist/*.tar\") #'string>)))"
	cp oni-twig/dist/oni-twig-readme.txt bin/

install-%:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file \"$*.el\")"

install-oni-conf:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-conf/dist/*.tar\") #'string>)))"

install-oni-css:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-css/dist/*.tar\") #'string>)))"

install-oni-elisp:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-elisp/dist/*.tar\") #'string>)))"

install-oni-haml:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-haml/dist/*.tar\") #'string>)))"

install-oni-html:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-html/dist/*.tar\") #'string>)))"

install-oni-nxml:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-nxml/dist/*.tar\") #'string>)))"

install-oni-org:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-org/dist/*.tar\") #'string>)))"

install-oni-php:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-php/dist/*.tar\") #'string>)))"

install-oni-python:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-python/dist/*.tar\") #'string>)))"

install-oni-ruby:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-ruby/dist/*.tar\") #'string>)))"

install-oni-twig:
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --eval '(package-refresh-contents)' \
	    $(foreach DEP,$(DEPS),--eval "(package-install-file \"$(DEP).el\")") \
	    --eval "(package-install-file (car (sort (file-expand-wildcards \"oni-twig/dist/*.tar\") #'string>)))"

test-%: install-%
	emacs --batch \
	    --load oni-package.el \
	    --funcall package-initialize \
	    --load ert \
	    --load "test/$*-test.el" \
	    --eval "(setq ert-batch-backtrace-right-margin nil)" \
	    --funcall ert-run-tests-batch-and-exit

test-oni-bookmark: DEPS := oni-data-dir
test-oni-conf: DEPS := oni-yasnippet
test-oni-css: DEPS := oni-company oni-fci
test-oni-php: DEPS := oni-flycheck oni-company oni-fci
test-oni-elisp: DEPS := oni-company oni-flycheck oni-paredit oni-fci \
    oni-yasnippet

clean:
	rm -fv $(FILES)