[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < ] | [ Up : Programming work ] | [ > ] |
10.4 Finding functions
When making changes or fixing bugs in LilyPond, one of the initial challenges is finding out where in the code tree the functions to be modified live. With nearly 3000 files in the source tree, trial-and-error searching is generally ineffective. This section describes a process for finding interesting code.
[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < Finding functions ] | [ Up : Finding functions ] | [ > ] |
10.4.1 Using the ROADMAP
The file ROADMAP is located in the main directory of the lilypond source. ROADMAP lists all of the directories in the LilyPond source tree, along with a brief description of the kind of files found in each directory. This can be a very helpful tool for deciding which directories to search when looking for a function.
[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < ] | [ Up : Finding functions ] | [ > ] |
10.4.2 Using grep to search
Having identified a likely subdirectory to search, the grep utility can be used to search for a function name. The format of the grep command is
grep -i functionName subdirectory/*
This command will search all the contents of the directory subdirectory/
and display every line in any of the files that contains
functionName. The ‘-i’ option makes grep
ignore
case – this can be very useful if you are not yet familiar with
our capitalization conventions.
The most likely directories to grep for function names are ‘scm/’ for scheme files, ly/ for lilypond input (‘*.ly’) files, and ‘lily/’ for C++ files.
[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < ] | [ Up : Finding functions ] | [ > ] |
10.4.3 Using git grep to search
If you have used git to obtain the source, you have access to a powerful tool to search for functions. The command:
git grep functionName
will search through all of the files that are present in the git
repository looking for functionName. It also presents the results
of the search using less
, so the results are displayed one page
at a time.
[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < ] | [ Up : Finding functions ] | [ > ] |
10.4.4 Using TAGS support
Many programs, including Emacs, ex, vi, and less, provide the ability to jump directly to the definition of an identifier based on precomputed cross-reference data. This data is usually contained in files named ‘TAGS’, for Emacs, or ‘tags’, for vi and other programs.
To generate these cross-reference data files the source code must
be installed, but it is not necessary to compile LilyPond. Follow
the instructions found in
Getting the source code
through ‘Checking build dependencies’. Once the
configure
command has run successfully, invoke the
following command in the ‘build’ directory.
make TAGS
This will create both ‘TAGS’ and ‘tags’ files in the source directory tree. To enable and use tags in a particular program, see the associated program documentation.
[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < ] | [ Up : Finding functions ] | [ Code style > ] |
10.4.5 Searching on the git repository at GitLab and Savannah
GitLab’s web interface provides a built-in search.
- Go to https://gitlab.com/lilypond/lilypond/
- Type functionName in the search box on the top, and hit enter/return
Alternatively you can also use the equivalent of git grep on the Savannah server.
- Go to https://git.sv.gnu.org/gitweb/?p=lilypond.git
- In the pulldown box that says commit, select grep.
- Type functionName in the search box, and hit enter/return
This will initiate a search of the remote git repository.
[ << Programming work ] | [Top][Contents] | [ Release work >> ] |
[ < ] | [ Up : Finding functions ] | [ Code style > ] |