1
0
Fork 0
emacs-config/GNUmakefile
Tom Willemse ae2928e39f Update the makefile to properly look for the right targets
The ‘get-multifile-module-version’ and ‘get-module-version’ functions open up
the given Emacs Lisp file and search for a “Version” header, parses it out, and
then returns the file name of the module as it should look in the package
archive.
2023-05-25 00:10:31 -07:00

551 lines
20 KiB
Makefile

define GUILE_MODULE
(use-modules (ice-9 rdelim)
(ice-9 ports)
(ice-9 regex))
(define (convert-version version)
(string-join (map (compose number->string string->number) (string-split version #\.)) "."))
(define (get-multifile-module-version module-name)
(call-with-input-file (format #f "~a/~a.el" module-name module-name)
(lambda (p)
(let loop ((line (read-line p)))
(if (eof-object? line)
"Not found!"
(let ((m (string-match "^;; Version: (.*)" line)))
(if m
(format #f "~a-~a.tar" module-name
(convert-version (match:substring m 1)))
(loop (read-line p)))))))))
(define (get-module-version module-name)
(call-with-input-file (format #f "~a.el" module-name)
(lambda (p)
(let loop ((line (read-line p)))
(if (eof-object? line)
"Not found!"
(let ((m (string-match "^;; Version: (.*)" line)))
(if m
(format #f "~a-~a.el" module-name
(convert-version (match:substring m 1)))
(loop (read-line p)))))))))
endef
$(guile GUILE_MODULE))
define upload =
emacs --quick --batch \
--eval "(setq package-user-dir \"local-elpa/\")" \
--load oni-package.el \
--funcall package-initialize \
--eval "(let ((package-archive-upload-base \"bin/\")) \
(mkdir package-archive-upload-base t) \
(package-upload-file $1))"
endef
define upload-multi-file =
$(call upload,(car (sort (file-expand-wildcards \"$1/dist/*.tar\") #'string>)))
endef
package: \
bin/$(guile (get-module-version "oni-alert")) \
bin/$(guile (get-module-version "oni-autohotkey")) \
bin/$(guile (get-module-version "oni-bat")) \
bin/$(guile (get-multifile-module-version "oni-bats")) \
bin/$(guile (get-module-version "oni-bookmark")) \
bin/$(guile (get-module-version "oni-browse-url")) \
bin/$(guile (get-module-version "oni-c")) \
bin/$(guile (get-module-version "oni-circe")) \
bin/$(guile (get-module-version "oni-clojure")) \
bin/$(guile (get-module-version "oni-cmake")) \
bin/$(guile (get-module-version "oni-common-lisp")) \
bin/$(guile (get-module-version "oni-company")) \
bin/$(guile (get-module-version "oni-compilation")) \
bin/$(guile (get-multifile-module-version "oni-conf")) \
bin/$(guile (get-module-version "oni-core")) \
bin/$(guile (get-module-version "oni-counsel")) \
bin/$(guile (get-module-version "oni-cpp")) \
bin/$(guile (get-multifile-module-version "oni-csharp")) \
bin/$(guile (get-multifile-module-version "oni-css")) \
bin/$(guile (get-module-version "oni-data-dir")) \
bin/$(guile (get-module-version "oni-diff-hl")) \
bin/$(guile (get-module-version "oni-dired")) \
bin/$(guile (get-module-version "oni-docker")) \
bin/$(guile (get-module-version "oni-ediff")) \
bin/$(guile (get-module-version "oni-elfeed")) \
bin/$(guile (get-multifile-module-version "oni-elisp")) \
bin/$(guile (get-module-version "oni-elm")) \
bin/$(guile (get-module-version "oni-embrace")) \
bin/$(guile (get-module-version "oni-emms")) \
bin/$(guile (get-module-version "oni-epub")) \
bin/$(guile (get-module-version "oni-eshell")) \
bin/$(guile (get-module-version "oni-eww")) \
bin/$(guile (get-module-version "oni-fish")) \
bin/$(guile (get-module-version "oni-flycheck")) \
bin/$(guile (get-module-version "oni-git-commit")) \
bin/$(guile (get-module-version "oni-gnus")) \
bin/$(guile (get-module-version "oni-grep")) \
bin/$(guile (get-module-version "oni-groovy")) \
bin/$(guile (get-module-version "oni-gui")) \
bin/$(guile (get-multifile-module-version "oni-haml")) \
bin/$(guile (get-module-version "oni-haskell")) \
bin/$(guile (get-module-version "oni-highlight-indent-guides")) \
bin/$(guile (get-multifile-module-version "oni-html")) \
bin/$(guile (get-module-version "oni-hydra")) \
bin/$(guile (get-module-version "oni-ivy")) \
bin/$(guile (get-module-version "oni-jabber")) \
bin/$(guile (get-module-version "oni-java")) \
bin/$(guile (get-module-version "oni-js")) \
bin/$(guile (get-module-version "oni-json")) \
bin/$(guile (get-module-version "oni-log-edit")) \
bin/$(guile (get-module-version "oni-lsp")) \
bin/$(guile (get-module-version "oni-lua")) \
bin/$(guile (get-module-version "oni-lui")) \
bin/$(guile (get-module-version "oni-magit")) \
bin/$(guile (get-module-version "oni-makefile")) \
bin/$(guile (get-module-version "oni-notmuch")) \
bin/$(guile (get-multifile-module-version "oni-nxml")) \
bin/$(guile (get-multifile-module-version "oni-org")) \
bin/$(guile (get-module-version "oni-org-roam")) \
bin/$(guile (get-module-version "oni-package")) \
bin/$(guile (get-module-version "oni-paredit")) \
bin/$(guile (get-multifile-module-version "oni-php")) \
bin/$(guile (get-module-version "oni-powershell")) \
bin/$(guile (get-module-version "oni-prescient")) \
bin/$(guile (get-module-version "oni-projectile")) \
bin/$(guile (get-multifile-module-version "oni-python")) \
bin/$(guile (get-multifile-module-version "oni-ruby")) \
bin/$(guile (get-module-version "oni-rust")) \
bin/$(guile (get-module-version "oni-scheme")) \
bin/$(guile (get-module-version "oni-shackle")) \
bin/$(guile (get-module-version "oni-sh")) \
bin/$(guile (get-module-version "oni-shr")) \
bin/$(guile (get-module-version "oni-slack")) \
bin/$(guile (get-module-version "oni-smartparens")) \
bin/$(guile (get-module-version "oni-smt")) \
bin/$(guile (get-module-version "oni-sort")) \
bin/$(guile (get-module-version "oni-termux")) \
bin/$(guile (get-module-version "oni-tramp")) \
bin/$(guile (get-module-version "oni-tui")) \
bin/$(guile (get-multifile-module-version "oni-twig")) \
bin/$(guile (get-module-version "oni-ui")) \
bin/$(guile (get-module-version "oni-vc")) \
bin/$(guile (get-module-version "oni-vterm")) \
bin/$(guile (get-module-version "oni-web")) \
bin/$(guile (get-module-version "oni-yaml")) \
bin/$(guile (get-module-version "oni-yasnippet")) \
install-%:
emacs --batch \
--load oni-package.el \
--funcall package-initialize \
--eval "(add-to-list 'package-archives '(\"test\" . \"$(TEST_ARCHIVE)\"))" \
--eval '(package-refresh-contents)' \
--eval "(package-install '$*)"
unit-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
integration-test-%: install-%
bats test/integration/$*.bats
## Single-file packages
bin/$(guile (get-module-version "oni-yasnippet")): oni-yasnippet.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-smartparens")): oni-smartparens.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-flycheck")): oni-flycheck.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-sh")): oni-sh.el \
bin/$(guile (get-module-version "oni-smartparens")) \
bin/$(guile (get-module-version "oni-flycheck"))
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-company")): oni-company.el \
bin/$(guile (get-module-version "oni-prescient"))
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-compilation")): oni-compilation.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-core")): oni-core.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-counsel")): oni-counsel.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-cpp")): oni-cpp.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-prescient")): oni-prescient.el \
bin/$(guile (get-module-version "oni-data-dir"))
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-data-dir")): oni-data-dir.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-diff-hl")): oni-diff-hl.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-dired")): oni-dired.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-docker")): oni-docker.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-ediff")): oni-ediff.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-elfeed")): oni-elfeed.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-elm")): oni-elm.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-embrace")): oni-embrace.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-emms")): oni-emms.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-epub")): oni-epub.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-eshell")): oni-eshell.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-eww")): oni-eww.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-fish")): oni-fish.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-git-commit")): oni-git-commit.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-gnus")): oni-gnus.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-grep")): oni-grep.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-groovy")): oni-groovy.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-gui")): oni-gui.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-haskell")): oni-haskell.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-highlight-indent-guides")): oni-highlight-indent-guides.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-hydra")): oni-hydra.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-ivy")): oni-ivy.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-jabber")): oni-jabber.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-java")): oni-java.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-js")): oni-js.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-json")): oni-json.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-log-edit")): oni-log-edit.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-lsp")): oni-lsp.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-lua")): oni-lua.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-lui")): oni-lui.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-magit")): oni-magit.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-makefile")): oni-makefile.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-markdown")): oni-markdown.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-notmuch")): oni-notmuch.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-org-roam")): oni-org-roam.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-package")): oni-package.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-paredit")): oni-paredit.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-powershell")): oni-powershell.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-projectile")): oni-projectile.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-rust")): oni-rust.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-scheme")): oni-scheme.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-shackle")): oni-shackle.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-shr")): oni-shr.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-slack")): oni-slack.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-smt")): oni-smt.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-sort")): oni-sort.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-termux")): oni-termux.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-tramp")): oni-tramp.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-tui")): oni-tui.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-ui")): oni-ui.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-vc")): oni-vc.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-vterm")): oni-vterm.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-web")): oni-web.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-yaml")): oni-yaml.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-alert")): oni-alert.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-autohotkey")): oni-autohotkey.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-bat")): oni-bat.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-bookmark")): oni-bookmark.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-browse-url")): oni-browse-url.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-c")): oni-c.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-circe")): oni-circe.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-clojure")): oni-clojure.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-cmake")): oni-cmake.el
$(call upload,\"$<\")
bin/$(guile (get-module-version "oni-common-lisp")): oni-common-lisp.el
$(call upload,\"$<\")
## oni-bats
oni-bats/dist/$(guile (get-multifile-module-version "oni-bats")): \
oni-bats/oni-bats.el \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-sh"))
cd oni-bats && eldev package
bin/$(guile (get-multifile-module-version "oni-bats")): \
oni-bats/dist/$(guile (get-multifile-module-version "oni-bats"))
$(call upload-multi-file,oni-bats)
## oni-conf
oni-conf/dist/$(guile (get-multifile-module-version "oni-conf")): \
oni-conf/oni-conf.el \
bin/$(guile (get-module-version "oni-yasnippet"))
cd oni-conf && eldev package
bin/$(guile (get-multifile-module-version "oni-conf")): \
oni-conf/dist/$(guile (get-multifile-module-version "oni-conf"))
$(call upload-multi-file,oni-conf)
## oni-csharp
oni-csharp/dist/$(guile (get-multifile-module-version "oni-csharp")): \
oni-csharp/oni-csharp.el \
bin/$(guile (get-module-version "oni-company")) \
bin/$(guile (get-module-version "oni-flycheck")) \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-hydra")) \
bin/$(guile (get-module-version "oni-lsp")) \
bin/$(guile (get-module-version "oni-smartparens"))
cd oni-csharp && eldev package
bin/$(guile (get-multifile-module-version "oni-csharp")): \
oni-csharp/dist/$(guile (get-multifile-module-version "oni-csharp"))
$(call upload-multi-file,oni-csharp)
## oni-css
oni-css/dist/$(guile (get-multifile-module-version "oni-css")): \
oni-css/oni-css.el \
bin/$(guile (get-module-version "oni-company")) \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-hydra"))
cd oni-css && eldev package
bin/$(guile (get-multifile-module-version "oni-css")): \
oni-css/dist/$(guile (get-multifile-module-version "oni-css"))
$(call upload-multi-file,oni-css)
## oni-elisp
oni-elisp/dist/$(guile (get-multifile-module-version "oni-elisp")): \
oni-elisp/oni-elisp.el \
bin/$(guile (get-module-version "oni-company")) \
bin/$(guile (get-module-version "oni-flycheck")) \
bin/$(guile (get-module-version "oni-paredit")) \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-hydra"))
cd oni-elisp && eldev package
bin/$(guile (get-multifile-module-version "oni-elisp")): \
oni-elisp/dist/$(guile (get-multifile-module-version "oni-elisp"))
$(call upload-multi-file,oni-elisp)
## oni-haml
oni-haml/dist/$(guile (get-multifile-module-version "oni-haml")): \
oni-haml/oni-haml.el \
bin/$(guile (get-module-version "oni-yasnippet"))
cd oni-haml && eldev package
bin/$(guile (get-multifile-module-version "oni-haml")): \
oni-haml/dist/$(guile (get-multifile-module-version "oni-haml"))
$(call upload-multi-file,oni-haml)
## oni-html
oni-html/dist/$(guile (get-multifile-module-version "oni-html")): \
oni-html/oni-html.el \
bin/$(guile (get-module-version "oni-yasnippet"))
cd oni-html && eldev package
bin/$(guile (get-multifile-module-version "oni-html")): \
oni-html/dist/$(guile (get-multifile-module-version "oni-html"))
$(call upload-multi-file,oni-html)
## oni-nxml
oni-nxml/dist/$(guile (get-multifile-module-version "oni-nxml")): \
oni-nxml/oni-nxml.el \
bin/$(guile (get-module-version "oni-yasnippet"))
cd oni-nxml && eldev package
bin/$(guile (get-multifile-module-version "oni-nxml")): \
oni-nxml/dist/$(guile (get-multifile-module-version "oni-nxml"))
$(call upload-multi-file,oni-nxml)
## oni-org
oni-org/dist/$(guile (get-multifile-module-version "oni-org")): \
oni-org/oni-org.el \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-alert")) \
bin/$(guile (get-module-version "oni-hydra"))
cd oni-org && eldev package
bin/$(guile (get-multifile-module-version "oni-org")): \
oni-org/dist/$(guile (get-multifile-module-version "oni-org"))
$(call upload-multi-file,oni-org)
## oni-php
oni-php/dist/$(guile (get-multifile-module-version "oni-php")): \
oni-php/oni-php.el \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-flycheck")) \
bin/$(guile (get-module-version "oni-company")) \
bin/$(guile (get-module-version "oni-prescient")) \
bin/$(guile (get-module-version "oni-data-dir")) \
bin/$(guile (get-module-version "oni-hydra"))
cd oni-php && eldev package
bin/$(guile (get-multifile-module-version "oni-php")): \
oni-php/dist/$(guile (get-multifile-module-version "oni-php"))
$(call upload-multi-file,oni-php)
## oni-python
oni-python/dist/$(guile (get-multifile-module-version "oni-python")): \
oni-python/oni-python.el \
bin/$(guile (get-module-version "oni-yasnippet")) \
bin/$(guile (get-module-version "oni-company")) \
bin/$(guile (get-module-version "oni-flycheck")) \
bin/$(guile (get-module-version "oni-hydra")) \
bin/$(guile (get-module-version "oni-lsp"))
cd oni-python && eldev package
bin/$(guile (get-multifile-module-version "oni-python")): \
oni-python/dist/$(guile (get-multifile-module-version "oni-python"))
$(call upload-multi-file,oni-python)
## oni-ruby
oni-ruby/dist/$(guile (get-multifile-module-version "oni-ruby")): \
oni-ruby/oni-ruby.el \
bin/$(guile (get-module-version "oni-yasnippet"))
cd oni-ruby && eldev package
bin/$(guile (get-multifile-module-version "oni-ruby")): \
oni-ruby/dist/$(guile (get-multifile-module-version "oni-ruby"))
$(call upload-multi-file,oni-ruby)
## oni-twig
oni-twig/dist/$(guile (get-multifile-module-version "oni-twig")): \
oni-twig/oni-twig.el \
bin/$(guile (get-module-version "oni-yasnippet"))
cd oni-twig && eldev package
bin/$(guile (get-multifile-module-version "oni-twig")): \
oni-twig/dist/$(guile (get-multifile-module-version "oni-twig"))
$(call upload-multi-file,oni-twig)