init.el.in 7.52 KB
Newer Older
1
(setq load-path (append '("@abs_top_srcdir@/elisp/") ; for hoa-mode.el
2
			load-path))
3 4 5

(setq debug-on-error t)

6 7 8 9 10 11 12 13 14
;;; Some combination of GNU TLS and Emacs fail to retrieve archive
;;; contents over https.
;;; https://www.reddit.com/r/emacs/comments/cdf48c/failed_to_download_gnu_archive/
;;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34341
(if (and (version< emacs-version "26.3") (>= libgnutls-version 30600))
    (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
; work around obsolete ELPA signatures :-(
(setq package-check-signature 'nil)

15 16 17 18
(package-initialize)
(require 'cl)
(setq features-before features)

19
(require 'org-version)
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
(print (org-version nil t t))
(print (concat "Org " org-version))

; The Org version that ships with emacs is usually too old.
(when (version< org-version "9.1")
  (warn "Org-mode is too old; attempting to download a more recent version")
  ;; we need to unload any bits of org that were loaded before calling
  ;; install package, otherwise the byte code might mix the two versions.
  (dolist (feature (set-difference features features-before))
    (when (and (featurep feature)
               (let ((feature-name (symbol-name feature)))
                 (or (string-prefix-p "org" feature-name)
                     (string-prefix-p "ob" feature-name))))
      (message "unloading feature %s" feature)
      (unload-feature feature t)))
  ;; install org-plus-contrib, not org, as the former includes htmlize
  (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
  (package-refresh-contents)
  (let ((org-p-c (cadr (assq 'org-plus-contrib package-archive-contents))))
    (package-install org-p-c)))

41 42 43 44 45 46 47 48 49 50 51
(let ((have-htmlize (require 'htmlize nil t))
      (have-ess (require 'ess nil t)))
  (unless (and have-htmlize have-ess)
    (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
    (package-refresh-contents)
    (unless have-htmlize
      (let ((htmlize (cadr (assq 'htmlize package-archive-contents))))
        (package-install htmlize)))
    (unless have-ess
      (let ((ess (cadr (assq 'ess package-archive-contents))))
        (package-install ess)))))
52 53 54

(require 'ox-publish)
(require 'org-install)
55
(require 'hoa-mode)
56 57

(setq org-export-htmlize-output-type 'css)
58
(setq org-html-htmlize-output-type 'css)
59 60 61
; the .org-timestamp directory does not always exist, is not always
; created by org, and that causes issues on our buildfarm.
(setq org-publish-use-timestamps-flag nil)
62 63 64
;; The default value of writing to ~/.org-timestamps causes race
;; conditions when doing concurrent builds.
(setq org-publish-timestamp-directory "@abs_top_builddir@/.org-timestamps/")
65

66 67 68
;; Prevent tabs from being inserted when org-mode reindent some code.
(setq-default indent-tabs-mode nil)

69 70
(org-babel-do-load-languages
 'org-babel-load-languages
71
 `((,(if (version< org-version "8.3") 'sh 'shell) . t)
72
   (dot . t)
73
   (python . t)
74
   (plantuml . t)
75
   (R . t)
76
   (C . t)))
77
(setq org-confirm-babel-evaluate nil)
78
(setq org-plantuml-jar-path "@abs_top_builddir@/doc/org/plantuml.jar")
79
(setq org-babel-temporary-directory "@abs_top_builddir@/doc/org/tmp")
80 81 82
;;; the directory might already exist from a previously aborted run.
(if (file-directory-p org-babel-temporary-directory)
    (delete-directory org-babel-temporary-directory t))
83
(make-directory org-babel-temporary-directory t)
84
(setq org-babel-python-command "@PYTHON@")
85
(setq org-babel-C++-compiler "./g++wrap")
86
(setq shell-file-name "@SHELL@")
87
(setq ess-ask-for-ess-directory nil)
88

89 90 91
(setq org-babel-default-header-args:plantuml
      '((:results . "file")
        (:exports . "results")
92 93
        ;; Prevent the plantuml logo to appear on top of whatever you
        ;; are doing when the project compiles in the background.
94
        (:java . "-Djava.awt.headless=true")))
95

96
(setenv "PATH"
97
	(concat "@abs_top_builddir@/bin" path-separator (getenv "PATH")))
98
(setenv "PYTHONPATH"
99 100 101 102 103
	(concat "@abs_top_builddir@/python/.libs:"
		"@abs_top_builddir@/python:"
		"@abs_top_srcdir@/python:"
		"@abs_top_builddir@/python/spot/.libs:"
		"@abs_top_builddir@/python/spot:"
104
		"@abs_top_builddir@/spot/ltsmin/.libs"
105
		"@abs_top_srcdir@/python/spot:"
106 107
		(getenv "PYTHONPATH")))
(setenv "DYLD_LIBRARY_PATH"
108
	(concat "@abs_top_builddir@/python/.libs:@abs_top_builddir@/spot/.libs:@abs_top_builddir@/buddy/src/.libs:"
109
		(getenv "DYLD_LIBRARY_PATH")))
110
(setenv "SPOT_DOTDEFAULT" "Brf(Lato)C(#ffffa0)")
111
(setenv "SPOT_DOTEXTRA" "node[fontsize=12] fontsize=12 stylesheet=\"spot.css\" edge[arrowhead=vee, arrowsize=.7, fontsize=12]")
112

113 114 115 116 117
(setq org-export-html-home/up-format
"<div id=\"org-div-home-and-up\" style=\"text-align:center;white-space:nowrap;\">
 <a accesskey=\"h\" href=\"%s\">UP</a> | <a accesskey=\"H\" href=\"%s\">HOME</a>
</div>")

118
(setq org-export-html-postamble nil)
119 120
(setq org-html-table-header-tags
      '("<th scope=\"%s\"%s><div><span>" . "</span></div></th>"))
121

122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
(defun spot-sitemap-format-entry (entry style project)
  "Export a sitemap entry in a why that we can order them meaningfully.
If file ENTRY has HTML_LINK_UP pointing to file up.html, and file
up.html points to index.html, then the result is:
      index.org/up.org/entry.org/ [[entry.org][TITLE]]"
  (let ((linkup (org-publish-find-property entry :html-link-up project 'html))
        (trail (concat entry "/ ")))
    (while (and linkup (string-match "^\\(.*\\)\.html$" linkup))
      (let ((match (concat (match-string 1 linkup) ".org")))
        (if (string= match entry)
            (setq linkup nil)
          (setq linkup (org-publish-find-property match :html-link-up
                                                  project 'html)
                trail (concat match "/" trail)))))
    (concat trail (org-publish-sitemap-default-entry entry style project))))

(defun spot-sitemap-reorder (entries)
  (sort entries (lambda (a b) (string< (car a) (car b)))))

(defun spot-publish-sitemap (title thelist)
  "Build Spot's sitemap.

  This is done by sorting all lines, and then replacing
  - index.org/up.org/entry.org/ [[entry.org][TITLE]]
  by
  - [[entry.org][TITLE]]
  but indented according to the number of 'fake directory' parts."
  (let ((body (org-list-to-org (cons 'unordered
                                 (spot-sitemap-reorder (cdr thelist))))))
    (while
        (let* ((res (replace-regexp-in-string "\\([:space:]*\\)- [^/[:space:]]+/" "  \\1- " body))
               (cmp (string= res body)))
          (setq body res)
          (not cmp)))
    (concat "#+TITLE: " title
            "\n#+SETUPFILE: setup.org\n#+HTML_LINK_UP: index.html\n\n"
            body)))
159

160
(setq org-publish-project-alist
161
      '(("spot-html"
162 163 164 165
	:base-directory "@abs_top_srcdir@/doc/org/"
	:base-extension "org"
	:publishing-directory "@abs_top_srcdir@/doc/userdoc/"
	:recursive t
166 167 168
	:exclude "setup.org"
	:auto-sitemap t
	:sitemap-title "Sitemap for Spot"
169
        :sitemap-function spot-publish-sitemap
170
        :sitemap-format-entry spot-sitemap-format-entry
171
	:publishing-function org-html-publish-to-html
172
	:html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"spot.css\" />"
173 174 175
	:auto-preamble t)
       ("spot-static"
	:base-directory "@abs_top_srcdir@/doc/org/"
176
	:base-extension "css\\|js\\|png\\|svg\\|jpg\\|gif\\|pdf"
177 178 179 180 181 182
	:publishing-directory "@abs_top_srcdir@/doc/userdoc/"
	:recursive t
	:publishing-function org-publish-attachment)
       ("spot-all" :components ("spot-html" "spot-static"))))

(org-publish-all t)
183 184
;;; org-babel-remove-temporary-directory does not correctly remove
;;; nested directories and we have some files in tmp/.libs/ because of
185 186 187
;;; libtool.  So we have to clean that ourselves.
(if (file-directory-p org-babel-temporary-directory)
    (delete-directory org-babel-temporary-directory t))