123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- These notes intend to help people working on the checked-out sources.
- They don't apply when you are building from a distribution tarball.
- If you want to submit a patch, please start from checked-out sources
- rather than the source tarball.
- Prerequisites
- =============
- * git (to check out both findutils and gnulib).
- * A C compiler, linker and software development libraries (the standard
- C library). Any compiler compliant with the 1990 ISO C standard running
- on a POSIX system should work.
- * GNU Autoconf
- * GNU Automake
- * GNU m4
- * GNU gettext
- * GNU Dejagnu
- Dejagnu is in fact optional, but it's strongly recommended, since it is
- needed to run findutils' test suite (which is how you know that find
- works once it is built on your system).
- The configure program should tell you if you try to use a version of
- one of these tools which is not of a recent enough version. The file
- tool-versions.txt indicates which version of each tool the current
- release was built and tested with. This is included in the tar-file
- releases, but it's not checked in to git.
- Use the latest upstream sources
- ===============================
- 1. Check out the findutils code
- git clone git://git.sv.gnu.org/findutils
- This will download the whole repository, it's about 16MB once fetched.
- If you already have a copy you can refresh it with:
- git checkout master (to switch to your copy of the master branch)
- git pull (to collect and merge changes)
- 2. Generate a gnulib installation within the findutils source tree
- Change your working directory to the findutils source directory (that
- is, the directory containing this file). Then run the following
- command:-
- ./bootstrap
- This command will use git to check out the version of gnulib which is
- intended to work with the findutils source you already have (gnulib
- is used as a git submodule). The gnulib code itself is left in the
- directory "gnulib". The "gl" directory contains just the gnulib
- files that findutils needs during the build process.
- This will also run Autoconf and Automake to generate the "configure"
- script and "Makefile.in" files.
- 3. Run "./configure" and "make" in the normal way.
- If you have GNU libintl installed, you can just run "./configure".
- Otherwise, run "./configure --disable-nls".
- You are now at the point where your local directory looks just like it
- would after building a source release, except that your copy is more
- up-to-date.
- *Before* you commit changes
- ===========================
- In this project, we much prefer patches that automatically record
- authorship. That is important not just to give credit where due, but
- also from a legal standpoint (see below). To create author-annotated
- patches with git, you must first tell git who you are. That information
- is best recorded in your ~/.gitconfig file. Edit that file, creating
- it if needed, and put your name and email address in place of these
- example values:
- [user]
- name = Joe X. User
- email = joe.user@example.com
- Required format for check-in messages
- =====================================
- We use a specific style for check-in messages. See "git log" for
- examples. The format corresponds to the standard GNU ChangeLog
- format, but without date & author headers (since git provides this
- data) and without a left margin (since there are no headers).
- --- example begins ---
- Don't overflow sig_atomic_t for --max-procs.
- * xargs/xargs.c (__STDC_LIMIT_MACROS): Define __STDC_LIMIT_MACROS
- in order to ensure that <stdint.h> defines the SIG_ATOMIC_MAX
- macro, which we need.
- (MAX_PROC_MAX): Define this as the maximum allowed value of
- proc_max.
- (main): Show the value of MAX_PROC_MAX for --show-limits.
- (increment_proc_max): Don't increment proc_max beyond
- MAX_PROC_MAX.
- --- example ends ---
- There are several things to notice about this checkin message. Most
- importantly, it begins with a single line summary of the whole change.
- This needs to be short. It would be used as the subject line of
- patches mailed by "git send-email". Some people begin that line with
- a one-word tag indicating what is affected (for example find: for
- changes to find, doc: to changes to the documentation, maint: for
- changes to the maintainer automation and so forth).
- All changes to a file are grouped together in an entry which begins with
- an asterisk (*) and the file name. The name of the modified function
- (if any) follows immediately in parentheses followed by a colon. If
- you're modifying a file for which "function" isn't the logical unit of
- organisation, use whatever seems most useful. For example when
- modifying the Texinfo source, use the section name.
- After the colon, describe the change you made to that function. If
- you made a related change mention the places you made that change,
- too. If you made many individually small changes, you can summarise
- these if they're not individually interesting. For example you could
- just say "Update all callers to remove this function argument". If
- that change spans several files, mention the other files modified.
- Note for maintainers:
- Prior to pushing a commit in the name of someone else to the public
- Git repository, please check if that person has undergone the
- "Copyright assignment" process for GNU findutils described below, or -
- in case of a trivial change (<10 lines, cumulatively with all their
- previous contributions) - document that such paperwork is not required
- by adding this line to the commit message:
- Copyright-paperwork-exempt: Yes
- Making commits locally
- ======================
- You will normally find it much easier to work on a branch. This
- allows you to maintain your changes and test them without being
- affected by changes on the trunk.
- To Make a "topic" branch for your change, do this:
- git branch my-topic
- git checkout my-topic
- You can then work on your branch as normal.
- To update your local repository, do this:
- git checkout master
- git pull
- Then, rebase your topic branch to take into account the upstream
- changes you just pulled:
- git checkout my-topic
- git rebase master
- There are some useful checks that git commit hooks will do for you,
- it's a good idea to enable these:
- mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
- Submitting patches
- ==================
- If you plan to submit changes to findutils, please make sure you have
- read the GNU coding standard (https://www.gnu.org/prep/standards/).
- Some common things you might have forgotten to do are:
- - document your change in both the manual pages and the Texinfo file
- - re-run the test suite (with Dejagnu installed!)
- - add a test case for the bug you're fixing or feature you're adding
- - mention your fix or change (if it's significant) in the NEWS file
- - commit using a descriptive commit message
- If you have patches, please generate them with "git format-patch" and
- mail them to these addresses:
- bug-findutils@gnu.org, findutils-patches@gnu.org
- Here is a complete session
- # set up your topic branch
- git checkout master
- git pull
- git branch my-topic
- git checkout my-topic
- # update the code, documentation, test suite and change log, run tests
- emacs xargs/xargs.c
- emacs doc/find.texi xargs/xargs.1
- emacs xargs/testsuite/Makefile.am xargs/testsuite/xargs.gnu/blah.exp
- make check
- emacs NEWS
- # make sure you didn't break anything
- make syntax-check
- make distcheck
- # commit the change and send the patches.
- git add -u
- git commit
- git rebase master
- mkdir /tmp/patches
- git format-patch -o /tmp/patches master..HEAD
- git send-email --compose \
- --to bug-findutils@gnu.org \
- --cc findutils-patches@gnu.org /tmp/patches
- Copyright assignment
- ====================
- If your change is significant (i.e., if it adds more than ~10 lines),
- then you'll have to have a copyright assignment on file with the FSF.
- Since that involves first an email exchange between you and the FSF,
- and then the exchange (FSF to you, then back) of an actual sheet of
- paper with your signature on it, and finally, some administrative
- processing in Boston, the process can take a few weeks (for
- contributors in some geographies, this can all be done electronically,
- saving a lot of time).
- The forms to choose from are in gnulib's doc/Copyright/ directory.
- If you want to assign a single change, you should use the file,
- doc/Copyright/request-assign.changes:
- https://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=doc/Copyright/request-assign.changes;hb=HEAD
- If you would like to assign past and future contributions to a project,
- you'd use doc/Copyright/request-assign.future:
- https://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=doc/Copyright/request-assign.future;hb=HEAD
- You may make assignments for up to four projects at a time.
- In case you're wondering why we bother with all of this, read this:
- https://www.gnu.org/licenses/why-assign.html
- ========================================================================
- Copyright (C) 2009-2021 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the ``GNU Free Documentation
- License'' file as part of this distribution.
|