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

(setq debug-on-error t)

(package-initialize)
(require 'cl)
(setq features-before features)

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
10
(require 'org-version)
11
12
13
(print (org-version nil t t))
(print (concat "Org " org-version))

14
15
16
17
18
19
20
; 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"))

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
; 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)))

39
40
41
42
43
44
45
46
47
48
49
(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)))))
50
51
52

(require 'ox-publish)
(require 'org-install)
53
(require 'hoa-mode)
54
55

(setq org-export-htmlize-output-type 'css)
56
(setq org-html-htmlize-output-type 'css)
57
58
59
; 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)
60
61
62
;; 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/")
63

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

67
68
(org-babel-do-load-languages
 'org-babel-load-languages
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
69
 `((,(if (version< org-version "8.3") 'sh 'shell) . t)
70
   (dot . t)
71
   (python . t)
72
   (plantuml . t)
73
   (R . t)
74
   (C . t)))
75
(setq org-confirm-babel-evaluate nil)
76
(setq org-plantuml-jar-path "@abs_top_builddir@/doc/org/plantuml.jar")
77
(setq org-babel-temporary-directory "@abs_top_builddir@/doc/org/tmp")
78
79
80
;;; 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))
81
(make-directory org-babel-temporary-directory t)
82
(setq org-babel-python-command "@PYTHON@")
83
(setq org-babel-C++-compiler "./g++wrap")
84
(setq shell-file-name "@SHELL@")
85
(setq ess-ask-for-ess-directory nil)
86

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

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

111
112
113
114
115
(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>")

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

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
120
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
(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)))
157

158
(setq org-publish-project-alist
159
      '(("spot-html"
160
161
162
163
	:base-directory "@abs_top_srcdir@/doc/org/"
	:base-extension "org"
	:publishing-directory "@abs_top_srcdir@/doc/userdoc/"
	:recursive t
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
164
165
166
	:exclude "setup.org"
	:auto-sitemap t
	:sitemap-title "Sitemap for Spot"
167
        :sitemap-function spot-publish-sitemap
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
168
        :sitemap-format-entry spot-sitemap-format-entry
169
	:publishing-function org-html-publish-to-html
170
	:html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"spot.css\" />"
171
172
173
	:auto-preamble t)
       ("spot-static"
	:base-directory "@abs_top_srcdir@/doc/org/"
174
	:base-extension "css\\|js\\|png\\|svg\\|jpg\\|gif\\|pdf"
175
176
177
178
179
180
	: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)
181
182
;;; org-babel-remove-temporary-directory does not correctly remove
;;; nested directories and we have some files in tmp/.libs/ because of
183
184
185
;;; libtool.  So we have to clean that ourselves.
(if (file-directory-p org-babel-temporary-directory)
    (delete-directory org-babel-temporary-directory t))