Fixes a bug in plotdf: When one of the points in the arrows grid happened
[maxima.git] / README.developers-howto
blob18570402240bafd74d52da2e40c698aaaa2f39e9
1   Maxima project Git / build system HOWTO
4   1  General
6       Makefile.am is the file to modify, NOT Makefile
7       (Makefile is generated automatically from Makefile.am)
9       "make install" catches Makefile problems
10       that are not detected by "make" alone
12       Adding / removing files often leads to Makefile problems
14       To update your repository, execute
15       git pull  # assuming origin/master points to the SF Maxima repo
17       Workflow with Git:
18       git pull                      # update your repo
19       git checkout master           # work off master
20       git checkout -b scratch-pad   # create a working branch
21       <do development, tests, commits, then, once satisfied...>
22       git checkout master           # put yourself on master branch
23       git pull                      # update your repo, again
24       git merge scratch-pad         # merge development work into master
25       git push origin master        # push to SF Maxima repo
27       BE SURE NOT TO PUSH YOUR SCRATCH-PAD!
29   2  Renaming something in Git
31       --  Create a scratch/development branch as in 1.
32   
33       --  git mv X Y
34           This moves X to Y and preserves the history.
35           Like any other change, this needs to be committed
36           as a separate step.
38   3  Adding / removing a file in maxima/src
40       --  Create a scratch/development branch as in 1.
41   
42       --  Add new file X, then execute
43           git add X; git commit -m 'Message' -- X
45       --  Remove old file X
46           git rm X
47           Then execute "git commit" as above
49       --  Add / remove file name from maxima/src/Makefile.am
51       --  Add / remove file name from maxima/src/*-depends.mk
53           NOTE: There are several *-depends.mk files. These are
54           theoretically updated automatically but to the best
55           of my knowledge it is necessary to fix them by hand.
57       --  Add / remove file name in maxima/src/maxima.system
59       --  Verify that
60           "sh bootstrap; ./configure --enable-foolisp; make; make install"
61           and "run_testsuite();" all succeed
63       --  If the change affects the plotting routines: Verify that
64           tests/testbench_draw_manual.wxm still holds the right
65           results.
66           
67       --  Merge your work onto master and push the changes as in 1.
70   4  Adding / removing a file in maxima/share
72       --  Copy new file / remove old file
73           as you did in 3.
75       --  Add / remove file name in maxima/share/Makefile.am
77       --  Verify that
78           "sh bootstrap; ./configure --enable-foolisp; make; make install"
79           and "run_testsuite();" all succeed
81       --  If the change affects the plotting routines: Verify that
82           tests/testbench_draw_manual.wxm still holds the right
83           results.
84           
85       --  Merge your work onto master and push the changes as in 1.
88   5.1  Creating a new share package
90        E.g., new package name = my_package
92       -- Naming conventions:
94          write_long_names_like_this, andNotLikeThisPlease,
95          norlikethiseitherthanks
97          spell_out_names, dnt_try_sv_typng_w_abbrvs_tnx
99       -- Create a new directory my_package
101       -- Put Lisp and/or Maxima files in the directory
103          At least one file must be named my_package.lisp or my_package.mac
104          Otherwise load(my_package) fails
106       -- Create texinfo documentation file my_package.texi
107          (PLEASE CREATE DOCUMENTATION, THANK YOU)
109          my_package.texi goes in maxima/doc/info
110          (same as other texinfo files)
112          Use maxima/share/template.texi as a template for my_package.texi
114       -- Create test file rtest_my_package.mac
115          (PLEASE CREATE A TEST FILE, THANK YOU)
117          Test file contains pairs of expressions:
118          input expression, then expected result
120          batch("my_package/rtest_my_package.mac", test);
121          executes the test
124   5.2  Adding a directory in maxima/share
125   
126       --  Create a scratch/development branch as in 1.
128       --  Make the new directory and put the new files in it
130       --  Add the all the files in your new directory and commit this change:
131           git add .
132           git commit -m 'Message' -a
134       --  Put the my_package files on the file list of maxima/share/Makefile.am
136       --  Add my_package to SHARE-SUBDIRS-LIST in maxima/src/init-cl.lisp
138       --  Move my_package.texi to maxima/doc/info
140           Put my_package.texi on the list of files in
141           maxima/doc/info/Makefile.am
143           Put my_package on the list of topics in maxima/doc/info/maxima.texi
144           See instructions in comments at top of maxima/share/template.texi
146       --  Verify that
147           "sh bootstrap; ./configure --enable-foolisp; make; make install"
148           and "run_testsuite();" all succeed
150       --  Commit and push your work as in 1.
153   6  Adding / removing a file in maxima/tests
155       --  Create a scratch/development branch as in 1.
157       --  Copy new file / remove old file
158           and execute "git add" / "git rm"
160       --  Add / remove file name in maxima/tests/Makefile.am
162       --  Add / remove file name in maxima/tests/testsuite.lisp
164       --  Verify that
165           "sh bootstrap; ./configure --enable-foolisp; make; make install"
166           and "run_testsuite();" all succeed
168       --  Commit and push your work as in 1.
171   7  Updating the website
173     See the Git repository "website", particularly "README.md" there.
176   8.1  Backups of Git
178     All you need is the rsync tool and some disk space.
180     Issue the following command:
182     rsync -av 'rsync://maxima.git.sourceforge.net/gitroot/maxima/*' .
185   8.2  Backups of the ML subscribers list
187     You need to be a list admin to do that. Other then that you only
188     need a mail client to send mailman commands to
189     maxima-request@math.utexas.edu
191     The command to get the subscribers list is "who" followed by the
192     list admin password. Sending an empty mail with "who XXX" in the
193     subject line should be enough.
195     I have the following cron.weekly script to do this automatically:
197     | #! /bin/sh
198     | 
199     | su myuser -c "echo end | mail -s \"who password\" maxima-request@math.utexas.edu"
202   8.3  Other Backups
204     Backups of the following stuff would be nice too:
206     - wiki
208     - bug database
211   9  Releases
213   9.1  Release policies
215     Releases are prepared (nominally) three times a year, on April 1,
216     August 1, and December 1. Releases simply package whatever seems
217     stable at that time.
219     It is the responsibility of developers (not the release
220     administrator) to copy bug fixes from the release branch to master
221     or vice versa (it doesn't matter whether bug fixes are introduced
222     on one branch or the other).
224     I don't recommend major changes on a release branch, but there is
225     really nothing to stop it. As always I'll appeal to good judgement.
227     If I've forgotten some step, please add it to this document.
229   9.2  Release numbering
231     The first release on the 5.mm release branch is 5.mm.0, the second
232     is 5.mm.1, third 5.mm.2, etc. The highest number on the branch is
233     the "best" or, at least, the most committed-to version. There is no
234     release candidate numbering.
236     The version major number has been 5 for many years. If you feel like
237     changing it to, say, 6, well, there's nothing to stop you.
239   9.3  Changelog
241     The changelog for 5.mm is named ChangeLog-5.mm.md (the suffix .md
242     indicating that it is in so-called "markdown" format). To obtain the
243     raw material for the changelog:
245     $ git log branch-5.${mm-1}-base..HEAD
247     Use the git-log output as the basis for ChangeLog-5.mm.md. Use your
248     best judgement as to what to include; the git-log output is
249     typically much, much larger than the changelog. Look at previous
250     changelogs to see the markdown format and organization.
252     Commit ChangeLog-5.mm.md to master. Don't forget to add it to 
253     the top level "Makefile.am" so that it will be included in the
254     release tarball.
256   9.4  Git commands for releases
258     Release versions live on a branch named branch-5_mm, and are tagged
259     5.mm.0, 5.mm.1, 5.mm.2, etc. The Git tag must be the same as the
260     version number declared to autoconf.
262     $ git checkout master
263     $ git tag -a branch-5_mm-base
264     $ git push --tags origin master
265     $ git checkout -b branch-5_mm
266     $ <edit configure.ac to set version number to 5.mm.0>
267     $ git add configure.ac && git commit
268     $ git tag -a 5.mm.0
270     <at this point, verify that you can build packages BEFORE you push>
272     $ git push --tags origin branch-5_mm-base
273     $ git checkout master
274     $ <edit configure.ac to set version number to 5.${mm-1}post>
275     $ git add configure.ac && git commit
276     $ git push origin master
278     Repeat 5.mm.0 stuff (edit configure.ac and tag) for 5.mm.1, 2, 3, ....
280     To copy bug fixes from one branch to another:
282     $ git cherry-pick -x <commit hash>
284   9.5  Building a release
286     $ git checkout branch-5_mm
287     $ sh bootstrap
288     $ ./configure
289     $ make dist-gzip
291     At this point you now have maxima-5.mm.nn.tar.gz.
292     
293     Binaries for Linux are created by RPM. It can be argued that Debian
294     packages would be more widely useful. Feel free to create Debian
295     packages instead of RPMs. If, in addition, you can create MacOS 
296     binaries, so much the better.
298     I'll assume you know how to build stuff with RPM. Copy the tar.gz
299     to <path to rpm build tree>/SOURCES/. Then:
301     $ rpmbuild -ba maxima.spec
303   9.6  Uploading files
305     $ sftp mysfusername,maxima@frs.sourceforge.net
306     > cd /home/frs/project/m/ma/maxima
307     > cd Maxima-Linux
308     > mkdir 5.mm.nn-Linux
309     > cd 5.mm.nn-Linux
310     > lcd /path/to/rpms
311     > put maxima-*5.mm.nn*.rpm
312     > cd ..
313     > mkdir 5.mm.nn-source
314     > cd 5.mm.nn-source
315     > lcd /path/to/tar.gz
316     > put maxima-5.mm.nn.tar.gz
317     > quit
319   9.7  Announcements
321     Post an announcement about every 5.mm.nn release to the Maxima
322     mailing list. When it seems stable enough (i.e. no immediate plans
323     to create another release) feel free to announce it in other forums,
324     e.g. sage-devel.
326     Since wxMaxima does do a simultaneous release with maxima and
327     windows installers containing wxMaxima and maxima are usually
328     published within hours of the new maxima release the wxMaxima
329     developers beg to be informed in advance about the planned release
330     date. Filing a ticket at http://andrejv.github.com/wxmaxima/
331     or sending the project maintainer an email should be sufficient
332     for this task.