-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.developers-howto
387 lines (258 loc) · 12.5 KB
/
README.developers-howto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
Maxima project Git / build system HOWTO
1 General
Makefile.am is the file to modify, NOT Makefile
(Makefile is generated automatically from Makefile.am)
"make install" catches Makefile problems
that are not detected by "make" alone
Adding / removing files often leads to Makefile problems
To update your repository, execute
git pull # assuming origin/master points to the SF Maxima repo
Workflow with Git:
git pull # update your repo
git checkout master # work off master
git checkout -b scratch-pad # create a working branch
<do development, tests, commits, then, once satisfied...>
git checkout master # put yourself on master branch
git pull # update your repo, again
git merge scratch-pad # merge development work into master
git push origin master # push to SF Maxima repo
BE SURE NOT TO PUSH YOUR SCRATCH-PAD!
2 Renaming something in Git
-- Create a scratch/development branch as in 1.
-- git mv X Y
This moves X to Y and preserves the history.
Like any other change, this needs to be committed
as a separate step.
3 Adding / removing a file in maxima/src
-- Create a scratch/development branch as in 1.
-- Add new file X, then execute
git add X; git commit -m 'Message' -- X
-- Remove old file X
git rm X
Then execute "git commit" as above
-- Add / remove file name from maxima/src/Makefile.am
-- Add / remove file name from maxima/src/*-depends.mk
NOTE: There are several *-depends.mk files. These are
theoretically updated automatically but to the best
of my knowledge it is necessary to fix them by hand.
-- Add / remove file name in maxima/src/maxima.system
-- Verify that
"sh bootstrap; ./configure --enable-foolisp; make; make install"
and "run_testsuite();" all succeed
-- If the change affects the plotting routines: Verify that
tests/testbench_draw_manual.wxm still holds the right
results.
-- If the change affects drawdf() or plotdf(): Verify that
tests/testbench_drawdf_manual.wxm still holds the right
results.
-- Merge your work onto master and push the changes as in 1.
4 Adding / removing a file in maxima/share
-- Copy new file / remove old file
as you did in 3.
-- Add / remove file name in maxima/share/Makefile.am
-- Verify that
"sh bootstrap; ./configure --enable-foolisp; make; make install"
and "run_testsuite();" all succeed
-- If the change affects the plotting routines: Verify that
tests/testbench_draw_manual.wxm still holds the right
results.
-- Merge your work onto master and push the changes as in 1.
5.1 Creating a new share package
E.g., new package name = my_package
-- Naming conventions:
write_long_names_like_this, andNotLikeThisPlease,
norlikethiseitherthanks
spell_out_names, dnt_try_sv_typng_w_abbrvs_tnx
-- Create a new directory my_package
-- Put Lisp and/or Maxima files in the directory
At least one file must be named my_package.lisp or my_package.mac
Otherwise load(my_package) fails
-- Create texinfo documentation file my_package.texi
(PLEASE CREATE DOCUMENTATION, THANK YOU)
my_package.texi goes in maxima/doc/info
(same as other texinfo files)
Use maxima/share/template.texi as a template for my_package.texi
-- Create test file rtest_my_package.mac
(PLEASE CREATE A TEST FILE, THANK YOU)
Test file contains pairs of expressions:
input expression, then expected result
batch("my_package/rtest_my_package.mac", test);
executes the test
5.2 Adding a directory in maxima/share
-- Create a scratch/development branch as in 1.
-- Make the new directory and put the new files in it
-- Add the all the files in your new directory and commit this change:
git add .
git commit -m 'Message' -a
-- Put the my_package files on the file list of maxima/share/Makefile.am
-- Add my_package to SHARE-SUBDIRS-LIST in maxima/src/init-cl.lisp
-- Move my_package.texi to maxima/doc/info
Put my_package.texi on the list of files in
maxima/doc/info/Makefile.am
Put my_package on the list of topics in maxima/doc/info/include-maxima.texi.in
See instructions in comments at top of maxima/share/template.texi
-- Verify that
"sh bootstrap; ./configure --enable-foolisp; make; make install"
and "run_testsuite();" all succeed
-- Commit and push your work as in 1.
6 Adding / removing a file in maxima/tests
-- Create a scratch/development branch as in 1.
-- Copy new file / remove old file
and execute "git add" / "git rm"
-- Add / remove file name in maxima/tests/Makefile.am
-- Add / remove file name in maxima/tests/testsuite.lisp
-- Verify that
"sh bootstrap; ./configure --enable-foolisp; make; make install"
and "run_testsuite();" all succeed
-- Commit and push your work as in 1.
7 Updating the website
See the Git repository "website", particularly "README.md" there.
8.1 Backups of Git
All you need is the rsync tool and some disk space.
Issue the following command:
rsync -av 'rsync://maxima.git.sourceforge.net/gitroot/maxima/*' .
8.2 Backups of the ML subscribers list
You need to be a list admin to do that. Other then that you only
need a mail client to send mailman commands to
The command to get the subscribers list is "who" followed by the
list admin password. Sending an empty mail with "who XXX" in the
subject line should be enough.
I have the following cron.weekly script to do this automatically:
| #! /bin/sh
|
| su myuser -c "echo end | mail -s \"who password\" [email protected]"
8.3 Other Backups
Backups of the following stuff would be nice too:
- wiki
- bug database
9 Releases
9.1 Release policies
Releases are prepared (nominally) three times a year, on April 1,
August 1, and December 1. Releases simply package whatever seems
stable at that time.
It is the responsibility of developers (not the release
administrator) to copy bug fixes from the release branch to master
or vice versa (it doesn't matter whether bug fixes are introduced
on one branch or the other).
I don't recommend major changes on a release branch, but there is
really nothing to stop it. As always I'll appeal to good judgement.
If I've forgotten some step, please add it to this document.
9.2 Release numbering
The first release on the 5.mm release branch is 5.mm.0, the second
is 5.mm.1, third 5.mm.2, etc. The highest number on the branch is
the "best" or, at least, the most committed-to version. There is no
release candidate numbering.
The version major number has been 5 for many years. If you feel like
changing it to, say, 6, well, there's nothing to stop you.
9.3 Changelog
The changelog for 5.mm is named ChangeLog-5.mm.md (the suffix .md
indicating that it is in so-called "markdown" format). To obtain the
raw material for the changelog:
$ git log branch-5.${mm-1}-base..HEAD
Use the git-log output as the basis for ChangeLog-5.mm.md. Use your
best judgement as to what to include; the git-log output is
typically much, much larger than the changelog. Look at previous
changelogs to see the markdown format and organization.
Commit ChangeLog-5.mm.md to master. Don't forget to add it to
the top level "Makefile.am" so that it will be included in the
release tarball.
9.4 Verifying the functionality of the maxima tarball
The autotools offer a few make targets that allow to verify the
maxima release:
$ make pdf
isn't done automatically on "make all" so it is good to test if this
make target works.
$ make check
runs the standard testsuite, the testsuite for the share packages
and the tests for the ask_* functions for all lisps maxima is compiled
with and returns an error if any test unexpectedly failed.
$ make distcheck
compiles maxima, builds a release tarball, extracts this tarball,
compiles it and runs "make check" on it in order to find out if
"make dist" has produced a working tarball no files are missing from.
$ mkdir build
$ ../configure
$ make
$ make distcleancheck
tests if "make disclean" brings maxima back into the original state.
this is very handy when building debian packages.
make installcheck
$ tests if "make install" results in a working maxima release.
Note that with Ubuntu Cosmic/Disco in Jan 2019 still only the first
two of these make targets run without errors.
9.5 Git commands for releases
Release versions live on a branch named branch-5_mm, and are tagged
5.mm.0, 5.mm.1, 5.mm.2, etc. The Git tag must be the same as the
version number declared to autoconf.
$ git checkout master
$ git tag -a branch-5_mm-base
$ git push --tags origin master
$ git checkout -b branch-5_mm
$ <edit configure.ac to set version number to 5.mm.0>
$ git add configure.ac && git commit
$ git tag -a 5.mm.0
<at this point, verify that you can build packages BEFORE you push>
$ git push --tags origin branch-5_mm-base
$ git checkout master
$ <edit configure.ac to set version number to 5.${mm-1}post>
$ git add configure.ac && git commit
$ git push origin master
Repeat 5.mm.0 stuff (edit configure.ac and tag) for 5.mm.1, 2, 3, ....
To copy bug fixes from one branch to another:
$ git cherry-pick -x <commit hash>
9.6 Building a release
$ git checkout branch-5_mm
$ sh bootstrap
$ ./configure
$ make dist-gzip
At this point you now have maxima-5.mm.nn.tar.gz.
Binaries for Linux are traditionally created by RPM.
I'll assume you know how to build stuff with RPM. Copy the tar.gz
to <path to rpm build tree>/SOURCES/. Then:
$ rpmbuild -ba maxima.spec
Debian packages can be built the following way:
- Install clisp, sbcl, gcl, ecl and debhelper.
- checkout the branch DebianPackaging
- Update the changelog contained in its debian directory: From there the
e-mail address of the packager and the version number of the Debian
package are taken. It also is important that gpg knows the private key
for the e-mail address mentioned in the last ChangeLog entry.
- copy the debian directory into the directory containing the contents of
the release tarball.
- cd into this directory and type:
$ debuild
- debuild will now complain that the source is missing and tell under which
names it will accept the tarball. Rename the tarball to this name and start
debuild again.
- a few minutes later gpg will ask for the key's password in order to sign
the newly built packages.
Unfortunately just using the Debian package included in the autotools won't
equip the Maxima package it generates with the metadata that allows to
install the wxMaxima package shipped with Debian and Ubuntu.
9.7 Uploading files
$ sftp mysfusername,[email protected]
> cd /home/frs/project/m/ma/maxima
> cd Maxima-Linux
> mkdir 5.mm.nn-Linux
> cd 5.mm.nn-Linux
> lcd /path/to/rpms
> put maxima-*5.mm.nn*.rpm
> cd ..
> mkdir 5.mm.nn-source
> cd 5.mm.nn-source
> lcd /path/to/tar.gz
> put maxima-5.mm.nn.tar.gz
> quit
9.8 Announcements
Post an announcement about every 5.mm.nn release to the Maxima
mailing list. When it seems stable enough (i.e. no immediate plans
to create another release) feel free to announce it in other forums,
e.g. sage-devel.
Since wxMaxima does do a simultaneous release with Maxima and
windows installers containing wxMaxima and maxima are usually
published within hours of the new Maxima release the wxMaxima
developers beg to be informed in advance about the planned release
date. Filing a ticket at http://wxmaxima-developers.github.com/wxmaxima/
or sending the project maintainer an email should be sufficient
for this task.