Merge branch 'master' of ssh://git.code.sf.net/p/maxima/code
[maxima.git] / README.developers-howto
blob1516915e66aaf886fb8ed2a0de6bf47dd6dac52f
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       --  Merge your work onto master and push the changes as in 1.
66   4  Adding / removing a file in maxima/share
68       --  Copy new file / remove old file
69           as you did in 3.
71       --  Add / remove file name in maxima/share/Makefile.am
73       --  Verify that
74           "sh bootstrap; ./configure --enable-foolisp; make; make install"
75           and "run_testsuite();" all succeed
77       --  Merge your work onto master and push the changes as in 1.
80   5.1  Creating a new share package
82        E.g., new package name = my_package
84       -- Naming conventions:
86          write_long_names_like_this, andNotLikeThisPlease,
87          norlikethiseitherthanks
89          spell_out_names, dnt_try_sv_typng_w_abbrvs_tnx
91       -- Create a new directory my_package
93       -- Put Lisp and/or Maxima files in the directory
95          At least one file must be named my_package.lisp or my_package.mac
96          Otherwise load(my_package) fails
98       -- Create texinfo documentation file my_package.texi
99          (PLEASE CREATE DOCUMENTATION, THANK YOU)
101          my_package.texi goes in maxima/doc/info
102          (same as other texinfo files)
104          Use maxima/share/template.texi as a template for my_package.texi
106       -- Create test file rtest_my_package.mac
107          (PLEASE CREATE A TEST FILE, THANK YOU)
109          Test file contains pairs of expressions:
110          input expression, then expected result
112          batch("my_package/rtest_my_package.mac", test);
113          executes the test
116   5.2  Adding a directory in maxima/share
117   
118       --  Create a scratch/development branch as in 1.
120       --  Make the new directory and put the new files in it
122       --  Add the all the files in your new directory and commit this change:
123           git add .
124           git commit -m 'Message' -a
126       --  Put the my_package files on the file list of maxima/share/Makefile.am
128       --  Add my_package to SHARE-SUBDIRS-LIST in maxima/src/init-cl.lisp
130       --  Move my_package.texi to maxima/doc/info
132           Put my_package.texi on the list of files in
133           maxima/doc/info/Makefile.am
135           Put my_package on the list of topics in maxima/doc/info/maxima.texi
136           See instructions in comments at top of maxima/share/template.texi
138       --  Verify that
139           "sh bootstrap; ./configure --enable-foolisp; make; make install"
140           and "run_testsuite();" all succeed
142       --  Commit and push your work as in 1.
145   6  Adding / removing a file in maxima/tests
147       --  Create a scratch/development branch as in 1.
149       --  Copy new file / remove old file
150           and execute "git add" / "git rm"
152       --  Add / remove file name in maxima/tests/Makefile.am
154       --  Add / remove file name in maxima/tests/testsuite.lisp
156       --  Verify that
157           "sh bootstrap; ./configure --enable-foolisp; make; make install"
158           and "run_testsuite();" all succeed
160       --  Commit and push your work as in 1.
163   7  Updating the website
165     See the Git module "site-xml", particularly "README" there.
168   8.1  Backups of Git
170     All you need is the rsync tool and some disk space.
172     Issue the following command:
174     rsync -av 'rsync://maxima.git.sourceforge.net/gitroot/maxima/*' .
177   8.2  Backups of the ML subscribers list
179     You need to be a list admin to do that. Other then that you only
180     need a mail client to send mailman commands to
181     maxima-request@math.utexas.edu
183     The command to get the subscribers list is "who" followed by the
184     list admin password. Sending an empty mail with "who XXX" in the
185     subject line should be enough.
187     I have the following cron.weekly script to do this automatically:
189     | #! /bin/sh
190     | 
191     | su myuser -c "echo end | mail -s \"who password\" maxima-request@math.utexas.edu"
194   8.3  Other Backups
196     Backups of the following stuff would be nice too:
198     - wiki
200     - bug database