# HG changeset patch # User adb014 # Date 1161025995 0 # Node ID a67d584e6840aab08c2b3f960ab95ebf4c5b8579 # Parent faf6ae737ecea7254875011b321a214263a6fe63 developers.in is a derived file. It shouldn't be in the CVS diff -r faf6ae737ece -r a67d584e6840 www/developers.in --- a/www/developers.in Mon Oct 16 19:12:13 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,431 +0,0 @@ -__HEADER__([[[Developer's Notes]]]) - -

Contributing Code to the Gnu Octave Repository

- - -

Requirements

-

To contribute your .m files, C++, C, or Fortran code to the GNU Octave -Repository (octave-forge) you need to

- -

The first two requirements are easy but may take a few days. -If you don't already have one, request a SourceForge (SF) account - here. -To register as a developer send a request -to the octave-forge mailing list -octave-dev@lists.sf.net. -Include a bit of information about the code -you plan to submit. -Finally, if your computer runs linux or -FreeBSD, chances are good that both ssh and CVS are already -installed on your system. -If they aren't, -you will need to find prebuilt packages for them or download their -source codes and build them.

- -

Create a SF home directory

-

-If you've never submitted code to a SourceForge project before, -create your home directory by -logging onto the octave-forge account with ssh:

-
-   $ ssh -l sflogin  octave.cvs.sourceforge.net
-   Password:  your SF password
-
-

Although SF will only show you a message-of-the-day screen then log -you out, this process has the useful side effect of creating a home -directory for you if one doesn't already exist. Some CVS commands will fail -if you do not have a home directory on SF.

- -

Download the latest octave-forge distribution

-

CVS expects the -code you plan to submit to reside in a directory within the existing -octave-forge directory structure. -You will therefore need to download a copy of the latest octave-forge -distribution to work in. Change directories to a place you want -to put the code, then issue the CVS checkout -(abreviated as 'co') command:

-
-   $ cd working_directory
-   $ export CVS_RSH=ssh
-   $ cvs -d:ext:sflogin@octave.cvs.sourceforge.net:/cvsroot/octave co octave-forge
-
- -

Where does your code belong?

-

Put your file(s) in a subdirectory under the octave-forge/ -directory. Here are some guidelines to help you decide where your -code belongs:

- - -

Add a copyright notice

-

Each file in octave-forge must contain a copyright notice. -If you wish to release your -code under the -GNU GPL -, insert the following text at the top of your file:

-
-## Copyright (C) year   Your Name   <your@preferred.email>
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
- -

Here are other popular open source licenses:

- -

Consult -opensource.org. -for a comprehensive list of Open Source licenses.

- -

Package structure

-

-Octave has evolved into a source repository is octave pacakges rather -than a package in itself. Each sub-directory is considered to be a -package and should respect Octave's package managers file layout.

-
-
package/NOINSTALL -
This is an optional file, whose presence tells octave-forge - that this package should be ignored. This is typically for - packages that are kept for historical reasons. -
package/DESCRIPTION -
This is a required file containing information about the - package. It must contain the following fields - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name:Name of the package
Version:Version of the package
Date:Date of last update
Author:Original author of the package
Maintainer:Maintainer of the package
Title:A one line description of the package
Description:A one paragraph description of the package
Categories:Optional keyword describing the package - (if no INDEX file is given this is mandatory)
Problems:Optional list of known problems
Url:Optional list of homepages related to the package
Depends:A list of other octave packages that this package - depends on. This can include dependencies on particular - versions, which a format. -
-	Depends: package (>= 1.0.0)
-
- Possible operators are <, <=, ==, >= or >. If the part - of the dependency in () is missing, any version of the - package is acceptable. Multiple dependencies can be - defined either as a comma separated list or on separate - Depends lines.
License:An optional short description of the used license - (e.g. GPL version 2 or newer). This is optional - since the file COPYING is mandatory.
SystemRequirements:These are the external install dependencies of the package - and are not checked by the package manager. This is here as a - hint to the distribution packager. They follows the same - conventions as the Depends keyword.
BuildRequires:These are the external build dependencies of the package - and are not checked by the package manager. This is here as - a hint to the distribution packager. They follows the same - conventions as the Depends keyword. Note that in - general, packaging systems such as rpm or deb and - autoprobe the install dependencies from the build - dependencies, and therefore the often a BuildRequires - dependency removes the need for a SystemRequirements - dependency.
- The file format should be something like this: -

- - The developer is free to add additional arguments to the - DESCRIPTION file for their own purposes. Note that - octave-forge contains an automatic build process of RPMs and - DEBs from the octave packages, and this relies on the - DESCRIPTION files being correctly formatted. One further - detail to aid the packager is that the SystemRequirments and - BuildRequires keywords can have distribution dependent - section, and the automatic build process will use these. An - example of the format of this is -
-	BuildRequires: libtermcap-devel [Mandriva] libtermcap2-devel
-
- where the first package name will be used as a default and if - the RPMs are built on a Mandriva distribution, then the second - package name will be used instead. -
package/COPYING -
This is a required file containing the license of the package. -
package/INDEX -
This is an optional file describing the functions provided by - the package. If this file is not given then one with be - created automatically from the functions in the package and - the Categories keyword. -
package/PKG_ADD -
An optional file that includes commands that are run when the - package is added to the users path. Note that PKG_ADD - directives in the source code of the package will also be - added to this file by the octave package manager. Note that - symbolic links are to be avoided in packages, as symbolic - links do not exist on some file systems, and so a typical use - for this file is the replacement of the symbolic link -

-ln -s foo.oct bar.oct
-
- with an autoload directive like -

-autoload ('bar', which ('foo'));
-
-
package/PKG_DEL -
An optional file that includes commands that are run when the - package is removed from the users path. Note that PKG_DEL - directives in the source code of the package will also be - added to this file by the octave package manager. -
package/Makefile -
This is an optional file that is for the use of Octave-Forge - only. It allows the developer to have fine control over - exactly what is included in the package and anything that - needs to be done before or after the package is built. The - default Makefile is -
-
-include ../../Makeconf
-include ../../pkg.mk
-
-PKG_FILES = COPYING DESCRIPTION $(wildcard INDEX) $(wildcard PKG_ADD) \
-	$(wildcard PKG_DEL) $(wildcard post_install.m) \
-	$(wildcard pre_install.m)  $(wildcard on_uninstall.m) \
-	$(wildcard inst/*) $(wildcard src/*) $(wildcard doc/*) \
-	$(wildcard bin/*)
-
-pre-pkg/%::
-	# Do nothing prior to packaging
-
-post-pkg/%::
-	# Do nothing post packaging
-
-
- which packages all of the required and existing optional files - and directories discussed here. -
package/pre_install.m -
This is an optional script that is run prior to the - installation of a package. -
package/post_install.m -
This is an optional script that is run after the - installation of a package. -
package/on_uninstall.m -
This is an optional script that is run prior to the - de-installation of a package. -
package/doc -
An optional directory containing documentation for the - package. The files in this directory will be directly - installed in a sub-directory of the installed package for - future reference. Note that any html files included in this - directory will be included in the octave-forge package - webpages. To include images or arbitrary files use a - sub-directory html/ in this directory. -
package/inst -
An optional directory containing any files that are directly - installed by package. Typically this will include any m-files. -
package/bin -
An optional directory containing files that will be added to - the Octave EXEC_PATH when the package is loaded. This might - contain external scripts, etc, called by functions within the - package. -
package/src -
An optional directory containing code that must be 'built' prior - to the packages installation. If this directory contains a - file autogen.sh, and package/Makefile does not exist, this - script will be called prior to the packaging. The Octave - package manager will execute "./configure" in this directory - is this script exists, and will then call "make" if a file - "Makefile" exists in this directory. "make install" will - however not be called. If a file called "files" exist all - files listed there will be copied to the "inst" directory, so - they also will be installed. If the "src/files" file doesn't - exist "src/*.m" and "src/*.oct" will be copied to - "inst". There are two reasons for doing this rather than "make - install": - -
- -

Submit your code!

-

You are now ready to upload your code to the Gnu Octave Repository. -Do this with two CVS commands--one to add a new -entry for your file in the octave-forge catalog, and a second command -to actually upload the file:

-
-   $ cvs add files
-   $ cvs commit files
-
-

After hitting the carriage return at the end of the commit command, -CVS will open your default editor so that you can enter comments about -the commit. The first time you commit a file the comment might be -something as simple as `Initial commit into CVS.' However, for all -subsequent commits please add meaningful comments that explain why -changes were made to the file since all comments will appear in the -changelog. Try to gather related changes into one commit command.

- -

Aside: the default editor can be defined like so:

-
-   $ export EDITOR=vim
-
- -

If you are uploading an entire package, then put your directory into the -octave-forge tree and do the following:

-
-   $ cd octave-forge/main
-   $ cvs add package
-   $ cvs commit package
-   $ cd package
-   $ cvs add *
-   $ cvs commit *
-
- -

You may find it easier to use the import command, especially if your -package contains subdirectories. In this case, you should not put -your directory into the octave-forge tree. Instead, change to the -root of your package tree and enter the following:

-
-   $ cd package
-   $ cvs -d:ext:sflogin@octave.cvs.sourceforge.net:/cvsroot/octave import \
-     -m "package name" octave-forge/main/package sflogin start
-
- -

You can then fetch the new package from octave-forge as follows:

-
-   $ cd octave-forge
-   $ cvs -q update -d
-
- -

From time to time, you will need to synchronize with CVS:

-
-   $ cd octave-forge
-   $ cvs -q update -d
-
-

Each file will be listed with one of the following codes:

- - -

Learn more about CVS

-

The few CVS commands shown here just scratch the surface of this -powerful versioning package. If you become an active contributor -you will benefit from learning more CVS commands and understanding -how CVS works. -The - -CVS Book is a great place to begin your exploration.

- -

Join the developers' mailing list

-

Finally, consider joining the octave-forge developer's - -mailing list. It is very low traffic. It is used to announce -pending releases of octave-forge and discuss issues related to -working with octave-forge. Discussion of the functions in -octave-forge mostly occurs on the primary octave mailing lists.

- -__TRAILER__