DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Untracked file

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
This INSTALL file is customized for the version of lxr used by 
mozilla.org. The original version can be found at

In order to install LXR, you will need:

 - Perl version 5 or later.
 - A webserver with cgi-script capabilities.

and optionally, to enable the freetext search queries:

 - Glimpse 

If you don't have Perl installed, get it from

If you need a webserver, take a look at Apache at

If you want Glimpse and the freetext searching facilities, visit

LXR has so far been tested on the GNU/Linux operating system using the
Apache webserver.  Other unix-like operating systems and decently
featured webservers should do as well.

To install LXR itself:

 - Retrieve the lxr source via anonymous cvs from mozilla.org's
   server from mozilla/webtools/lxr. Find out about anonymous
   cvs at mozilla.org at http://www.mozilla.org/cvs.html

 - Edit lxr.conf to fit your source code installations and needs.

 - Make sure the files in http can be reached via your webserver.  
   Make sure your webserver executes the files search, source, ident 
   and diff as cgi-scripts.  With the Apache webserver this can be 
   accomplished by making .htaccess contain the following lines:

       <Files ~ (search|source|ident|diff)$>
       SetHandler cgi-script

   You may also need to edit these Apache config files appropriately
            AddHandler cgi-script .cgi

            Options <whatever> # setting to all will work
            AllowOverride Options

   Its also recommended to set up a robots.txt file on your server to
   discourage robots from traversing your source tree and performing
   an identifier lookup for each identifier in your code. This will
   take up a lot of cpu time and probably several gigabytes of files.

 - Generate the identifier database.  Go to the directory you
   configured as "dbdir" in lxr.conf and do "genxref foo", where foo 
   is the subdirectory containing the actual source code.

 - (Optional) Generate the Glimpse database.  Go to the directory you
   configured as "dbdir" in lxr.conf and do "glimpseindex -H . foo", 
   where foo is the same as above.  You might want to add other options 
   to the commandline (e.g. "-n"), see the Glimpse documentation for details.

If it doesn't work:

 - Make sure all the permissions are right.  Remember that the
   webserver needs to be able to access most of them.

 - Check that all the Perl scripts find their library files, also when
   executed by the webserver.

Multiple Trees

 To have the same lxr source directory index multiple trees, use
 a web server (such as apache) that supports virtual hosts and/or
 aliases. At mozilla.org, we set the document root of lxr.mozilla.org
 to the lxr/root directory and for each tree, set up an alias with
 the tree name pointing to the main lxr directory. 

 From our httpd.conf:
        DocumentRoot /opt/webtools/lxr.mozilla.org/root
        ServerName lxr.mozilla.org
        Alias /classic /opt/webtools/lxr.mozilla.org
        Alias /ef /opt/webtools/lxr.mozilla.org
        Alias /grendel /opt/webtools/lxr.mozilla.org
        Alias /mailnews /opt/webtools/lxr.mozilla.org
        Alias /mozilla /opt/webtools/lxr.mozilla.org
        Alias /nspr /opt/webtools/lxr.mozilla.org
        Alias /seamonkey /opt/webtools/lxr.mozilla.org

The lxr.conf file:

 LXR does not care much about your directory structure, all relevant
 paths can be configured from the lxr.conf file. This file is located
 in the same directory as the perl script files.

 LXR recognizes the following options in the configuration file. 

  The url for the root directory of your source. Tree name (if any) 
  is appended to this.

  The header of all html files. This is a template that
  contains mainly html code but it can also contain some special
  directives, these are documented below.

  A special version of htmlhead used for source code listings.

  A special version of htmlhead used for directory listings.

  Template for bottom of pages.

  Template file for the directory listings.

  The root directory of the source to be indexed. If you're indexing
  several version you could include a variable in the path.
      sourceroot: /usr/local/lxr/source/$v/linux/

  To index more than one tree, include one sourceroot entry for 
  each tree. Each entry is a tree name/directory pair.
      sourceroot: classic /export2/lxr-data/classic/mozilla

  This is prepended to the path name when forming the url in links.

  If bonsai is set up for your code then set this as the url prefix. If not,
  then remove the bonsai related code in the htmlhead file and ignore this.
  More info on bonsai can be found at http://www.mozilla.org/bonsai.html

  The name of the root (more....)

  Where to find source specific include files.

  Where to find the database files that lxr needs (fileidx xref and 
  the glimpse files). The tree name (if any) is appended to this.

  Location of the glimpse binary on your system.

  This defines a variable that can be used in templates and
  the config file. The syntax is 
    variable: <name>, <text>, <values>, <default>
  <name> is the name of the variable, <text> is a textual description,
  <values> are the possible values of the variable.
  <default> is the default value of the variable.

  The <values> field can either be a list starting with a "(" and
  ending with a ")", with elements separated with ",", or it can be 
  [ <filename> ]. In this case the values are read from a file with
  one value on each line.
  # Define typed variable "v", read valueset from file.
  variable: v, Version, [/local/lxr/source/versions], [/local/lxr/source/defversion]

  # Define typed variable "a".  First value is default.
  variable: a, Architecture, (i386, alpha, m68k, mips, ppc, sparc, sparc64)

 map - This makes it possible to rewrite directories using variables. 
  The linux sourcecode for instance contains several different
  architectures, the include files for each of these are found in the
  directory /include/asm-<architecture>/. To remap each of these
  according to a variable $a you can specify
    map: /include/asm[^\/]*/ /include/asm-$a/
  Find creative uses for this option :-)