GNU Project - GLOBAL / Savannah - GLOBAL

Top page

What's new

Tutorial

License

Links

Plans

Known bugs

Contribution

Mailing lists

Download


Business model

Donation


'Source code reading' related sites


Comparison of source code reading tools

Gtags vs Ctags
We compared ctags vs gtags - see result.
'Comparison with Similar Tools' in the OpenGrok project site
This comparison table compares the function of LXR, ctags, cscope, ViewVC, OpenGrok and, GLOBAL which are typical tools for source code reading.
ctags < cscope < gtags
2 month ago, I thought ctags was totally enough for navigating through c codes. However, problems with ctags ...
Code Spelunking: Exploring Cavernous Code Bases
Code diving through unfamiliar source bases is something we do far more often than write new code from scratch--make sure you have the right gear for the job. (by George V. Neville-Neil)
Greg's source code navigation tools
This page is a log of an investigation he made of source code navigation and analysis packages.
Navigating Linux Source Code
With legacy code or large projects, navigation is a serious concern. Here are some tools that can help you find your way. (by James Bonang)

GLOBAL related articles

C/C++ Development Environment for Emacs
This guide will help you to setup an efficient working C/C++ environment. It includes introduction of ggtags and helm-gtags.
GNU GLOBAL in wikipedia
This is a description page of GNU GLOBAL in wikipedia.
How to read other people's code.
Grep shortcomings, the program intend to read other people's code, you can consider the use like gtags to this tool. gtags GNU GLOBAL source code tag system. (by Chien-Hsing Wang)
Code Browsing with Emacs, GLOBAL, and Speedbar
This article details a simpler solution, using Emacs in combination with GLOBAL and Speedbar for code browsing.
GNU GLOBAL, THE PROGRAMMER'S FRIEND
The reason I shifted to gtags is because ctags is no longer sufficient to me. I have to trace the codes from large volume than last time, and they scatter into many different folders.
Source Code Navigation with VIM
In any case, after trying all the above tools (comment: other tag systems), I settled on gnu global, although it took some work to get it working with VIM and my setup. That's what this post is really about: documenting my usage of VIM and gnu global.
Using rtags ang gtags for coding Ruby
You can use, for example, Exuberant ctags, to parse your Ruby code and then use gtags to navigate it.

GLOBAL related tools

alt-gtags.vim
alt-gtags.vim is a plugin that enables you to use GNU GLOBAL (gtags) in a Vim. if_pyth is required as it is written in Python.
Unite-gtags
unite-gtags is a unite.vim's source. Execute 'global' command and display the result in Unite interface.
ggtags
This package is part of GNU ELPA. The goal is to make working with GNU Global in Emacs as effortless and intuitively as possible.
ajoke
Ajoke is a tool for doing Java programming on Emacs. It is inspired by Emacs-Eclim, but does not depend on Eclipse. Instead, it uses GNU Global and ctags-exuberant extensively, with a bunch of Perl scripts.
Sanaly
Sanaly is a Source code ANALYsis web front end for GNU Global. It can treat source files written in python(.py), shell(.sh), perl(.pl) and ruby(.rb).
Vim's IDE Mode
Videm (Vim's IDE Mode) is a C/C++ IDE based on vim (will become a common IDE framework in future, I think). Videm use Cscope and GNU GLOBAL as symbol database.
Drush utilities for Emacs users
Currently the project provides two new Drush commands:
  • drush etags
  • drush gtags
They will run etags/gtags in your DRUPAL_ROOT and generate tag files for use in Emacs and it will help keep them up to date.
gtags_mwin.vim
Multi windows tag stacked code browsing with global(gtag).
helm-gtags.el
helm-gtags.el is GNU GLOBAL helm interface. helm-gtags.el is not compatible anything-gtags.el. But helm-gtags.el is designed for faster search than anything-gtags.el. Now it suppors TRAMP.
seascope
A pyQt GUI front-end for cscope, idutils and gtags. Written in python using pyQt, QScintilla libraries.
Notepad++
Notepad++ is a free source code editor and Notepad replacement that supports several languages. You can use GLOBAL using its GtagsPlugin.
Scala support for gtags
Basic scala support for gtags is completed. support for scala class/object/trait/function/variable/value definition and other symbols.
jEdit
jEdit is a mature programmer's text editor with hundreds (counting the time developing plug-ins) of person-years of development behind it. GlobalPlugin provides an interface to the GNU Global source tagging tool.
auto-complete.el
Auto Complete Mode is the most intelligent auto-completion extension for GNU Emacs. You can use this mode with GLOBAL.
GNU cflow
GNU cflow analyzes a collection of C source files and prints a graph, charting control flow within the program. You can include this output in your htags hypertext using '--cflow=(cflow's output)'.
OCaml Global Tagger
A plug-in for GNU Global which tags OCaml source code, using CamlP4 for versions 3.10 of OCaml and above. Provides ocaml_tags, which creates tags for ml and mli files, and an ogtags script that wraps a gtags call with the ocaml_tags plug-in.
CEDET
CEDET is a Collection of Emacs Development Environment Tools written with the end goal of creating an advanced development environment in Emacs. The Symbol References tool in CEDET can use GNU GLOBAL as an external tool.
anything-gtags.el
`anything-gtags-select' is `anything' interface of `gtags-find-tag'. `anything-c-source-gtags-select' is a source for `gtags-find-tag'. Replace *GTAGS SELECT* buffer with `anything' interface.
xgtags.el
Xgtags.el provides an interface to the GLOBAL cross-referencing tools. While gtags.el, that comes with the GLOBAL distribution, is more a replacement for emacs' own find-tag/pop-tag-mark facility with some extra stuff, xgtags.el tries to permit the same functionality as gtags.el, but behaves more like xcscope.el, the emacs interface for cscope (http://cscope.sourceforge.net).
Doxygen Release 1.4.3 or higher
Doxygen is a documentation system for C++, Java, IDL and C.
Doxygen Release 1.4.3 includes new configuration option USE_HTAGS. When enabled in combination with SOURCE_BROWSER=YES, the source browser of htags(1) is used instead of doxygen's own. This facility needs GLOBAL-4.8.6 or the later.
Glimmer
Glimmer is a simple code editor for use with just about any programming language, written by Chris Phelps. It supports GLOBAL by Global.py script.
Vim editor
Vim is a vi clone written by Bram Moolenaar. You can use GLOBAL from this editor using gtags.vim (and|or) gtags-cscope.vim script.
Elvis editor
Elvis is a vi clone written by Steve Kirkendall, which has two variables "tagprg" and "tagprgonce" for running an external tag search program. You can use them with GLOBAL.
Emacs
Emacs is the extensible, customizable, self-documenting real-time display editor, written by Richard Stallman. You can use this program as a front end of GLOBAL using gtags.el which is part of the GLOBAL package.
Less
Less is a popular file viewer written by Mark Nudelman. In less-370 or the later, you can use GLOBAL from this tool.
ID utilities
ID utilities is a very powerful token tag system for generic text file. Its index file is very small and searching is very fast. You can call this command from global(1).
Bash
Bash is the shell, or command language interpreter, that will appear in the GNU operating system. You can use bash as a special shell for GLOBAL by Globash which is included in GLOBAL package.
Automake
Automake is a tool for automatically generating `Makefile.in' files compliant with the GNU Coding Standards. Automake supports GLOBAL by its GTAGS target.
FreeBSD build system
FreeBSD adopted GLOBAL as the standard source code tag system in its build system.
In addition to these, there are many forks and related tools of GLOBAL in Github. Please see also Projects which include 'GNU GLOBAL' in its title.

Plug-in parsers for GLOBAL

Pygments Plug-in Parser for GNU GLOBAL
This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

Parsers

cmonste
cmonster is a Python wrapper for the Clang C++ parser.
JFlex
JFlex is a lexical analyzer generator for Java, written in Java. It is also a rewrite of the very useful tool. JLex which was developed by Elliot Berk at Princeton University.
Clang
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages. It includes a single unified parser for the language above.
Semantic
Semantic is an infrastructure for parser based text analysis in Emacs. It is a lexer, parser-generator, and parser. It is written in Emacs Lisp and is customized to the way Emacs thinks about language files, and is optimized to use Emacs' parsing capabilities.
LangScan
LangScan is a library to parse various languages. It is also part of Gonzui source code search engine.
GCC-XML
GCC-XML is a C++ parser, the C++ front-end to GCC, which is currently able to deal with the language in its entirety.
SourceBase
This is a parser library aimed at developers of free IDEs. SourceBase aims to make parsing based features easy to implement. These include intellisense code completion, producing call graphs and dependency trees, etc.

Tools similar to grep

The Silver Searcher - ag
An attempt to make something better than ack, which itself is better than grep. It searches through code about 3x-5x faster than Ack.
grin
A grep program configured the way the author like it, he wrote grin to help himself search directories full of source code. It is written in Python by Robert Kern.
glark
A replacement for (or supplement to) the grep family, glark offers: Perl compatible regular expressions, highlighting of matches, context around matches, complex expressions (``and'' and ``or''), and automatic exclusion of non-text files.
ack
Ack is a tool like grep, optimized for programmers. Designed for programmers with large heterogeneous trees of source code, ack is written purely in portable Perl 5 and takes advantage of the power of Perl's regular expressions.
rak
Rak is a grep replacement in pure Ruby. It accepts Ruby syntax regular expressions and automatically recurses directories, skipping .svn/, .cvs/, pkg/ and more things you don't care about. It is based on the Perl tool ack by Andy Lester.
GNU grep
The grep command searches one or more input files for lines containing a match to a specified pattern. By default, grep prints the matching lines.
GNU GLOBAL
The -g command of global(1) is also one of grep like tools.
  • Hierarchical search
  • Ignoring binary files and dot files automatically.
  • Ignoring specified files by two method (File list, Skip list).
  • POSIX 1003.2 regular expressions (Basic/Extended)
  • High performance literal search.
  • Change of search range (whole project, current directory, source files, text files)
  • Integration with idutils (index search for tokens)
  • Client/Server (TRAMP ready)

Tag commands

hothasktags
Hothasktags generates ctags files for Haskell, with knowledge of import lists and qualified imports. It provides a smart go-to-definition for Vim, that almost always gets it right in the presence of multiple names from different modules.
clang-ctags
Generate tag file for C++ source code using clang and python.
cxxtags
Cxxtags is a tool to tag(index) C/C++ source files based on clang. The major difference from ctags is C++ support. C++ syntax (ex. class, namespace, template, etc.) is supported(not fully yet though). And generated tag file is a sqlite3 database file. So you can access tag information via sqlite3 queries.
rtags
RTags is a client/server application that indexes c/c++ code and keeps a persistent in-memory database of references, declarations, definitions, symbolnames etc. It allows you to find symbols by name (including class and namespace scope). Most importantly we give you proper follow-symbol and find-references support.
jsctags
jsctags is a ctags-compatible code indexing solution for JavaScript. Its interface and output are essentially identical to Exuberant Ctags.
Exuberant Ctags
Exuberant Ctags is a reimplementation of the ctags(1), written by Darren Hiebert. It is very robust in parsing code and supports many languages and many environments.
JTags
JTags is a ctags like program for Java language, written by Claudio Fleiner.
etags
You can create a TAGS file by calling the etags program that comes as a part of the Emacs distribution. Usually, etags is compiled and installed when Emacs is built.

IDEs

Code::Blocks
Code::Blocks is a free C++ IDE built to meet the most demanding needs of its users. It is designed to be very extensible and fully configurable.
CodeLite
CodeLite is an open-source, cross platform IDE for the C/C++ programming languages (build and tested on Windows XP SP3, Windows Vista, Windows 7, Ubuntu 10.04, and Mac OSX 10.5.8).
VCF Builder IDE
The VCF Builder is an advanced development tool for creating C++ applications, and supporting a wide number of plug-ins for enhancing it's functionality.
NetBeans
NetBeans refers to both a platform framework for Java desktop applications, and an integrated development environment (IDE) for developing with Java, JavaScript, PHP, Python, Ruby, Groovy, C, C++, Scala, Clojure, and others.
Eclipse
Eclipse is a multi-language software development environment comprising an integrated development environment (IDE) and an extensible plug-in system.

Source code browsing Tools

Please see also GLOBAL related tools section.
DXR
DXR is a source code cross-reference tool that uses static analysis data collected by instrumented compilers.
Go Oracle
A new tool built atop the static analysis libraries under construction in the go.tools repository. The oracle is designed to answer, quickly and precisely, a range of questions about your Go program, such as "where can this dynamic call dispatch to?" or "who sends values on this channel?".
erlcscope
Erlcscope builds a cscope compatible database for erlang files. The database can be used with any program which supports cscope along with the standard cscope -d command.
Woboq Code Browser
The Woboq Code Browser is a web-based code browser for C/C++ projects.
SourceWeb
SourceWeb is a C/C++ code indexer and a code navigator GUI. The indexer uses Clang's libraries to parse translation units. The output is a binary index file, optimized for fast creation, fast lookup, and small size.
CodeQuery
A code-understanding, code-browsing or code-search tool. This is a tool to index, then query or search C, C++, Java and Python source code. It builds upon the databases of cscope and ctags, and provides a nice GUI tool.
Sourcecolon
Source code search engine based upon OpenGrok. It provide simplified interface to search large scale source code tree.
SrcExpl
SrcExpl (Source Explorer) is a source code explorer that provides context for the currently selected keyword by displaying the function or type definition or declaration in a separate window. This plugin aims to recreate the context window available in the IDE known as "Source Insight".
Code Search
Code Search is a tool for indexing and then performing regular expression searches over large bodies of source code. It is a set of command-line programs written in Go. Binary downloads are available for those who do not have Go installed.
Milkode
It is line-oriented source code search engine and search app. It is possible to find the line containing the desired keyword from the order of several tens of thousands of files instantly.
CodeViz
This project provides the ability to generate call graphs to aid the task of understanding code. It uses a highly modular set of collection methods and can be adapted to support any language although only C and C++ are currently supported. Each collection method has different advantages and disadvantages.
Silent Bob
The SilentBob is yet another indexing tool helping you to find your way through the software source code. Although SilentBob is also able to index sources in many popular programming languages, currently C/C++ is the most functional back-end.
OpenGrok
OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. It can understand various program file formats and version control histories like SCCS, RCS, CVS and Subversion. It is written in Java.
gonzui
Gonzui is a source code search engine for accelerating open source software development. You can use this tool for your local source code.
PHPXref
PHPXref is a developer tool that's designed to ease the process of working on large PHP projects by making it very fast and easy to browse the code documentation along with the code itself.
ncc
ncc is a compiler that produces program analysis information. ncc is a decent replacement of cflow and cscope able to analyse any program using the gcc compiler.
LXR
A general purpose source code indexer and cross-referencer that provides web-based browsing of source code with links to the definition and usage of any identifier. Supports multiple languages.
TagSearch
TagSearch is a command line tool for searching Tags in Exuberant ctags Files. - Search for special tag kind (classes, variable definitions ...) - configurable output format - search case sensitive/insensitive - search for partial or full Match.
Freescope
Freescope is a programmer tool that provides source code browsing on UNIX-like operating systems. It is a clone of the cscope program but has its own unique features such as symbol completion and easy result browsing.
KScope
KScope is a KDE front-end to Cscope. It provides a source-editing environment for large C projects, such as the Linux kernel.
Taglist
The "Tag List" plug-in is a source code browser for the Vim editor. It provides an overview of the structure of source code files and allows you to efficiently browse through source code files in different programming languages.
Cxref
Cxref is a C source code cross referencing and documenting program for UNIX, written by Andrew M. Bishop. Cxref makes both html and latex style document.
Sapid
Sapid (Sophisticated API for software Development) is a CASE tool platform based on Sophisticated Software Repository, by Nagoya University.
Cscope
Cscope is a developer's tool for browsing program code. The cscope code has been released as Open Source by Santa Cruz Operation, Inc. (SCO) under the BSD license.
Cbrowser
Cbrowser is a graphical C/C++ source code searching and browsing tool, and a hierarchical function call viewer, written by Chris Felaco.
Source-Navigator
Source-Navigator is a source code analysis tool by Source-Navigator Team. With it, you can edit your source code, display relationships between classes and functions and members, and display call trees. It is distributed under GPL.
Hypersrc
Hypersrc is a GTK+/GNOME program for browsing source code, written by Jim Brooks. It is distributed under GPL.
ECB(Emacs Code Browser)
ECB is source code browser for Emacs. It is a global minor-mode which displays a couple of windows that can be used to browse directories, files and methods. It supports method parsing for Java, C, C++, Elisp etc.
htmlfontify
Htmlfontify provides a means of converting individual emacs buffers, source files, or entire source trees to html, preserving formatting and emacs colourisation / syntax highlighting as much as possible through careful application of CSS style-sheets and html tags.
GNU Source-highlight
Source-highlight, given a source file, produces a document with syntax highlighting. This package can handle Java, Javascript, C,C+, Prolog, Perl, Php3, Python, Flex, ChangeLog and Ruby as source languages, and HTML, XHTML and ANSI color escape sequences as output formats.

Documentation systems for source code

cldoc
cldoc is a Clang based documentation generator for C and C++. cldoc tries to solve the issue of writing C/C++ software documentation with a modern, non-intrusive and robust approach.
phpDocumentor
phpDocumentor is the world standard auto-documentation tool for PHP. Written in PHP, phpDocumentor can be used directly from the command-line, or through an easy to use web interface.
ROBODoc
ROBODoc is a documentation tool. It extracts specially formatted comment headers from the source file and puts them in a separate file. ROBODoc thus allows you to include the program documentation in the source code and avoid having to maintain two separate documents.
Doxygen
Doxygen is a documentation system for C++, Java, IDL (Corba, Microsoft and KDE-DCOP flavors) and C. You can select output format in HTML, LaTeX, RTF (MS-Word), PostScript, hyperlinked PDF, compressed HTML, and Unix man pages.
Synopsis
Synopsis is a general source code documentation tool. By means of a modular structure it adapts to different styles of embedded documentation, different programming languages and various output formats. It scales well with the size of the project by allowing processing to be controlled by Makefiles.
CWEB
CWEB is a version of WEB for documenting C, C++, and Java programs. WEB was adapted to C by Silvio Levy in 1987, and since then both Knuth and Levy have revised and enhanced the system in many ways, notably to support C++ and ANSI C. Thus CWEB combines TeX with today's most widely used professional programming languages.

Hypertext of source code

The Linux Source Navigator
This is a CGI interface to browse the entire Linux kernel source, written by Ben Walter.
FreeBSD and Linux Kernel Cross-Reference
This site provides experimental source code browsing for the FreeBSD and Linux kernels by Robert Watson, based on the software provided by the LXR Project.
Cross-Referencing Linux
A hypertext presentation of the Linux source code by Arne Georg Gleditsch and Per Kristian Gjermshus using LXR.
UNIX kernel source tour!
This tour contains eight kernels: FreeBSD 7.X, NetBSD 4.X, OpenBSD 4.X, Linux 2.6.X, GNU Hurd 0.3, OpenSolaris, 4.3BSD and UNIX V7(historic UNIX).

UNIX and its clone's Kernel source code

The Unix Heritage Society
Unix Archive contains 5th, 6th and 7th Edition Unix and more. Now, you can use these source code under BSD style license.
CSRG Archive CD-ROMs
Kirk McKusick is selling a 4CD set of all the 4BSD releases from the Computer Systems Research Group. This also includes 1, 2, and 3BSD.
FreeBSD, NetBSD, OpenBSD
*BSD's source code is freely available from their FTP sites, and also available in CD sets. You can get the information from their web site.
The Linux Kernel Archives
This is the primary site for the Linux kernel source, but it has much more than just kernels.
GNU Hurd
The GNU Hurd is the GNU project's replacement for the Unix kernel. You can get the latest Hurd source code via the GNU Project's CVS server.
MINIX 3
MINIX 3 is a new open-source operating system designed to be highly reliable, flexible, and secure. It is loosely based somewhat on previous versions of MINIX, but is fundamentally different in many key ways.
OpenSolaris
OpenSolaris is an open source computer operating system based on Solaris created by Sun Microsystems, now a part of Oracle Corporation.
[Top of page]
Copyright (c) 2000-2013 Tama Communications Corporation
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
[image of the globe]