From sacadmin Mon Dec 22 07:28:11 2008
Received: from dm-east-01.east.sun.com (dm-east-01.East.Sun.COM [129.148.9.192])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBMFSA6L022199
	for <LSARC@sac.sfbay.sun.com>; Mon, 22 Dec 2008 07:28:10 -0800 (PST)
Received: from [129.148.9.185] (sr1-ubur-27.East.Sun.COM [129.148.9.185])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id mBMFS8GX041876;
	Mon, 22 Dec 2008 10:28:09 -0500 (EST)
Message-ID: <494FB208.4020803@sun.com>
Date: Mon, 22 Dec 2008 10:28:08 -0500
From: Brian Utterback <brian.utterback@sun.com>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
MIME-Version: 1.0
To: LSARC@sac.sfbay.sun.com, lsarc-ext@sun.com
CC: Thomas Preisler <Thomas.Preisler@sun.com>
Subject: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
Content-Type: multipart/mixed;
 boundary="------------090207090502090001000206"
Status: RO
Content-Length: 73597

This is a multi-part message in MIME format.
--------------090207090502090001000206
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

I am submitting this fastrack on behalf of Thomas Preisler.

Exposure is open.

Template Version: @(#)sac_nextcase %I% %G% SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
     1.1. Project/Component Working Name:
	 Exuberant CTags
     1.2. Name of Document Author/Supplier:
	 Author:  Brian Utterback
     1.3  Date of This Document:
	22 December, 2008
4. Technical Description

Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
program. It generates an index of source code object definitions which 
is used by a number of editors and tools to instantly locate the 
definitions. Exuberant Ctags currently supports the following languages:
   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
   Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
   PHP, PL/SQL, Python, REXX, Ruby, Scheme,
   Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
   Verilog, Vim, and YACC.

This project proposes to deliver the ctags binary from the Exuberant 
CTags FOSS project renamed to exctags to avoid conflict with the 
existing ctags binary currently delivered as part of the SUNWtoo 
programming tools package. This follows the already established 
convention used by other platforms.

The FOSSchecklist and man page are enclosed for review.

A minor/patch binding is requested.
-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

--------------090207090502090001000206
Content-Type: text/plain;
 name="FOSS_Checklist.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="FOSS_Checklist.txt"

FCL--FOSS Check List
1.0 Project Information
1.1 Name of project/component
  Exuberant Ctags Packaging for OpenSolaris

1.2 Author of document
  Thomas Preisler

2.0 Project Summary
  2.1 Project Description
  Package current version (5.7) of Exuberant CTags release.

  Exuberant Ctags is a multilanguage reimplementation of the Unix
  ctags program. It generates an index of source code object definitions
  which is used by a number of editors and tools to instantly locate the
  definitions. Exuberant Ctags currently supports the following languages:
  Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang, Fortran,
  HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL,
  Python, REXX, Ruby, Scheme, Shell (Bourne, Korn, Z), S-Lang,
  SML (Standard ML), Tcl, Vera, Verilog, Vim, and YACC. 
  
  2.2 Release binding
      What is is the release binding?
      (see http://opensolaris.org/os/community/arc/policies/release-taxonomy/)
      [ ] Major
      [ ] Minor
      [x] Patch or Micro
      [ ] Unknown -- ARC review required

  2.3 Type of project
      Is this case a Linux Familiarity project?
      [ ] Yes
      [x] No

  2.4 Originating Community
    2.4.1 Community Name
    
    2.4.2 Community Involvement
      Indicate Sun's involvement in the community
      [ ] Maintainer
      [ ] Contributor
      [x] Monitoring
      
      Will the project team work with the upstream community to resolve
      architectural issues of interest to Sun?
      [ ] Yes 
      [x] No - briefly explain
      Not needed.
      
      Will we or are we forking from the community?
      [ ] Yes - ARC review required prior to forking
      [x] No
      
3.0 Technical Description
  3.1 Installation & Sharable
    3.1.1S Solaris Installation - section only required for Solaris Software
      (see http://opensolaris.org/os/community/arc/policies/install-locations/ for details)
      Does this project follow the Install Locations best practice?
      [x] Yes 
      [ ] No - ARC review required
      
      Does this project install into /usr under [sbin|bin|lib|include|man|share]?
      [x] Yes
      [ ] No or N/A
      
      Does this project install into /opt?
      [ ] Yes - explain below
      [x] No or N/A
      
      Does this project install into a different directory structure?
      [ ] Yes - ARC review required
      [x] No or N/A
      
      Do any of the components of this project conflict with anything under /usr?
      (see http://opensolaris.org/os/community/arc/caselog/2007/047/ for details)
      [ ] Yes - explain below (?)
      [x] No
      Default Exuberant Ctags binary name is ctags and would naturally install into /usr/bin/ctags
      but Solaris ctags is already installed in /usr/bin. To avoid conflict, Common pratice
      is to rename the binary and install it with the different name in '/usr/bin'. New name of 
      Exuberant Ctags is exctags which is a common alternative name used by many others (try google for exctags).
      
      If conflicts exist then will this project install under /usr/gnu?
      [ ] Yes
      [ ] No - ARC review required
      [x] N/A
      Note: Exuberant Ctags is not a GNU product.
      
      Is this project installing into /usr/sfw?
      [ ] Yes - ARC review required
      [x] No
      
    3.1.1W Windows Installation - section only required for Windows Software
	Section not applicable.
      
    3.1.2 Share and Sharable
      Does the module include any components that are used or shared by 
      other projects?
      [ ] Yes
      [x] No
    
      If yes are these components packaged to be shared with the other FOSS?
      [ ] Yes
      [ ] No - ARC review required
      [x] N/A
    
  3.2 Exported Libraries
      Are libraries being delivered by this project?
      [ ] Yes
      [x] No - continue with next section (section 3.3)
      
  3.3 Services and the /etc Directory
      (see http://opensolaris.org/os/community/arc/policies/SMF-policy/)
      Does the project integrate anything into /etc/init.d or /etc/rc?.d?
      [ ] Yes - ARC review required
      [x] No
      
      Does the project integrate any new entries into /etc/inittab or
      /etc/inetd.conf?
      [ ] Yes - ARC review required
      [x] No
      
      Does the project integrate any private non-public files into /etc/default
      or /etc/ configuration files?
      [ ] Yes - ARC review required
      [x] No
      
      Does the service manifests method context grant rights above that
      of the noaccess user and basic privilege set?
      [ ] Yes - ARC review required
      [x] No
        
  3.4 Security
    3.4.1 Secure By Default 
      (see http://opensolaris.org/os/community/arc/policies/secure-by-default/ for details)
      (see http://www.opensolaris.org/os/community/arc/policies/NITS-policy/ for details)
      (see parts of http://opensolaris.org/os/community/arc/policies/SMF-policy/ for
       addtional details)
      Are there any network services provided by this project?
      [ ] Yes
      [x] No - continue with the next section (section 3.4.2)
      
    3.4.2 Authorization
      (see http://opensolaris.org/os/community/arc/bestpractices/rbac-intro/ and
	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/ and
	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/
           for details)
      Are there any setuid/setgid privileged binaries in the project?
      [ ] Yes - ARC review required
      [x] No - continue with next section (section 3.4.3)
      
    3.4.3 Auditing
      (see http://opensolaris.org/os/community/arc/policies/audit-policy/ for details)
      (see http://opensolaris.org/os/community/arc/caselog/2003/397 for details)
      Does this component contain administrative or security enforcing software?
      [ ] Yes - ARC review required
      [x] No - continue to next section (section 3.4.4)
        
    3.4.4 Authentication
      (see http://opensolaris.org/os/community/arc/policies/PAM/)
      Do the components contain any authentication code?
      [ ] Yes
      [x] No - continue to next section (section 3.4.5)
      
    3.4.5 Passwords
      (see http://opensolaris.org/os/community/arc/bestpractices/passwords-cli/ and
           http://opensolaris.org/os/community/arc/bestpractices/passwords-files/ for details)
      Do any of the components for the project deal with passwords?
      [ ] Yes
      [x] No - continue to next section (section 3.4.6)
      
    3.4.6 General Security Questions
      (see http://opensolaris.org/os/community/arc/bestpractices/security-questions/ for details)
      Are there any network protocols used by this project?
      [ ] Yes
      [x] No - continue with the next section (section 3.5)
      
  3.5 Networking
      Do the components access the network?
      [ ] Yes
      [x] No - continue with the next section (section 3.6)
      
  3.6 Core Solaris Components
      Do the components of this project compete with or duplicate core 
      Solaris components?
      [ ] Yes - ARC review required
      [x] No 
      
      Examples of Core Solaris Components include but are not limited to:
      
        Secure By Default
        Authorizations
        PAM -- Plugable Authentication Module
        Privilege
        PRM -- Process Rights Management -- Privilege
        Audit
        xVm -- Virtualization
        zones / Solaris Containers
        PRM -- Process Rights Management
        RBAC -- Role Based Access Control
        TX / Trusted Extensions
        ZFS
        SMF -- Service Management Facility
        FMA -- Fault Management Architecture
        SCF -- Smart Card Facility
        IPsec
        
4.0 Interfaces
  (see http://www.opensolaris.org/os/community/arc/policies/interface-taxonomy/ for details)
  4.1 Exported Interfaces
  
    Interface Name                Classification  Comments
    ----------------              --------------  ----------------------
    SUNWexctags                   Uncommitted     Package
    /usr/bin/exctags              Uncommitted     Executable binary file
    
  4.2 Imported Interfaces
    Interface Name		Classification       Comments
    --------------------------- -------------------- --------------------------
    
    
  Brief Interface Classifications - See Appendix C for definitions
    Volatile - interfaces are fluid and will follow a rapidly changing community
    Uncommitted - interfaces are still evolving in the community and might follow
		  the community
    Committed - interfaces are stable in the community
    Project Private - no review required, just document in table
    Contracted (interface modifier) - further review required


--------------090207090502090001000206
Content-Type: text/plain;
 name="exctags.1.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="exctags.1.txt"




Exuberant Ctags                                          CTAGS(1)



NAME
     ctags - Generate tag files for source code



SYNOPSIS
     ctags [options] [file(s)]

     etags [options] [file(s)]



DESCRIPTION
     The  ctags  and  etags  programs  (hereinafter  collectively
     referred  to  as ctags, except where distinguished) generate
     an index (or "tag") file for a variety of  language  objects
     found  in  file(s).   This tag file allows these items to be
     quickly and easily located by a text editor or  other  util-
     ity.  A "tag" signifies a language object for which an index
     entry is  available  (or,  alternatively,  the  index  entry
     created for that object).

     Alternatively, ctags can generate  a  cross  reference  file
     which  lists,  in human readable form, information about the
     various source objects found in a set of language files.

     Tag index files are supported  by  numerous  editors,  which
     allow  the  user to locate the object associated with a name
     appearing in a source file and jump to  the  file  and  line
     which  defines  the  name.  Those known about at the time of
     this release are:

         Vi(1)  and  its  derivatives  (e.g.  Elvis,  Vim,  Vile,
         Lemmy),  CRiSP,  Emacs,  FTE (Folding Text Editor), JED,
         jEdit, Mined, NEdit (Nirvana  Edit),  TSE  (The  SemWare
         Editor), UltraEdit, WorkSpace, X2, Zeus

     Ctags is capable of generating different kinds of  tags  for
     each  of  many  different  languages. For a complete list of
     supported languages, the names by which they are recognized,
     and  the kinds of tags which are generated for each, see the
     --list-languages and --list-kinds options.



SOURCE FILES
     Unless  the  --language-force  option  is   specified,   the
     language of each source file is automatically selected based
     upon a mapping of file names to languages. The  mappings  in
     effect   for   each   language  may  be  display  using  the
     --list-maps option and may be changed  using  the  --langmap
     option.   On  platforms  which  support it, if the name of a



Darren Hiebert      Last change: Version 5.7                    1






Exuberant Ctags                                          CTAGS(1)



     file is not mapped to a language and the file is executable,
     the  first line of the file is checked to see if the file is
     a "#!" script for a recognized language.

     By default, all other files names are ignored. This  permits
     running  ctags  on  all  files  in either a single directory
     (e.g. "ctags *"), or on all files in an entire source direc-
     tory  tree  (e.g.  "ctags -R"), since only those files whose
     names are mapped to languages will be scanned.

     [The reason that .h  extensions  are  mapped  to  C++  files
     rather than C files is because it is common to use .h exten-
     sions in C++, and no harm results in treating  them  as  C++
     files.]



OPTIONS
     Despite the wealth of available options, defaults are set so
     that  ctags  is  most  commonly executed without any options
     (e.g. "ctags *", or "ctags -R"), which  will  create  a  tag
     file  in  the  current  directory  for all recognized source
     files. The options described below are  provided  merely  to
     allow custom tailoring to meet special needs.

     Note that spaces separating the single-letter  options  from
     their parameters are optional.

     Note also that the  boolean  parameters  to  the  long  form
     options   (those   beginning  with  "--"  and  that  take  a
     "[=yes|no]" parameter) may be omitted, in which case  "=yes"
     is  implied. (e.g. --sort is equivalent to --sort=yes). Note
     further that "=1" and  "=on"  are  considered  synonyms  for
     "=yes", and that "=0" and "=off" are considered synonyms for
     "=no".

     Some options are either ignored or  useful  only  when  used
     while  running  in  etags mode (see -e option). Such options
     will be noted.

     Most options  may  appear  anywhere  on  the  command  line,
     affecting  only  those  files which follow the option. A few
     options, however, must appear before the first file name and
     will be noted as such.

     Options taking language names will  accept  those  names  in
     either  upper or lower case. See the --list-languages option
     for a complete list of the built-in language names.


     -a   Equivalent to --append.




Darren Hiebert      Last change: Version 5.7                    2






Exuberant Ctags                                          CTAGS(1)



     -B   Use  backward  searching  patterns  (e.g.   ?pattern?).
          [Ignored in etags mode]


     -e   Enable etags mode, which will create a tag file for use
          with  the  Emacs  editor.   Alternatively,  if ctags is
          invoked by a name containing the string "etags" (either
          by  renaming,  or  creating a link to, the executable),
          etags mode will be enabled.  This  option  must  appear
          before the first file name.


     -f tagfile
          Use the name specified by  tagfile  for  the  tag  file
          (default  is  "tags",  or  "TAGS" when running in etags
          mode). If tagfile is specified as  "-",  then  the  tag
          file  is written to standard output instead. Ctags will
          stubbornly refuse to take orders if tagfile exists  and
          its  first  line  contains something other than a valid
          tags line. This will save your neck if  you  mistakenly
          type  "ctags  -f  *.c", which would otherwise overwrite
          your first C file with the tags generated by the  rest!
          It  will  also  refuse to accept a multi-character file
          name which begins with a '-'  (dash)  character,  since
          this  most  likely means that you left out the tag file
          name and this option tried to grab the next  option  as
          the  file  name. If you really want to name your output
          tag file "-ugly", specify it as "./-ugly". This  option
          must  appear before the first file name. If this option
          is specified more than once, only the last will apply.


     -F   Use  forward  searching   patterns   (e.g.   /pattern/)
          (default).  [Ignored in etags mode]


     -h list
          Specifies a  list  of  file  extensions,  separated  by
          periods,  which  are  to  be interpreted as include (or
          header) files. To indicate files having  no  extension,
          use  a  period  not  followed by a non-period character
          (e.g. ".", "..x", ".x."). This option only affects  how
          the  scoping  of  a  particular kinds of tags is inter-
          preted (i.e. whether or not they are considered as glo-
          bally  visible or visible only within the file in which
          they are defined); it does not map the extension to any
          particular  language.  Any  tag  which  is located in a
          non-include file and cannot be seen  (e.g.  linked  to)
          from  another  file  is considered to have file-limited
          (e.g. static) scope. No kind of  tag  appearing  in  an
          include  file  will  be considered to have file-limited
          scope. If the first character in the  list  is  a  plus



Darren Hiebert      Last change: Version 5.7                    3






Exuberant Ctags                                          CTAGS(1)



          sign,  then the extensions in the list will be appended
          to the current list; otherwise, the list  will  replace
          the  current  list. See, also, the --file-scope option.
          The default list is  ".h.H.hh.hpp.hxx.h++.inc.def".  To
          restore the default list, specify -h default. Note that
          if an extension supplied to this option is not  already
          mapped  to  a  particular  language  (see SOURCE FILES,
          above), you will also need to use either the  --langmap
          or --language-force option.


     -I identifier-list
          Specifies a list of identifiers which are  to  be  spe-
          cially  handled  while  parsing C and C++ source files.
          This option is specifically provided to handle  special
          cases  arising  through the use of preprocessor macros.
          When the identifiers  listed  are  simple  identifiers,
          these identifiers will be ignored during parsing of the
          source files. If an identifier is suffixed with  a  '+'
          character,  ctags  will  also  ignore  any parenthesis-
          enclosed argument list which may immediately follow the
          identifier  in the source files. If two identifiers are
          separated with the '=' character, the first identifiers
          is  replaced by the second identifiers for parsing pur-
          poses. The list of identifiers may be supplied directly
          on the command line or read in from a separate file. If
          the first character of identifier-list is '@', '.' or a
          pathname separator ('/' or '\'), or the first two char-
          acters specify a drive letter (e.g. "C:"), the  parame-
          ter  identifier-list  will be interpreted as a filename
          from which to read a list of identifiers, one per input
          line.  Otherwise, identifier-list is a list of identif-
          iers (or identifier pairs)  to  be  specially  handled,
          each  delimited  by  a either a comma or by white space
          (in which case the list should be quoted  to  keep  the
          entire  list as one command line argument). Multiple -I
          options may be supplied.  To clear the list  of  ignore
          identifiers,   supply   a   single   dash   ("-")   for
          identifier-list.

          This feature is useful  when  preprocessor  macros  are
          used  in such a way that they cause syntactic confusion
          due to their presence. Indeed, this is the best way  of
          working around a number of problems caused by the pres-
          ence of syntax-busting  macros  in  source  files  (see
          CAVEATS,  below).  Some  examples  will illustrate this
          point.

             int foo ARGDECL4(void *, ptr, long int, nbytes)


          In the above example, the  macro  "ARGDECL4"  would  be



Darren Hiebert      Last change: Version 5.7                    4






Exuberant Ctags                                          CTAGS(1)



          mistakenly  interpreted  to be the name of the function
          instead of the correct name  of  "foo".  Specifying  -I
          ARGDECL4 results in the correct behavior.

             /* creates an RCS version string in module */
             MODULE_VERSION("$Revision: 590 $")


          In the above example the  macro  invocation  looks  too
          much  like a function definition because it is not fol-
          lowed by a semicolon (indeed, it could even be followed
          by  a  global  variable definition that would look much
          like a K&R style function  parameter  declaration).  In
          fact,  this  seeming function definition could possibly
          even cause the rest of the  file  to  be  skipped  over
          while  trying to complete the definition. Specifying -I
          MODULE_VERSION+ would avoid such a problem.

             CLASS Example {
                 // your content here
             };


          The example above uses "CLASS" as a preprocessor  macro
          which expands to something different for each platform.
          For  instance  CLASS   may   be   defined   as   "class
          __declspec(dllexport)"  on  Win32  platforms and simply
          "class" on UNIX.  Normally, the absence of the C++ key-
          word   "class"  would  cause  the  source  file  to  be
          incorrectly parsed. Correct behavior can be restored by
          specifying -I CLASS=class.


     -L file
          Read from file a list of  file  names  for  which  tags
          should be generated.  If file is specified as "-", then
          file names are read from  standard  input.  File  names
          read  using  this  option  are processed following file
          names appearing on the command line. Options  are  also
          accepted  in  this  input.  If this option is specified
          more than once, only the last will apply.  Note:   file
          is  read in line-oriented mode, where a new line is the
          only delimiter and non-trailing  white  space  is  con-
          sidered  significant, in order that file names contain-
          ing spaces may be  supplied  (however,  trailing  white
          space  is  stripped  from  lines);  this can affect how
          options are parsed if included in the input.


     -n   Equivalent to --excmd=number.





Darren Hiebert      Last change: Version 5.7                    5






Exuberant Ctags                                          CTAGS(1)



     -N   Equivalent to --excmd=pattern.


     -o tagfile
          Equivalent to -f tagfile.


     -R   Equivalent to --recurse.


     -u   Equivalent to --sort=no (i.e. "unsorted").


     -V   Equivalent to --verbose.


     -w   This  option  is   silently   ignored   for   backward-
          compatibility with the ctags of SVR4 Unix.


     -x   Print a tabular, human-readable cross reference  (xref)
          file  to  standard  output  instead of generating a tag
          file. The information contained in the output includes:
          the  tag  name;  the kind of tag; the line number, file
          name, and source line  (with  extra  white  space  con-
          densed)  of the file which defines the tag. No tag file
          is written and all options affecting  tag  file  output
          will  be ignored. Example applications for this feature
          are generating a listing of all functions located in  a
          source  file  (e.g. ctags -x --c-kinds=f file), or gen-
          erating a list of all externally visible  global  vari-
          ables   located   in  a  source  file  (e.g.  ctags  -x
          --c-kinds=v --file-scope=no  file).  This  option  must
          appear before the first file name.


     --append[=yes|no]
          Indicates whether tags  generated  from  the  specified
          files  should  be  appended to those already present in
          the tag file or should replace them. This option is off
          by  default.  This  option must appear before the first
          file name.


     --etags-include=file
          Include a reference to  file  in  the  tag  file.  This
          option  may be specified as many times as desired. This
          supports Emacs' capability to  use  a  tag  file  which
          "includes"  other  tag  files. [Available only in etags
          mode]





Darren Hiebert      Last change: Version 5.7                    6






Exuberant Ctags                                          CTAGS(1)



     --exclude=[pattern]
          Add pattern to a list  of  excluded  files  and  direc-
          tories.  This  option may be specified as many times as
          desired. For each file name considered by  ctags,  each
          pattern  specified  using  this option will be compared
          against    both     the     complete     path     (e.g.
          some/path/base.ext)  and  the base name (e.g. base.ext)
          of the file, thus allowing patterns which match a given
          file  name  irrespective  of  its path, or match only a
          specific path. If appropriate support is available from
          the  runtime  library  of your C compiler, then pattern
          may contain the  usual  shell  wildcards  (not  regular
          expressions)  common  on  Unix  (be  sure  to quote the
          option parameter to protect the  wildcards  from  being
          expanded  by  the  shell  before being passed to ctags;
          also be aware that wildcards can match the slash  char-
          acter,  '/').  You can determine if shell wildcards are
          available on your platform by examining the  output  of
          the  --version  option, which will include "+wildcards"
          in the compiled feature  list;  otherwise,  pattern  is
          matched  against file names using a simple textual com-
          parison.

          If pattern begins with the character '@', then the rest
          of  the string is interpreted as a file name from which
          to read exclusion patterns, one per line. If pattern is
          empty,  the list of excluded patterns is cleared.  Note
          that at program startup, the default exclude list  con-
          tains  "EIFGEN",  "SCCS",  "RCS",  and "CVS", which are
          names of directories for  which  it  is  generally  not
          desirable  to  descend  while  processing the --recurse
          option.


     --excmd=type
          Determines the type of EX command used to  locate  tags
          in the source file.  [Ignored in etags mode]

          The valid values for type (either the  entire  word  or
          the first letter is accepted) are:


          number   Use only line numbers  in  the  tag  file  for
                   locating tags. This has four advantages:
                   1.  Significantly  reduces  the  size  of  the
                       resulting tag file.
                   2.  Eliminates failures to find  tags  because
                       the  line  defining  the  tag has changed,
                       causing the pattern match  to  fail  (note
                       that  some  editors, such as vim, are able
                       to recover in many such instances).
                   3.  Eliminates finding identical matching, but



Darren Hiebert      Last change: Version 5.7                    7






Exuberant Ctags                                          CTAGS(1)



                       incorrect, source lines (see BUGS, below).
                   4.  Retains separate entries in the  tag  file
                       for  lines which are identical in content.
                       In pattern  mode,  duplicate  entries  are
                       dropped  because  the search patterns they
                       generate are identical, making the  dupli-
                       cate entries useless.


                   However, this option has one significant draw-
                   back:  changes  to  the source files can cause
                   the line numbers recorded in the tag  file  to
                   no  longer  correspond  to  the  lines  in the
                   source file, causing jumps  to  some  tags  to
                   miss  the  target  definition  by  one or more
                   lines. Basically, this  option  is  best  used
                   when the source code to which it is applied is
                   not subject to change. Selecting  this  option
                   type   causes  the  following  options  to  be
                   ignored: -BF.


          pattern  Use only search patterns for all tags,  rather
                   than  the  line numbers usually used for macro
                   definitions. This has  the  advantage  of  not
                   referencing  obsolete  line numbers when lines
                   have been added or removed since the tag  file
                   was generated.


          mixed    In this mode, patterns are generally used with
                   a few exceptions. For C, line numbers are used
                   for  macro  definition  tags.  This  was   the
                   default format generated by the original ctags
                   and is, therefore, retained as the default for
                   this  option.  For  Fortran,  line numbers are
                   used   for   common   blocks   because   their
                   corresponding   source   lines  are  generally
                   identical, making pattern searches useless for
                   finding all matches.


     --extra=[+|-]flags
          Specifies whether to include extra tag entries for cer-
          tain kinds of information. The parameter flags is a set
          of one-letter flags,  each  representing  one  kind  of
          extra tag entry to include in the tag file. If flags is
          preceded by by either the '+'  or  '-'  character,  the
          effect of each flag is added to, or removed from, those
          currently enabled;  otherwise  the  flags  replace  any
          current  settings.  The meaning of each flag is as fol-
          lows:



Darren Hiebert      Last change: Version 5.7                    8






Exuberant Ctags                                          CTAGS(1)



             f   Include an entry for the base file name of every
                 source file (e.g.  "example.c"), which addresses
                 the first line of the file.

             q   Include an extra class-qualified tag  entry  for
                 each  tag  which  is  a  member  of a class (for
                 languages  for   which   this   information   is
                 extracted; currently C++, Eiffel, and Java). The
                 actual form of the qualified  tag  depends  upon
                 the  language  from  which  the  tag was derived
                 (using a form that is most natural for how qual-
                 ified  calls are specified in the language). For
                 C++, it is in the form "class::member"; for Eif-
                 fel  and Java, it is in the form "class.member".
                 This may allow easier  location  of  a  specific
                 tags  when  multiple  occurrences  of a tag name
                 occur in the tag file. Note, however, that  this
                 could  potentially  more than double the size of
                 the tag file.


     --fields=[+|-]flags
          Specifies the available extension fields which  are  to
          be  included  in  the  entries of the tag file (see TAG
          FILE FORMAT, below, for more information). The  parame-
          ter flags is a set of one-letter flags, each represent-
          ing one type of extension field to  include,  with  the
          following  meanings  (disabled  by default unless indi-
          cated):


             a   Access (or export) of class members
             f   File-restricted scoping [enabled]
             i   Inheritance information
             k   Kind of tag as a single letter [enabled]
             K   Kind of tag as full name
             l   Language of source file containing tag
             m   Implementation information
             n   Line number of tag definition
             s   Scope of tag definition [enabled]
             S   Signature of routine (e.g. prototype or  parame-
                 ter list)
             z   Include the "kind:" key in kind field
             t   Type and  name  of  a  variable  or  typedef  as
                 "typeref:" field [enabled]

          Each letter or group of  letters  may  be  preceded  by
          either  '+'  to  add  it  to the default set, or '-' to
          exclude it. In the absence of any preceding '+' or  '-'
          sign,  only those kinds explicitly listed in flags will
          be included in the output (i.e. overriding the  default
          set).  This  option is ignored if the option --format=1



Darren Hiebert      Last change: Version 5.7                    9






Exuberant Ctags                                          CTAGS(1)



          has been specified. The default value of this option is
          fks.


     --file-scope[=yes|no]
          Indicates whether tags scoped only for  a  single  file
          (i.e.  tags which cannot be seen outside of the file in
          which they are defined, such as "static"  tags)  should
          be  included  in  the output. See, also, the -h option.
          This option is enabled by default.


     --filter[=yes|no]
          Causes ctags to behave as a filter, reading source file
          names  from  standard  input and printing their tags to
          standard output on a file-by-file basis. If --sorted is
          enabled, tags are sorted only within the source file in
          which they are defined. File names are read from  stan-
          dard input in line-oriented input mode (see note for -L
          option) and only after file names listed on the command
          line  or  from  any  file supplied using the -L option.
          When this option is enabled, the options  -f,  -o,  and
          --totals are ignored. This option is quite esoteric and
          is disabled by default. This option must appear  before
          the first file name.


     --filter-terminator=string
          Specifies a string to print to standard output  follow-
          ing  the  tags  for  each  file  name  parsed  when the
          --filter option is enabled. This may permit an applica-
          tion  reading the output of ctags to determine when the
          output for each file is finished. Note that if the file
          name read is a directory and --recurse is enabled, this
          string will be printed only one once at the end of  all
          tags found for by descending the directory. This string
          will always be separated from the last tag line for the
          file  by its terminating newline.  This option is quite
          esoteric and is empty  by  default.  This  option  must
          appear before the first file name.


     --format=level
          Change the format of the output tag file. Currently the
          only  valid values for level are 1 or 2. Level 1 speci-
          fies the original tag file format and level 2 specifies
          a  new extended format containing extension fields (but
          in a manner which retains  backward-compatibility  with
          original  vi(1)  implementations). The default level is
          2. This option must appear before the first file  name.
          [Ignored in etags mode]




Darren Hiebert      Last change: Version 5.7                   10






Exuberant Ctags                                          CTAGS(1)



     --help
          Prints to standard output a detailed usage description,
          and then exits.


     --if0[=yes|no]
          Indicates a preference as to  whether  code  within  an
          "#if  0" branch of a preprocessor conditional should be
          examined for non-macro  tags  (macro  tags  are  always
          included).  Because  the intent of this construct is to
          disable code, the default value of this option  is  no.
          Note that this indicates a preference only and does not
          guarantee skipping code within an "#if 0" branch, since
          the  fall-back  algorithm  used  to  generate tags when
          preprocessor conditionals are too complex  follows  all
          branches  of  a conditional. This option is disabled by
          default.


     --<LANG>-kinds=[+|-]kinds
          Specifies a list of language-specific kinds of tags (or
          kinds)  to  include in the output file for a particular
          language, where <LANG> is case-insensitive and  is  one
          of    the    built-in    language    names   (see   the
          --list-languages  option  for  a  complete  list).  The
          parameter  kinds  is a group of one-letter flags desig-
          nating kinds of tags (particular to  the  language)  to
          either include or exclude from the output. The specific
          sets of flags recognized for each language, their mean-
          ings  and  defaults  may be list using the --list-kinds
          option. Each letter or group of letters may be preceded
          by  either  '+' to add it to, or '-' to remove it from,
          the default set. In the absence of any preceding '+' or
          '-'  sign,  only those kinds explicitly listed in kinds
          will be included in the output  (i.e.   overriding  the
          default for the specified language).

          As an example for the C language, in order to add  pro-
          totypes  and  external  variable  declarations  to  the
          default set of  tag  kinds,  but  exclude  macros,  use
          --c-kinds=+px-d;  to  include  only tags for functions,
          use --c-kinds=f.


     --langdef=name
          Defines a new user-defined language, name, to be parsed
          with  regular  expressions.  Once  defined, name may be
          used in other options taking language names. The  typi-
          cal use of this option is to first define the language,
          then map file names to it using --langmap, then specify
          regular  expressions using --regex-<LANG> to define how
          its tags are found.



Darren Hiebert      Last change: Version 5.7                   11






Exuberant Ctags                                          CTAGS(1)



     --langmap=map[,map[...]]
          Controls how file names are mapped  to  languages  (see
          the  --list-maps option). Each comma-separated map con-
          sists of the language name (either a built-in or  user-
          defined  language),  a colon, and a list of file exten-
          sions and/or file name patterns. A  file  extension  is
          specified  by  preceding  the  extension  with a period
          (e.g. ".c").  A  file  name  pattern  is  specified  by
          enclosing    the    pattern    in   parentheses   (e.g.
          "([Mm]akefile)"). If appropriate support  is  available
          from  the  runtime library of your C compiler, then the
          file name pattern may contain the usual shell wildcards
          common  on  Unix (be sure to quote the option parameter
          to protect the wildcards from  being  expanded  by  the
          shell  before being passed to ctags). You can determine
          if shell wildcards are available on  your  platform  by
          examining  the  output  of  the --version option, which
          will include "+wildcards" in the compiled feature list;
          otherwise,  the  file name patterns are matched against
          file names using a simple textual comparison. When map-
          ping  a  file extension, it will first be unmapped from
          any other languages.

          If the first character in a map is a  plus  sign,  then
          the  extensions and file name patterns in that map will
          be appended to the current map for that language;  oth-
          erwise, the map will replace the current map. For exam-
          ple, to specify that only files with extensions  of  .c
          and  .x  are  to  be  treated  as C language files, use
          "--langmap=c:.c.x"; to also add files  with  extensions
          of    .j    as    Java    language    files,    specify
          "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g.
          files  named  either  "Makefile", "makefile", or having
          the extension ".mak")  to  a  language  called  "make",
          specify   "--langmap=make:([Mm]akefile).mak".   To  map
          files having no extension, specify a  period  not  fol-
          lowed  by  a  non-period  character  (e.g.  ".", "..x",
          ".x."). To clear the mapping for a particular  language
          (thus  inhibiting automatic generation of tags for that
          language),  specify  an  empty  extension  list   (e.g.
          "--langmap=fortran:").  To restore the default language
          mappings for all a particular language, supply the key-
          word "default" for the mapping.  To specify restore the
          default language mappings for  all  languages,  specify
          "--langmap=default".  Note  that  file  extensions  are
          tested before file name  patterns  when  inferring  the
          language of a file.


     --language-force=language
          By default, ctags automatically selects the language of
          a  source  file,  ignoring  those  files whose language



Darren Hiebert      Last change: Version 5.7                   12






Exuberant Ctags                                          CTAGS(1)



          cannot be determined (see SOURCE  FILES,  above).  This
          option forces the specified language (case-insensitive;
          either built-in or user-defined) to be used  for  every
          supplied  file  instead  of automatically selecting the
          language based upon its  extension.  In  addition,  the
          special  value  auto indicates that the language should
          be automatically selected (which  effectively  disables
          this option).


     --languages=[+|-]list
          Specifies the languages for  which  tag  generation  is
          enabled, with list containing a comma-separated list of
          language names (case-insensitive;  either  built-in  or
          user-defined).  If  the  first  language of list is not
          preceded by either a '+' or '-', the current list  will
          be  cleared  before adding or removing the languages in
          list. Until a '-' is encountered, each language in  the
          list  will  be added to the current list. As either the
          '+' or '-' is encountered in the  list,  the  languages
          following  it  are  added  or  removed from the current
          list, respectively. Thus, it becomes simple to  replace
          the  current  list  with a new one, or to add or remove
          languages from the current list.  The  actual  list  of
          files for which tags will be generated depends upon the
          language extension mapping in effect (see the --langmap
          option).  Note  that  all  languages,  including  user-
          defined languages are enabled  unless  explicitly  dis-
          abled  using  this  option.  Language names included in
          list may be any built-in  language  or  one  previously
          defined  with --langdef. The default is "all", which is
          also  accepted   as   a   valid   argument.   See   the
          --list-languages  option  for  a  complete  list of the
          built-in language names.


     --license
          Prints a summary of the software  license  to  standard
          output, and then exits.


     --line-directives[=yes|no]
          Specifies whether "#line" directives should  be  recog-
          nized. These are present in the output of preprocessors
          and contain the line  number,  and  possibly  the  file
          name,  of  the  original  source file(s) from which the
          preprocessor output file was generated.  When  enabled,
          this  option  will  cause ctags to generate tag entries
          marked with the file names and line  numbers  of  their
          locations  original  source  file(s),  instead of their
          actual locations in the preprocessor output. The actual
          file  names placed into the tag file will have the same



Darren Hiebert      Last change: Version 5.7                   13






Exuberant Ctags                                          CTAGS(1)



          leading path  components  as  the  preprocessor  output
          file,  since  it  is  assumed  that the original source
          files are located relative to the  preprocessor  output
          file  (unless, of course, the #line directive specifies
          an absolute path). This option is off by default. Note:
          This option is generally only useful when used together
          with the --excmd=number (-n) option. Also, you may have
          to  use either the --langmap or --language-force option
          if the extension of the preprocessor output file is not
          known to ctags.


     --links[=yes|no]
          Indicates whether symbolic links (if supported)  should
          be followed. When disabled, symbolic links are ignored.
          This option is on by default.


     --list-kinds[=language|all]
          Lists the tag kinds recognized for either the specified
          language or all languages, and then exits. Each kind of
          tag recorded in the tag file is represented by  a  one-
          letter  flag,  which  is  also  used to filter the tags
          placed   into   the   output   through   use   of   the
          --<LANG>-kinds  option. Note that some languages and/or
          tag kinds may be implemented using regular  expressions
          and  may  not be available if regex support is not com-
          piled into ctags (see the --regex-<LANG> option).  Each
          kind listed is enabled unless followed by "[off]".


     --list-maps[=language|all]
          Lists the file extensions and file name patterns  which
          associate  a  file  name with a language for either the
          specified language or all languages,  and  then  exits.
          See the --langmap option, and SOURCE FILES, above.


     --list-languages
          Lists the names of the languages understood  by  ctags,
          and then exits.  These language names are case insensi-
          tive  and  may  be  used   in   the   --language-force,
          --languages,    --<LANG>-kinds,    and   --regex-<LANG>
          options.


     --options=file
          Read additional options from file. The file should con-
          tain  one  option  per  line.  As  a  special  case, if
          --options=NONE is specified as the first option on  the
          command  line, it will disable the automatic reading of
          any configuration options from either  a  file  or  the



Darren Hiebert      Last change: Version 5.7                   14






Exuberant Ctags                                          CTAGS(1)



          environment (see FILES).


     --recurse[=yes|no]
          Recurse into directories encountered  in  the  list  of
          supplied  files. If the list of supplied files is empty
          and no file list is specified with the -L option,  then
          the  current  directory (i.e. ".") is assumed. Symbolic
          links are followed. If you don't like these  behaviors,
          either  explicitly specify the files or pipe the output
          of find(1) into ctags -L- instead. Note: This option is
          not  supported  on  all  platforms  at  present.  It is
          available if the output of the --help  option  includes
          this  option.  See, also, the --exclude to limit recur-
          sion.


     --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
          The /regexp/replacement/ pair define a regular  expres-
          sion  replacement pattern, similar in style to sed sub-
          stitution commands, with which to  generate  tags  from
          source  files  mapped  to  the  named language, <LANG>,
          (case-insensitive; either a  built-in  or  user-defined
          language).  The  regular expression, regexp, defines an
          extended  regular  expression  (roughly  that  used  by
          egrep(1)), which is used to locate a single source line
          containing a tag and may specify tab  characters  using
          \t.  When  a matching line is found, a tag will be gen-
          erated for the name defined by replacement, which  gen-
          erally  will  contain  the  special  back-references \1
          through \9 to refer to matching  sub-expression  groups
          within  regexp.  The  '/' separator characters shown in
          the parameter to the option can actually be replaced by
          any  character. Note that whichever separator character
          is used will have to be escaped with a backslash  ('\')
          character wherever it is used in the parameter as some-
          thing other than a separator.  The  regular  expression
          defined  by this option is added to the current list of
          regular expressions for the specified  language  unless
          the  parameter  is  omitted,  in which case the current
          list is cleared.

          Unless modified by flags, regexp is  interpreted  as  a
          Posix  extended  regular  expression.  The  replacement
          should expand for all matching  lines  to  a  non-empty
          string  of  characters,  or  a  warning message will be
          reported. An optional kind specifier for tags  matching
          regexp  may  follow  replacement,  which will determine
          what kind of tag is reported in  the  "kind"  extension
          field  (see  TAG  FILE FORMAT, below). The full form of
          kind-spec is in the form of a single letter, a comma, a
          name (without spaces), a comma, a description, followed



Darren Hiebert      Last change: Version 5.7                   15






Exuberant Ctags                                          CTAGS(1)



          by a separator, which specify the short and long  forms
          of   the   kind   value  and  its  textual  description
          (displayed using --list-kinds). Either  the  kind  name
          and/or  the description may be omitted. If kind-spec is
          omitted, it defaults to "r,regex". Finally,  flags  are
          one or more single-letter characters having the follow-
          ing effect upon the interpretation of regexp:


             b   The pattern is interpreted as a Posix basic reg-
                 ular expression.

             e   The pattern is interpreted as a  Posix  extended
                 regular expression (default).

             i   The regular expression is to  be  applied  in  a
                 case-insensitive manner.

          Note that this option is available only  if  ctags  was
          compiled  with  support  for regular expressions, which
          depends upon your platform. You can determine  if  sup-
          port  for regular expressions is compiled in by examin-
          ing the output of  the  --version  option,  which  will
          include "+regex" in the compiled feature list.

          For more information on the regular expressions used by
          ctags,  see  either the regex(5,7) man page, or the GNU
          info documentation for regex (e.g. "info regex").


     --sort[=yes|no|foldcase]
          Indicates whether the tag file should be sorted on  the
          tag name (default is yes). Note that the original vi(1)
          required sorted tags. The foldcase value specifies case
          insensitive  (or  case-folded)  sorting.   Fast  binary
          searches of tag files  sorted  with  case-folding  will
          require  special  support  from  tools using tag files,
          such as that found in the ctags  readtags  library,  or
          Vim  version  6.2  or  higher (using "set ignorecase").
          This option must appear before  the  first  file  name.
          [Ignored in etags mode]


     --tag-relative[=yes|no]
          Indicates that the file paths recorded in the tag  file
          should  be relative to the directory containing the tag
          file, rather than relative to  the  current  directory,
          unless  the  files  supplied  on  the  command line are
          specified with absolute paths. This option must  appear
          before  the  first  file  name. The default is yes when
          running in etags mode (see the -e  option),  no  other-
          wise.



Darren Hiebert      Last change: Version 5.7                   16






Exuberant Ctags                                          CTAGS(1)



     --totals[=yes|no]
          Prints statistics about the source files read  and  the
          tag  file  written  during  the  current  invocation of
          ctags. This option is off by default.  This option must
          appear before the first file name.


     --verbose[=yes|no]
          Enable verbose mode. This  prints  out  information  on
          option  processing  and a brief message describing what
          action is being  taken  for  each  file  considered  by
          ctags. Normally, ctags does not read command line argu-
          ments until after options are read from the  configura-
          tion files (see FILES, below) and the CTAGS environment
          variable. However, if this option is the first argument
          on  the  command  line,  it will take effect before any
          options are read from these sources. The default is no.


     --version
          Prints a version identifier for ctags to standard  out-
          put,  and then exits. This is guaranteed to always con-
          tain the string "Exuberant Ctags".



OPERATIONAL DETAILS
     As ctags considers each file  name  in  turn,  it  tries  to
     determine the language of the file by applying the following
     three tests in order: if the file extension has been  mapped
     to  a  language,  if  the  file name matches a shell pattern
     mapped to a language, and finally if the file is  executable
     and  its first line specifies an interpreter using the Unix-
     style "#!" specification (if supported on the platform).  If
     a  language  was identified, the file is opened and then the
     appropriate language parser is  called  to  operate  on  the
     currently  open file. The parser parses through the file and
     adds an entry to the tag file for each language object it is
     written  to  handle. See TAG FILE FORMAT, below, for details
     on these entries.

     This implementation of ctags imposes no formatting  require-
     ments  on  C code as do legacy implementations. Older imple-
     mentations of ctags tended to rely upon  certain  formatting
     assumptions  in  order  to  help  it resolve coding dilemmas
     caused by preprocessor conditionals.

     In general,  ctags  tries  to  be  smart  about  conditional
     preprocessor  directives.  If  a preprocessor conditional is
     encountered within a statement which defines  a  tag,  ctags
     follows only the first branch of that conditional (except in
     the special case of "#if 0", in which case it  follows  only



Darren Hiebert      Last change: Version 5.7                   17






Exuberant Ctags                                          CTAGS(1)



     the  last  branch).  The  reason for this is that failing to
     pursue only one branch can result in ambiguous syntax, as in
     the following example:

          #ifdef TWO_ALTERNATIVES
          struct {
          #else
          union {
          #endif
              short a;
              long b;
          }

     Both branches cannot be followed, or  braces  become  unbal-
     anced and ctags would be unable to make sense of the syntax.

     If the application of this heuristic fails to properly parse
     a  file, generally due to complicated and inconsistent pair-
     ing within the conditionals, ctags will retry the file using
     a different heuristic which does not selectively follow con-
     ditional preprocessor branches, but instead  falls  back  to
     relying upon a closing brace ("}") in column 1 as indicating
     the end of a block once any  brace  imbalance  results  from
     following a #if conditional branch.

     Ctags will also try  to  specially  handle  arguments  lists
     enclosed  in  double  sets of parentheses in order to accept
     the following conditional construct:

          extern void foo __ARGS((int one, char two));

     Any name immediately preceding the "(("  will  be  automati-
     cally ignored and the previous name will be used.

     C++ operator definitions are specially handled. In order for
     consistency  with  all  types  of  operators (overloaded and
     conversion), the operator name in the tag file  will  always
     be  preceded  by  the  string  "operator " (i.e. even if the
     actual operator definition was written as "operator<<").

     After creating or appending to the tag file, it is sorted by
     the tag name, removing identical tag lines.



TAG FILE FORMAT
     When not running in etags mode, each entry in the  tag  file
     consists  of  a separate line, each looking like this in the
     most general case:

      tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields




Darren Hiebert      Last change: Version 5.7                   18






Exuberant Ctags                                          CTAGS(1)



     The fields and separators of these lines  are  specified  as
     follows:

         1.  tag name
         2.  single tab character
         3.  name of the file in which the object associated with
             the tag is located
         4.  single tab character
         5.  EX command used to locate the tag within  the  file;
             generally  a  search  pattern  (either  /pattern/ or
             ?pattern?) or line number (see  --excmd).  Tag  file
             format  2  (see  --format)  extends  this EX command
             under certain circumstances  to  include  a  set  of
             extension fields (described below) embedded in an EX
             comment immediately  appended  to  the  EX  command,
             which  leaves  it  backward-compatible with original
             vi(1) implementations.

     A few special tags are written into the tag file for  inter-
     nal  purposes.  These  tags  are composed in such a way that
     they always sort to the top of  the  file.   Therefore,  the
     first  two  characters of these tags are used a magic number
     to detect a tag file for purposes of determining  whether  a
     valid  tag  file  is  being overwritten rather than a source
     file.

     Note that the name of each source file will be  recorded  in
     the  tag  file  exactly  as  it appears on the command line.
     Therefore, if the path you specified on the command line was
     relative  to the current directory, then it will be recorded
     in that same manner in  the  tag  file.  See,  however,  the
     --tag-relative option for how this behavior can be modified.

     Extension fields are tab-separated key-value pairs  appended
     to  the  end  of  the  EX command as a comment, as described
     above. These key value pairs  appear  in  the  general  form
     "key:value". Their presence in the lines of the tag file are
     controlled by the --fields option. The possible keys and the
     meaning of their values are as follows:


     access      Indicates the visibility of this  class  member,
                 where value is specific to the language.


     file        Indicates that the tag has file-limited visibil-
                 ity. This key has no corresponding value.


     kind        Indicates the type, or kind, of tag.  Its  value
                 is  either  one  of the corresponding one-letter
                 flags described under the various --<LANG>-kinds



Darren Hiebert      Last change: Version 5.7                   19






Exuberant Ctags                                          CTAGS(1)



                 options  above,  or a full name. It is permitted
                 (and is, in fact, the default) for the key  por-
                 tion  of  this field to be omitted. The optional
                 behaviors  are  controlled  with  the   --fields
                 option.


     implementation
                 When present, this indicates a limited implemen-
                 tation  (abstract  vs. concrete) of a routine or
                 class, where value is specific to  the  language
                 ("virtual" or "pure virtual" for C++; "abstract"
                 for Java).


     inherits    When present, value. is a  comma-separated  list
                 of  classes  from  which  this  class is derived
                 (i.e. inherits from).


     signature   When  present,  value  is  a  language-dependent
                 representation  of the signature of a routine. A
                 routine signature in its complete form specifies
                 the  return  type  of  a  routine and its formal
                 argument list. This extension field is presently
                 supported  only  for  C-based languages and does
                 not include the return type.


     In addition, information on the scope of the tag  definition
     may  be  available,  with  the  key  portion  equal  to some
     language-dependent construct name and  its  value  the  name
     declared for that construct in the program. This scope entry
     indicates the scope in which the tag was found. For example,
     a  tag generated for a C structure member would have a scope
     looking like "struct:myStruct".



HOW TO USE WITH VI
     Vi will, by default, expect a tag file by the name "tags" in
     the  current directory. Once the tag file is built, the fol-
     lowing commands exercise the tag indexing feature:

     vi -t tag   Start vi and position the cursor at the file and
                 line where "tag" is defined.

     :ta tag     Find a tag.

     Ctrl-]      Find the tag under the cursor.

     Ctrl-T      Return to previous location before jump  to  tag



Darren Hiebert      Last change: Version 5.7                   20






Exuberant Ctags                                          CTAGS(1)



                 (not widely implemented).



HOW TO USE WITH GNU EMACS
     Emacs will, by default, expect a tag file by the name "TAGS"
     in  the  current  directory. Once the tag file is built, the
     following commands exercise the tag indexing feature:

     M-x visit-tags-table <RET> FILE <RET>
               Select the tag file, "FILE", to use.

     M-. [TAG] <RET>
               Find the first definition of TAG. The default  tag
               is the identifier under the cursor.

     M-*       Pop back to where you previously invoked "M-.".

     C-u M-.   Find the next definition for the last tag.


     For more commands, see the Tags  topic  in  the  Emacs  info
     document.



HOW TO USE WITH NEDIT
     NEdit version 5.1 and later can handle the new extended  tag
     file  format (see --format). To make NEdit use the tag file,
     select "File->Load Tags File". To jump to the definition for
     a  tag,  highlight the word, the press Ctrl-D. NEdit 5.1 can
     can read multiple  tag  files  from  different  directories.
     Setting  the  X  resource nedit.tagFile to the name of a tag
     file instructs NEdit to automatically load that tag file  at
     startup time.



CAVEATS
     Because ctags is neither a preprocessor nor a compiler,  use
     of  preprocessor  macros  can fool ctags into either missing
     tags or improperly generating inappropriate  tags.  Although
     ctags has been designed to handle certain common cases, this
     is the single biggest cause of reported problems. In partic-
     ular,  the  use  of  preprocessor constructs which alter the
     textual syntax of C can fool ctags. You can work around many
     such problems by using the -I option.

     Note that since ctags generates patterns for  locating  tags
     (see  the  --excmd option), it is entirely possible that the
     wrong line may be found  by  your  editor  if  there  exists
     another   source   line  which  is  identical  to  the  line



Darren Hiebert      Last change: Version 5.7                   21






Exuberant Ctags                                          CTAGS(1)



     containing the tag. The following example demonstrates  this
     condition:

          int variable;

          /* ... */
          void foo(variable)
          int variable;
          {
              /* ... */
          }

     Depending upon which editor you use and where  in  the  code
     you happen to be, it is possible that the search pattern may
     locate the local parameter declaration in  foo()  before  it
     finds the actual global variable definition, since the lines
     (and therefore their search patterns  are  identical).  This
     can be avoided by use of the --excmd=n option.



BUGS
     Ctags has more options than ls(1).

     When  parsing  a  C++  member  function   definition   (e.g.
     "className::function"),  ctags  cannot determine whether the
     scope specifier is a class name or a namespace specifier and
     always  lists it as a class name in the scope portion of the
     extension fields. Also, if a C++ function is defined outside
     of  the  class  declaration  (the  usual  case),  the access
     specification  (i.e.  public,  protected,  or  private)  and
     implementation information (e.g. virtual, pure virtual) con-
     tained in the function declaration are not  known  when  the
     tag  is generated for the function definition. It will, how-
     ever be available for prototypes (e.g --c++-kinds=+p).

     No qualified tags are generated for language objects  inher-
     ited into a class.



ENVIRONMENT VARIABLES
     CTAGS   If this environment  variable  exists,  it  will  be
             expected  to  contain a set of default options which
             are read when ctags starts, after the  configuration
             files  listed  in FILES, below, are read, but before
             any command line options are read. Options appearing
             on  the command line will override options specified
             in this variable. Only options  will  be  read  from
             this  variable.  Note  that  all white space in this
             variable is considered a separator, making it impos-
             sible  to  pass  an  option  parameter containing an



Darren Hiebert      Last change: Version 5.7                   22






Exuberant Ctags                                          CTAGS(1)



             embedded space. If this is a problem, use  a  confi-
             guration file instead.


     ETAGS   Similar to the CTAGS variable above, this  variable,
             if  found,  will  be read when etags starts. If this
             variable is not found, etags will try to  use  CTAGS
             instead.


     TMPDIR  On Unix-like hosts where mkstemp() is available, the
             value  of  this  variable specifies the directory in
             which to place temporary files. This can  be  useful
             if the size of a temporary file becomes too large to
             fit on the partition holding the  default  temporary
             directory   defined   at  compilation  time.   ctags
             creates  temporary  files  only  if  either  (1)  an
             emacs-style tag file is being generated, (2) the tag
             file is being sent to standard output,  or  (3)  the
             program  was  compiled to use an internal sort algo-
             rithm to sort the tag files instead of the the  sort
             utility of the operating system. If the sort utility
             of the operating system is being used, it will  gen-
             erally  observe  this  variable  also.  Note that if
             ctags  is  setuid,  the  value  of  TMPDIR  will  be
             ignored.



FILES
     /ctags.cnf (on MSDOS, MSWindows only)
     /etc/ctags.conf
     /usr/local/etc/ctags.conf
     $HOME/.ctags
     $HOME/ctags.cnf (on MSDOS, MSWindows only)
     .ctags
     ctags.cnf (on MSDOS, MSWindows only)
          If any of these configuration files exist, each will be
          expected  to contain a set of default options which are
          read in the order listed when ctags starts, but  before
          the  CTAGS  environment variable is read or any command
          line options are read. This makes it possible to set up
          site-wide,  personal  or  project-level defaults. It is
          possible to compile ctags to read an additional  confi-
          guration  file  before  any of those shown above, which
          will be indicated if the output produced by the  --ver-
          sion  option  lists  the "custom-conf" feature. Options
          appearing in the CTAGS environment variable or  on  the
          command  line  will override options specified in these
          files. Only options will be read from these files. Note
          that the option files are read in line-oriented mode in
          which spaces are significant (since  shell  quoting  is



Darren Hiebert      Last change: Version 5.7                   23






Exuberant Ctags                                          CTAGS(1)



          not  possible).  Each  line  of the file is read as one
          command line parameter (as if it were quoted with  sin-
          gle  quotes).  Therefore,  use  new  lines  to indicate
          separate command-line arguments.


     tags The default tag file created by ctags.

     TAGS The default tag file created by etags.


SEE ALSO
     The official Exuberant Ctags web site at:

          http://ctags.sourceforge.net

     Also ex(1), vi(1), elvis, or, better yet, vim, the  official
     editor  of  ctags.  For more information on vim, see the VIM
     Pages web site at:

          http://www.vim.org/



AUTHOR
     Darren Hiebert <dhiebert at users.sourceforge.net>
     http://DarrenHiebert.com/



MOTIVATION
     "Think ye at all times of rendering some  service  to  every
     member of the human race."

     "All effort and exertion put forth by man from the  fullness
     of  his  heart  is worship, if it is prompted by the highest
     motives and the will to do service to humanity."

          -- From the Baha'i Writings



CREDITS
     This version  of  ctags  was  originally  derived  from  and
     inspired   by   the   ctags   program  by  Steve  Kirkendall
     <kirkenda@cs.pdx.edu> that comes with  the  Elvis  vi  clone
     (though virtually none of the original code remains).

     Credit is also due Bram Moolenaar <Bram@vim.org>, the author
     of  vim, who has devoted so much of his time and energy both
     to developing the editor as a  service  to  others,  and  to
     helping the orphans of Uganda.



Darren Hiebert      Last change: Version 5.7                   24






Exuberant Ctags                                          CTAGS(1)



     The section entitled "HOW TO USE WITH GNU EMACS" was  shame-
     lessly stolen from the info page for GNU etags.





















































Darren Hiebert      Last change: Version 5.7                   25




--------------090207090502090001000206--

From brian.utterback@sun.com Mon Dec 22 07:28:19 2008
Received: from sunmail4.singapore.sun.com (sunmail4.Singapore.Sun.COM [129.158.71.19])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBMFSHLB022211
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 22 Dec 2008 07:28:18 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail4.singapore.sun.com (8.13.4+Sun/8.13.3/ENSMAIL,v2.2) with ESMTP id mBMFSDPT021259
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 22 Dec 2008 23:28:15 +0800 (SGT)
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCA00B05AZ2P200@nwk-avmta-2.sfbay.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 22 Dec 2008 07:28:14 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCA008I1AZ0ZN40@nwk-avmta-2.sfbay.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 22 Dec 2008 07:28:13 -0800 (PST)
Received: from [129.148.9.185] (sr1-ubur-27.East.Sun.COM [129.148.9.185])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBMFS8GX041876; Mon, 22 Dec 2008 10:28:09 -0500 (EST)
Date: Mon, 22 Dec 2008 10:28:08 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
To: LSARC@sac.sfbay.sun.com, lsarc-ext@sun.com
Cc: Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <494FB208.4020803@sun.com>
MIME-version: 1.0
Content-type: multipart/mixed; boundary="Boundary_(ID_UCwkrGuRfBMAQOsJGavvPQ)"
X-PMX-Version: 5.4.1.325704
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
Status: RO
Content-Length: 73586

This is a multi-part message in MIME format.

--Boundary_(ID_UCwkrGuRfBMAQOsJGavvPQ)
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT

I am submitting this fastrack on behalf of Thomas Preisler.

Exposure is open.

Template Version: @(#)sac_nextcase %I% %G% SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
     1.1. Project/Component Working Name:
	 Exuberant CTags
     1.2. Name of Document Author/Supplier:
	 Author:  Brian Utterback
     1.3  Date of This Document:
	22 December, 2008
4. Technical Description

Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
program. It generates an index of source code object definitions which 
is used by a number of editors and tools to instantly locate the 
definitions. Exuberant Ctags currently supports the following languages:
   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
   Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
   PHP, PL/SQL, Python, REXX, Ruby, Scheme,
   Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
   Verilog, Vim, and YACC.

This project proposes to deliver the ctags binary from the Exuberant 
CTags FOSS project renamed to exctags to avoid conflict with the 
existing ctags binary currently delivered as part of the SUNWtoo 
programming tools package. This follows the already established 
convention used by other platforms.

The FOSSchecklist and man page are enclosed for review.

A minor/patch binding is requested.
-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

--Boundary_(ID_UCwkrGuRfBMAQOsJGavvPQ)
Content-type: text/plain; name=FOSS_Checklist.txt
Content-transfer-encoding: 7BIT
Content-disposition: inline; filename=FOSS_Checklist.txt

FCL--FOSS Check List
1.0 Project Information
1.1 Name of project/component
  Exuberant Ctags Packaging for OpenSolaris

1.2 Author of document
  Thomas Preisler

2.0 Project Summary
  2.1 Project Description
  Package current version (5.7) of Exuberant CTags release.

  Exuberant Ctags is a multilanguage reimplementation of the Unix
  ctags program. It generates an index of source code object definitions
  which is used by a number of editors and tools to instantly locate the
  definitions. Exuberant Ctags currently supports the following languages:
  Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang, Fortran,
  HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL,
  Python, REXX, Ruby, Scheme, Shell (Bourne, Korn, Z), S-Lang,
  SML (Standard ML), Tcl, Vera, Verilog, Vim, and YACC. 
  
  2.2 Release binding
      What is is the release binding?
      (see http://opensolaris.org/os/community/arc/policies/release-taxonomy/)
      [ ] Major
      [ ] Minor
      [x] Patch or Micro
      [ ] Unknown -- ARC review required

  2.3 Type of project
      Is this case a Linux Familiarity project?
      [ ] Yes
      [x] No

  2.4 Originating Community
    2.4.1 Community Name
    
    2.4.2 Community Involvement
      Indicate Sun's involvement in the community
      [ ] Maintainer
      [ ] Contributor
      [x] Monitoring
      
      Will the project team work with the upstream community to resolve
      architectural issues of interest to Sun?
      [ ] Yes 
      [x] No - briefly explain
      Not needed.
      
      Will we or are we forking from the community?
      [ ] Yes - ARC review required prior to forking
      [x] No
      
3.0 Technical Description
  3.1 Installation & Sharable
    3.1.1S Solaris Installation - section only required for Solaris Software
      (see http://opensolaris.org/os/community/arc/policies/install-locations/ for details)
      Does this project follow the Install Locations best practice?
      [x] Yes 
      [ ] No - ARC review required
      
      Does this project install into /usr under [sbin|bin|lib|include|man|share]?
      [x] Yes
      [ ] No or N/A
      
      Does this project install into /opt?
      [ ] Yes - explain below
      [x] No or N/A
      
      Does this project install into a different directory structure?
      [ ] Yes - ARC review required
      [x] No or N/A
      
      Do any of the components of this project conflict with anything under /usr?
      (see http://opensolaris.org/os/community/arc/caselog/2007/047/ for details)
      [ ] Yes - explain below (?)
      [x] No
      Default Exuberant Ctags binary name is ctags and would naturally install into /usr/bin/ctags
      but Solaris ctags is already installed in /usr/bin. To avoid conflict, Common pratice
      is to rename the binary and install it with the different name in '/usr/bin'. New name of 
      Exuberant Ctags is exctags which is a common alternative name used by many others (try google for exctags).
      
      If conflicts exist then will this project install under /usr/gnu?
      [ ] Yes
      [ ] No - ARC review required
      [x] N/A
      Note: Exuberant Ctags is not a GNU product.
      
      Is this project installing into /usr/sfw?
      [ ] Yes - ARC review required
      [x] No
      
    3.1.1W Windows Installation - section only required for Windows Software
	Section not applicable.
      
    3.1.2 Share and Sharable
      Does the module include any components that are used or shared by 
      other projects?
      [ ] Yes
      [x] No
    
      If yes are these components packaged to be shared with the other FOSS?
      [ ] Yes
      [ ] No - ARC review required
      [x] N/A
    
  3.2 Exported Libraries
      Are libraries being delivered by this project?
      [ ] Yes
      [x] No - continue with next section (section 3.3)
      
  3.3 Services and the /etc Directory
      (see http://opensolaris.org/os/community/arc/policies/SMF-policy/)
      Does the project integrate anything into /etc/init.d or /etc/rc?.d?
      [ ] Yes - ARC review required
      [x] No
      
      Does the project integrate any new entries into /etc/inittab or
      /etc/inetd.conf?
      [ ] Yes - ARC review required
      [x] No
      
      Does the project integrate any private non-public files into /etc/default
      or /etc/ configuration files?
      [ ] Yes - ARC review required
      [x] No
      
      Does the service manifests method context grant rights above that
      of the noaccess user and basic privilege set?
      [ ] Yes - ARC review required
      [x] No
        
  3.4 Security
    3.4.1 Secure By Default 
      (see http://opensolaris.org/os/community/arc/policies/secure-by-default/ for details)
      (see http://www.opensolaris.org/os/community/arc/policies/NITS-policy/ for details)
      (see parts of http://opensolaris.org/os/community/arc/policies/SMF-policy/ for
       addtional details)
      Are there any network services provided by this project?
      [ ] Yes
      [x] No - continue with the next section (section 3.4.2)
      
    3.4.2 Authorization
      (see http://opensolaris.org/os/community/arc/bestpractices/rbac-intro/ and
	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/ and
	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/
           for details)
      Are there any setuid/setgid privileged binaries in the project?
      [ ] Yes - ARC review required
      [x] No - continue with next section (section 3.4.3)
      
    3.4.3 Auditing
      (see http://opensolaris.org/os/community/arc/policies/audit-policy/ for details)
      (see http://opensolaris.org/os/community/arc/caselog/2003/397 for details)
      Does this component contain administrative or security enforcing software?
      [ ] Yes - ARC review required
      [x] No - continue to next section (section 3.4.4)
        
    3.4.4 Authentication
      (see http://opensolaris.org/os/community/arc/policies/PAM/)
      Do the components contain any authentication code?
      [ ] Yes
      [x] No - continue to next section (section 3.4.5)
      
    3.4.5 Passwords
      (see http://opensolaris.org/os/community/arc/bestpractices/passwords-cli/ and
           http://opensolaris.org/os/community/arc/bestpractices/passwords-files/ for details)
      Do any of the components for the project deal with passwords?
      [ ] Yes
      [x] No - continue to next section (section 3.4.6)
      
    3.4.6 General Security Questions
      (see http://opensolaris.org/os/community/arc/bestpractices/security-questions/ for details)
      Are there any network protocols used by this project?
      [ ] Yes
      [x] No - continue with the next section (section 3.5)
      
  3.5 Networking
      Do the components access the network?
      [ ] Yes
      [x] No - continue with the next section (section 3.6)
      
  3.6 Core Solaris Components
      Do the components of this project compete with or duplicate core 
      Solaris components?
      [ ] Yes - ARC review required
      [x] No 
      
      Examples of Core Solaris Components include but are not limited to:
      
        Secure By Default
        Authorizations
        PAM -- Plugable Authentication Module
        Privilege
        PRM -- Process Rights Management -- Privilege
        Audit
        xVm -- Virtualization
        zones / Solaris Containers
        PRM -- Process Rights Management
        RBAC -- Role Based Access Control
        TX / Trusted Extensions
        ZFS
        SMF -- Service Management Facility
        FMA -- Fault Management Architecture
        SCF -- Smart Card Facility
        IPsec
        
4.0 Interfaces
  (see http://www.opensolaris.org/os/community/arc/policies/interface-taxonomy/ for details)
  4.1 Exported Interfaces
  
    Interface Name                Classification  Comments
    ----------------              --------------  ----------------------
    SUNWexctags                   Uncommitted     Package
    /usr/bin/exctags              Uncommitted     Executable binary file
    
  4.2 Imported Interfaces
    Interface Name		Classification       Comments
    --------------------------- -------------------- --------------------------
    
    
  Brief Interface Classifications - See Appendix C for definitions
    Volatile - interfaces are fluid and will follow a rapidly changing community
    Uncommitted - interfaces are still evolving in the community and might follow
		  the community
    Committed - interfaces are stable in the community
    Project Private - no review required, just document in table
    Contracted (interface modifier) - further review required


--Boundary_(ID_UCwkrGuRfBMAQOsJGavvPQ)
Content-type: text/plain; name=exctags.1.txt
Content-transfer-encoding: 7BIT
Content-disposition: inline; filename=exctags.1.txt




Exuberant Ctags                                          CTAGS(1)



NAME
     ctags - Generate tag files for source code



SYNOPSIS
     ctags [options] [file(s)]

     etags [options] [file(s)]



DESCRIPTION
     The  ctags  and  etags  programs  (hereinafter  collectively
     referred  to  as ctags, except where distinguished) generate
     an index (or "tag") file for a variety of  language  objects
     found  in  file(s).   This tag file allows these items to be
     quickly and easily located by a text editor or  other  util-
     ity.  A "tag" signifies a language object for which an index
     entry is  available  (or,  alternatively,  the  index  entry
     created for that object).

     Alternatively, ctags can generate  a  cross  reference  file
     which  lists,  in human readable form, information about the
     various source objects found in a set of language files.

     Tag index files are supported  by  numerous  editors,  which
     allow  the  user to locate the object associated with a name
     appearing in a source file and jump to  the  file  and  line
     which  defines  the  name.  Those known about at the time of
     this release are:

         Vi(1)  and  its  derivatives  (e.g.  Elvis,  Vim,  Vile,
         Lemmy),  CRiSP,  Emacs,  FTE (Folding Text Editor), JED,
         jEdit, Mined, NEdit (Nirvana  Edit),  TSE  (The  SemWare
         Editor), UltraEdit, WorkSpace, X2, Zeus

     Ctags is capable of generating different kinds of  tags  for
     each  of  many  different  languages. For a complete list of
     supported languages, the names by which they are recognized,
     and  the kinds of tags which are generated for each, see the
     --list-languages and --list-kinds options.



SOURCE FILES
     Unless  the  --language-force  option  is   specified,   the
     language of each source file is automatically selected based
     upon a mapping of file names to languages. The  mappings  in
     effect   for   each   language  may  be  display  using  the
     --list-maps option and may be changed  using  the  --langmap
     option.   On  platforms  which  support it, if the name of a



Darren Hiebert      Last change: Version 5.7                    1






Exuberant Ctags                                          CTAGS(1)



     file is not mapped to a language and the file is executable,
     the  first line of the file is checked to see if the file is
     a "#!" script for a recognized language.

     By default, all other files names are ignored. This  permits
     running  ctags  on  all  files  in either a single directory
     (e.g. "ctags *"), or on all files in an entire source direc-
     tory  tree  (e.g.  "ctags -R"), since only those files whose
     names are mapped to languages will be scanned.

     [The reason that .h  extensions  are  mapped  to  C++  files
     rather than C files is because it is common to use .h exten-
     sions in C++, and no harm results in treating  them  as  C++
     files.]



OPTIONS
     Despite the wealth of available options, defaults are set so
     that  ctags  is  most  commonly executed without any options
     (e.g. "ctags *", or "ctags -R"), which  will  create  a  tag
     file  in  the  current  directory  for all recognized source
     files. The options described below are  provided  merely  to
     allow custom tailoring to meet special needs.

     Note that spaces separating the single-letter  options  from
     their parameters are optional.

     Note also that the  boolean  parameters  to  the  long  form
     options   (those   beginning  with  "--"  and  that  take  a
     "[=yes|no]" parameter) may be omitted, in which case  "=yes"
     is  implied. (e.g. --sort is equivalent to --sort=yes). Note
     further that "=1" and  "=on"  are  considered  synonyms  for
     "=yes", and that "=0" and "=off" are considered synonyms for
     "=no".

     Some options are either ignored or  useful  only  when  used
     while  running  in  etags mode (see -e option). Such options
     will be noted.

     Most options  may  appear  anywhere  on  the  command  line,
     affecting  only  those  files which follow the option. A few
     options, however, must appear before the first file name and
     will be noted as such.

     Options taking language names will  accept  those  names  in
     either  upper or lower case. See the --list-languages option
     for a complete list of the built-in language names.


     -a   Equivalent to --append.




Darren Hiebert      Last change: Version 5.7                    2






Exuberant Ctags                                          CTAGS(1)



     -B   Use  backward  searching  patterns  (e.g.   ?pattern?).
          [Ignored in etags mode]


     -e   Enable etags mode, which will create a tag file for use
          with  the  Emacs  editor.   Alternatively,  if ctags is
          invoked by a name containing the string "etags" (either
          by  renaming,  or  creating a link to, the executable),
          etags mode will be enabled.  This  option  must  appear
          before the first file name.


     -f tagfile
          Use the name specified by  tagfile  for  the  tag  file
          (default  is  "tags",  or  "TAGS" when running in etags
          mode). If tagfile is specified as  "-",  then  the  tag
          file  is written to standard output instead. Ctags will
          stubbornly refuse to take orders if tagfile exists  and
          its  first  line  contains something other than a valid
          tags line. This will save your neck if  you  mistakenly
          type  "ctags  -f  *.c", which would otherwise overwrite
          your first C file with the tags generated by the  rest!
          It  will  also  refuse to accept a multi-character file
          name which begins with a '-'  (dash)  character,  since
          this  most  likely means that you left out the tag file
          name and this option tried to grab the next  option  as
          the  file  name. If you really want to name your output
          tag file "-ugly", specify it as "./-ugly". This  option
          must  appear before the first file name. If this option
          is specified more than once, only the last will apply.


     -F   Use  forward  searching   patterns   (e.g.   /pattern/)
          (default).  [Ignored in etags mode]


     -h list
          Specifies a  list  of  file  extensions,  separated  by
          periods,  which  are  to  be interpreted as include (or
          header) files. To indicate files having  no  extension,
          use  a  period  not  followed by a non-period character
          (e.g. ".", "..x", ".x."). This option only affects  how
          the  scoping  of  a  particular kinds of tags is inter-
          preted (i.e. whether or not they are considered as glo-
          bally  visible or visible only within the file in which
          they are defined); it does not map the extension to any
          particular  language.  Any  tag  which  is located in a
          non-include file and cannot be seen  (e.g.  linked  to)
          from  another  file  is considered to have file-limited
          (e.g. static) scope. No kind of  tag  appearing  in  an
          include  file  will  be considered to have file-limited
          scope. If the first character in the  list  is  a  plus



Darren Hiebert      Last change: Version 5.7                    3






Exuberant Ctags                                          CTAGS(1)



          sign,  then the extensions in the list will be appended
          to the current list; otherwise, the list  will  replace
          the  current  list. See, also, the --file-scope option.
          The default list is  ".h.H.hh.hpp.hxx.h++.inc.def".  To
          restore the default list, specify -h default. Note that
          if an extension supplied to this option is not  already
          mapped  to  a  particular  language  (see SOURCE FILES,
          above), you will also need to use either the  --langmap
          or --language-force option.


     -I identifier-list
          Specifies a list of identifiers which are  to  be  spe-
          cially  handled  while  parsing C and C++ source files.
          This option is specifically provided to handle  special
          cases  arising  through the use of preprocessor macros.
          When the identifiers  listed  are  simple  identifiers,
          these identifiers will be ignored during parsing of the
          source files. If an identifier is suffixed with  a  '+'
          character,  ctags  will  also  ignore  any parenthesis-
          enclosed argument list which may immediately follow the
          identifier  in the source files. If two identifiers are
          separated with the '=' character, the first identifiers
          is  replaced by the second identifiers for parsing pur-
          poses. The list of identifiers may be supplied directly
          on the command line or read in from a separate file. If
          the first character of identifier-list is '@', '.' or a
          pathname separator ('/' or '\'), or the first two char-
          acters specify a drive letter (e.g. "C:"), the  parame-
          ter  identifier-list  will be interpreted as a filename
          from which to read a list of identifiers, one per input
          line.  Otherwise, identifier-list is a list of identif-
          iers (or identifier pairs)  to  be  specially  handled,
          each  delimited  by  a either a comma or by white space
          (in which case the list should be quoted  to  keep  the
          entire  list as one command line argument). Multiple -I
          options may be supplied.  To clear the list  of  ignore
          identifiers,   supply   a   single   dash   ("-")   for
          identifier-list.

          This feature is useful  when  preprocessor  macros  are
          used  in such a way that they cause syntactic confusion
          due to their presence. Indeed, this is the best way  of
          working around a number of problems caused by the pres-
          ence of syntax-busting  macros  in  source  files  (see
          CAVEATS,  below).  Some  examples  will illustrate this
          point.

             int foo ARGDECL4(void *, ptr, long int, nbytes)


          In the above example, the  macro  "ARGDECL4"  would  be



Darren Hiebert      Last change: Version 5.7                    4






Exuberant Ctags                                          CTAGS(1)



          mistakenly  interpreted  to be the name of the function
          instead of the correct name  of  "foo".  Specifying  -I
          ARGDECL4 results in the correct behavior.

             /* creates an RCS version string in module */
             MODULE_VERSION("$Revision: 590 $")


          In the above example the  macro  invocation  looks  too
          much  like a function definition because it is not fol-
          lowed by a semicolon (indeed, it could even be followed
          by  a  global  variable definition that would look much
          like a K&R style function  parameter  declaration).  In
          fact,  this  seeming function definition could possibly
          even cause the rest of the  file  to  be  skipped  over
          while  trying to complete the definition. Specifying -I
          MODULE_VERSION+ would avoid such a problem.

             CLASS Example {
                 // your content here
             };


          The example above uses "CLASS" as a preprocessor  macro
          which expands to something different for each platform.
          For  instance  CLASS   may   be   defined   as   "class
          __declspec(dllexport)"  on  Win32  platforms and simply
          "class" on UNIX.  Normally, the absence of the C++ key-
          word   "class"  would  cause  the  source  file  to  be
          incorrectly parsed. Correct behavior can be restored by
          specifying -I CLASS=class.


     -L file
          Read from file a list of  file  names  for  which  tags
          should be generated.  If file is specified as "-", then
          file names are read from  standard  input.  File  names
          read  using  this  option  are processed following file
          names appearing on the command line. Options  are  also
          accepted  in  this  input.  If this option is specified
          more than once, only the last will apply.  Note:   file
          is  read in line-oriented mode, where a new line is the
          only delimiter and non-trailing  white  space  is  con-
          sidered  significant, in order that file names contain-
          ing spaces may be  supplied  (however,  trailing  white
          space  is  stripped  from  lines);  this can affect how
          options are parsed if included in the input.


     -n   Equivalent to --excmd=number.





Darren Hiebert      Last change: Version 5.7                    5






Exuberant Ctags                                          CTAGS(1)



     -N   Equivalent to --excmd=pattern.


     -o tagfile
          Equivalent to -f tagfile.


     -R   Equivalent to --recurse.


     -u   Equivalent to --sort=no (i.e. "unsorted").


     -V   Equivalent to --verbose.


     -w   This  option  is   silently   ignored   for   backward-
          compatibility with the ctags of SVR4 Unix.


     -x   Print a tabular, human-readable cross reference  (xref)
          file  to  standard  output  instead of generating a tag
          file. The information contained in the output includes:
          the  tag  name;  the kind of tag; the line number, file
          name, and source line  (with  extra  white  space  con-
          densed)  of the file which defines the tag. No tag file
          is written and all options affecting  tag  file  output
          will  be ignored. Example applications for this feature
          are generating a listing of all functions located in  a
          source  file  (e.g. ctags -x --c-kinds=f file), or gen-
          erating a list of all externally visible  global  vari-
          ables   located   in  a  source  file  (e.g.  ctags  -x
          --c-kinds=v --file-scope=no  file).  This  option  must
          appear before the first file name.


     --append[=yes|no]
          Indicates whether tags  generated  from  the  specified
          files  should  be  appended to those already present in
          the tag file or should replace them. This option is off
          by  default.  This  option must appear before the first
          file name.


     --etags-include=file
          Include a reference to  file  in  the  tag  file.  This
          option  may be specified as many times as desired. This
          supports Emacs' capability to  use  a  tag  file  which
          "includes"  other  tag  files. [Available only in etags
          mode]





Darren Hiebert      Last change: Version 5.7                    6






Exuberant Ctags                                          CTAGS(1)



     --exclude=[pattern]
          Add pattern to a list  of  excluded  files  and  direc-
          tories.  This  option may be specified as many times as
          desired. For each file name considered by  ctags,  each
          pattern  specified  using  this option will be compared
          against    both     the     complete     path     (e.g.
          some/path/base.ext)  and  the base name (e.g. base.ext)
          of the file, thus allowing patterns which match a given
          file  name  irrespective  of  its path, or match only a
          specific path. If appropriate support is available from
          the  runtime  library  of your C compiler, then pattern
          may contain the  usual  shell  wildcards  (not  regular
          expressions)  common  on  Unix  (be  sure  to quote the
          option parameter to protect the  wildcards  from  being
          expanded  by  the  shell  before being passed to ctags;
          also be aware that wildcards can match the slash  char-
          acter,  '/').  You can determine if shell wildcards are
          available on your platform by examining the  output  of
          the  --version  option, which will include "+wildcards"
          in the compiled feature  list;  otherwise,  pattern  is
          matched  against file names using a simple textual com-
          parison.

          If pattern begins with the character '@', then the rest
          of  the string is interpreted as a file name from which
          to read exclusion patterns, one per line. If pattern is
          empty,  the list of excluded patterns is cleared.  Note
          that at program startup, the default exclude list  con-
          tains  "EIFGEN",  "SCCS",  "RCS",  and "CVS", which are
          names of directories for  which  it  is  generally  not
          desirable  to  descend  while  processing the --recurse
          option.


     --excmd=type
          Determines the type of EX command used to  locate  tags
          in the source file.  [Ignored in etags mode]

          The valid values for type (either the  entire  word  or
          the first letter is accepted) are:


          number   Use only line numbers  in  the  tag  file  for
                   locating tags. This has four advantages:
                   1.  Significantly  reduces  the  size  of  the
                       resulting tag file.
                   2.  Eliminates failures to find  tags  because
                       the  line  defining  the  tag has changed,
                       causing the pattern match  to  fail  (note
                       that  some  editors, such as vim, are able
                       to recover in many such instances).
                   3.  Eliminates finding identical matching, but



Darren Hiebert      Last change: Version 5.7                    7






Exuberant Ctags                                          CTAGS(1)



                       incorrect, source lines (see BUGS, below).
                   4.  Retains separate entries in the  tag  file
                       for  lines which are identical in content.
                       In pattern  mode,  duplicate  entries  are
                       dropped  because  the search patterns they
                       generate are identical, making the  dupli-
                       cate entries useless.


                   However, this option has one significant draw-
                   back:  changes  to  the source files can cause
                   the line numbers recorded in the tag  file  to
                   no  longer  correspond  to  the  lines  in the
                   source file, causing jumps  to  some  tags  to
                   miss  the  target  definition  by  one or more
                   lines. Basically, this  option  is  best  used
                   when the source code to which it is applied is
                   not subject to change. Selecting  this  option
                   type   causes  the  following  options  to  be
                   ignored: -BF.


          pattern  Use only search patterns for all tags,  rather
                   than  the  line numbers usually used for macro
                   definitions. This has  the  advantage  of  not
                   referencing  obsolete  line numbers when lines
                   have been added or removed since the tag  file
                   was generated.


          mixed    In this mode, patterns are generally used with
                   a few exceptions. For C, line numbers are used
                   for  macro  definition  tags.  This  was   the
                   default format generated by the original ctags
                   and is, therefore, retained as the default for
                   this  option.  For  Fortran,  line numbers are
                   used   for   common   blocks   because   their
                   corresponding   source   lines  are  generally
                   identical, making pattern searches useless for
                   finding all matches.


     --extra=[+|-]flags
          Specifies whether to include extra tag entries for cer-
          tain kinds of information. The parameter flags is a set
          of one-letter flags,  each  representing  one  kind  of
          extra tag entry to include in the tag file. If flags is
          preceded by by either the '+'  or  '-'  character,  the
          effect of each flag is added to, or removed from, those
          currently enabled;  otherwise  the  flags  replace  any
          current  settings.  The meaning of each flag is as fol-
          lows:



Darren Hiebert      Last change: Version 5.7                    8






Exuberant Ctags                                          CTAGS(1)



             f   Include an entry for the base file name of every
                 source file (e.g.  "example.c"), which addresses
                 the first line of the file.

             q   Include an extra class-qualified tag  entry  for
                 each  tag  which  is  a  member  of a class (for
                 languages  for   which   this   information   is
                 extracted; currently C++, Eiffel, and Java). The
                 actual form of the qualified  tag  depends  upon
                 the  language  from  which  the  tag was derived
                 (using a form that is most natural for how qual-
                 ified  calls are specified in the language). For
                 C++, it is in the form "class::member"; for Eif-
                 fel  and Java, it is in the form "class.member".
                 This may allow easier  location  of  a  specific
                 tags  when  multiple  occurrences  of a tag name
                 occur in the tag file. Note, however, that  this
                 could  potentially  more than double the size of
                 the tag file.


     --fields=[+|-]flags
          Specifies the available extension fields which  are  to
          be  included  in  the  entries of the tag file (see TAG
          FILE FORMAT, below, for more information). The  parame-
          ter flags is a set of one-letter flags, each represent-
          ing one type of extension field to  include,  with  the
          following  meanings  (disabled  by default unless indi-
          cated):


             a   Access (or export) of class members
             f   File-restricted scoping [enabled]
             i   Inheritance information
             k   Kind of tag as a single letter [enabled]
             K   Kind of tag as full name
             l   Language of source file containing tag
             m   Implementation information
             n   Line number of tag definition
             s   Scope of tag definition [enabled]
             S   Signature of routine (e.g. prototype or  parame-
                 ter list)
             z   Include the "kind:" key in kind field
             t   Type and  name  of  a  variable  or  typedef  as
                 "typeref:" field [enabled]

          Each letter or group of  letters  may  be  preceded  by
          either  '+'  to  add  it  to the default set, or '-' to
          exclude it. In the absence of any preceding '+' or  '-'
          sign,  only those kinds explicitly listed in flags will
          be included in the output (i.e. overriding the  default
          set).  This  option is ignored if the option --format=1



Darren Hiebert      Last change: Version 5.7                    9






Exuberant Ctags                                          CTAGS(1)



          has been specified. The default value of this option is
          fks.


     --file-scope[=yes|no]
          Indicates whether tags scoped only for  a  single  file
          (i.e.  tags which cannot be seen outside of the file in
          which they are defined, such as "static"  tags)  should
          be  included  in  the output. See, also, the -h option.
          This option is enabled by default.


     --filter[=yes|no]
          Causes ctags to behave as a filter, reading source file
          names  from  standard  input and printing their tags to
          standard output on a file-by-file basis. If --sorted is
          enabled, tags are sorted only within the source file in
          which they are defined. File names are read from  stan-
          dard input in line-oriented input mode (see note for -L
          option) and only after file names listed on the command
          line  or  from  any  file supplied using the -L option.
          When this option is enabled, the options  -f,  -o,  and
          --totals are ignored. This option is quite esoteric and
          is disabled by default. This option must appear  before
          the first file name.


     --filter-terminator=string
          Specifies a string to print to standard output  follow-
          ing  the  tags  for  each  file  name  parsed  when the
          --filter option is enabled. This may permit an applica-
          tion  reading the output of ctags to determine when the
          output for each file is finished. Note that if the file
          name read is a directory and --recurse is enabled, this
          string will be printed only one once at the end of  all
          tags found for by descending the directory. This string
          will always be separated from the last tag line for the
          file  by its terminating newline.  This option is quite
          esoteric and is empty  by  default.  This  option  must
          appear before the first file name.


     --format=level
          Change the format of the output tag file. Currently the
          only  valid values for level are 1 or 2. Level 1 speci-
          fies the original tag file format and level 2 specifies
          a  new extended format containing extension fields (but
          in a manner which retains  backward-compatibility  with
          original  vi(1)  implementations). The default level is
          2. This option must appear before the first file  name.
          [Ignored in etags mode]




Darren Hiebert      Last change: Version 5.7                   10






Exuberant Ctags                                          CTAGS(1)



     --help
          Prints to standard output a detailed usage description,
          and then exits.


     --if0[=yes|no]
          Indicates a preference as to  whether  code  within  an
          "#if  0" branch of a preprocessor conditional should be
          examined for non-macro  tags  (macro  tags  are  always
          included).  Because  the intent of this construct is to
          disable code, the default value of this option  is  no.
          Note that this indicates a preference only and does not
          guarantee skipping code within an "#if 0" branch, since
          the  fall-back  algorithm  used  to  generate tags when
          preprocessor conditionals are too complex  follows  all
          branches  of  a conditional. This option is disabled by
          default.


     --<LANG>-kinds=[+|-]kinds
          Specifies a list of language-specific kinds of tags (or
          kinds)  to  include in the output file for a particular
          language, where <LANG> is case-insensitive and  is  one
          of    the    built-in    language    names   (see   the
          --list-languages  option  for  a  complete  list).  The
          parameter  kinds  is a group of one-letter flags desig-
          nating kinds of tags (particular to  the  language)  to
          either include or exclude from the output. The specific
          sets of flags recognized for each language, their mean-
          ings  and  defaults  may be list using the --list-kinds
          option. Each letter or group of letters may be preceded
          by  either  '+' to add it to, or '-' to remove it from,
          the default set. In the absence of any preceding '+' or
          '-'  sign,  only those kinds explicitly listed in kinds
          will be included in the output  (i.e.   overriding  the
          default for the specified language).

          As an example for the C language, in order to add  pro-
          totypes  and  external  variable  declarations  to  the
          default set of  tag  kinds,  but  exclude  macros,  use
          --c-kinds=+px-d;  to  include  only tags for functions,
          use --c-kinds=f.


     --langdef=name
          Defines a new user-defined language, name, to be parsed
          with  regular  expressions.  Once  defined, name may be
          used in other options taking language names. The  typi-
          cal use of this option is to first define the language,
          then map file names to it using --langmap, then specify
          regular  expressions using --regex-<LANG> to define how
          its tags are found.



Darren Hiebert      Last change: Version 5.7                   11






Exuberant Ctags                                          CTAGS(1)



     --langmap=map[,map[...]]
          Controls how file names are mapped  to  languages  (see
          the  --list-maps option). Each comma-separated map con-
          sists of the language name (either a built-in or  user-
          defined  language),  a colon, and a list of file exten-
          sions and/or file name patterns. A  file  extension  is
          specified  by  preceding  the  extension  with a period
          (e.g. ".c").  A  file  name  pattern  is  specified  by
          enclosing    the    pattern    in   parentheses   (e.g.
          "([Mm]akefile)"). If appropriate support  is  available
          from  the  runtime library of your C compiler, then the
          file name pattern may contain the usual shell wildcards
          common  on  Unix (be sure to quote the option parameter
          to protect the wildcards from  being  expanded  by  the
          shell  before being passed to ctags). You can determine
          if shell wildcards are available on  your  platform  by
          examining  the  output  of  the --version option, which
          will include "+wildcards" in the compiled feature list;
          otherwise,  the  file name patterns are matched against
          file names using a simple textual comparison. When map-
          ping  a  file extension, it will first be unmapped from
          any other languages.

          If the first character in a map is a  plus  sign,  then
          the  extensions and file name patterns in that map will
          be appended to the current map for that language;  oth-
          erwise, the map will replace the current map. For exam-
          ple, to specify that only files with extensions  of  .c
          and  .x  are  to  be  treated  as C language files, use
          "--langmap=c:.c.x"; to also add files  with  extensions
          of    .j    as    Java    language    files,    specify
          "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g.
          files  named  either  "Makefile", "makefile", or having
          the extension ".mak")  to  a  language  called  "make",
          specify   "--langmap=make:([Mm]akefile).mak".   To  map
          files having no extension, specify a  period  not  fol-
          lowed  by  a  non-period  character  (e.g.  ".", "..x",
          ".x."). To clear the mapping for a particular  language
          (thus  inhibiting automatic generation of tags for that
          language),  specify  an  empty  extension  list   (e.g.
          "--langmap=fortran:").  To restore the default language
          mappings for all a particular language, supply the key-
          word "default" for the mapping.  To specify restore the
          default language mappings for  all  languages,  specify
          "--langmap=default".  Note  that  file  extensions  are
          tested before file name  patterns  when  inferring  the
          language of a file.


     --language-force=language
          By default, ctags automatically selects the language of
          a  source  file,  ignoring  those  files whose language



Darren Hiebert      Last change: Version 5.7                   12






Exuberant Ctags                                          CTAGS(1)



          cannot be determined (see SOURCE  FILES,  above).  This
          option forces the specified language (case-insensitive;
          either built-in or user-defined) to be used  for  every
          supplied  file  instead  of automatically selecting the
          language based upon its  extension.  In  addition,  the
          special  value  auto indicates that the language should
          be automatically selected (which  effectively  disables
          this option).


     --languages=[+|-]list
          Specifies the languages for  which  tag  generation  is
          enabled, with list containing a comma-separated list of
          language names (case-insensitive;  either  built-in  or
          user-defined).  If  the  first  language of list is not
          preceded by either a '+' or '-', the current list  will
          be  cleared  before adding or removing the languages in
          list. Until a '-' is encountered, each language in  the
          list  will  be added to the current list. As either the
          '+' or '-' is encountered in the  list,  the  languages
          following  it  are  added  or  removed from the current
          list, respectively. Thus, it becomes simple to  replace
          the  current  list  with a new one, or to add or remove
          languages from the current list.  The  actual  list  of
          files for which tags will be generated depends upon the
          language extension mapping in effect (see the --langmap
          option).  Note  that  all  languages,  including  user-
          defined languages are enabled  unless  explicitly  dis-
          abled  using  this  option.  Language names included in
          list may be any built-in  language  or  one  previously
          defined  with --langdef. The default is "all", which is
          also  accepted   as   a   valid   argument.   See   the
          --list-languages  option  for  a  complete  list of the
          built-in language names.


     --license
          Prints a summary of the software  license  to  standard
          output, and then exits.


     --line-directives[=yes|no]
          Specifies whether "#line" directives should  be  recog-
          nized. These are present in the output of preprocessors
          and contain the line  number,  and  possibly  the  file
          name,  of  the  original  source file(s) from which the
          preprocessor output file was generated.  When  enabled,
          this  option  will  cause ctags to generate tag entries
          marked with the file names and line  numbers  of  their
          locations  original  source  file(s),  instead of their
          actual locations in the preprocessor output. The actual
          file  names placed into the tag file will have the same



Darren Hiebert      Last change: Version 5.7                   13






Exuberant Ctags                                          CTAGS(1)



          leading path  components  as  the  preprocessor  output
          file,  since  it  is  assumed  that the original source
          files are located relative to the  preprocessor  output
          file  (unless, of course, the #line directive specifies
          an absolute path). This option is off by default. Note:
          This option is generally only useful when used together
          with the --excmd=number (-n) option. Also, you may have
          to  use either the --langmap or --language-force option
          if the extension of the preprocessor output file is not
          known to ctags.


     --links[=yes|no]
          Indicates whether symbolic links (if supported)  should
          be followed. When disabled, symbolic links are ignored.
          This option is on by default.


     --list-kinds[=language|all]
          Lists the tag kinds recognized for either the specified
          language or all languages, and then exits. Each kind of
          tag recorded in the tag file is represented by  a  one-
          letter  flag,  which  is  also  used to filter the tags
          placed   into   the   output   through   use   of   the
          --<LANG>-kinds  option. Note that some languages and/or
          tag kinds may be implemented using regular  expressions
          and  may  not be available if regex support is not com-
          piled into ctags (see the --regex-<LANG> option).  Each
          kind listed is enabled unless followed by "[off]".


     --list-maps[=language|all]
          Lists the file extensions and file name patterns  which
          associate  a  file  name with a language for either the
          specified language or all languages,  and  then  exits.
          See the --langmap option, and SOURCE FILES, above.


     --list-languages
          Lists the names of the languages understood  by  ctags,
          and then exits.  These language names are case insensi-
          tive  and  may  be  used   in   the   --language-force,
          --languages,    --<LANG>-kinds,    and   --regex-<LANG>
          options.


     --options=file
          Read additional options from file. The file should con-
          tain  one  option  per  line.  As  a  special  case, if
          --options=NONE is specified as the first option on  the
          command  line, it will disable the automatic reading of
          any configuration options from either  a  file  or  the



Darren Hiebert      Last change: Version 5.7                   14






Exuberant Ctags                                          CTAGS(1)



          environment (see FILES).


     --recurse[=yes|no]
          Recurse into directories encountered  in  the  list  of
          supplied  files. If the list of supplied files is empty
          and no file list is specified with the -L option,  then
          the  current  directory (i.e. ".") is assumed. Symbolic
          links are followed. If you don't like these  behaviors,
          either  explicitly specify the files or pipe the output
          of find(1) into ctags -L- instead. Note: This option is
          not  supported  on  all  platforms  at  present.  It is
          available if the output of the --help  option  includes
          this  option.  See, also, the --exclude to limit recur-
          sion.


     --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
          The /regexp/replacement/ pair define a regular  expres-
          sion  replacement pattern, similar in style to sed sub-
          stitution commands, with which to  generate  tags  from
          source  files  mapped  to  the  named language, <LANG>,
          (case-insensitive; either a  built-in  or  user-defined
          language).  The  regular expression, regexp, defines an
          extended  regular  expression  (roughly  that  used  by
          egrep(1)), which is used to locate a single source line
          containing a tag and may specify tab  characters  using
          \t.  When  a matching line is found, a tag will be gen-
          erated for the name defined by replacement, which  gen-
          erally  will  contain  the  special  back-references \1
          through \9 to refer to matching  sub-expression  groups
          within  regexp.  The  '/' separator characters shown in
          the parameter to the option can actually be replaced by
          any  character. Note that whichever separator character
          is used will have to be escaped with a backslash  ('\')
          character wherever it is used in the parameter as some-
          thing other than a separator.  The  regular  expression
          defined  by this option is added to the current list of
          regular expressions for the specified  language  unless
          the  parameter  is  omitted,  in which case the current
          list is cleared.

          Unless modified by flags, regexp is  interpreted  as  a
          Posix  extended  regular  expression.  The  replacement
          should expand for all matching  lines  to  a  non-empty
          string  of  characters,  or  a  warning message will be
          reported. An optional kind specifier for tags  matching
          regexp  may  follow  replacement,  which will determine
          what kind of tag is reported in  the  "kind"  extension
          field  (see  TAG  FILE FORMAT, below). The full form of
          kind-spec is in the form of a single letter, a comma, a
          name (without spaces), a comma, a description, followed



Darren Hiebert      Last change: Version 5.7                   15






Exuberant Ctags                                          CTAGS(1)



          by a separator, which specify the short and long  forms
          of   the   kind   value  and  its  textual  description
          (displayed using --list-kinds). Either  the  kind  name
          and/or  the description may be omitted. If kind-spec is
          omitted, it defaults to "r,regex". Finally,  flags  are
          one or more single-letter characters having the follow-
          ing effect upon the interpretation of regexp:


             b   The pattern is interpreted as a Posix basic reg-
                 ular expression.

             e   The pattern is interpreted as a  Posix  extended
                 regular expression (default).

             i   The regular expression is to  be  applied  in  a
                 case-insensitive manner.

          Note that this option is available only  if  ctags  was
          compiled  with  support  for regular expressions, which
          depends upon your platform. You can determine  if  sup-
          port  for regular expressions is compiled in by examin-
          ing the output of  the  --version  option,  which  will
          include "+regex" in the compiled feature list.

          For more information on the regular expressions used by
          ctags,  see  either the regex(5,7) man page, or the GNU
          info documentation for regex (e.g. "info regex").


     --sort[=yes|no|foldcase]
          Indicates whether the tag file should be sorted on  the
          tag name (default is yes). Note that the original vi(1)
          required sorted tags. The foldcase value specifies case
          insensitive  (or  case-folded)  sorting.   Fast  binary
          searches of tag files  sorted  with  case-folding  will
          require  special  support  from  tools using tag files,
          such as that found in the ctags  readtags  library,  or
          Vim  version  6.2  or  higher (using "set ignorecase").
          This option must appear before  the  first  file  name.
          [Ignored in etags mode]


     --tag-relative[=yes|no]
          Indicates that the file paths recorded in the tag  file
          should  be relative to the directory containing the tag
          file, rather than relative to  the  current  directory,
          unless  the  files  supplied  on  the  command line are
          specified with absolute paths. This option must  appear
          before  the  first  file  name. The default is yes when
          running in etags mode (see the -e  option),  no  other-
          wise.



Darren Hiebert      Last change: Version 5.7                   16






Exuberant Ctags                                          CTAGS(1)



     --totals[=yes|no]
          Prints statistics about the source files read  and  the
          tag  file  written  during  the  current  invocation of
          ctags. This option is off by default.  This option must
          appear before the first file name.


     --verbose[=yes|no]
          Enable verbose mode. This  prints  out  information  on
          option  processing  and a brief message describing what
          action is being  taken  for  each  file  considered  by
          ctags. Normally, ctags does not read command line argu-
          ments until after options are read from the  configura-
          tion files (see FILES, below) and the CTAGS environment
          variable. However, if this option is the first argument
          on  the  command  line,  it will take effect before any
          options are read from these sources. The default is no.


     --version
          Prints a version identifier for ctags to standard  out-
          put,  and then exits. This is guaranteed to always con-
          tain the string "Exuberant Ctags".



OPERATIONAL DETAILS
     As ctags considers each file  name  in  turn,  it  tries  to
     determine the language of the file by applying the following
     three tests in order: if the file extension has been  mapped
     to  a  language,  if  the  file name matches a shell pattern
     mapped to a language, and finally if the file is  executable
     and  its first line specifies an interpreter using the Unix-
     style "#!" specification (if supported on the platform).  If
     a  language  was identified, the file is opened and then the
     appropriate language parser is  called  to  operate  on  the
     currently  open file. The parser parses through the file and
     adds an entry to the tag file for each language object it is
     written  to  handle. See TAG FILE FORMAT, below, for details
     on these entries.

     This implementation of ctags imposes no formatting  require-
     ments  on  C code as do legacy implementations. Older imple-
     mentations of ctags tended to rely upon  certain  formatting
     assumptions  in  order  to  help  it resolve coding dilemmas
     caused by preprocessor conditionals.

     In general,  ctags  tries  to  be  smart  about  conditional
     preprocessor  directives.  If  a preprocessor conditional is
     encountered within a statement which defines  a  tag,  ctags
     follows only the first branch of that conditional (except in
     the special case of "#if 0", in which case it  follows  only



Darren Hiebert      Last change: Version 5.7                   17






Exuberant Ctags                                          CTAGS(1)



     the  last  branch).  The  reason for this is that failing to
     pursue only one branch can result in ambiguous syntax, as in
     the following example:

          #ifdef TWO_ALTERNATIVES
          struct {
          #else
          union {
          #endif
              short a;
              long b;
          }

     Both branches cannot be followed, or  braces  become  unbal-
     anced and ctags would be unable to make sense of the syntax.

     If the application of this heuristic fails to properly parse
     a  file, generally due to complicated and inconsistent pair-
     ing within the conditionals, ctags will retry the file using
     a different heuristic which does not selectively follow con-
     ditional preprocessor branches, but instead  falls  back  to
     relying upon a closing brace ("}") in column 1 as indicating
     the end of a block once any  brace  imbalance  results  from
     following a #if conditional branch.

     Ctags will also try  to  specially  handle  arguments  lists
     enclosed  in  double  sets of parentheses in order to accept
     the following conditional construct:

          extern void foo __ARGS((int one, char two));

     Any name immediately preceding the "(("  will  be  automati-
     cally ignored and the previous name will be used.

     C++ operator definitions are specially handled. In order for
     consistency  with  all  types  of  operators (overloaded and
     conversion), the operator name in the tag file  will  always
     be  preceded  by  the  string  "operator " (i.e. even if the
     actual operator definition was written as "operator<<").

     After creating or appending to the tag file, it is sorted by
     the tag name, removing identical tag lines.



TAG FILE FORMAT
     When not running in etags mode, each entry in the  tag  file
     consists  of  a separate line, each looking like this in the
     most general case:

      tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields




Darren Hiebert      Last change: Version 5.7                   18






Exuberant Ctags                                          CTAGS(1)



     The fields and separators of these lines  are  specified  as
     follows:

         1.  tag name
         2.  single tab character
         3.  name of the file in which the object associated with
             the tag is located
         4.  single tab character
         5.  EX command used to locate the tag within  the  file;
             generally  a  search  pattern  (either  /pattern/ or
             ?pattern?) or line number (see  --excmd).  Tag  file
             format  2  (see  --format)  extends  this EX command
             under certain circumstances  to  include  a  set  of
             extension fields (described below) embedded in an EX
             comment immediately  appended  to  the  EX  command,
             which  leaves  it  backward-compatible with original
             vi(1) implementations.

     A few special tags are written into the tag file for  inter-
     nal  purposes.  These  tags  are composed in such a way that
     they always sort to the top of  the  file.   Therefore,  the
     first  two  characters of these tags are used a magic number
     to detect a tag file for purposes of determining  whether  a
     valid  tag  file  is  being overwritten rather than a source
     file.

     Note that the name of each source file will be  recorded  in
     the  tag  file  exactly  as  it appears on the command line.
     Therefore, if the path you specified on the command line was
     relative  to the current directory, then it will be recorded
     in that same manner in  the  tag  file.  See,  however,  the
     --tag-relative option for how this behavior can be modified.

     Extension fields are tab-separated key-value pairs  appended
     to  the  end  of  the  EX command as a comment, as described
     above. These key value pairs  appear  in  the  general  form
     "key:value". Their presence in the lines of the tag file are
     controlled by the --fields option. The possible keys and the
     meaning of their values are as follows:


     access      Indicates the visibility of this  class  member,
                 where value is specific to the language.


     file        Indicates that the tag has file-limited visibil-
                 ity. This key has no corresponding value.


     kind        Indicates the type, or kind, of tag.  Its  value
                 is  either  one  of the corresponding one-letter
                 flags described under the various --<LANG>-kinds



Darren Hiebert      Last change: Version 5.7                   19






Exuberant Ctags                                          CTAGS(1)



                 options  above,  or a full name. It is permitted
                 (and is, in fact, the default) for the key  por-
                 tion  of  this field to be omitted. The optional
                 behaviors  are  controlled  with  the   --fields
                 option.


     implementation
                 When present, this indicates a limited implemen-
                 tation  (abstract  vs. concrete) of a routine or
                 class, where value is specific to  the  language
                 ("virtual" or "pure virtual" for C++; "abstract"
                 for Java).


     inherits    When present, value. is a  comma-separated  list
                 of  classes  from  which  this  class is derived
                 (i.e. inherits from).


     signature   When  present,  value  is  a  language-dependent
                 representation  of the signature of a routine. A
                 routine signature in its complete form specifies
                 the  return  type  of  a  routine and its formal
                 argument list. This extension field is presently
                 supported  only  for  C-based languages and does
                 not include the return type.


     In addition, information on the scope of the tag  definition
     may  be  available,  with  the  key  portion  equal  to some
     language-dependent construct name and  its  value  the  name
     declared for that construct in the program. This scope entry
     indicates the scope in which the tag was found. For example,
     a  tag generated for a C structure member would have a scope
     looking like "struct:myStruct".



HOW TO USE WITH VI
     Vi will, by default, expect a tag file by the name "tags" in
     the  current directory. Once the tag file is built, the fol-
     lowing commands exercise the tag indexing feature:

     vi -t tag   Start vi and position the cursor at the file and
                 line where "tag" is defined.

     :ta tag     Find a tag.

     Ctrl-]      Find the tag under the cursor.

     Ctrl-T      Return to previous location before jump  to  tag



Darren Hiebert      Last change: Version 5.7                   20






Exuberant Ctags                                          CTAGS(1)



                 (not widely implemented).



HOW TO USE WITH GNU EMACS
     Emacs will, by default, expect a tag file by the name "TAGS"
     in  the  current  directory. Once the tag file is built, the
     following commands exercise the tag indexing feature:

     M-x visit-tags-table <RET> FILE <RET>
               Select the tag file, "FILE", to use.

     M-. [TAG] <RET>
               Find the first definition of TAG. The default  tag
               is the identifier under the cursor.

     M-*       Pop back to where you previously invoked "M-.".

     C-u M-.   Find the next definition for the last tag.


     For more commands, see the Tags  topic  in  the  Emacs  info
     document.



HOW TO USE WITH NEDIT
     NEdit version 5.1 and later can handle the new extended  tag
     file  format (see --format). To make NEdit use the tag file,
     select "File->Load Tags File". To jump to the definition for
     a  tag,  highlight the word, the press Ctrl-D. NEdit 5.1 can
     can read multiple  tag  files  from  different  directories.
     Setting  the  X  resource nedit.tagFile to the name of a tag
     file instructs NEdit to automatically load that tag file  at
     startup time.



CAVEATS
     Because ctags is neither a preprocessor nor a compiler,  use
     of  preprocessor  macros  can fool ctags into either missing
     tags or improperly generating inappropriate  tags.  Although
     ctags has been designed to handle certain common cases, this
     is the single biggest cause of reported problems. In partic-
     ular,  the  use  of  preprocessor constructs which alter the
     textual syntax of C can fool ctags. You can work around many
     such problems by using the -I option.

     Note that since ctags generates patterns for  locating  tags
     (see  the  --excmd option), it is entirely possible that the
     wrong line may be found  by  your  editor  if  there  exists
     another   source   line  which  is  identical  to  the  line



Darren Hiebert      Last change: Version 5.7                   21






Exuberant Ctags                                          CTAGS(1)



     containing the tag. The following example demonstrates  this
     condition:

          int variable;

          /* ... */
          void foo(variable)
          int variable;
          {
              /* ... */
          }

     Depending upon which editor you use and where  in  the  code
     you happen to be, it is possible that the search pattern may
     locate the local parameter declaration in  foo()  before  it
     finds the actual global variable definition, since the lines
     (and therefore their search patterns  are  identical).  This
     can be avoided by use of the --excmd=n option.



BUGS
     Ctags has more options than ls(1).

     When  parsing  a  C++  member  function   definition   (e.g.
     "className::function"),  ctags  cannot determine whether the
     scope specifier is a class name or a namespace specifier and
     always  lists it as a class name in the scope portion of the
     extension fields. Also, if a C++ function is defined outside
     of  the  class  declaration  (the  usual  case),  the access
     specification  (i.e.  public,  protected,  or  private)  and
     implementation information (e.g. virtual, pure virtual) con-
     tained in the function declaration are not  known  when  the
     tag  is generated for the function definition. It will, how-
     ever be available for prototypes (e.g --c++-kinds=+p).

     No qualified tags are generated for language objects  inher-
     ited into a class.



ENVIRONMENT VARIABLES
     CTAGS   If this environment  variable  exists,  it  will  be
             expected  to  contain a set of default options which
             are read when ctags starts, after the  configuration
             files  listed  in FILES, below, are read, but before
             any command line options are read. Options appearing
             on  the command line will override options specified
             in this variable. Only options  will  be  read  from
             this  variable.  Note  that  all white space in this
             variable is considered a separator, making it impos-
             sible  to  pass  an  option  parameter containing an



Darren Hiebert      Last change: Version 5.7                   22






Exuberant Ctags                                          CTAGS(1)



             embedded space. If this is a problem, use  a  confi-
             guration file instead.


     ETAGS   Similar to the CTAGS variable above, this  variable,
             if  found,  will  be read when etags starts. If this
             variable is not found, etags will try to  use  CTAGS
             instead.


     TMPDIR  On Unix-like hosts where mkstemp() is available, the
             value  of  this  variable specifies the directory in
             which to place temporary files. This can  be  useful
             if the size of a temporary file becomes too large to
             fit on the partition holding the  default  temporary
             directory   defined   at  compilation  time.   ctags
             creates  temporary  files  only  if  either  (1)  an
             emacs-style tag file is being generated, (2) the tag
             file is being sent to standard output,  or  (3)  the
             program  was  compiled to use an internal sort algo-
             rithm to sort the tag files instead of the the  sort
             utility of the operating system. If the sort utility
             of the operating system is being used, it will  gen-
             erally  observe  this  variable  also.  Note that if
             ctags  is  setuid,  the  value  of  TMPDIR  will  be
             ignored.



FILES
     /ctags.cnf (on MSDOS, MSWindows only)
     /etc/ctags.conf
     /usr/local/etc/ctags.conf
     $HOME/.ctags
     $HOME/ctags.cnf (on MSDOS, MSWindows only)
     .ctags
     ctags.cnf (on MSDOS, MSWindows only)
          If any of these configuration files exist, each will be
          expected  to contain a set of default options which are
          read in the order listed when ctags starts, but  before
          the  CTAGS  environment variable is read or any command
          line options are read. This makes it possible to set up
          site-wide,  personal  or  project-level defaults. It is
          possible to compile ctags to read an additional  confi-
          guration  file  before  any of those shown above, which
          will be indicated if the output produced by the  --ver-
          sion  option  lists  the "custom-conf" feature. Options
          appearing in the CTAGS environment variable or  on  the
          command  line  will override options specified in these
          files. Only options will be read from these files. Note
          that the option files are read in line-oriented mode in
          which spaces are significant (since  shell  quoting  is



Darren Hiebert      Last change: Version 5.7                   23






Exuberant Ctags                                          CTAGS(1)



          not  possible).  Each  line  of the file is read as one
          command line parameter (as if it were quoted with  sin-
          gle  quotes).  Therefore,  use  new  lines  to indicate
          separate command-line arguments.


     tags The default tag file created by ctags.

     TAGS The default tag file created by etags.


SEE ALSO
     The official Exuberant Ctags web site at:

          http://ctags.sourceforge.net

     Also ex(1), vi(1), elvis, or, better yet, vim, the  official
     editor  of  ctags.  For more information on vim, see the VIM
     Pages web site at:

          http://www.vim.org/



AUTHOR
     Darren Hiebert <dhiebert at users.sourceforge.net>
     http://DarrenHiebert.com/



MOTIVATION
     "Think ye at all times of rendering some  service  to  every
     member of the human race."

     "All effort and exertion put forth by man from the  fullness
     of  his  heart  is worship, if it is prompted by the highest
     motives and the will to do service to humanity."

          -- From the Baha'i Writings



CREDITS
     This version  of  ctags  was  originally  derived  from  and
     inspired   by   the   ctags   program  by  Steve  Kirkendall
     <kirkenda@cs.pdx.edu> that comes with  the  Elvis  vi  clone
     (though virtually none of the original code remains).

     Credit is also due Bram Moolenaar <Bram@vim.org>, the author
     of  vim, who has devoted so much of his time and energy both
     to developing the editor as a  service  to  others,  and  to
     helping the orphans of Uganda.



Darren Hiebert      Last change: Version 5.7                   24






Exuberant Ctags                                          CTAGS(1)



     The section entitled "HOW TO USE WITH GNU EMACS" was  shame-
     lessly stolen from the info page for GNU etags.





















































Darren Hiebert      Last change: Version 5.7                   25




--Boundary_(ID_UCwkrGuRfBMAQOsJGavvPQ)--

From John.Fischer@sun.com Mon Dec 22 07:51:56 2008
Received: from sunmail2sca.sfbay.sun.com (sunmail2sca.SFBay.Sun.COM [129.145.155.234])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBMFpuio022346
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 22 Dec 2008 07:51:56 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by sunmail2sca.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBMFpsto005904
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 22 Dec 2008 07:51:56 -0800 (PST)
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCA00I09C2K4F00@brm-avmta-1.central.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@Sun.COM); Mon, 22 Dec 2008 08:51:56 -0700 (MST)
Received: from brmea-mail-2.sun.com ([192.18.98.43])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCA008G9C2JZD70@brm-avmta-1.central.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@Sun.COM); Mon,
 22 Dec 2008 08:51:55 -0700 (MST)
Received: from fe-amer-10.sun.com ([192.18.109.80])
	by brmea-mail-2.sun.com (8.13.6+Sun/8.12.9) with ESMTP id mBMFpt8A027152	for
 <lsarc-ext@Sun.COM>; Mon, 22 Dec 2008 15:51:55 +0000 (GMT)
Received: from conversion-daemon.mail-amer.sun.com by mail-amer.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KCA00C01BR9YI00@mail-amer.sun.com>
 (original mail from John.Fischer@Sun.COM)
 for lsarc-ext@Sun.COM (ORCPT lsarc-ext@Sun.COM); Mon,
 22 Dec 2008 08:51:54 -0700 (MST)
Received: from 129.145.154.84 ([129.145.154.84])
 by mail-amer.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb 28
 2007)) with ESMTPSA id <0KCA00MY2C2EMXG0@mail-amer.sun.com> for
 lsarc-ext@Sun.COM (ORCPT lsarc-ext@Sun.COM); Mon,
 22 Dec 2008 08:51:50 -0700 (MST)
Date: Mon, 22 Dec 2008 07:51:50 -0800
From: John Fischer <John.Fischer@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <494FB208.4020803@sun.com>
Sender: John.Fischer@sun.com
To: Brian Utterback <brian.utterback@sun.com>
Cc: John Fischer <John.Fischer@sun.com>, lsarc-ext@sun.com,
        Thomas Preisler <Thomas.Preisler@sun.com>
Reply-to: John.Fischer@sun.com
Message-id: <1229961108.6312.13.camel@sr1-umpk-34>
MIME-version: 1.0
X-Mailer: Ximian Evolution 1.4.6.301
Content-type: text/plain
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com>
Status: RO
Content-Length: 77359

Thomas,

What community are you tracking?


> >   2.4 Originating Community
> >     2.4.1 Community Name
> >     
> >     2.4.2 Community Involvement
> >       Indicate Sun's involvement in the community
> >       [ ] Maintainer
> >       [ ] Contributor
> >       [x] Monitoring

Thanks,

John

On Mon, 2008-12-22 at 07:28, Brian Utterback wrote:
> I am submitting this fastrack on behalf of Thomas Preisler.
> 
> Exposure is open.
> 
> Template Version: @(#)sac_nextcase %I% %G% SMI
> This information is Copyright 2008 Sun Microsystems
> 1. Introduction
>      1.1. Project/Component Working Name:
> 	 Exuberant CTags
>      1.2. Name of Document Author/Supplier:
> 	 Author:  Brian Utterback
>      1.3  Date of This Document:
> 	22 December, 2008
> 4. Technical Description
> 
> Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
> program. It generates an index of source code object definitions which 
> is used by a number of editors and tools to instantly locate the 
> definitions. Exuberant Ctags currently supports the following languages:
>    Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
>    Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
>    PHP, PL/SQL, Python, REXX, Ruby, Scheme,
>    Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
>    Verilog, Vim, and YACC.
> 
> This project proposes to deliver the ctags binary from the Exuberant 
> CTags FOSS project renamed to exctags to avoid conflict with the 
> existing ctags binary currently delivered as part of the SUNWtoo 
> programming tools package. This follows the already established 
> convention used by other platforms.
> 
> The FOSSchecklist and man page are enclosed for review.
> 
> A minor/patch binding is requested.
> -- 
> blu
> 
> "Murderous organizations have increased in size and scope; they are
> more daring, they are served by the most terrible weapons offered by
> modern science, and the world is nowadays threatened by new forces
> which, if recklessly unchained, may some day wreck universal
> destruction."  - Arthur Griffith, 1898
> ----------------------------------------------------------------------
> Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
> Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom
> 
> ______________________________________________________________________
> FCL--FOSS Check List
> 1.0 Project Information
> 1.1 Name of project/component
>   Exuberant Ctags Packaging for OpenSolaris
> 
> 1.2 Author of document
>   Thomas Preisler
> 
> 2.0 Project Summary
>   2.1 Project Description
>   Package current version (5.7) of Exuberant CTags release.
> 
>   Exuberant Ctags is a multilanguage reimplementation of the Unix
>   ctags program. It generates an index of source code object definitions
>   which is used by a number of editors and tools to instantly locate the
>   definitions. Exuberant Ctags currently supports the following languages:
>   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang, Fortran,
>   HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL,
>   Python, REXX, Ruby, Scheme, Shell (Bourne, Korn, Z), S-Lang,
>   SML (Standard ML), Tcl, Vera, Verilog, Vim, and YACC. 
>   
>   2.2 Release binding
>       What is is the release binding?
>       (see http://opensolaris.org/os/community/arc/policies/release-taxonomy/)
>       [ ] Major
>       [ ] Minor
>       [x] Patch or Micro
>       [ ] Unknown -- ARC review required
> 
>   2.3 Type of project
>       Is this case a Linux Familiarity project?
>       [ ] Yes
>       [x] No
> 
>   2.4 Originating Community
>     2.4.1 Community Name
>     
>     2.4.2 Community Involvement
>       Indicate Sun's involvement in the community
>       [ ] Maintainer
>       [ ] Contributor
>       [x] Monitoring
>       
>       Will the project team work with the upstream community to resolve
>       architectural issues of interest to Sun?
>       [ ] Yes 
>       [x] No - briefly explain
>       Not needed.
>       
>       Will we or are we forking from the community?
>       [ ] Yes - ARC review required prior to forking
>       [x] No
>       
> 3.0 Technical Description
>   3.1 Installation & Sharable
>     3.1.1S Solaris Installation - section only required for Solaris Software
>       (see http://opensolaris.org/os/community/arc/policies/install-locations/ for details)
>       Does this project follow the Install Locations best practice?
>       [x] Yes 
>       [ ] No - ARC review required
>       
>       Does this project install into /usr under [sbin|bin|lib|include|man|share]?
>       [x] Yes
>       [ ] No or N/A
>       
>       Does this project install into /opt?
>       [ ] Yes - explain below
>       [x] No or N/A
>       
>       Does this project install into a different directory structure?
>       [ ] Yes - ARC review required
>       [x] No or N/A
>       
>       Do any of the components of this project conflict with anything under /usr?
>       (see http://opensolaris.org/os/community/arc/caselog/2007/047/ for details)
>       [ ] Yes - explain below (?)
>       [x] No
>       Default Exuberant Ctags binary name is ctags and would naturally install into /usr/bin/ctags
>       but Solaris ctags is already installed in /usr/bin. To avoid conflict, Common pratice
>       is to rename the binary and install it with the different name in '/usr/bin'. New name of 
>       Exuberant Ctags is exctags which is a common alternative name used by many others (try google for exctags).
>       
>       If conflicts exist then will this project install under /usr/gnu?
>       [ ] Yes
>       [ ] No - ARC review required
>       [x] N/A
>       Note: Exuberant Ctags is not a GNU product.
>       
>       Is this project installing into /usr/sfw?
>       [ ] Yes - ARC review required
>       [x] No
>       
>     3.1.1W Windows Installation - section only required for Windows Software
> 	Section not applicable.
>       
>     3.1.2 Share and Sharable
>       Does the module include any components that are used or shared by 
>       other projects?
>       [ ] Yes
>       [x] No
>     
>       If yes are these components packaged to be shared with the other FOSS?
>       [ ] Yes
>       [ ] No - ARC review required
>       [x] N/A
>     
>   3.2 Exported Libraries
>       Are libraries being delivered by this project?
>       [ ] Yes
>       [x] No - continue with next section (section 3.3)
>       
>   3.3 Services and the /etc Directory
>       (see http://opensolaris.org/os/community/arc/policies/SMF-policy/)
>       Does the project integrate anything into /etc/init.d or /etc/rc?.d?
>       [ ] Yes - ARC review required
>       [x] No
>       
>       Does the project integrate any new entries into /etc/inittab or
>       /etc/inetd.conf?
>       [ ] Yes - ARC review required
>       [x] No
>       
>       Does the project integrate any private non-public files into /etc/default
>       or /etc/ configuration files?
>       [ ] Yes - ARC review required
>       [x] No
>       
>       Does the service manifests method context grant rights above that
>       of the noaccess user and basic privilege set?
>       [ ] Yes - ARC review required
>       [x] No
>         
>   3.4 Security
>     3.4.1 Secure By Default 
>       (see http://opensolaris.org/os/community/arc/policies/secure-by-default/ for details)
>       (see http://www.opensolaris.org/os/community/arc/policies/NITS-policy/ for details)
>       (see parts of http://opensolaris.org/os/community/arc/policies/SMF-policy/ for
>        addtional details)
>       Are there any network services provided by this project?
>       [ ] Yes
>       [x] No - continue with the next section (section 3.4.2)
>       
>     3.4.2 Authorization
>       (see http://opensolaris.org/os/community/arc/bestpractices/rbac-intro/ and
> 	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/ and
> 	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/
>            for details)
>       Are there any setuid/setgid privileged binaries in the project?
>       [ ] Yes - ARC review required
>       [x] No - continue with next section (section 3.4.3)
>       
>     3.4.3 Auditing
>       (see http://opensolaris.org/os/community/arc/policies/audit-policy/ for details)
>       (see http://opensolaris.org/os/community/arc/caselog/2003/397 for details)
>       Does this component contain administrative or security enforcing software?
>       [ ] Yes - ARC review required
>       [x] No - continue to next section (section 3.4.4)
>         
>     3.4.4 Authentication
>       (see http://opensolaris.org/os/community/arc/policies/PAM/)
>       Do the components contain any authentication code?
>       [ ] Yes
>       [x] No - continue to next section (section 3.4.5)
>       
>     3.4.5 Passwords
>       (see http://opensolaris.org/os/community/arc/bestpractices/passwords-cli/ and
>            http://opensolaris.org/os/community/arc/bestpractices/passwords-files/ for details)
>       Do any of the components for the project deal with passwords?
>       [ ] Yes
>       [x] No - continue to next section (section 3.4.6)
>       
>     3.4.6 General Security Questions
>       (see http://opensolaris.org/os/community/arc/bestpractices/security-questions/ for details)
>       Are there any network protocols used by this project?
>       [ ] Yes
>       [x] No - continue with the next section (section 3.5)
>       
>   3.5 Networking
>       Do the components access the network?
>       [ ] Yes
>       [x] No - continue with the next section (section 3.6)
>       
>   3.6 Core Solaris Components
>       Do the components of this project compete with or duplicate core 
>       Solaris components?
>       [ ] Yes - ARC review required
>       [x] No 
>       
>       Examples of Core Solaris Components include but are not limited to:
>       
>         Secure By Default
>         Authorizations
>         PAM -- Plugable Authentication Module
>         Privilege
>         PRM -- Process Rights Management -- Privilege
>         Audit
>         xVm -- Virtualization
>         zones / Solaris Containers
>         PRM -- Process Rights Management
>         RBAC -- Role Based Access Control
>         TX / Trusted Extensions
>         ZFS
>         SMF -- Service Management Facility
>         FMA -- Fault Management Architecture
>         SCF -- Smart Card Facility
>         IPsec
>         
> 4.0 Interfaces
>   (see http://www.opensolaris.org/os/community/arc/policies/interface-taxonomy/ for details)
>   4.1 Exported Interfaces
>   
>     Interface Name                Classification  Comments
>     ----------------              --------------  ----------------------
>     SUNWexctags                   Uncommitted     Package
>     /usr/bin/exctags              Uncommitted     Executable binary file
>     
>   4.2 Imported Interfaces
>     Interface Name		Classification       Comments
>     --------------------------- -------------------- --------------------------
>     
>     
>   Brief Interface Classifications - See Appendix C for definitions
>     Volatile - interfaces are fluid and will follow a rapidly changing community
>     Uncommitted - interfaces are still evolving in the community and might follow
> 		  the community
>     Committed - interfaces are stable in the community
>     Project Private - no review required, just document in table
>     Contracted (interface modifier) - further review required
> 
> 
> ______________________________________________________________________
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
> NAME
>      ctags - Generate tag files for source code
> 
> 
> 
> SYNOPSIS
>      ctags [options] [file(s)]
> 
>      etags [options] [file(s)]
> 
> 
> 
> DESCRIPTION
>      The  ctags  and  etags  programs  (hereinafter  collectively
>      referred  to  as ctags, except where distinguished) generate
>      an index (or "tag") file for a variety of  language  objects
>      found  in  file(s).   This tag file allows these items to be
>      quickly and easily located by a text editor or  other  util-
>      ity.  A "tag" signifies a language object for which an index
>      entry is  available  (or,  alternatively,  the  index  entry
>      created for that object).
> 
>      Alternatively, ctags can generate  a  cross  reference  file
>      which  lists,  in human readable form, information about the
>      various source objects found in a set of language files.
> 
>      Tag index files are supported  by  numerous  editors,  which
>      allow  the  user to locate the object associated with a name
>      appearing in a source file and jump to  the  file  and  line
>      which  defines  the  name.  Those known about at the time of
>      this release are:
> 
>          Vi(1)  and  its  derivatives  (e.g.  Elvis,  Vim,  Vile,
>          Lemmy),  CRiSP,  Emacs,  FTE (Folding Text Editor), JED,
>          jEdit, Mined, NEdit (Nirvana  Edit),  TSE  (The  SemWare
>          Editor), UltraEdit, WorkSpace, X2, Zeus
> 
>      Ctags is capable of generating different kinds of  tags  for
>      each  of  many  different  languages. For a complete list of
>      supported languages, the names by which they are recognized,
>      and  the kinds of tags which are generated for each, see the
>      --list-languages and --list-kinds options.
> 
> 
> 
> SOURCE FILES
>      Unless  the  --language-force  option  is   specified,   the
>      language of each source file is automatically selected based
>      upon a mapping of file names to languages. The  mappings  in
>      effect   for   each   language  may  be  display  using  the
>      --list-maps option and may be changed  using  the  --langmap
>      option.   On  platforms  which  support it, if the name of a
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    1
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      file is not mapped to a language and the file is executable,
>      the  first line of the file is checked to see if the file is
>      a "#!" script for a recognized language.
> 
>      By default, all other files names are ignored. This  permits
>      running  ctags  on  all  files  in either a single directory
>      (e.g. "ctags *"), or on all files in an entire source direc-
>      tory  tree  (e.g.  "ctags -R"), since only those files whose
>      names are mapped to languages will be scanned.
> 
>      [The reason that .h  extensions  are  mapped  to  C++  files
>      rather than C files is because it is common to use .h exten-
>      sions in C++, and no harm results in treating  them  as  C++
>      files.]
> 
> 
> 
> OPTIONS
>      Despite the wealth of available options, defaults are set so
>      that  ctags  is  most  commonly executed without any options
>      (e.g. "ctags *", or "ctags -R"), which  will  create  a  tag
>      file  in  the  current  directory  for all recognized source
>      files. The options described below are  provided  merely  to
>      allow custom tailoring to meet special needs.
> 
>      Note that spaces separating the single-letter  options  from
>      their parameters are optional.
> 
>      Note also that the  boolean  parameters  to  the  long  form
>      options   (those   beginning  with  "--"  and  that  take  a
>      "[=yes|no]" parameter) may be omitted, in which case  "=yes"
>      is  implied. (e.g. --sort is equivalent to --sort=yes). Note
>      further that "=1" and  "=on"  are  considered  synonyms  for
>      "=yes", and that "=0" and "=off" are considered synonyms for
>      "=no".
> 
>      Some options are either ignored or  useful  only  when  used
>      while  running  in  etags mode (see -e option). Such options
>      will be noted.
> 
>      Most options  may  appear  anywhere  on  the  command  line,
>      affecting  only  those  files which follow the option. A few
>      options, however, must appear before the first file name and
>      will be noted as such.
> 
>      Options taking language names will  accept  those  names  in
>      either  upper or lower case. See the --list-languages option
>      for a complete list of the built-in language names.
> 
> 
>      -a   Equivalent to --append.
> 
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    2
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      -B   Use  backward  searching  patterns  (e.g.   ?pattern?).
>           [Ignored in etags mode]
> 
> 
>      -e   Enable etags mode, which will create a tag file for use
>           with  the  Emacs  editor.   Alternatively,  if ctags is
>           invoked by a name containing the string "etags" (either
>           by  renaming,  or  creating a link to, the executable),
>           etags mode will be enabled.  This  option  must  appear
>           before the first file name.
> 
> 
>      -f tagfile
>           Use the name specified by  tagfile  for  the  tag  file
>           (default  is  "tags",  or  "TAGS" when running in etags
>           mode). If tagfile is specified as  "-",  then  the  tag
>           file  is written to standard output instead. Ctags will
>           stubbornly refuse to take orders if tagfile exists  and
>           its  first  line  contains something other than a valid
>           tags line. This will save your neck if  you  mistakenly
>           type  "ctags  -f  *.c", which would otherwise overwrite
>           your first C file with the tags generated by the  rest!
>           It  will  also  refuse to accept a multi-character file
>           name which begins with a '-'  (dash)  character,  since
>           this  most  likely means that you left out the tag file
>           name and this option tried to grab the next  option  as
>           the  file  name. If you really want to name your output
>           tag file "-ugly", specify it as "./-ugly". This  option
>           must  appear before the first file name. If this option
>           is specified more than once, only the last will apply.
> 
> 
>      -F   Use  forward  searching   patterns   (e.g.   /pattern/)
>           (default).  [Ignored in etags mode]
> 
> 
>      -h list
>           Specifies a  list  of  file  extensions,  separated  by
>           periods,  which  are  to  be interpreted as include (or
>           header) files. To indicate files having  no  extension,
>           use  a  period  not  followed by a non-period character
>           (e.g. ".", "..x", ".x."). This option only affects  how
>           the  scoping  of  a  particular kinds of tags is inter-
>           preted (i.e. whether or not they are considered as glo-
>           bally  visible or visible only within the file in which
>           they are defined); it does not map the extension to any
>           particular  language.  Any  tag  which  is located in a
>           non-include file and cannot be seen  (e.g.  linked  to)
>           from  another  file  is considered to have file-limited
>           (e.g. static) scope. No kind of  tag  appearing  in  an
>           include  file  will  be considered to have file-limited
>           scope. If the first character in the  list  is  a  plus
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    3
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           sign,  then the extensions in the list will be appended
>           to the current list; otherwise, the list  will  replace
>           the  current  list. See, also, the --file-scope option.
>           The default list is  ".h.H.hh.hpp.hxx.h++.inc.def".  To
>           restore the default list, specify -h default. Note that
>           if an extension supplied to this option is not  already
>           mapped  to  a  particular  language  (see SOURCE FILES,
>           above), you will also need to use either the  --langmap
>           or --language-force option.
> 
> 
>      -I identifier-list
>           Specifies a list of identifiers which are  to  be  spe-
>           cially  handled  while  parsing C and C++ source files.
>           This option is specifically provided to handle  special
>           cases  arising  through the use of preprocessor macros.
>           When the identifiers  listed  are  simple  identifiers,
>           these identifiers will be ignored during parsing of the
>           source files. If an identifier is suffixed with  a  '+'
>           character,  ctags  will  also  ignore  any parenthesis-
>           enclosed argument list which may immediately follow the
>           identifier  in the source files. If two identifiers are
>           separated with the '=' character, the first identifiers
>           is  replaced by the second identifiers for parsing pur-
>           poses. The list of identifiers may be supplied directly
>           on the command line or read in from a separate file. If
>           the first character of identifier-list is '@', '.' or a
>           pathname separator ('/' or '\'), or the first two char-
>           acters specify a drive letter (e.g. "C:"), the  parame-
>           ter  identifier-list  will be interpreted as a filename
>           from which to read a list of identifiers, one per input
>           line.  Otherwise, identifier-list is a list of identif-
>           iers (or identifier pairs)  to  be  specially  handled,
>           each  delimited  by  a either a comma or by white space
>           (in which case the list should be quoted  to  keep  the
>           entire  list as one command line argument). Multiple -I
>           options may be supplied.  To clear the list  of  ignore
>           identifiers,   supply   a   single   dash   ("-")   for
>           identifier-list.
> 
>           This feature is useful  when  preprocessor  macros  are
>           used  in such a way that they cause syntactic confusion
>           due to their presence. Indeed, this is the best way  of
>           working around a number of problems caused by the pres-
>           ence of syntax-busting  macros  in  source  files  (see
>           CAVEATS,  below).  Some  examples  will illustrate this
>           point.
> 
>              int foo ARGDECL4(void *, ptr, long int, nbytes)
> 
> 
>           In the above example, the  macro  "ARGDECL4"  would  be
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    4
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           mistakenly  interpreted  to be the name of the function
>           instead of the correct name  of  "foo".  Specifying  -I
>           ARGDECL4 results in the correct behavior.
> 
>              /* creates an RCS version string in module */
>              MODULE_VERSION("$Revision: 590 $")
> 
> 
>           In the above example the  macro  invocation  looks  too
>           much  like a function definition because it is not fol-
>           lowed by a semicolon (indeed, it could even be followed
>           by  a  global  variable definition that would look much
>           like a K&R style function  parameter  declaration).  In
>           fact,  this  seeming function definition could possibly
>           even cause the rest of the  file  to  be  skipped  over
>           while  trying to complete the definition. Specifying -I
>           MODULE_VERSION+ would avoid such a problem.
> 
>              CLASS Example {
>                  // your content here
>              };
> 
> 
>           The example above uses "CLASS" as a preprocessor  macro
>           which expands to something different for each platform.
>           For  instance  CLASS   may   be   defined   as   "class
>           __declspec(dllexport)"  on  Win32  platforms and simply
>           "class" on UNIX.  Normally, the absence of the C++ key-
>           word   "class"  would  cause  the  source  file  to  be
>           incorrectly parsed. Correct behavior can be restored by
>           specifying -I CLASS=class.
> 
> 
>      -L file
>           Read from file a list of  file  names  for  which  tags
>           should be generated.  If file is specified as "-", then
>           file names are read from  standard  input.  File  names
>           read  using  this  option  are processed following file
>           names appearing on the command line. Options  are  also
>           accepted  in  this  input.  If this option is specified
>           more than once, only the last will apply.  Note:   file
>           is  read in line-oriented mode, where a new line is the
>           only delimiter and non-trailing  white  space  is  con-
>           sidered  significant, in order that file names contain-
>           ing spaces may be  supplied  (however,  trailing  white
>           space  is  stripped  from  lines);  this can affect how
>           options are parsed if included in the input.
> 
> 
>      -n   Equivalent to --excmd=number.
> 
> 
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    5
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      -N   Equivalent to --excmd=pattern.
> 
> 
>      -o tagfile
>           Equivalent to -f tagfile.
> 
> 
>      -R   Equivalent to --recurse.
> 
> 
>      -u   Equivalent to --sort=no (i.e. "unsorted").
> 
> 
>      -V   Equivalent to --verbose.
> 
> 
>      -w   This  option  is   silently   ignored   for   backward-
>           compatibility with the ctags of SVR4 Unix.
> 
> 
>      -x   Print a tabular, human-readable cross reference  (xref)
>           file  to  standard  output  instead of generating a tag
>           file. The information contained in the output includes:
>           the  tag  name;  the kind of tag; the line number, file
>           name, and source line  (with  extra  white  space  con-
>           densed)  of the file which defines the tag. No tag file
>           is written and all options affecting  tag  file  output
>           will  be ignored. Example applications for this feature
>           are generating a listing of all functions located in  a
>           source  file  (e.g. ctags -x --c-kinds=f file), or gen-
>           erating a list of all externally visible  global  vari-
>           ables   located   in  a  source  file  (e.g.  ctags  -x
>           --c-kinds=v --file-scope=no  file).  This  option  must
>           appear before the first file name.
> 
> 
>      --append[=yes|no]
>           Indicates whether tags  generated  from  the  specified
>           files  should  be  appended to those already present in
>           the tag file or should replace them. This option is off
>           by  default.  This  option must appear before the first
>           file name.
> 
> 
>      --etags-include=file
>           Include a reference to  file  in  the  tag  file.  This
>           option  may be specified as many times as desired. This
>           supports Emacs' capability to  use  a  tag  file  which
>           "includes"  other  tag  files. [Available only in etags
>           mode]
> 
> 
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    6
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      --exclude=[pattern]
>           Add pattern to a list  of  excluded  files  and  direc-
>           tories.  This  option may be specified as many times as
>           desired. For each file name considered by  ctags,  each
>           pattern  specified  using  this option will be compared
>           against    both     the     complete     path     (e.g.
>           some/path/base.ext)  and  the base name (e.g. base.ext)
>           of the file, thus allowing patterns which match a given
>           file  name  irrespective  of  its path, or match only a
>           specific path. If appropriate support is available from
>           the  runtime  library  of your C compiler, then pattern
>           may contain the  usual  shell  wildcards  (not  regular
>           expressions)  common  on  Unix  (be  sure  to quote the
>           option parameter to protect the  wildcards  from  being
>           expanded  by  the  shell  before being passed to ctags;
>           also be aware that wildcards can match the slash  char-
>           acter,  '/').  You can determine if shell wildcards are
>           available on your platform by examining the  output  of
>           the  --version  option, which will include "+wildcards"
>           in the compiled feature  list;  otherwise,  pattern  is
>           matched  against file names using a simple textual com-
>           parison.
> 
>           If pattern begins with the character '@', then the rest
>           of  the string is interpreted as a file name from which
>           to read exclusion patterns, one per line. If pattern is
>           empty,  the list of excluded patterns is cleared.  Note
>           that at program startup, the default exclude list  con-
>           tains  "EIFGEN",  "SCCS",  "RCS",  and "CVS", which are
>           names of directories for  which  it  is  generally  not
>           desirable  to  descend  while  processing the --recurse
>           option.
> 
> 
>      --excmd=type
>           Determines the type of EX command used to  locate  tags
>           in the source file.  [Ignored in etags mode]
> 
>           The valid values for type (either the  entire  word  or
>           the first letter is accepted) are:
> 
> 
>           number   Use only line numbers  in  the  tag  file  for
>                    locating tags. This has four advantages:
>                    1.  Significantly  reduces  the  size  of  the
>                        resulting tag file.
>                    2.  Eliminates failures to find  tags  because
>                        the  line  defining  the  tag has changed,
>                        causing the pattern match  to  fail  (note
>                        that  some  editors, such as vim, are able
>                        to recover in many such instances).
>                    3.  Eliminates finding identical matching, but
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    7
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>                        incorrect, source lines (see BUGS, below).
>                    4.  Retains separate entries in the  tag  file
>                        for  lines which are identical in content.
>                        In pattern  mode,  duplicate  entries  are
>                        dropped  because  the search patterns they
>                        generate are identical, making the  dupli-
>                        cate entries useless.
> 
> 
>                    However, this option has one significant draw-
>                    back:  changes  to  the source files can cause
>                    the line numbers recorded in the tag  file  to
>                    no  longer  correspond  to  the  lines  in the
>                    source file, causing jumps  to  some  tags  to
>                    miss  the  target  definition  by  one or more
>                    lines. Basically, this  option  is  best  used
>                    when the source code to which it is applied is
>                    not subject to change. Selecting  this  option
>                    type   causes  the  following  options  to  be
>                    ignored: -BF.
> 
> 
>           pattern  Use only search patterns for all tags,  rather
>                    than  the  line numbers usually used for macro
>                    definitions. This has  the  advantage  of  not
>                    referencing  obsolete  line numbers when lines
>                    have been added or removed since the tag  file
>                    was generated.
> 
> 
>           mixed    In this mode, patterns are generally used with
>                    a few exceptions. For C, line numbers are used
>                    for  macro  definition  tags.  This  was   the
>                    default format generated by the original ctags
>                    and is, therefore, retained as the default for
>                    this  option.  For  Fortran,  line numbers are
>                    used   for   common   blocks   because   their
>                    corresponding   source   lines  are  generally
>                    identical, making pattern searches useless for
>                    finding all matches.
> 
> 
>      --extra=[+|-]flags
>           Specifies whether to include extra tag entries for cer-
>           tain kinds of information. The parameter flags is a set
>           of one-letter flags,  each  representing  one  kind  of
>           extra tag entry to include in the tag file. If flags is
>           preceded by by either the '+'  or  '-'  character,  the
>           effect of each flag is added to, or removed from, those
>           currently enabled;  otherwise  the  flags  replace  any
>           current  settings.  The meaning of each flag is as fol-
>           lows:
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    8
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>              f   Include an entry for the base file name of every
>                  source file (e.g.  "example.c"), which addresses
>                  the first line of the file.
> 
>              q   Include an extra class-qualified tag  entry  for
>                  each  tag  which  is  a  member  of a class (for
>                  languages  for   which   this   information   is
>                  extracted; currently C++, Eiffel, and Java). The
>                  actual form of the qualified  tag  depends  upon
>                  the  language  from  which  the  tag was derived
>                  (using a form that is most natural for how qual-
>                  ified  calls are specified in the language). For
>                  C++, it is in the form "class::member"; for Eif-
>                  fel  and Java, it is in the form "class.member".
>                  This may allow easier  location  of  a  specific
>                  tags  when  multiple  occurrences  of a tag name
>                  occur in the tag file. Note, however, that  this
>                  could  potentially  more than double the size of
>                  the tag file.
> 
> 
>      --fields=[+|-]flags
>           Specifies the available extension fields which  are  to
>           be  included  in  the  entries of the tag file (see TAG
>           FILE FORMAT, below, for more information). The  parame-
>           ter flags is a set of one-letter flags, each represent-
>           ing one type of extension field to  include,  with  the
>           following  meanings  (disabled  by default unless indi-
>           cated):
> 
> 
>              a   Access (or export) of class members
>              f   File-restricted scoping [enabled]
>              i   Inheritance information
>              k   Kind of tag as a single letter [enabled]
>              K   Kind of tag as full name
>              l   Language of source file containing tag
>              m   Implementation information
>              n   Line number of tag definition
>              s   Scope of tag definition [enabled]
>              S   Signature of routine (e.g. prototype or  parame-
>                  ter list)
>              z   Include the "kind:" key in kind field
>              t   Type and  name  of  a  variable  or  typedef  as
>                  "typeref:" field [enabled]
> 
>           Each letter or group of  letters  may  be  preceded  by
>           either  '+'  to  add  it  to the default set, or '-' to
>           exclude it. In the absence of any preceding '+' or  '-'
>           sign,  only those kinds explicitly listed in flags will
>           be included in the output (i.e. overriding the  default
>           set).  This  option is ignored if the option --format=1
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                    9
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           has been specified. The default value of this option is
>           fks.
> 
> 
>      --file-scope[=yes|no]
>           Indicates whether tags scoped only for  a  single  file
>           (i.e.  tags which cannot be seen outside of the file in
>           which they are defined, such as "static"  tags)  should
>           be  included  in  the output. See, also, the -h option.
>           This option is enabled by default.
> 
> 
>      --filter[=yes|no]
>           Causes ctags to behave as a filter, reading source file
>           names  from  standard  input and printing their tags to
>           standard output on a file-by-file basis. If --sorted is
>           enabled, tags are sorted only within the source file in
>           which they are defined. File names are read from  stan-
>           dard input in line-oriented input mode (see note for -L
>           option) and only after file names listed on the command
>           line  or  from  any  file supplied using the -L option.
>           When this option is enabled, the options  -f,  -o,  and
>           --totals are ignored. This option is quite esoteric and
>           is disabled by default. This option must appear  before
>           the first file name.
> 
> 
>      --filter-terminator=string
>           Specifies a string to print to standard output  follow-
>           ing  the  tags  for  each  file  name  parsed  when the
>           --filter option is enabled. This may permit an applica-
>           tion  reading the output of ctags to determine when the
>           output for each file is finished. Note that if the file
>           name read is a directory and --recurse is enabled, this
>           string will be printed only one once at the end of  all
>           tags found for by descending the directory. This string
>           will always be separated from the last tag line for the
>           file  by its terminating newline.  This option is quite
>           esoteric and is empty  by  default.  This  option  must
>           appear before the first file name.
> 
> 
>      --format=level
>           Change the format of the output tag file. Currently the
>           only  valid values for level are 1 or 2. Level 1 speci-
>           fies the original tag file format and level 2 specifies
>           a  new extended format containing extension fields (but
>           in a manner which retains  backward-compatibility  with
>           original  vi(1)  implementations). The default level is
>           2. This option must appear before the first file  name.
>           [Ignored in etags mode]
> 
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   10
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      --help
>           Prints to standard output a detailed usage description,
>           and then exits.
> 
> 
>      --if0[=yes|no]
>           Indicates a preference as to  whether  code  within  an
>           "#if  0" branch of a preprocessor conditional should be
>           examined for non-macro  tags  (macro  tags  are  always
>           included).  Because  the intent of this construct is to
>           disable code, the default value of this option  is  no.
>           Note that this indicates a preference only and does not
>           guarantee skipping code within an "#if 0" branch, since
>           the  fall-back  algorithm  used  to  generate tags when
>           preprocessor conditionals are too complex  follows  all
>           branches  of  a conditional. This option is disabled by
>           default.
> 
> 
>      --<LANG>-kinds=[+|-]kinds
>           Specifies a list of language-specific kinds of tags (or
>           kinds)  to  include in the output file for a particular
>           language, where <LANG> is case-insensitive and  is  one
>           of    the    built-in    language    names   (see   the
>           --list-languages  option  for  a  complete  list).  The
>           parameter  kinds  is a group of one-letter flags desig-
>           nating kinds of tags (particular to  the  language)  to
>           either include or exclude from the output. The specific
>           sets of flags recognized for each language, their mean-
>           ings  and  defaults  may be list using the --list-kinds
>           option. Each letter or group of letters may be preceded
>           by  either  '+' to add it to, or '-' to remove it from,
>           the default set. In the absence of any preceding '+' or
>           '-'  sign,  only those kinds explicitly listed in kinds
>           will be included in the output  (i.e.   overriding  the
>           default for the specified language).
> 
>           As an example for the C language, in order to add  pro-
>           totypes  and  external  variable  declarations  to  the
>           default set of  tag  kinds,  but  exclude  macros,  use
>           --c-kinds=+px-d;  to  include  only tags for functions,
>           use --c-kinds=f.
> 
> 
>      --langdef=name
>           Defines a new user-defined language, name, to be parsed
>           with  regular  expressions.  Once  defined, name may be
>           used in other options taking language names. The  typi-
>           cal use of this option is to first define the language,
>           then map file names to it using --langmap, then specify
>           regular  expressions using --regex-<LANG> to define how
>           its tags are found.
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   11
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      --langmap=map[,map[...]]
>           Controls how file names are mapped  to  languages  (see
>           the  --list-maps option). Each comma-separated map con-
>           sists of the language name (either a built-in or  user-
>           defined  language),  a colon, and a list of file exten-
>           sions and/or file name patterns. A  file  extension  is
>           specified  by  preceding  the  extension  with a period
>           (e.g. ".c").  A  file  name  pattern  is  specified  by
>           enclosing    the    pattern    in   parentheses   (e.g.
>           "([Mm]akefile)"). If appropriate support  is  available
>           from  the  runtime library of your C compiler, then the
>           file name pattern may contain the usual shell wildcards
>           common  on  Unix (be sure to quote the option parameter
>           to protect the wildcards from  being  expanded  by  the
>           shell  before being passed to ctags). You can determine
>           if shell wildcards are available on  your  platform  by
>           examining  the  output  of  the --version option, which
>           will include "+wildcards" in the compiled feature list;
>           otherwise,  the  file name patterns are matched against
>           file names using a simple textual comparison. When map-
>           ping  a  file extension, it will first be unmapped from
>           any other languages.
> 
>           If the first character in a map is a  plus  sign,  then
>           the  extensions and file name patterns in that map will
>           be appended to the current map for that language;  oth-
>           erwise, the map will replace the current map. For exam-
>           ple, to specify that only files with extensions  of  .c
>           and  .x  are  to  be  treated  as C language files, use
>           "--langmap=c:.c.x"; to also add files  with  extensions
>           of    .j    as    Java    language    files,    specify
>           "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g.
>           files  named  either  "Makefile", "makefile", or having
>           the extension ".mak")  to  a  language  called  "make",
>           specify   "--langmap=make:([Mm]akefile).mak".   To  map
>           files having no extension, specify a  period  not  fol-
>           lowed  by  a  non-period  character  (e.g.  ".", "..x",
>           ".x."). To clear the mapping for a particular  language
>           (thus  inhibiting automatic generation of tags for that
>           language),  specify  an  empty  extension  list   (e.g.
>           "--langmap=fortran:").  To restore the default language
>           mappings for all a particular language, supply the key-
>           word "default" for the mapping.  To specify restore the
>           default language mappings for  all  languages,  specify
>           "--langmap=default".  Note  that  file  extensions  are
>           tested before file name  patterns  when  inferring  the
>           language of a file.
> 
> 
>      --language-force=language
>           By default, ctags automatically selects the language of
>           a  source  file,  ignoring  those  files whose language
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   12
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           cannot be determined (see SOURCE  FILES,  above).  This
>           option forces the specified language (case-insensitive;
>           either built-in or user-defined) to be used  for  every
>           supplied  file  instead  of automatically selecting the
>           language based upon its  extension.  In  addition,  the
>           special  value  auto indicates that the language should
>           be automatically selected (which  effectively  disables
>           this option).
> 
> 
>      --languages=[+|-]list
>           Specifies the languages for  which  tag  generation  is
>           enabled, with list containing a comma-separated list of
>           language names (case-insensitive;  either  built-in  or
>           user-defined).  If  the  first  language of list is not
>           preceded by either a '+' or '-', the current list  will
>           be  cleared  before adding or removing the languages in
>           list. Until a '-' is encountered, each language in  the
>           list  will  be added to the current list. As either the
>           '+' or '-' is encountered in the  list,  the  languages
>           following  it  are  added  or  removed from the current
>           list, respectively. Thus, it becomes simple to  replace
>           the  current  list  with a new one, or to add or remove
>           languages from the current list.  The  actual  list  of
>           files for which tags will be generated depends upon the
>           language extension mapping in effect (see the --langmap
>           option).  Note  that  all  languages,  including  user-
>           defined languages are enabled  unless  explicitly  dis-
>           abled  using  this  option.  Language names included in
>           list may be any built-in  language  or  one  previously
>           defined  with --langdef. The default is "all", which is
>           also  accepted   as   a   valid   argument.   See   the
>           --list-languages  option  for  a  complete  list of the
>           built-in language names.
> 
> 
>      --license
>           Prints a summary of the software  license  to  standard
>           output, and then exits.
> 
> 
>      --line-directives[=yes|no]
>           Specifies whether "#line" directives should  be  recog-
>           nized. These are present in the output of preprocessors
>           and contain the line  number,  and  possibly  the  file
>           name,  of  the  original  source file(s) from which the
>           preprocessor output file was generated.  When  enabled,
>           this  option  will  cause ctags to generate tag entries
>           marked with the file names and line  numbers  of  their
>           locations  original  source  file(s),  instead of their
>           actual locations in the preprocessor output. The actual
>           file  names placed into the tag file will have the same
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   13
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           leading path  components  as  the  preprocessor  output
>           file,  since  it  is  assumed  that the original source
>           files are located relative to the  preprocessor  output
>           file  (unless, of course, the #line directive specifies
>           an absolute path). This option is off by default. Note:
>           This option is generally only useful when used together
>           with the --excmd=number (-n) option. Also, you may have
>           to  use either the --langmap or --language-force option
>           if the extension of the preprocessor output file is not
>           known to ctags.
> 
> 
>      --links[=yes|no]
>           Indicates whether symbolic links (if supported)  should
>           be followed. When disabled, symbolic links are ignored.
>           This option is on by default.
> 
> 
>      --list-kinds[=language|all]
>           Lists the tag kinds recognized for either the specified
>           language or all languages, and then exits. Each kind of
>           tag recorded in the tag file is represented by  a  one-
>           letter  flag,  which  is  also  used to filter the tags
>           placed   into   the   output   through   use   of   the
>           --<LANG>-kinds  option. Note that some languages and/or
>           tag kinds may be implemented using regular  expressions
>           and  may  not be available if regex support is not com-
>           piled into ctags (see the --regex-<LANG> option).  Each
>           kind listed is enabled unless followed by "[off]".
> 
> 
>      --list-maps[=language|all]
>           Lists the file extensions and file name patterns  which
>           associate  a  file  name with a language for either the
>           specified language or all languages,  and  then  exits.
>           See the --langmap option, and SOURCE FILES, above.
> 
> 
>      --list-languages
>           Lists the names of the languages understood  by  ctags,
>           and then exits.  These language names are case insensi-
>           tive  and  may  be  used   in   the   --language-force,
>           --languages,    --<LANG>-kinds,    and   --regex-<LANG>
>           options.
> 
> 
>      --options=file
>           Read additional options from file. The file should con-
>           tain  one  option  per  line.  As  a  special  case, if
>           --options=NONE is specified as the first option on  the
>           command  line, it will disable the automatic reading of
>           any configuration options from either  a  file  or  the
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   14
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           environment (see FILES).
> 
> 
>      --recurse[=yes|no]
>           Recurse into directories encountered  in  the  list  of
>           supplied  files. If the list of supplied files is empty
>           and no file list is specified with the -L option,  then
>           the  current  directory (i.e. ".") is assumed. Symbolic
>           links are followed. If you don't like these  behaviors,
>           either  explicitly specify the files or pipe the output
>           of find(1) into ctags -L- instead. Note: This option is
>           not  supported  on  all  platforms  at  present.  It is
>           available if the output of the --help  option  includes
>           this  option.  See, also, the --exclude to limit recur-
>           sion.
> 
> 
>      --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
>           The /regexp/replacement/ pair define a regular  expres-
>           sion  replacement pattern, similar in style to sed sub-
>           stitution commands, with which to  generate  tags  from
>           source  files  mapped  to  the  named language, <LANG>,
>           (case-insensitive; either a  built-in  or  user-defined
>           language).  The  regular expression, regexp, defines an
>           extended  regular  expression  (roughly  that  used  by
>           egrep(1)), which is used to locate a single source line
>           containing a tag and may specify tab  characters  using
>           \t.  When  a matching line is found, a tag will be gen-
>           erated for the name defined by replacement, which  gen-
>           erally  will  contain  the  special  back-references \1
>           through \9 to refer to matching  sub-expression  groups
>           within  regexp.  The  '/' separator characters shown in
>           the parameter to the option can actually be replaced by
>           any  character. Note that whichever separator character
>           is used will have to be escaped with a backslash  ('\')
>           character wherever it is used in the parameter as some-
>           thing other than a separator.  The  regular  expression
>           defined  by this option is added to the current list of
>           regular expressions for the specified  language  unless
>           the  parameter  is  omitted,  in which case the current
>           list is cleared.
> 
>           Unless modified by flags, regexp is  interpreted  as  a
>           Posix  extended  regular  expression.  The  replacement
>           should expand for all matching  lines  to  a  non-empty
>           string  of  characters,  or  a  warning message will be
>           reported. An optional kind specifier for tags  matching
>           regexp  may  follow  replacement,  which will determine
>           what kind of tag is reported in  the  "kind"  extension
>           field  (see  TAG  FILE FORMAT, below). The full form of
>           kind-spec is in the form of a single letter, a comma, a
>           name (without spaces), a comma, a description, followed
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   15
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           by a separator, which specify the short and long  forms
>           of   the   kind   value  and  its  textual  description
>           (displayed using --list-kinds). Either  the  kind  name
>           and/or  the description may be omitted. If kind-spec is
>           omitted, it defaults to "r,regex". Finally,  flags  are
>           one or more single-letter characters having the follow-
>           ing effect upon the interpretation of regexp:
> 
> 
>              b   The pattern is interpreted as a Posix basic reg-
>                  ular expression.
> 
>              e   The pattern is interpreted as a  Posix  extended
>                  regular expression (default).
> 
>              i   The regular expression is to  be  applied  in  a
>                  case-insensitive manner.
> 
>           Note that this option is available only  if  ctags  was
>           compiled  with  support  for regular expressions, which
>           depends upon your platform. You can determine  if  sup-
>           port  for regular expressions is compiled in by examin-
>           ing the output of  the  --version  option,  which  will
>           include "+regex" in the compiled feature list.
> 
>           For more information on the regular expressions used by
>           ctags,  see  either the regex(5,7) man page, or the GNU
>           info documentation for regex (e.g. "info regex").
> 
> 
>      --sort[=yes|no|foldcase]
>           Indicates whether the tag file should be sorted on  the
>           tag name (default is yes). Note that the original vi(1)
>           required sorted tags. The foldcase value specifies case
>           insensitive  (or  case-folded)  sorting.   Fast  binary
>           searches of tag files  sorted  with  case-folding  will
>           require  special  support  from  tools using tag files,
>           such as that found in the ctags  readtags  library,  or
>           Vim  version  6.2  or  higher (using "set ignorecase").
>           This option must appear before  the  first  file  name.
>           [Ignored in etags mode]
> 
> 
>      --tag-relative[=yes|no]
>           Indicates that the file paths recorded in the tag  file
>           should  be relative to the directory containing the tag
>           file, rather than relative to  the  current  directory,
>           unless  the  files  supplied  on  the  command line are
>           specified with absolute paths. This option must  appear
>           before  the  first  file  name. The default is yes when
>           running in etags mode (see the -e  option),  no  other-
>           wise.
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   16
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      --totals[=yes|no]
>           Prints statistics about the source files read  and  the
>           tag  file  written  during  the  current  invocation of
>           ctags. This option is off by default.  This option must
>           appear before the first file name.
> 
> 
>      --verbose[=yes|no]
>           Enable verbose mode. This  prints  out  information  on
>           option  processing  and a brief message describing what
>           action is being  taken  for  each  file  considered  by
>           ctags. Normally, ctags does not read command line argu-
>           ments until after options are read from the  configura-
>           tion files (see FILES, below) and the CTAGS environment
>           variable. However, if this option is the first argument
>           on  the  command  line,  it will take effect before any
>           options are read from these sources. The default is no.
> 
> 
>      --version
>           Prints a version identifier for ctags to standard  out-
>           put,  and then exits. This is guaranteed to always con-
>           tain the string "Exuberant Ctags".
> 
> 
> 
> OPERATIONAL DETAILS
>      As ctags considers each file  name  in  turn,  it  tries  to
>      determine the language of the file by applying the following
>      three tests in order: if the file extension has been  mapped
>      to  a  language,  if  the  file name matches a shell pattern
>      mapped to a language, and finally if the file is  executable
>      and  its first line specifies an interpreter using the Unix-
>      style "#!" specification (if supported on the platform).  If
>      a  language  was identified, the file is opened and then the
>      appropriate language parser is  called  to  operate  on  the
>      currently  open file. The parser parses through the file and
>      adds an entry to the tag file for each language object it is
>      written  to  handle. See TAG FILE FORMAT, below, for details
>      on these entries.
> 
>      This implementation of ctags imposes no formatting  require-
>      ments  on  C code as do legacy implementations. Older imple-
>      mentations of ctags tended to rely upon  certain  formatting
>      assumptions  in  order  to  help  it resolve coding dilemmas
>      caused by preprocessor conditionals.
> 
>      In general,  ctags  tries  to  be  smart  about  conditional
>      preprocessor  directives.  If  a preprocessor conditional is
>      encountered within a statement which defines  a  tag,  ctags
>      follows only the first branch of that conditional (except in
>      the special case of "#if 0", in which case it  follows  only
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   17
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      the  last  branch).  The  reason for this is that failing to
>      pursue only one branch can result in ambiguous syntax, as in
>      the following example:
> 
>           #ifdef TWO_ALTERNATIVES
>           struct {
>           #else
>           union {
>           #endif
>               short a;
>               long b;
>           }
> 
>      Both branches cannot be followed, or  braces  become  unbal-
>      anced and ctags would be unable to make sense of the syntax.
> 
>      If the application of this heuristic fails to properly parse
>      a  file, generally due to complicated and inconsistent pair-
>      ing within the conditionals, ctags will retry the file using
>      a different heuristic which does not selectively follow con-
>      ditional preprocessor branches, but instead  falls  back  to
>      relying upon a closing brace ("}") in column 1 as indicating
>      the end of a block once any  brace  imbalance  results  from
>      following a #if conditional branch.
> 
>      Ctags will also try  to  specially  handle  arguments  lists
>      enclosed  in  double  sets of parentheses in order to accept
>      the following conditional construct:
> 
>           extern void foo __ARGS((int one, char two));
> 
>      Any name immediately preceding the "(("  will  be  automati-
>      cally ignored and the previous name will be used.
> 
>      C++ operator definitions are specially handled. In order for
>      consistency  with  all  types  of  operators (overloaded and
>      conversion), the operator name in the tag file  will  always
>      be  preceded  by  the  string  "operator " (i.e. even if the
>      actual operator definition was written as "operator<<").
> 
>      After creating or appending to the tag file, it is sorted by
>      the tag name, removing identical tag lines.
> 
> 
> 
> TAG FILE FORMAT
>      When not running in etags mode, each entry in the  tag  file
>      consists  of  a separate line, each looking like this in the
>      most general case:
> 
>       tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields
> 
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   18
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      The fields and separators of these lines  are  specified  as
>      follows:
> 
>          1.  tag name
>          2.  single tab character
>          3.  name of the file in which the object associated with
>              the tag is located
>          4.  single tab character
>          5.  EX command used to locate the tag within  the  file;
>              generally  a  search  pattern  (either  /pattern/ or
>              ?pattern?) or line number (see  --excmd).  Tag  file
>              format  2  (see  --format)  extends  this EX command
>              under certain circumstances  to  include  a  set  of
>              extension fields (described below) embedded in an EX
>              comment immediately  appended  to  the  EX  command,
>              which  leaves  it  backward-compatible with original
>              vi(1) implementations.
> 
>      A few special tags are written into the tag file for  inter-
>      nal  purposes.  These  tags  are composed in such a way that
>      they always sort to the top of  the  file.   Therefore,  the
>      first  two  characters of these tags are used a magic number
>      to detect a tag file for purposes of determining  whether  a
>      valid  tag  file  is  being overwritten rather than a source
>      file.
> 
>      Note that the name of each source file will be  recorded  in
>      the  tag  file  exactly  as  it appears on the command line.
>      Therefore, if the path you specified on the command line was
>      relative  to the current directory, then it will be recorded
>      in that same manner in  the  tag  file.  See,  however,  the
>      --tag-relative option for how this behavior can be modified.
> 
>      Extension fields are tab-separated key-value pairs  appended
>      to  the  end  of  the  EX command as a comment, as described
>      above. These key value pairs  appear  in  the  general  form
>      "key:value". Their presence in the lines of the tag file are
>      controlled by the --fields option. The possible keys and the
>      meaning of their values are as follows:
> 
> 
>      access      Indicates the visibility of this  class  member,
>                  where value is specific to the language.
> 
> 
>      file        Indicates that the tag has file-limited visibil-
>                  ity. This key has no corresponding value.
> 
> 
>      kind        Indicates the type, or kind, of tag.  Its  value
>                  is  either  one  of the corresponding one-letter
>                  flags described under the various --<LANG>-kinds
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   19
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>                  options  above,  or a full name. It is permitted
>                  (and is, in fact, the default) for the key  por-
>                  tion  of  this field to be omitted. The optional
>                  behaviors  are  controlled  with  the   --fields
>                  option.
> 
> 
>      implementation
>                  When present, this indicates a limited implemen-
>                  tation  (abstract  vs. concrete) of a routine or
>                  class, where value is specific to  the  language
>                  ("virtual" or "pure virtual" for C++; "abstract"
>                  for Java).
> 
> 
>      inherits    When present, value. is a  comma-separated  list
>                  of  classes  from  which  this  class is derived
>                  (i.e. inherits from).
> 
> 
>      signature   When  present,  value  is  a  language-dependent
>                  representation  of the signature of a routine. A
>                  routine signature in its complete form specifies
>                  the  return  type  of  a  routine and its formal
>                  argument list. This extension field is presently
>                  supported  only  for  C-based languages and does
>                  not include the return type.
> 
> 
>      In addition, information on the scope of the tag  definition
>      may  be  available,  with  the  key  portion  equal  to some
>      language-dependent construct name and  its  value  the  name
>      declared for that construct in the program. This scope entry
>      indicates the scope in which the tag was found. For example,
>      a  tag generated for a C structure member would have a scope
>      looking like "struct:myStruct".
> 
> 
> 
> HOW TO USE WITH VI
>      Vi will, by default, expect a tag file by the name "tags" in
>      the  current directory. Once the tag file is built, the fol-
>      lowing commands exercise the tag indexing feature:
> 
>      vi -t tag   Start vi and position the cursor at the file and
>                  line where "tag" is defined.
> 
>      :ta tag     Find a tag.
> 
>      Ctrl-]      Find the tag under the cursor.
> 
>      Ctrl-T      Return to previous location before jump  to  tag
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   20
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>                  (not widely implemented).
> 
> 
> 
> HOW TO USE WITH GNU EMACS
>      Emacs will, by default, expect a tag file by the name "TAGS"
>      in  the  current  directory. Once the tag file is built, the
>      following commands exercise the tag indexing feature:
> 
>      M-x visit-tags-table <RET> FILE <RET>
>                Select the tag file, "FILE", to use.
> 
>      M-. [TAG] <RET>
>                Find the first definition of TAG. The default  tag
>                is the identifier under the cursor.
> 
>      M-*       Pop back to where you previously invoked "M-.".
> 
>      C-u M-.   Find the next definition for the last tag.
> 
> 
>      For more commands, see the Tags  topic  in  the  Emacs  info
>      document.
> 
> 
> 
> HOW TO USE WITH NEDIT
>      NEdit version 5.1 and later can handle the new extended  tag
>      file  format (see --format). To make NEdit use the tag file,
>      select "File->Load Tags File". To jump to the definition for
>      a  tag,  highlight the word, the press Ctrl-D. NEdit 5.1 can
>      can read multiple  tag  files  from  different  directories.
>      Setting  the  X  resource nedit.tagFile to the name of a tag
>      file instructs NEdit to automatically load that tag file  at
>      startup time.
> 
> 
> 
> CAVEATS
>      Because ctags is neither a preprocessor nor a compiler,  use
>      of  preprocessor  macros  can fool ctags into either missing
>      tags or improperly generating inappropriate  tags.  Although
>      ctags has been designed to handle certain common cases, this
>      is the single biggest cause of reported problems. In partic-
>      ular,  the  use  of  preprocessor constructs which alter the
>      textual syntax of C can fool ctags. You can work around many
>      such problems by using the -I option.
> 
>      Note that since ctags generates patterns for  locating  tags
>      (see  the  --excmd option), it is entirely possible that the
>      wrong line may be found  by  your  editor  if  there  exists
>      another   source   line  which  is  identical  to  the  line
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   21
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      containing the tag. The following example demonstrates  this
>      condition:
> 
>           int variable;
> 
>           /* ... */
>           void foo(variable)
>           int variable;
>           {
>               /* ... */
>           }
> 
>      Depending upon which editor you use and where  in  the  code
>      you happen to be, it is possible that the search pattern may
>      locate the local parameter declaration in  foo()  before  it
>      finds the actual global variable definition, since the lines
>      (and therefore their search patterns  are  identical).  This
>      can be avoided by use of the --excmd=n option.
> 
> 
> 
> BUGS
>      Ctags has more options than ls(1).
> 
>      When  parsing  a  C++  member  function   definition   (e.g.
>      "className::function"),  ctags  cannot determine whether the
>      scope specifier is a class name or a namespace specifier and
>      always  lists it as a class name in the scope portion of the
>      extension fields. Also, if a C++ function is defined outside
>      of  the  class  declaration  (the  usual  case),  the access
>      specification  (i.e.  public,  protected,  or  private)  and
>      implementation information (e.g. virtual, pure virtual) con-
>      tained in the function declaration are not  known  when  the
>      tag  is generated for the function definition. It will, how-
>      ever be available for prototypes (e.g --c++-kinds=+p).
> 
>      No qualified tags are generated for language objects  inher-
>      ited into a class.
> 
> 
> 
> ENVIRONMENT VARIABLES
>      CTAGS   If this environment  variable  exists,  it  will  be
>              expected  to  contain a set of default options which
>              are read when ctags starts, after the  configuration
>              files  listed  in FILES, below, are read, but before
>              any command line options are read. Options appearing
>              on  the command line will override options specified
>              in this variable. Only options  will  be  read  from
>              this  variable.  Note  that  all white space in this
>              variable is considered a separator, making it impos-
>              sible  to  pass  an  option  parameter containing an
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   22
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>              embedded space. If this is a problem, use  a  confi-
>              guration file instead.
> 
> 
>      ETAGS   Similar to the CTAGS variable above, this  variable,
>              if  found,  will  be read when etags starts. If this
>              variable is not found, etags will try to  use  CTAGS
>              instead.
> 
> 
>      TMPDIR  On Unix-like hosts where mkstemp() is available, the
>              value  of  this  variable specifies the directory in
>              which to place temporary files. This can  be  useful
>              if the size of a temporary file becomes too large to
>              fit on the partition holding the  default  temporary
>              directory   defined   at  compilation  time.   ctags
>              creates  temporary  files  only  if  either  (1)  an
>              emacs-style tag file is being generated, (2) the tag
>              file is being sent to standard output,  or  (3)  the
>              program  was  compiled to use an internal sort algo-
>              rithm to sort the tag files instead of the the  sort
>              utility of the operating system. If the sort utility
>              of the operating system is being used, it will  gen-
>              erally  observe  this  variable  also.  Note that if
>              ctags  is  setuid,  the  value  of  TMPDIR  will  be
>              ignored.
> 
> 
> 
> FILES
>      /ctags.cnf (on MSDOS, MSWindows only)
>      /etc/ctags.conf
>      /usr/local/etc/ctags.conf
>      $HOME/.ctags
>      $HOME/ctags.cnf (on MSDOS, MSWindows only)
>      .ctags
>      ctags.cnf (on MSDOS, MSWindows only)
>           If any of these configuration files exist, each will be
>           expected  to contain a set of default options which are
>           read in the order listed when ctags starts, but  before
>           the  CTAGS  environment variable is read or any command
>           line options are read. This makes it possible to set up
>           site-wide,  personal  or  project-level defaults. It is
>           possible to compile ctags to read an additional  confi-
>           guration  file  before  any of those shown above, which
>           will be indicated if the output produced by the  --ver-
>           sion  option  lists  the "custom-conf" feature. Options
>           appearing in the CTAGS environment variable or  on  the
>           command  line  will override options specified in these
>           files. Only options will be read from these files. Note
>           that the option files are read in line-oriented mode in
>           which spaces are significant (since  shell  quoting  is
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   23
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>           not  possible).  Each  line  of the file is read as one
>           command line parameter (as if it were quoted with  sin-
>           gle  quotes).  Therefore,  use  new  lines  to indicate
>           separate command-line arguments.
> 
> 
>      tags The default tag file created by ctags.
> 
>      TAGS The default tag file created by etags.
> 
> 
> SEE ALSO
>      The official Exuberant Ctags web site at:
> 
>           http://ctags.sourceforge.net
> 
>      Also ex(1), vi(1), elvis, or, better yet, vim, the  official
>      editor  of  ctags.  For more information on vim, see the VIM
>      Pages web site at:
> 
>           http://www.vim.org/
> 
> 
> 
> AUTHOR
>      Darren Hiebert <dhiebert at users.sourceforge.net>
>      http://DarrenHiebert.com/
> 
> 
> 
> MOTIVATION
>      "Think ye at all times of rendering some  service  to  every
>      member of the human race."
> 
>      "All effort and exertion put forth by man from the  fullness
>      of  his  heart  is worship, if it is prompted by the highest
>      motives and the will to do service to humanity."
> 
>           -- From the Baha'i Writings
> 
> 
> 
> CREDITS
>      This version  of  ctags  was  originally  derived  from  and
>      inspired   by   the   ctags   program  by  Steve  Kirkendall
>      <kirkenda@cs.pdx.edu> that comes with  the  Elvis  vi  clone
>      (though virtually none of the original code remains).
> 
>      Credit is also due Bram Moolenaar <Bram@vim.org>, the author
>      of  vim, who has devoted so much of his time and energy both
>      to developing the editor as a  service  to  others,  and  to
>      helping the orphans of Uganda.
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   24
> 
> 
> 
> 
> 
> 
> Exuberant Ctags                                          CTAGS(1)
> 
> 
> 
>      The section entitled "HOW TO USE WITH GNU EMACS" was  shame-
>      lessly stolen from the info page for GNU etags.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Darren Hiebert      Last change: Version 5.7                   25
> 
> 
> 


From brian.utterback@sun.com Mon Dec 22 08:10:31 2008
Received: from newsunmail1brm.central.sun.com (newsunmail1brm.Central.Sun.COM [129.147.62.245])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBMGAVt8019677
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 22 Dec 2008 08:10:31 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by newsunmail1brm.central.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBMGAU50055377
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 22 Dec 2008 09:10:30 -0700 (MST)
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCA00D09CXHY300@nwk-avmta-2.sfbay.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 22 Dec 2008 08:10:29 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCA008XECXFZN80@nwk-avmta-2.sfbay.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 22 Dec 2008 08:10:28 -0800 (PST)
Received: from [129.148.9.185] (sr1-ubur-27.East.Sun.COM [129.148.9.185])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBMGAOwj061582; Mon, 22 Dec 2008 11:10:25 -0500 (EST)
Date: Mon, 22 Dec 2008 11:10:24 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <1229961108.6312.13.camel@sr1-umpk-34>
To: John.Fischer@sun.com
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <494FBBF0.7060601@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
Status: RO
Content-Length: 79272

Exuberant CTags at http://ctags.sourceforge.net/

John Fischer wrote:
> Thomas,
> 
> What community are you tracking?
> 
> 
>>>   2.4 Originating Community
>>>     2.4.1 Community Name
>>>     
>>>     2.4.2 Community Involvement
>>>       Indicate Sun's involvement in the community
>>>       [ ] Maintainer
>>>       [ ] Contributor
>>>       [x] Monitoring
> 
> Thanks,
> 
> John
> 
> On Mon, 2008-12-22 at 07:28, Brian Utterback wrote:
>> I am submitting this fastrack on behalf of Thomas Preisler.
>>
>> Exposure is open.
>>
>> Template Version: @(#)sac_nextcase %I% %G% SMI
>> This information is Copyright 2008 Sun Microsystems
>> 1. Introduction
>>      1.1. Project/Component Working Name:
>> 	 Exuberant CTags
>>      1.2. Name of Document Author/Supplier:
>> 	 Author:  Brian Utterback
>>      1.3  Date of This Document:
>> 	22 December, 2008
>> 4. Technical Description
>>
>> Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
>> program. It generates an index of source code object definitions which 
>> is used by a number of editors and tools to instantly locate the 
>> definitions. Exuberant Ctags currently supports the following languages:
>>    Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
>>    Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
>>    PHP, PL/SQL, Python, REXX, Ruby, Scheme,
>>    Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
>>    Verilog, Vim, and YACC.
>>
>> This project proposes to deliver the ctags binary from the Exuberant 
>> CTags FOSS project renamed to exctags to avoid conflict with the 
>> existing ctags binary currently delivered as part of the SUNWtoo 
>> programming tools package. This follows the already established 
>> convention used by other platforms.
>>
>> The FOSSchecklist and man page are enclosed for review.
>>
>> A minor/patch binding is requested.
>> -- 
>> blu
>>
>> "Murderous organizations have increased in size and scope; they are
>> more daring, they are served by the most terrible weapons offered by
>> modern science, and the world is nowadays threatened by new forces
>> which, if recklessly unchained, may some day wreck universal
>> destruction."  - Arthur Griffith, 1898
>> ----------------------------------------------------------------------
>> Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
>> Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom
>>
>> ______________________________________________________________________
>> FCL--FOSS Check List
>> 1.0 Project Information
>> 1.1 Name of project/component
>>   Exuberant Ctags Packaging for OpenSolaris
>>
>> 1.2 Author of document
>>   Thomas Preisler
>>
>> 2.0 Project Summary
>>   2.1 Project Description
>>   Package current version (5.7) of Exuberant CTags release.
>>
>>   Exuberant Ctags is a multilanguage reimplementation of the Unix
>>   ctags program. It generates an index of source code object definitions
>>   which is used by a number of editors and tools to instantly locate the
>>   definitions. Exuberant Ctags currently supports the following languages:
>>   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang, Fortran,
>>   HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL,
>>   Python, REXX, Ruby, Scheme, Shell (Bourne, Korn, Z), S-Lang,
>>   SML (Standard ML), Tcl, Vera, Verilog, Vim, and YACC. 
>>   
>>   2.2 Release binding
>>       What is is the release binding?
>>       (see http://opensolaris.org/os/community/arc/policies/release-taxonomy/)
>>       [ ] Major
>>       [ ] Minor
>>       [x] Patch or Micro
>>       [ ] Unknown -- ARC review required
>>
>>   2.3 Type of project
>>       Is this case a Linux Familiarity project?
>>       [ ] Yes
>>       [x] No
>>
>>   2.4 Originating Community
>>     2.4.1 Community Name
>>     
>>     2.4.2 Community Involvement
>>       Indicate Sun's involvement in the community
>>       [ ] Maintainer
>>       [ ] Contributor
>>       [x] Monitoring
>>       
>>       Will the project team work with the upstream community to resolve
>>       architectural issues of interest to Sun?
>>       [ ] Yes 
>>       [x] No - briefly explain
>>       Not needed.
>>       
>>       Will we or are we forking from the community?
>>       [ ] Yes - ARC review required prior to forking
>>       [x] No
>>       
>> 3.0 Technical Description
>>   3.1 Installation & Sharable
>>     3.1.1S Solaris Installation - section only required for Solaris Software
>>       (see http://opensolaris.org/os/community/arc/policies/install-locations/ for details)
>>       Does this project follow the Install Locations best practice?
>>       [x] Yes 
>>       [ ] No - ARC review required
>>       
>>       Does this project install into /usr under [sbin|bin|lib|include|man|share]?
>>       [x] Yes
>>       [ ] No or N/A
>>       
>>       Does this project install into /opt?
>>       [ ] Yes - explain below
>>       [x] No or N/A
>>       
>>       Does this project install into a different directory structure?
>>       [ ] Yes - ARC review required
>>       [x] No or N/A
>>       
>>       Do any of the components of this project conflict with anything under /usr?
>>       (see http://opensolaris.org/os/community/arc/caselog/2007/047/ for details)
>>       [ ] Yes - explain below (?)
>>       [x] No
>>       Default Exuberant Ctags binary name is ctags and would naturally install into /usr/bin/ctags
>>       but Solaris ctags is already installed in /usr/bin. To avoid conflict, Common pratice
>>       is to rename the binary and install it with the different name in '/usr/bin'. New name of 
>>       Exuberant Ctags is exctags which is a common alternative name used by many others (try google for exctags).
>>       
>>       If conflicts exist then will this project install under /usr/gnu?
>>       [ ] Yes
>>       [ ] No - ARC review required
>>       [x] N/A
>>       Note: Exuberant Ctags is not a GNU product.
>>       
>>       Is this project installing into /usr/sfw?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>     3.1.1W Windows Installation - section only required for Windows Software
>> 	Section not applicable.
>>       
>>     3.1.2 Share and Sharable
>>       Does the module include any components that are used or shared by 
>>       other projects?
>>       [ ] Yes
>>       [x] No
>>     
>>       If yes are these components packaged to be shared with the other FOSS?
>>       [ ] Yes
>>       [ ] No - ARC review required
>>       [x] N/A
>>     
>>   3.2 Exported Libraries
>>       Are libraries being delivered by this project?
>>       [ ] Yes
>>       [x] No - continue with next section (section 3.3)
>>       
>>   3.3 Services and the /etc Directory
>>       (see http://opensolaris.org/os/community/arc/policies/SMF-policy/)
>>       Does the project integrate anything into /etc/init.d or /etc/rc?.d?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the project integrate any new entries into /etc/inittab or
>>       /etc/inetd.conf?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the project integrate any private non-public files into /etc/default
>>       or /etc/ configuration files?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the service manifests method context grant rights above that
>>       of the noaccess user and basic privilege set?
>>       [ ] Yes - ARC review required
>>       [x] No
>>         
>>   3.4 Security
>>     3.4.1 Secure By Default 
>>       (see http://opensolaris.org/os/community/arc/policies/secure-by-default/ for details)
>>       (see http://www.opensolaris.org/os/community/arc/policies/NITS-policy/ for details)
>>       (see parts of http://opensolaris.org/os/community/arc/policies/SMF-policy/ for
>>        addtional details)
>>       Are there any network services provided by this project?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.4.2)
>>       
>>     3.4.2 Authorization
>>       (see http://opensolaris.org/os/community/arc/bestpractices/rbac-intro/ and
>> 	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/ and
>> 	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/
>>            for details)
>>       Are there any setuid/setgid privileged binaries in the project?
>>       [ ] Yes - ARC review required
>>       [x] No - continue with next section (section 3.4.3)
>>       
>>     3.4.3 Auditing
>>       (see http://opensolaris.org/os/community/arc/policies/audit-policy/ for details)
>>       (see http://opensolaris.org/os/community/arc/caselog/2003/397 for details)
>>       Does this component contain administrative or security enforcing software?
>>       [ ] Yes - ARC review required
>>       [x] No - continue to next section (section 3.4.4)
>>         
>>     3.4.4 Authentication
>>       (see http://opensolaris.org/os/community/arc/policies/PAM/)
>>       Do the components contain any authentication code?
>>       [ ] Yes
>>       [x] No - continue to next section (section 3.4.5)
>>       
>>     3.4.5 Passwords
>>       (see http://opensolaris.org/os/community/arc/bestpractices/passwords-cli/ and
>>            http://opensolaris.org/os/community/arc/bestpractices/passwords-files/ for details)
>>       Do any of the components for the project deal with passwords?
>>       [ ] Yes
>>       [x] No - continue to next section (section 3.4.6)
>>       
>>     3.4.6 General Security Questions
>>       (see http://opensolaris.org/os/community/arc/bestpractices/security-questions/ for details)
>>       Are there any network protocols used by this project?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.5)
>>       
>>   3.5 Networking
>>       Do the components access the network?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.6)
>>       
>>   3.6 Core Solaris Components
>>       Do the components of this project compete with or duplicate core 
>>       Solaris components?
>>       [ ] Yes - ARC review required
>>       [x] No 
>>       
>>       Examples of Core Solaris Components include but are not limited to:
>>       
>>         Secure By Default
>>         Authorizations
>>         PAM -- Plugable Authentication Module
>>         Privilege
>>         PRM -- Process Rights Management -- Privilege
>>         Audit
>>         xVm -- Virtualization
>>         zones / Solaris Containers
>>         PRM -- Process Rights Management
>>         RBAC -- Role Based Access Control
>>         TX / Trusted Extensions
>>         ZFS
>>         SMF -- Service Management Facility
>>         FMA -- Fault Management Architecture
>>         SCF -- Smart Card Facility
>>         IPsec
>>         
>> 4.0 Interfaces
>>   (see http://www.opensolaris.org/os/community/arc/policies/interface-taxonomy/ for details)
>>   4.1 Exported Interfaces
>>   
>>     Interface Name                Classification  Comments
>>     ----------------              --------------  ----------------------
>>     SUNWexctags                   Uncommitted     Package
>>     /usr/bin/exctags              Uncommitted     Executable binary file
>>     
>>   4.2 Imported Interfaces
>>     Interface Name		Classification       Comments
>>     --------------------------- -------------------- --------------------------
>>     
>>     
>>   Brief Interface Classifications - See Appendix C for definitions
>>     Volatile - interfaces are fluid and will follow a rapidly changing community
>>     Uncommitted - interfaces are still evolving in the community and might follow
>> 		  the community
>>     Committed - interfaces are stable in the community
>>     Project Private - no review required, just document in table
>>     Contracted (interface modifier) - further review required
>>
>>
>> ______________________________________________________________________
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>> NAME
>>      ctags - Generate tag files for source code
>>
>>
>>
>> SYNOPSIS
>>      ctags [options] [file(s)]
>>
>>      etags [options] [file(s)]
>>
>>
>>
>> DESCRIPTION
>>      The  ctags  and  etags  programs  (hereinafter  collectively
>>      referred  to  as ctags, except where distinguished) generate
>>      an index (or "tag") file for a variety of  language  objects
>>      found  in  file(s).   This tag file allows these items to be
>>      quickly and easily located by a text editor or  other  util-
>>      ity.  A "tag" signifies a language object for which an index
>>      entry is  available  (or,  alternatively,  the  index  entry
>>      created for that object).
>>
>>      Alternatively, ctags can generate  a  cross  reference  file
>>      which  lists,  in human readable form, information about the
>>      various source objects found in a set of language files.
>>
>>      Tag index files are supported  by  numerous  editors,  which
>>      allow  the  user to locate the object associated with a name
>>      appearing in a source file and jump to  the  file  and  line
>>      which  defines  the  name.  Those known about at the time of
>>      this release are:
>>
>>          Vi(1)  and  its  derivatives  (e.g.  Elvis,  Vim,  Vile,
>>          Lemmy),  CRiSP,  Emacs,  FTE (Folding Text Editor), JED,
>>          jEdit, Mined, NEdit (Nirvana  Edit),  TSE  (The  SemWare
>>          Editor), UltraEdit, WorkSpace, X2, Zeus
>>
>>      Ctags is capable of generating different kinds of  tags  for
>>      each  of  many  different  languages. For a complete list of
>>      supported languages, the names by which they are recognized,
>>      and  the kinds of tags which are generated for each, see the
>>      --list-languages and --list-kinds options.
>>
>>
>>
>> SOURCE FILES
>>      Unless  the  --language-force  option  is   specified,   the
>>      language of each source file is automatically selected based
>>      upon a mapping of file names to languages. The  mappings  in
>>      effect   for   each   language  may  be  display  using  the
>>      --list-maps option and may be changed  using  the  --langmap
>>      option.   On  platforms  which  support it, if the name of a
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    1
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      file is not mapped to a language and the file is executable,
>>      the  first line of the file is checked to see if the file is
>>      a "#!" script for a recognized language.
>>
>>      By default, all other files names are ignored. This  permits
>>      running  ctags  on  all  files  in either a single directory
>>      (e.g. "ctags *"), or on all files in an entire source direc-
>>      tory  tree  (e.g.  "ctags -R"), since only those files whose
>>      names are mapped to languages will be scanned.
>>
>>      [The reason that .h  extensions  are  mapped  to  C++  files
>>      rather than C files is because it is common to use .h exten-
>>      sions in C++, and no harm results in treating  them  as  C++
>>      files.]
>>
>>
>>
>> OPTIONS
>>      Despite the wealth of available options, defaults are set so
>>      that  ctags  is  most  commonly executed without any options
>>      (e.g. "ctags *", or "ctags -R"), which  will  create  a  tag
>>      file  in  the  current  directory  for all recognized source
>>      files. The options described below are  provided  merely  to
>>      allow custom tailoring to meet special needs.
>>
>>      Note that spaces separating the single-letter  options  from
>>      their parameters are optional.
>>
>>      Note also that the  boolean  parameters  to  the  long  form
>>      options   (those   beginning  with  "--"  and  that  take  a
>>      "[=yes|no]" parameter) may be omitted, in which case  "=yes"
>>      is  implied. (e.g. --sort is equivalent to --sort=yes). Note
>>      further that "=1" and  "=on"  are  considered  synonyms  for
>>      "=yes", and that "=0" and "=off" are considered synonyms for
>>      "=no".
>>
>>      Some options are either ignored or  useful  only  when  used
>>      while  running  in  etags mode (see -e option). Such options
>>      will be noted.
>>
>>      Most options  may  appear  anywhere  on  the  command  line,
>>      affecting  only  those  files which follow the option. A few
>>      options, however, must appear before the first file name and
>>      will be noted as such.
>>
>>      Options taking language names will  accept  those  names  in
>>      either  upper or lower case. See the --list-languages option
>>      for a complete list of the built-in language names.
>>
>>
>>      -a   Equivalent to --append.
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    2
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      -B   Use  backward  searching  patterns  (e.g.   ?pattern?).
>>           [Ignored in etags mode]
>>
>>
>>      -e   Enable etags mode, which will create a tag file for use
>>           with  the  Emacs  editor.   Alternatively,  if ctags is
>>           invoked by a name containing the string "etags" (either
>>           by  renaming,  or  creating a link to, the executable),
>>           etags mode will be enabled.  This  option  must  appear
>>           before the first file name.
>>
>>
>>      -f tagfile
>>           Use the name specified by  tagfile  for  the  tag  file
>>           (default  is  "tags",  or  "TAGS" when running in etags
>>           mode). If tagfile is specified as  "-",  then  the  tag
>>           file  is written to standard output instead. Ctags will
>>           stubbornly refuse to take orders if tagfile exists  and
>>           its  first  line  contains something other than a valid
>>           tags line. This will save your neck if  you  mistakenly
>>           type  "ctags  -f  *.c", which would otherwise overwrite
>>           your first C file with the tags generated by the  rest!
>>           It  will  also  refuse to accept a multi-character file
>>           name which begins with a '-'  (dash)  character,  since
>>           this  most  likely means that you left out the tag file
>>           name and this option tried to grab the next  option  as
>>           the  file  name. If you really want to name your output
>>           tag file "-ugly", specify it as "./-ugly". This  option
>>           must  appear before the first file name. If this option
>>           is specified more than once, only the last will apply.
>>
>>
>>      -F   Use  forward  searching   patterns   (e.g.   /pattern/)
>>           (default).  [Ignored in etags mode]
>>
>>
>>      -h list
>>           Specifies a  list  of  file  extensions,  separated  by
>>           periods,  which  are  to  be interpreted as include (or
>>           header) files. To indicate files having  no  extension,
>>           use  a  period  not  followed by a non-period character
>>           (e.g. ".", "..x", ".x."). This option only affects  how
>>           the  scoping  of  a  particular kinds of tags is inter-
>>           preted (i.e. whether or not they are considered as glo-
>>           bally  visible or visible only within the file in which
>>           they are defined); it does not map the extension to any
>>           particular  language.  Any  tag  which  is located in a
>>           non-include file and cannot be seen  (e.g.  linked  to)
>>           from  another  file  is considered to have file-limited
>>           (e.g. static) scope. No kind of  tag  appearing  in  an
>>           include  file  will  be considered to have file-limited
>>           scope. If the first character in the  list  is  a  plus
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    3
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           sign,  then the extensions in the list will be appended
>>           to the current list; otherwise, the list  will  replace
>>           the  current  list. See, also, the --file-scope option.
>>           The default list is  ".h.H.hh.hpp.hxx.h++.inc.def".  To
>>           restore the default list, specify -h default. Note that
>>           if an extension supplied to this option is not  already
>>           mapped  to  a  particular  language  (see SOURCE FILES,
>>           above), you will also need to use either the  --langmap
>>           or --language-force option.
>>
>>
>>      -I identifier-list
>>           Specifies a list of identifiers which are  to  be  spe-
>>           cially  handled  while  parsing C and C++ source files.
>>           This option is specifically provided to handle  special
>>           cases  arising  through the use of preprocessor macros.
>>           When the identifiers  listed  are  simple  identifiers,
>>           these identifiers will be ignored during parsing of the
>>           source files. If an identifier is suffixed with  a  '+'
>>           character,  ctags  will  also  ignore  any parenthesis-
>>           enclosed argument list which may immediately follow the
>>           identifier  in the source files. If two identifiers are
>>           separated with the '=' character, the first identifiers
>>           is  replaced by the second identifiers for parsing pur-
>>           poses. The list of identifiers may be supplied directly
>>           on the command line or read in from a separate file. If
>>           the first character of identifier-list is '@', '.' or a
>>           pathname separator ('/' or '\'), or the first two char-
>>           acters specify a drive letter (e.g. "C:"), the  parame-
>>           ter  identifier-list  will be interpreted as a filename
>>           from which to read a list of identifiers, one per input
>>           line.  Otherwise, identifier-list is a list of identif-
>>           iers (or identifier pairs)  to  be  specially  handled,
>>           each  delimited  by  a either a comma or by white space
>>           (in which case the list should be quoted  to  keep  the
>>           entire  list as one command line argument). Multiple -I
>>           options may be supplied.  To clear the list  of  ignore
>>           identifiers,   supply   a   single   dash   ("-")   for
>>           identifier-list.
>>
>>           This feature is useful  when  preprocessor  macros  are
>>           used  in such a way that they cause syntactic confusion
>>           due to their presence. Indeed, this is the best way  of
>>           working around a number of problems caused by the pres-
>>           ence of syntax-busting  macros  in  source  files  (see
>>           CAVEATS,  below).  Some  examples  will illustrate this
>>           point.
>>
>>              int foo ARGDECL4(void *, ptr, long int, nbytes)
>>
>>
>>           In the above example, the  macro  "ARGDECL4"  would  be
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    4
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           mistakenly  interpreted  to be the name of the function
>>           instead of the correct name  of  "foo".  Specifying  -I
>>           ARGDECL4 results in the correct behavior.
>>
>>              /* creates an RCS version string in module */
>>              MODULE_VERSION("$Revision: 590 $")
>>
>>
>>           In the above example the  macro  invocation  looks  too
>>           much  like a function definition because it is not fol-
>>           lowed by a semicolon (indeed, it could even be followed
>>           by  a  global  variable definition that would look much
>>           like a K&R style function  parameter  declaration).  In
>>           fact,  this  seeming function definition could possibly
>>           even cause the rest of the  file  to  be  skipped  over
>>           while  trying to complete the definition. Specifying -I
>>           MODULE_VERSION+ would avoid such a problem.
>>
>>              CLASS Example {
>>                  // your content here
>>              };
>>
>>
>>           The example above uses "CLASS" as a preprocessor  macro
>>           which expands to something different for each platform.
>>           For  instance  CLASS   may   be   defined   as   "class
>>           __declspec(dllexport)"  on  Win32  platforms and simply
>>           "class" on UNIX.  Normally, the absence of the C++ key-
>>           word   "class"  would  cause  the  source  file  to  be
>>           incorrectly parsed. Correct behavior can be restored by
>>           specifying -I CLASS=class.
>>
>>
>>      -L file
>>           Read from file a list of  file  names  for  which  tags
>>           should be generated.  If file is specified as "-", then
>>           file names are read from  standard  input.  File  names
>>           read  using  this  option  are processed following file
>>           names appearing on the command line. Options  are  also
>>           accepted  in  this  input.  If this option is specified
>>           more than once, only the last will apply.  Note:   file
>>           is  read in line-oriented mode, where a new line is the
>>           only delimiter and non-trailing  white  space  is  con-
>>           sidered  significant, in order that file names contain-
>>           ing spaces may be  supplied  (however,  trailing  white
>>           space  is  stripped  from  lines);  this can affect how
>>           options are parsed if included in the input.
>>
>>
>>      -n   Equivalent to --excmd=number.
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    5
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      -N   Equivalent to --excmd=pattern.
>>
>>
>>      -o tagfile
>>           Equivalent to -f tagfile.
>>
>>
>>      -R   Equivalent to --recurse.
>>
>>
>>      -u   Equivalent to --sort=no (i.e. "unsorted").
>>
>>
>>      -V   Equivalent to --verbose.
>>
>>
>>      -w   This  option  is   silently   ignored   for   backward-
>>           compatibility with the ctags of SVR4 Unix.
>>
>>
>>      -x   Print a tabular, human-readable cross reference  (xref)
>>           file  to  standard  output  instead of generating a tag
>>           file. The information contained in the output includes:
>>           the  tag  name;  the kind of tag; the line number, file
>>           name, and source line  (with  extra  white  space  con-
>>           densed)  of the file which defines the tag. No tag file
>>           is written and all options affecting  tag  file  output
>>           will  be ignored. Example applications for this feature
>>           are generating a listing of all functions located in  a
>>           source  file  (e.g. ctags -x --c-kinds=f file), or gen-
>>           erating a list of all externally visible  global  vari-
>>           ables   located   in  a  source  file  (e.g.  ctags  -x
>>           --c-kinds=v --file-scope=no  file).  This  option  must
>>           appear before the first file name.
>>
>>
>>      --append[=yes|no]
>>           Indicates whether tags  generated  from  the  specified
>>           files  should  be  appended to those already present in
>>           the tag file or should replace them. This option is off
>>           by  default.  This  option must appear before the first
>>           file name.
>>
>>
>>      --etags-include=file
>>           Include a reference to  file  in  the  tag  file.  This
>>           option  may be specified as many times as desired. This
>>           supports Emacs' capability to  use  a  tag  file  which
>>           "includes"  other  tag  files. [Available only in etags
>>           mode]
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    6
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --exclude=[pattern]
>>           Add pattern to a list  of  excluded  files  and  direc-
>>           tories.  This  option may be specified as many times as
>>           desired. For each file name considered by  ctags,  each
>>           pattern  specified  using  this option will be compared
>>           against    both     the     complete     path     (e.g.
>>           some/path/base.ext)  and  the base name (e.g. base.ext)
>>           of the file, thus allowing patterns which match a given
>>           file  name  irrespective  of  its path, or match only a
>>           specific path. If appropriate support is available from
>>           the  runtime  library  of your C compiler, then pattern
>>           may contain the  usual  shell  wildcards  (not  regular
>>           expressions)  common  on  Unix  (be  sure  to quote the
>>           option parameter to protect the  wildcards  from  being
>>           expanded  by  the  shell  before being passed to ctags;
>>           also be aware that wildcards can match the slash  char-
>>           acter,  '/').  You can determine if shell wildcards are
>>           available on your platform by examining the  output  of
>>           the  --version  option, which will include "+wildcards"
>>           in the compiled feature  list;  otherwise,  pattern  is
>>           matched  against file names using a simple textual com-
>>           parison.
>>
>>           If pattern begins with the character '@', then the rest
>>           of  the string is interpreted as a file name from which
>>           to read exclusion patterns, one per line. If pattern is
>>           empty,  the list of excluded patterns is cleared.  Note
>>           that at program startup, the default exclude list  con-
>>           tains  "EIFGEN",  "SCCS",  "RCS",  and "CVS", which are
>>           names of directories for  which  it  is  generally  not
>>           desirable  to  descend  while  processing the --recurse
>>           option.
>>
>>
>>      --excmd=type
>>           Determines the type of EX command used to  locate  tags
>>           in the source file.  [Ignored in etags mode]
>>
>>           The valid values for type (either the  entire  word  or
>>           the first letter is accepted) are:
>>
>>
>>           number   Use only line numbers  in  the  tag  file  for
>>                    locating tags. This has four advantages:
>>                    1.  Significantly  reduces  the  size  of  the
>>                        resulting tag file.
>>                    2.  Eliminates failures to find  tags  because
>>                        the  line  defining  the  tag has changed,
>>                        causing the pattern match  to  fail  (note
>>                        that  some  editors, such as vim, are able
>>                        to recover in many such instances).
>>                    3.  Eliminates finding identical matching, but
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    7
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                        incorrect, source lines (see BUGS, below).
>>                    4.  Retains separate entries in the  tag  file
>>                        for  lines which are identical in content.
>>                        In pattern  mode,  duplicate  entries  are
>>                        dropped  because  the search patterns they
>>                        generate are identical, making the  dupli-
>>                        cate entries useless.
>>
>>
>>                    However, this option has one significant draw-
>>                    back:  changes  to  the source files can cause
>>                    the line numbers recorded in the tag  file  to
>>                    no  longer  correspond  to  the  lines  in the
>>                    source file, causing jumps  to  some  tags  to
>>                    miss  the  target  definition  by  one or more
>>                    lines. Basically, this  option  is  best  used
>>                    when the source code to which it is applied is
>>                    not subject to change. Selecting  this  option
>>                    type   causes  the  following  options  to  be
>>                    ignored: -BF.
>>
>>
>>           pattern  Use only search patterns for all tags,  rather
>>                    than  the  line numbers usually used for macro
>>                    definitions. This has  the  advantage  of  not
>>                    referencing  obsolete  line numbers when lines
>>                    have been added or removed since the tag  file
>>                    was generated.
>>
>>
>>           mixed    In this mode, patterns are generally used with
>>                    a few exceptions. For C, line numbers are used
>>                    for  macro  definition  tags.  This  was   the
>>                    default format generated by the original ctags
>>                    and is, therefore, retained as the default for
>>                    this  option.  For  Fortran,  line numbers are
>>                    used   for   common   blocks   because   their
>>                    corresponding   source   lines  are  generally
>>                    identical, making pattern searches useless for
>>                    finding all matches.
>>
>>
>>      --extra=[+|-]flags
>>           Specifies whether to include extra tag entries for cer-
>>           tain kinds of information. The parameter flags is a set
>>           of one-letter flags,  each  representing  one  kind  of
>>           extra tag entry to include in the tag file. If flags is
>>           preceded by by either the '+'  or  '-'  character,  the
>>           effect of each flag is added to, or removed from, those
>>           currently enabled;  otherwise  the  flags  replace  any
>>           current  settings.  The meaning of each flag is as fol-
>>           lows:
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    8
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>              f   Include an entry for the base file name of every
>>                  source file (e.g.  "example.c"), which addresses
>>                  the first line of the file.
>>
>>              q   Include an extra class-qualified tag  entry  for
>>                  each  tag  which  is  a  member  of a class (for
>>                  languages  for   which   this   information   is
>>                  extracted; currently C++, Eiffel, and Java). The
>>                  actual form of the qualified  tag  depends  upon
>>                  the  language  from  which  the  tag was derived
>>                  (using a form that is most natural for how qual-
>>                  ified  calls are specified in the language). For
>>                  C++, it is in the form "class::member"; for Eif-
>>                  fel  and Java, it is in the form "class.member".
>>                  This may allow easier  location  of  a  specific
>>                  tags  when  multiple  occurrences  of a tag name
>>                  occur in the tag file. Note, however, that  this
>>                  could  potentially  more than double the size of
>>                  the tag file.
>>
>>
>>      --fields=[+|-]flags
>>           Specifies the available extension fields which  are  to
>>           be  included  in  the  entries of the tag file (see TAG
>>           FILE FORMAT, below, for more information). The  parame-
>>           ter flags is a set of one-letter flags, each represent-
>>           ing one type of extension field to  include,  with  the
>>           following  meanings  (disabled  by default unless indi-
>>           cated):
>>
>>
>>              a   Access (or export) of class members
>>              f   File-restricted scoping [enabled]
>>              i   Inheritance information
>>              k   Kind of tag as a single letter [enabled]
>>              K   Kind of tag as full name
>>              l   Language of source file containing tag
>>              m   Implementation information
>>              n   Line number of tag definition
>>              s   Scope of tag definition [enabled]
>>              S   Signature of routine (e.g. prototype or  parame-
>>                  ter list)
>>              z   Include the "kind:" key in kind field
>>              t   Type and  name  of  a  variable  or  typedef  as
>>                  "typeref:" field [enabled]
>>
>>           Each letter or group of  letters  may  be  preceded  by
>>           either  '+'  to  add  it  to the default set, or '-' to
>>           exclude it. In the absence of any preceding '+' or  '-'
>>           sign,  only those kinds explicitly listed in flags will
>>           be included in the output (i.e. overriding the  default
>>           set).  This  option is ignored if the option --format=1
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    9
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           has been specified. The default value of this option is
>>           fks.
>>
>>
>>      --file-scope[=yes|no]
>>           Indicates whether tags scoped only for  a  single  file
>>           (i.e.  tags which cannot be seen outside of the file in
>>           which they are defined, such as "static"  tags)  should
>>           be  included  in  the output. See, also, the -h option.
>>           This option is enabled by default.
>>
>>
>>      --filter[=yes|no]
>>           Causes ctags to behave as a filter, reading source file
>>           names  from  standard  input and printing their tags to
>>           standard output on a file-by-file basis. If --sorted is
>>           enabled, tags are sorted only within the source file in
>>           which they are defined. File names are read from  stan-
>>           dard input in line-oriented input mode (see note for -L
>>           option) and only after file names listed on the command
>>           line  or  from  any  file supplied using the -L option.
>>           When this option is enabled, the options  -f,  -o,  and
>>           --totals are ignored. This option is quite esoteric and
>>           is disabled by default. This option must appear  before
>>           the first file name.
>>
>>
>>      --filter-terminator=string
>>           Specifies a string to print to standard output  follow-
>>           ing  the  tags  for  each  file  name  parsed  when the
>>           --filter option is enabled. This may permit an applica-
>>           tion  reading the output of ctags to determine when the
>>           output for each file is finished. Note that if the file
>>           name read is a directory and --recurse is enabled, this
>>           string will be printed only one once at the end of  all
>>           tags found for by descending the directory. This string
>>           will always be separated from the last tag line for the
>>           file  by its terminating newline.  This option is quite
>>           esoteric and is empty  by  default.  This  option  must
>>           appear before the first file name.
>>
>>
>>      --format=level
>>           Change the format of the output tag file. Currently the
>>           only  valid values for level are 1 or 2. Level 1 speci-
>>           fies the original tag file format and level 2 specifies
>>           a  new extended format containing extension fields (but
>>           in a manner which retains  backward-compatibility  with
>>           original  vi(1)  implementations). The default level is
>>           2. This option must appear before the first file  name.
>>           [Ignored in etags mode]
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   10
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --help
>>           Prints to standard output a detailed usage description,
>>           and then exits.
>>
>>
>>      --if0[=yes|no]
>>           Indicates a preference as to  whether  code  within  an
>>           "#if  0" branch of a preprocessor conditional should be
>>           examined for non-macro  tags  (macro  tags  are  always
>>           included).  Because  the intent of this construct is to
>>           disable code, the default value of this option  is  no.
>>           Note that this indicates a preference only and does not
>>           guarantee skipping code within an "#if 0" branch, since
>>           the  fall-back  algorithm  used  to  generate tags when
>>           preprocessor conditionals are too complex  follows  all
>>           branches  of  a conditional. This option is disabled by
>>           default.
>>
>>
>>      --<LANG>-kinds=[+|-]kinds
>>           Specifies a list of language-specific kinds of tags (or
>>           kinds)  to  include in the output file for a particular
>>           language, where <LANG> is case-insensitive and  is  one
>>           of    the    built-in    language    names   (see   the
>>           --list-languages  option  for  a  complete  list).  The
>>           parameter  kinds  is a group of one-letter flags desig-
>>           nating kinds of tags (particular to  the  language)  to
>>           either include or exclude from the output. The specific
>>           sets of flags recognized for each language, their mean-
>>           ings  and  defaults  may be list using the --list-kinds
>>           option. Each letter or group of letters may be preceded
>>           by  either  '+' to add it to, or '-' to remove it from,
>>           the default set. In the absence of any preceding '+' or
>>           '-'  sign,  only those kinds explicitly listed in kinds
>>           will be included in the output  (i.e.   overriding  the
>>           default for the specified language).
>>
>>           As an example for the C language, in order to add  pro-
>>           totypes  and  external  variable  declarations  to  the
>>           default set of  tag  kinds,  but  exclude  macros,  use
>>           --c-kinds=+px-d;  to  include  only tags for functions,
>>           use --c-kinds=f.
>>
>>
>>      --langdef=name
>>           Defines a new user-defined language, name, to be parsed
>>           with  regular  expressions.  Once  defined, name may be
>>           used in other options taking language names. The  typi-
>>           cal use of this option is to first define the language,
>>           then map file names to it using --langmap, then specify
>>           regular  expressions using --regex-<LANG> to define how
>>           its tags are found.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   11
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --langmap=map[,map[...]]
>>           Controls how file names are mapped  to  languages  (see
>>           the  --list-maps option). Each comma-separated map con-
>>           sists of the language name (either a built-in or  user-
>>           defined  language),  a colon, and a list of file exten-
>>           sions and/or file name patterns. A  file  extension  is
>>           specified  by  preceding  the  extension  with a period
>>           (e.g. ".c").  A  file  name  pattern  is  specified  by
>>           enclosing    the    pattern    in   parentheses   (e.g.
>>           "([Mm]akefile)"). If appropriate support  is  available
>>           from  the  runtime library of your C compiler, then the
>>           file name pattern may contain the usual shell wildcards
>>           common  on  Unix (be sure to quote the option parameter
>>           to protect the wildcards from  being  expanded  by  the
>>           shell  before being passed to ctags). You can determine
>>           if shell wildcards are available on  your  platform  by
>>           examining  the  output  of  the --version option, which
>>           will include "+wildcards" in the compiled feature list;
>>           otherwise,  the  file name patterns are matched against
>>           file names using a simple textual comparison. When map-
>>           ping  a  file extension, it will first be unmapped from
>>           any other languages.
>>
>>           If the first character in a map is a  plus  sign,  then
>>           the  extensions and file name patterns in that map will
>>           be appended to the current map for that language;  oth-
>>           erwise, the map will replace the current map. For exam-
>>           ple, to specify that only files with extensions  of  .c
>>           and  .x  are  to  be  treated  as C language files, use
>>           "--langmap=c:.c.x"; to also add files  with  extensions
>>           of    .j    as    Java    language    files,    specify
>>           "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g.
>>           files  named  either  "Makefile", "makefile", or having
>>           the extension ".mak")  to  a  language  called  "make",
>>           specify   "--langmap=make:([Mm]akefile).mak".   To  map
>>           files having no extension, specify a  period  not  fol-
>>           lowed  by  a  non-period  character  (e.g.  ".", "..x",
>>           ".x."). To clear the mapping for a particular  language
>>           (thus  inhibiting automatic generation of tags for that
>>           language),  specify  an  empty  extension  list   (e.g.
>>           "--langmap=fortran:").  To restore the default language
>>           mappings for all a particular language, supply the key-
>>           word "default" for the mapping.  To specify restore the
>>           default language mappings for  all  languages,  specify
>>           "--langmap=default".  Note  that  file  extensions  are
>>           tested before file name  patterns  when  inferring  the
>>           language of a file.
>>
>>
>>      --language-force=language
>>           By default, ctags automatically selects the language of
>>           a  source  file,  ignoring  those  files whose language
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   12
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           cannot be determined (see SOURCE  FILES,  above).  This
>>           option forces the specified language (case-insensitive;
>>           either built-in or user-defined) to be used  for  every
>>           supplied  file  instead  of automatically selecting the
>>           language based upon its  extension.  In  addition,  the
>>           special  value  auto indicates that the language should
>>           be automatically selected (which  effectively  disables
>>           this option).
>>
>>
>>      --languages=[+|-]list
>>           Specifies the languages for  which  tag  generation  is
>>           enabled, with list containing a comma-separated list of
>>           language names (case-insensitive;  either  built-in  or
>>           user-defined).  If  the  first  language of list is not
>>           preceded by either a '+' or '-', the current list  will
>>           be  cleared  before adding or removing the languages in
>>           list. Until a '-' is encountered, each language in  the
>>           list  will  be added to the current list. As either the
>>           '+' or '-' is encountered in the  list,  the  languages
>>           following  it  are  added  or  removed from the current
>>           list, respectively. Thus, it becomes simple to  replace
>>           the  current  list  with a new one, or to add or remove
>>           languages from the current list.  The  actual  list  of
>>           files for which tags will be generated depends upon the
>>           language extension mapping in effect (see the --langmap
>>           option).  Note  that  all  languages,  including  user-
>>           defined languages are enabled  unless  explicitly  dis-
>>           abled  using  this  option.  Language names included in
>>           list may be any built-in  language  or  one  previously
>>           defined  with --langdef. The default is "all", which is
>>           also  accepted   as   a   valid   argument.   See   the
>>           --list-languages  option  for  a  complete  list of the
>>           built-in language names.
>>
>>
>>      --license
>>           Prints a summary of the software  license  to  standard
>>           output, and then exits.
>>
>>
>>      --line-directives[=yes|no]
>>           Specifies whether "#line" directives should  be  recog-
>>           nized. These are present in the output of preprocessors
>>           and contain the line  number,  and  possibly  the  file
>>           name,  of  the  original  source file(s) from which the
>>           preprocessor output file was generated.  When  enabled,
>>           this  option  will  cause ctags to generate tag entries
>>           marked with the file names and line  numbers  of  their
>>           locations  original  source  file(s),  instead of their
>>           actual locations in the preprocessor output. The actual
>>           file  names placed into the tag file will have the same
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   13
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           leading path  components  as  the  preprocessor  output
>>           file,  since  it  is  assumed  that the original source
>>           files are located relative to the  preprocessor  output
>>           file  (unless, of course, the #line directive specifies
>>           an absolute path). This option is off by default. Note:
>>           This option is generally only useful when used together
>>           with the --excmd=number (-n) option. Also, you may have
>>           to  use either the --langmap or --language-force option
>>           if the extension of the preprocessor output file is not
>>           known to ctags.
>>
>>
>>      --links[=yes|no]
>>           Indicates whether symbolic links (if supported)  should
>>           be followed. When disabled, symbolic links are ignored.
>>           This option is on by default.
>>
>>
>>      --list-kinds[=language|all]
>>           Lists the tag kinds recognized for either the specified
>>           language or all languages, and then exits. Each kind of
>>           tag recorded in the tag file is represented by  a  one-
>>           letter  flag,  which  is  also  used to filter the tags
>>           placed   into   the   output   through   use   of   the
>>           --<LANG>-kinds  option. Note that some languages and/or
>>           tag kinds may be implemented using regular  expressions
>>           and  may  not be available if regex support is not com-
>>           piled into ctags (see the --regex-<LANG> option).  Each
>>           kind listed is enabled unless followed by "[off]".
>>
>>
>>      --list-maps[=language|all]
>>           Lists the file extensions and file name patterns  which
>>           associate  a  file  name with a language for either the
>>           specified language or all languages,  and  then  exits.
>>           See the --langmap option, and SOURCE FILES, above.
>>
>>
>>      --list-languages
>>           Lists the names of the languages understood  by  ctags,
>>           and then exits.  These language names are case insensi-
>>           tive  and  may  be  used   in   the   --language-force,
>>           --languages,    --<LANG>-kinds,    and   --regex-<LANG>
>>           options.
>>
>>
>>      --options=file
>>           Read additional options from file. The file should con-
>>           tain  one  option  per  line.  As  a  special  case, if
>>           --options=NONE is specified as the first option on  the
>>           command  line, it will disable the automatic reading of
>>           any configuration options from either  a  file  or  the
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   14
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           environment (see FILES).
>>
>>
>>      --recurse[=yes|no]
>>           Recurse into directories encountered  in  the  list  of
>>           supplied  files. If the list of supplied files is empty
>>           and no file list is specified with the -L option,  then
>>           the  current  directory (i.e. ".") is assumed. Symbolic
>>           links are followed. If you don't like these  behaviors,
>>           either  explicitly specify the files or pipe the output
>>           of find(1) into ctags -L- instead. Note: This option is
>>           not  supported  on  all  platforms  at  present.  It is
>>           available if the output of the --help  option  includes
>>           this  option.  See, also, the --exclude to limit recur-
>>           sion.
>>
>>
>>      --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
>>           The /regexp/replacement/ pair define a regular  expres-
>>           sion  replacement pattern, similar in style to sed sub-
>>           stitution commands, with which to  generate  tags  from
>>           source  files  mapped  to  the  named language, <LANG>,
>>           (case-insensitive; either a  built-in  or  user-defined
>>           language).  The  regular expression, regexp, defines an
>>           extended  regular  expression  (roughly  that  used  by
>>           egrep(1)), which is used to locate a single source line
>>           containing a tag and may specify tab  characters  using
>>           \t.  When  a matching line is found, a tag will be gen-
>>           erated for the name defined by replacement, which  gen-
>>           erally  will  contain  the  special  back-references \1
>>           through \9 to refer to matching  sub-expression  groups
>>           within  regexp.  The  '/' separator characters shown in
>>           the parameter to the option can actually be replaced by
>>           any  character. Note that whichever separator character
>>           is used will have to be escaped with a backslash  ('\')
>>           character wherever it is used in the parameter as some-
>>           thing other than a separator.  The  regular  expression
>>           defined  by this option is added to the current list of
>>           regular expressions for the specified  language  unless
>>           the  parameter  is  omitted,  in which case the current
>>           list is cleared.
>>
>>           Unless modified by flags, regexp is  interpreted  as  a
>>           Posix  extended  regular  expression.  The  replacement
>>           should expand for all matching  lines  to  a  non-empty
>>           string  of  characters,  or  a  warning message will be
>>           reported. An optional kind specifier for tags  matching
>>           regexp  may  follow  replacement,  which will determine
>>           what kind of tag is reported in  the  "kind"  extension
>>           field  (see  TAG  FILE FORMAT, below). The full form of
>>           kind-spec is in the form of a single letter, a comma, a
>>           name (without spaces), a comma, a description, followed
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   15
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           by a separator, which specify the short and long  forms
>>           of   the   kind   value  and  its  textual  description
>>           (displayed using --list-kinds). Either  the  kind  name
>>           and/or  the description may be omitted. If kind-spec is
>>           omitted, it defaults to "r,regex". Finally,  flags  are
>>           one or more single-letter characters having the follow-
>>           ing effect upon the interpretation of regexp:
>>
>>
>>              b   The pattern is interpreted as a Posix basic reg-
>>                  ular expression.
>>
>>              e   The pattern is interpreted as a  Posix  extended
>>                  regular expression (default).
>>
>>              i   The regular expression is to  be  applied  in  a
>>                  case-insensitive manner.
>>
>>           Note that this option is available only  if  ctags  was
>>           compiled  with  support  for regular expressions, which
>>           depends upon your platform. You can determine  if  sup-
>>           port  for regular expressions is compiled in by examin-
>>           ing the output of  the  --version  option,  which  will
>>           include "+regex" in the compiled feature list.
>>
>>           For more information on the regular expressions used by
>>           ctags,  see  either the regex(5,7) man page, or the GNU
>>           info documentation for regex (e.g. "info regex").
>>
>>
>>      --sort[=yes|no|foldcase]
>>           Indicates whether the tag file should be sorted on  the
>>           tag name (default is yes). Note that the original vi(1)
>>           required sorted tags. The foldcase value specifies case
>>           insensitive  (or  case-folded)  sorting.   Fast  binary
>>           searches of tag files  sorted  with  case-folding  will
>>           require  special  support  from  tools using tag files,
>>           such as that found in the ctags  readtags  library,  or
>>           Vim  version  6.2  or  higher (using "set ignorecase").
>>           This option must appear before  the  first  file  name.
>>           [Ignored in etags mode]
>>
>>
>>      --tag-relative[=yes|no]
>>           Indicates that the file paths recorded in the tag  file
>>           should  be relative to the directory containing the tag
>>           file, rather than relative to  the  current  directory,
>>           unless  the  files  supplied  on  the  command line are
>>           specified with absolute paths. This option must  appear
>>           before  the  first  file  name. The default is yes when
>>           running in etags mode (see the -e  option),  no  other-
>>           wise.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   16
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --totals[=yes|no]
>>           Prints statistics about the source files read  and  the
>>           tag  file  written  during  the  current  invocation of
>>           ctags. This option is off by default.  This option must
>>           appear before the first file name.
>>
>>
>>      --verbose[=yes|no]
>>           Enable verbose mode. This  prints  out  information  on
>>           option  processing  and a brief message describing what
>>           action is being  taken  for  each  file  considered  by
>>           ctags. Normally, ctags does not read command line argu-
>>           ments until after options are read from the  configura-
>>           tion files (see FILES, below) and the CTAGS environment
>>           variable. However, if this option is the first argument
>>           on  the  command  line,  it will take effect before any
>>           options are read from these sources. The default is no.
>>
>>
>>      --version
>>           Prints a version identifier for ctags to standard  out-
>>           put,  and then exits. This is guaranteed to always con-
>>           tain the string "Exuberant Ctags".
>>
>>
>>
>> OPERATIONAL DETAILS
>>      As ctags considers each file  name  in  turn,  it  tries  to
>>      determine the language of the file by applying the following
>>      three tests in order: if the file extension has been  mapped
>>      to  a  language,  if  the  file name matches a shell pattern
>>      mapped to a language, and finally if the file is  executable
>>      and  its first line specifies an interpreter using the Unix-
>>      style "#!" specification (if supported on the platform).  If
>>      a  language  was identified, the file is opened and then the
>>      appropriate language parser is  called  to  operate  on  the
>>      currently  open file. The parser parses through the file and
>>      adds an entry to the tag file for each language object it is
>>      written  to  handle. See TAG FILE FORMAT, below, for details
>>      on these entries.
>>
>>      This implementation of ctags imposes no formatting  require-
>>      ments  on  C code as do legacy implementations. Older imple-
>>      mentations of ctags tended to rely upon  certain  formatting
>>      assumptions  in  order  to  help  it resolve coding dilemmas
>>      caused by preprocessor conditionals.
>>
>>      In general,  ctags  tries  to  be  smart  about  conditional
>>      preprocessor  directives.  If  a preprocessor conditional is
>>      encountered within a statement which defines  a  tag,  ctags
>>      follows only the first branch of that conditional (except in
>>      the special case of "#if 0", in which case it  follows  only
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   17
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      the  last  branch).  The  reason for this is that failing to
>>      pursue only one branch can result in ambiguous syntax, as in
>>      the following example:
>>
>>           #ifdef TWO_ALTERNATIVES
>>           struct {
>>           #else
>>           union {
>>           #endif
>>               short a;
>>               long b;
>>           }
>>
>>      Both branches cannot be followed, or  braces  become  unbal-
>>      anced and ctags would be unable to make sense of the syntax.
>>
>>      If the application of this heuristic fails to properly parse
>>      a  file, generally due to complicated and inconsistent pair-
>>      ing within the conditionals, ctags will retry the file using
>>      a different heuristic which does not selectively follow con-
>>      ditional preprocessor branches, but instead  falls  back  to
>>      relying upon a closing brace ("}") in column 1 as indicating
>>      the end of a block once any  brace  imbalance  results  from
>>      following a #if conditional branch.
>>
>>      Ctags will also try  to  specially  handle  arguments  lists
>>      enclosed  in  double  sets of parentheses in order to accept
>>      the following conditional construct:
>>
>>           extern void foo __ARGS((int one, char two));
>>
>>      Any name immediately preceding the "(("  will  be  automati-
>>      cally ignored and the previous name will be used.
>>
>>      C++ operator definitions are specially handled. In order for
>>      consistency  with  all  types  of  operators (overloaded and
>>      conversion), the operator name in the tag file  will  always
>>      be  preceded  by  the  string  "operator " (i.e. even if the
>>      actual operator definition was written as "operator<<").
>>
>>      After creating or appending to the tag file, it is sorted by
>>      the tag name, removing identical tag lines.
>>
>>
>>
>> TAG FILE FORMAT
>>      When not running in etags mode, each entry in the  tag  file
>>      consists  of  a separate line, each looking like this in the
>>      most general case:
>>
>>       tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   18
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      The fields and separators of these lines  are  specified  as
>>      follows:
>>
>>          1.  tag name
>>          2.  single tab character
>>          3.  name of the file in which the object associated with
>>              the tag is located
>>          4.  single tab character
>>          5.  EX command used to locate the tag within  the  file;
>>              generally  a  search  pattern  (either  /pattern/ or
>>              ?pattern?) or line number (see  --excmd).  Tag  file
>>              format  2  (see  --format)  extends  this EX command
>>              under certain circumstances  to  include  a  set  of
>>              extension fields (described below) embedded in an EX
>>              comment immediately  appended  to  the  EX  command,
>>              which  leaves  it  backward-compatible with original
>>              vi(1) implementations.
>>
>>      A few special tags are written into the tag file for  inter-
>>      nal  purposes.  These  tags  are composed in such a way that
>>      they always sort to the top of  the  file.   Therefore,  the
>>      first  two  characters of these tags are used a magic number
>>      to detect a tag file for purposes of determining  whether  a
>>      valid  tag  file  is  being overwritten rather than a source
>>      file.
>>
>>      Note that the name of each source file will be  recorded  in
>>      the  tag  file  exactly  as  it appears on the command line.
>>      Therefore, if the path you specified on the command line was
>>      relative  to the current directory, then it will be recorded
>>      in that same manner in  the  tag  file.  See,  however,  the
>>      --tag-relative option for how this behavior can be modified.
>>
>>      Extension fields are tab-separated key-value pairs  appended
>>      to  the  end  of  the  EX command as a comment, as described
>>      above. These key value pairs  appear  in  the  general  form
>>      "key:value". Their presence in the lines of the tag file are
>>      controlled by the --fields option. The possible keys and the
>>      meaning of their values are as follows:
>>
>>
>>      access      Indicates the visibility of this  class  member,
>>                  where value is specific to the language.
>>
>>
>>      file        Indicates that the tag has file-limited visibil-
>>                  ity. This key has no corresponding value.
>>
>>
>>      kind        Indicates the type, or kind, of tag.  Its  value
>>                  is  either  one  of the corresponding one-letter
>>                  flags described under the various --<LANG>-kinds
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   19
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                  options  above,  or a full name. It is permitted
>>                  (and is, in fact, the default) for the key  por-
>>                  tion  of  this field to be omitted. The optional
>>                  behaviors  are  controlled  with  the   --fields
>>                  option.
>>
>>
>>      implementation
>>                  When present, this indicates a limited implemen-
>>                  tation  (abstract  vs. concrete) of a routine or
>>                  class, where value is specific to  the  language
>>                  ("virtual" or "pure virtual" for C++; "abstract"
>>                  for Java).
>>
>>
>>      inherits    When present, value. is a  comma-separated  list
>>                  of  classes  from  which  this  class is derived
>>                  (i.e. inherits from).
>>
>>
>>      signature   When  present,  value  is  a  language-dependent
>>                  representation  of the signature of a routine. A
>>                  routine signature in its complete form specifies
>>                  the  return  type  of  a  routine and its formal
>>                  argument list. This extension field is presently
>>                  supported  only  for  C-based languages and does
>>                  not include the return type.
>>
>>
>>      In addition, information on the scope of the tag  definition
>>      may  be  available,  with  the  key  portion  equal  to some
>>      language-dependent construct name and  its  value  the  name
>>      declared for that construct in the program. This scope entry
>>      indicates the scope in which the tag was found. For example,
>>      a  tag generated for a C structure member would have a scope
>>      looking like "struct:myStruct".
>>
>>
>>
>> HOW TO USE WITH VI
>>      Vi will, by default, expect a tag file by the name "tags" in
>>      the  current directory. Once the tag file is built, the fol-
>>      lowing commands exercise the tag indexing feature:
>>
>>      vi -t tag   Start vi and position the cursor at the file and
>>                  line where "tag" is defined.
>>
>>      :ta tag     Find a tag.
>>
>>      Ctrl-]      Find the tag under the cursor.
>>
>>      Ctrl-T      Return to previous location before jump  to  tag
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   20
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                  (not widely implemented).
>>
>>
>>
>> HOW TO USE WITH GNU EMACS
>>      Emacs will, by default, expect a tag file by the name "TAGS"
>>      in  the  current  directory. Once the tag file is built, the
>>      following commands exercise the tag indexing feature:
>>
>>      M-x visit-tags-table <RET> FILE <RET>
>>                Select the tag file, "FILE", to use.
>>
>>      M-. [TAG] <RET>
>>                Find the first definition of TAG. The default  tag
>>                is the identifier under the cursor.
>>
>>      M-*       Pop back to where you previously invoked "M-.".
>>
>>      C-u M-.   Find the next definition for the last tag.
>>
>>
>>      For more commands, see the Tags  topic  in  the  Emacs  info
>>      document.
>>
>>
>>
>> HOW TO USE WITH NEDIT
>>      NEdit version 5.1 and later can handle the new extended  tag
>>      file  format (see --format). To make NEdit use the tag file,
>>      select "File->Load Tags File". To jump to the definition for
>>      a  tag,  highlight the word, the press Ctrl-D. NEdit 5.1 can
>>      can read multiple  tag  files  from  different  directories.
>>      Setting  the  X  resource nedit.tagFile to the name of a tag
>>      file instructs NEdit to automatically load that tag file  at
>>      startup time.
>>
>>
>>
>> CAVEATS
>>      Because ctags is neither a preprocessor nor a compiler,  use
>>      of  preprocessor  macros  can fool ctags into either missing
>>      tags or improperly generating inappropriate  tags.  Although
>>      ctags has been designed to handle certain common cases, this
>>      is the single biggest cause of reported problems. In partic-
>>      ular,  the  use  of  preprocessor constructs which alter the
>>      textual syntax of C can fool ctags. You can work around many
>>      such problems by using the -I option.
>>
>>      Note that since ctags generates patterns for  locating  tags
>>      (see  the  --excmd option), it is entirely possible that the
>>      wrong line may be found  by  your  editor  if  there  exists
>>      another   source   line  which  is  identical  to  the  line
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   21
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      containing the tag. The following example demonstrates  this
>>      condition:
>>
>>           int variable;
>>
>>           /* ... */
>>           void foo(variable)
>>           int variable;
>>           {
>>               /* ... */
>>           }
>>
>>      Depending upon which editor you use and where  in  the  code
>>      you happen to be, it is possible that the search pattern may
>>      locate the local parameter declaration in  foo()  before  it
>>      finds the actual global variable definition, since the lines
>>      (and therefore their search patterns  are  identical).  This
>>      can be avoided by use of the --excmd=n option.
>>
>>
>>
>> BUGS
>>      Ctags has more options than ls(1).
>>
>>      When  parsing  a  C++  member  function   definition   (e.g.
>>      "className::function"),  ctags  cannot determine whether the
>>      scope specifier is a class name or a namespace specifier and
>>      always  lists it as a class name in the scope portion of the
>>      extension fields. Also, if a C++ function is defined outside
>>      of  the  class  declaration  (the  usual  case),  the access
>>      specification  (i.e.  public,  protected,  or  private)  and
>>      implementation information (e.g. virtual, pure virtual) con-
>>      tained in the function declaration are not  known  when  the
>>      tag  is generated for the function definition. It will, how-
>>      ever be available for prototypes (e.g --c++-kinds=+p).
>>
>>      No qualified tags are generated for language objects  inher-
>>      ited into a class.
>>
>>
>>
>> ENVIRONMENT VARIABLES
>>      CTAGS   If this environment  variable  exists,  it  will  be
>>              expected  to  contain a set of default options which
>>              are read when ctags starts, after the  configuration
>>              files  listed  in FILES, below, are read, but before
>>              any command line options are read. Options appearing
>>              on  the command line will override options specified
>>              in this variable. Only options  will  be  read  from
>>              this  variable.  Note  that  all white space in this
>>              variable is considered a separator, making it impos-
>>              sible  to  pass  an  option  parameter containing an
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   22
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>              embedded space. If this is a problem, use  a  confi-
>>              guration file instead.
>>
>>
>>      ETAGS   Similar to the CTAGS variable above, this  variable,
>>              if  found,  will  be read when etags starts. If this
>>              variable is not found, etags will try to  use  CTAGS
>>              instead.
>>
>>
>>      TMPDIR  On Unix-like hosts where mkstemp() is available, the
>>              value  of  this  variable specifies the directory in
>>              which to place temporary files. This can  be  useful
>>              if the size of a temporary file becomes too large to
>>              fit on the partition holding the  default  temporary
>>              directory   defined   at  compilation  time.   ctags
>>              creates  temporary  files  only  if  either  (1)  an
>>              emacs-style tag file is being generated, (2) the tag
>>              file is being sent to standard output,  or  (3)  the
>>              program  was  compiled to use an internal sort algo-
>>              rithm to sort the tag files instead of the the  sort
>>              utility of the operating system. If the sort utility
>>              of the operating system is being used, it will  gen-
>>              erally  observe  this  variable  also.  Note that if
>>              ctags  is  setuid,  the  value  of  TMPDIR  will  be
>>              ignored.
>>
>>
>>
>> FILES
>>      /ctags.cnf (on MSDOS, MSWindows only)
>>      /etc/ctags.conf
>>      /usr/local/etc/ctags.conf
>>      $HOME/.ctags
>>      $HOME/ctags.cnf (on MSDOS, MSWindows only)
>>      .ctags
>>      ctags.cnf (on MSDOS, MSWindows only)
>>           If any of these configuration files exist, each will be
>>           expected  to contain a set of default options which are
>>           read in the order listed when ctags starts, but  before
>>           the  CTAGS  environment variable is read or any command
>>           line options are read. This makes it possible to set up
>>           site-wide,  personal  or  project-level defaults. It is
>>           possible to compile ctags to read an additional  confi-
>>           guration  file  before  any of those shown above, which
>>           will be indicated if the output produced by the  --ver-
>>           sion  option  lists  the "custom-conf" feature. Options
>>           appearing in the CTAGS environment variable or  on  the
>>           command  line  will override options specified in these
>>           files. Only options will be read from these files. Note
>>           that the option files are read in line-oriented mode in
>>           which spaces are significant (since  shell  quoting  is
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   23
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           not  possible).  Each  line  of the file is read as one
>>           command line parameter (as if it were quoted with  sin-
>>           gle  quotes).  Therefore,  use  new  lines  to indicate
>>           separate command-line arguments.
>>
>>
>>      tags The default tag file created by ctags.
>>
>>      TAGS The default tag file created by etags.
>>
>>
>> SEE ALSO
>>      The official Exuberant Ctags web site at:
>>
>>           http://ctags.sourceforge.net
>>
>>      Also ex(1), vi(1), elvis, or, better yet, vim, the  official
>>      editor  of  ctags.  For more information on vim, see the VIM
>>      Pages web site at:
>>
>>           http://www.vim.org/
>>
>>
>>
>> AUTHOR
>>      Darren Hiebert <dhiebert at users.sourceforge.net>
>>      http://DarrenHiebert.com/
>>
>>
>>
>> MOTIVATION
>>      "Think ye at all times of rendering some  service  to  every
>>      member of the human race."
>>
>>      "All effort and exertion put forth by man from the  fullness
>>      of  his  heart  is worship, if it is prompted by the highest
>>      motives and the will to do service to humanity."
>>
>>           -- From the Baha'i Writings
>>
>>
>>
>> CREDITS
>>      This version  of  ctags  was  originally  derived  from  and
>>      inspired   by   the   ctags   program  by  Steve  Kirkendall
>>      <kirkenda@cs.pdx.edu> that comes with  the  Elvis  vi  clone
>>      (though virtually none of the original code remains).
>>
>>      Credit is also due Bram Moolenaar <Bram@vim.org>, the author
>>      of  vim, who has devoted so much of his time and energy both
>>      to developing the editor as a  service  to  others,  and  to
>>      helping the orphans of Uganda.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   24
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      The section entitled "HOW TO USE WITH GNU EMACS" was  shame-
>>      lessly stolen from the info page for GNU etags.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   25
>>
>>
>>
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From sacadmin Tue Dec 23 07:53:19 2008
Received: from dm-east-01.east.sun.com (dm-east-01.East.Sun.COM [129.148.9.192])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNFrIeY016619
	for <LSARC@sac.sfbay.sun.com>; Tue, 23 Dec 2008 07:53:18 -0800 (PST)
Received: from [129.148.9.188] (sr1-ubur-30.East.Sun.COM [129.148.9.188])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id mBNFrH7U026249;
	Tue, 23 Dec 2008 10:53:18 -0500 (EST)
Message-ID: <4951096D.8020805@sun.com>
Date: Tue, 23 Dec 2008 10:53:17 -0500
From: Brian Utterback <brian.utterback@sun.com>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
MIME-Version: 1.0
To: LSARC@sac.sfbay.sun.com, lsarc-ext@sun.com
CC: Thomas Preisler <Thomas.Preisler@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
References: <494FB208.4020803@sun.com>
In-Reply-To: <494FB208.4020803@sun.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Status: RO
Content-Length: 3268

By the way, the timer is set for the 29th. If anyone feels that this 
is not a sufficient time given the holiday, please speak up.

One thing that came up is regarding the man page. There seems to be a 
desire to publish man pages "as is", with as few changes as possible 
for FOSS porting projects. For instance, this project is delivering 
exctags and the man page will be exctags.1, but the synopsis will show 
  two executables, ctags and etags, only one of which is being 
delivered and not under that name. It was pointed out to me that this 
follows existing practice. For instance, gmake is delivered with a man 
page that says "make" in the synopsis.

This practice seems wrong to me. The man page should reflect the 
project as delivered, anything else is just confusing. I can accept 
that HTML files, info files, etc., may be delivered "as is", but to me 
the man page is the primary documentation interface to the user. We 
expect the user to infer interface stability from man pages, i.e. if 
there isn't a man page, then the interface is private. If we allow man 
pages to be misleading, you get into a situation like in the movie 
Fargo, where in the first scene, as part of the fiction, it says that 
the movie is true. If you can't trust the man page to document what is 
  reality, what can you trust?

Brian Utterback wrote:
> I am submitting this fastrack on behalf of Thomas Preisler.
> 
> Exposure is open.
> 
> Template Version: @(#)sac_nextcase %I% %G% SMI
> This information is Copyright 2008 Sun Microsystems
> 1. Introduction
>     1.1. Project/Component Working Name:
>      Exuberant CTags
>     1.2. Name of Document Author/Supplier:
>      Author:  Brian Utterback
>     1.3  Date of This Document:
>     22 December, 2008
> 4. Technical Description
> 
> Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
> program. It generates an index of source code object definitions which 
> is used by a number of editors and tools to instantly locate the 
> definitions. Exuberant Ctags currently supports the following languages:
>   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
>   Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
>   PHP, PL/SQL, Python, REXX, Ruby, Scheme,
>   Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
>   Verilog, Vim, and YACC.
> 
> This project proposes to deliver the ctags binary from the Exuberant 
> CTags FOSS project renamed to exctags to avoid conflict with the 
> existing ctags binary currently delivered as part of the SUNWtoo 
> programming tools package. This follows the already established 
> convention used by other platforms.
> 
> The FOSSchecklist and man page are enclosed for review.
> 
> A minor/patch binding is requested.
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From brian.utterback@sun.com Tue Dec 23 07:53:24 2008
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNFrNQg016628
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 07:53:23 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id mBNFrLbY007499
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 23 Dec 2008 15:53:22 GMT
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC00E036SWJR00@nwk-avmta-2.sfbay.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 23 Dec 2008 07:53:21 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC004UU6SWX0D0@nwk-avmta-2.sfbay.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 23 Dec 2008 07:53:20 -0800 (PST)
Received: from [129.148.9.188] (sr1-ubur-30.East.Sun.COM [129.148.9.188])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBNFrH7U026249; Tue, 23 Dec 2008 10:53:18 -0500 (EST)
Date: Tue, 23 Dec 2008 10:53:17 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <494FB208.4020803@sun.com>
To: LSARC@sac.sfbay.sun.com, lsarc-ext@sun.com
Cc: Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <4951096D.8020805@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
Status: RO
Content-Length: 3268

By the way, the timer is set for the 29th. If anyone feels that this 
is not a sufficient time given the holiday, please speak up.

One thing that came up is regarding the man page. There seems to be a 
desire to publish man pages "as is", with as few changes as possible 
for FOSS porting projects. For instance, this project is delivering 
exctags and the man page will be exctags.1, but the synopsis will show 
  two executables, ctags and etags, only one of which is being 
delivered and not under that name. It was pointed out to me that this 
follows existing practice. For instance, gmake is delivered with a man 
page that says "make" in the synopsis.

This practice seems wrong to me. The man page should reflect the 
project as delivered, anything else is just confusing. I can accept 
that HTML files, info files, etc., may be delivered "as is", but to me 
the man page is the primary documentation interface to the user. We 
expect the user to infer interface stability from man pages, i.e. if 
there isn't a man page, then the interface is private. If we allow man 
pages to be misleading, you get into a situation like in the movie 
Fargo, where in the first scene, as part of the fiction, it says that 
the movie is true. If you can't trust the man page to document what is 
  reality, what can you trust?

Brian Utterback wrote:
> I am submitting this fastrack on behalf of Thomas Preisler.
> 
> Exposure is open.
> 
> Template Version: @(#)sac_nextcase %I% %G% SMI
> This information is Copyright 2008 Sun Microsystems
> 1. Introduction
>     1.1. Project/Component Working Name:
>      Exuberant CTags
>     1.2. Name of Document Author/Supplier:
>      Author:  Brian Utterback
>     1.3  Date of This Document:
>     22 December, 2008
> 4. Technical Description
> 
> Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
> program. It generates an index of source code object definitions which 
> is used by a number of editors and tools to instantly locate the 
> definitions. Exuberant Ctags currently supports the following languages:
>   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
>   Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
>   PHP, PL/SQL, Python, REXX, Ruby, Scheme,
>   Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
>   Verilog, Vim, and YACC.
> 
> This project proposes to deliver the ctags binary from the Exuberant 
> CTags FOSS project renamed to exctags to avoid conflict with the 
> existing ctags binary currently delivered as part of the SUNWtoo 
> programming tools package. This follows the already established 
> convention used by other platforms.
> 
> The FOSSchecklist and man page are enclosed for review.
> 
> A minor/patch binding is requested.
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From danek.duvall@sun.com Tue Dec 23 08:09:32 2008
Received: from sunmail4.singapore.sun.com (sunmail4.Singapore.Sun.COM [129.158.71.19])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNG9VdH016379
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 08:09:32 -0800 (PST)
Received: from nwk-avmta-1.SFBay.Sun.COM (nwk-avmta-1.SFBay.Sun.COM [129.146.11.74])
	by sunmail4.singapore.sun.com (8.13.4+Sun/8.13.3/ENSMAIL,v2.2) with ESMTP id mBNG9Q5U002934
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Wed, 24 Dec 2008 00:09:30 +0800 (SGT)
Received: from pmxchannel-daemon.nwk-avmta-1.sfbay.Sun.COM by
 nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC005037JTZ300@nwk-avmta-1.sfbay.Sun.COM> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 23 Dec 2008 08:09:29 -0800 (PST)
Received: from dm-sfbay-02.sfbay.sun.com ([129.146.11.31])
 by nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC003LM7JSPAE0@nwk-avmta-1.sfbay.Sun.COM> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 23 Dec 2008 08:09:28 -0800 (PST)
Received: from mumak.SFBay.Sun.COM (mumak.SFBay.Sun.COM [129.146.229.4])
	by dm-sfbay-02.sfbay.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBNG9SiZ008200; Tue, 23 Dec 2008 08:09:28 -0800 (PST)
Received: from mumak.SFBay.Sun.COM (mumak [127.0.0.1])
	by mumak.SFBay.Sun.COM (8.14.3+Sun/8.14.3) with ESMTP id mBNGB7JF008595; Tue,
 23 Dec 2008 08:11:07 -0800 (PST)
Received: (from dduvall@localhost)
	by mumak.SFBay.Sun.COM (8.14.3+Sun/8.14.3/Submit) id mBNGB68i008594; Tue,
 23 Dec 2008 08:11:06 -0800 (PST)
Date: Tue, 23 Dec 2008 08:11:06 -0800
From: Danek Duvall <danek.duvall@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <4951096D.8020805@sun.com>
To: Brian Utterback <brian.utterback@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <20081223161106.GD4147@mumak.SFBay.Sun.COM>
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7BIT
Content-disposition: inline
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <4951096D.8020805@sun.com>
User-Agent: Mutt/1.5.16 (2007-06-27)
Status: RO
Content-Length: 1462

On Tue, Dec 23, 2008 at 10:53:17AM -0500, Brian Utterback wrote:

> By the way, the timer is set for the 29th. If anyone feels that this is not 
> a sufficient time given the holiday, please speak up.

Most other fast-tracks filed around this time have been given timers that
extend into January.  I would suggest extending it until the 13th, but show
up to the meeting on the 6th (if there is one) and see if it can't be
closed at that point.

> One thing that came up is regarding the man page. There seems to be a 
> desire to publish man pages "as is", with as few changes as possible for 
> FOSS porting projects. For instance, this project is delivering exctags and 
> the man page will be exctags.1, but the synopsis will show  two 
> executables, ctags and etags, only one of which is being delivered and not 
> under that name. It was pointed out to me that this follows existing 
> practice. For instance, gmake is delivered with a man page that says "make" 
> in the synopsis.
>
> This practice seems wrong to me.

To me, too, but if you're going to be pushing a lot of F/OSS through our
processes, making little corrections here and there can slow a lot of
people down.  If you feel you have the time to make these corrections,
though, please do so -- accuracy is highly desired.  The SFW C-team is
likely to ask you to put an Attributes section at the end of the page
anyway, so fixing the other bits might not be too onerous on top of that.

Danek

From danek.duvall@sun.com Tue Dec 23 08:12:29 2008
Received: from newsunmail1brm.central.sun.com (newsunmail1brm.Central.Sun.COM [129.147.62.245])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNGCThn010731
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 08:12:29 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by newsunmail1brm.central.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBNGCT0P040679
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 23 Dec 2008 09:12:29 -0700 (MST)
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC0030D7ORIE00@brm-avmta-1.central.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 23 Dec 2008 09:12:27 -0700 (MST)
Received: from dm-sfbay-02.sfbay.sun.com ([129.146.11.31])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC00H0Y7OP5AC0@brm-avmta-1.central.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 23 Dec 2008 09:12:25 -0700 (MST)
Received: from mumak.SFBay.Sun.COM (mumak.SFBay.Sun.COM [129.146.229.4])
	by dm-sfbay-02.sfbay.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBNGCOuC010239; Tue, 23 Dec 2008 08:12:24 -0800 (PST)
Received: from mumak.SFBay.Sun.COM (mumak [127.0.0.1])
	by mumak.SFBay.Sun.COM (8.14.3+Sun/8.14.3) with ESMTP id mBNGE37B008614; Tue,
 23 Dec 2008 08:14:03 -0800 (PST)
Received: (from dduvall@localhost)
	by mumak.SFBay.Sun.COM (8.14.3+Sun/8.14.3/Submit) id mBNGE37B008613; Tue,
 23 Dec 2008 08:14:03 -0800 (PST)
Date: Tue, 23 Dec 2008 08:14:03 -0800
From: Danek Duvall <danek.duvall@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <494FB208.4020803@sun.com>
To: Brian Utterback <brian.utterback@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <20081223161403.GE4147@mumak.SFBay.Sun.COM>
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7BIT
Content-disposition: inline
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com>
User-Agent: Mutt/1.5.16 (2007-06-27)
Status: RO
Content-Length: 10

+1

Danek

From brian.utterback@sun.com Tue Dec 23 09:11:07 2008
Received: from sunmail2sca.sfbay.sun.com (sunmail2sca.SFBay.Sun.COM [129.145.155.234])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNHB6qb006445
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 09:11:06 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by sunmail2sca.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBNHB6P7026233
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 23 Dec 2008 09:11:06 -0800 (PST)
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC0090LAEI9O00@brm-avmta-1.central.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 23 Dec 2008 10:11:06 -0700 (MST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC008MOAEGKE00@brm-avmta-1.central.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 23 Dec 2008 10:11:04 -0700 (MST)
Received: from [129.148.9.188] (sr1-ubur-30.East.Sun.COM [129.148.9.188])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBNHB1pF063733; Tue, 23 Dec 2008 12:11:01 -0500 (EST)
Date: Tue, 23 Dec 2008 12:11:01 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <20081223161106.GD4147@mumak.SFBay.Sun.COM>
To: Danek Duvall <Danek.Duvall@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <49511BA5.4060206@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <4951096D.8020805@sun.com>
 <20081223161106.GD4147@mumak.SFBay.Sun.COM>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
Status: RO
Content-Length: 2691


Danek Duvall wrote:
> On Tue, Dec 23, 2008 at 10:53:17AM -0500, Brian Utterback wrote:
> Most other fast-tracks filed around this time have been given timers that
> extend into January.  I would suggest extending it until the 13th, but show
> up to the meeting on the 6th (if there is one) and see if it can't be
> closed at that point.
> 

Timer extended until the 13th.


>> This practice seems wrong to me.
> 
> To me, too, but if you're going to be pushing a lot of F/OSS through our
> processes, making little corrections here and there can slow a lot of
> people down.  If you feel you have the time to make these corrections,
> though, please do so -- accuracy is highly desired.  The SFW C-team is
> likely to ask you to put an Attributes section at the end of the page
> anyway, so fixing the other bits might not be too onerous on top of that.
> 
> Danek

To me, getting the man page right is part of the porting process. To 
say that correcting the man page would slow the process down is like 
saying that getting the program to run on Solaris just slows the 
project down. Come to that, wouldn't it be faster to skip that 
bothersome compile step?

We usually require man pages for projects that don't have them. I am 
not saying that the man page has to be perfect, but would it be so bad 
  to require the project teams to take an hour or so to make it 
reflect something resembling reality? Or if that really is too much, 
how about a disclaimer at the top saying that the man page is being 
delivered "as is" and may not reflect reality?

This is another one of those pesky "best practices" issues. Either the 
goal is to have man pages that are good documentation on the use of 
the commands that are now part of our product, or the goal is to 
deliver the man pages exactly as delivered by the community. If the 
former then it is the responsibility of the project team to make a 
pass over the man page and remove any egregious errors and document 
Solaris specific issues. If the latter, then we have a responsibility 
to differentiate between the types of man pages. Right now we appear 
to primarily deliver the latter and pretend it is the former. That is 
untenable.

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From Thomas.Preisler@sun.com Tue Dec 23 09:28:57 2008
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNHSv8f006587
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 09:28:57 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBNHSu7x028563
	for <@sunmail2sca.sfbay.sun.com:LSARC-ext@sun.com>; Tue, 23 Dec 2008 09:28:57 -0800 (PST)
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC00J07B87Z200@nwk-avmta-2.sfbay.sun.com> for LSARC-ext@sun.com
 (ORCPT LSARC-ext@sun.com); Tue, 23 Dec 2008 09:28:55 -0800 (PST)
Received: from sca-es-mail-2.sun.com ([192.18.43.133])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC00FTJB86MI40@nwk-avmta-2.sfbay.sun.com> for
 LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 09:28:54 -0800 (PST)
Received: from fe-sfbay-09.sun.com ([192.18.43.129])
	by sca-es-mail-2.sun.com (8.13.7+Sun/8.12.9) with ESMTP id mBNHSspb022739	for
 <LSARC-ext@sun.com>; Tue, 23 Dec 2008 09:28:54 -0800 (PST)
Received: from conversion-daemon.fe-sfbay-09.sun.com by fe-sfbay-09.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KCC00501B5LJU00@fe-sfbay-09.sun.com>
 (original mail from Thomas.Preisler@Sun.COM)
 for LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 09:28:54 -0800 (PST)
Received: from [192.168.2.102] ([66.167.206.248])
 by fe-sfbay-09.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb
 28 2007)) with ESMTPSA id <0KCC00BLTB85A050@fe-sfbay-09.sun.com>; Tue,
 23 Dec 2008 09:28:54 -0800 (PST)
Date: Tue, 23 Dec 2008 09:28:53 -0800
From: Thomas Preisler <Thomas.Preisler@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <49511BA5.4060206@sun.com>
Sender: Thomas.Preisler@sun.com
To: Brian Utterback <Brian.Utterback@sun.com>
Cc: Danek Duvall <Danek.Duvall@sun.com>, LSARC-ext@sun.com
Message-id: <49511FD5.408@sun.com>
MIME-version: 1.0
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <4951096D.8020805@sun.com>
 <20081223161106.GD4147@mumak.SFBay.Sun.COM> <49511BA5.4060206@sun.com>
User-Agent: Thunderbird 2.0.0.18 (Windows/20081105)
Status: RO
Content-Length: 2654



Brian Utterback wrote:
> 
> Danek Duvall wrote:
>> On Tue, Dec 23, 2008 at 10:53:17AM -0500, Brian Utterback wrote:
>> Most other fast-tracks filed around this time have been given timers that
>> extend into January.  I would suggest extending it until the 13th, but 
>> show
>> up to the meeting on the 6th (if there is one) and see if it can't be
>> closed at that point.
>>
> 
> Timer extended until the 13th.
> 
> 
>>> This practice seems wrong to me.
>>
>> To me, too, but if you're going to be pushing a lot of F/OSS through our
>> processes, making little corrections here and there can slow a lot of
>> people down.  If you feel you have the time to make these corrections,
>> though, please do so -- accuracy is highly desired.  The SFW C-team is
>> likely to ask you to put an Attributes section at the end of the page
>> anyway, so fixing the other bits might not be too onerous on top of that.
>>
>> Danek
> 
> To me, getting the man page right is part of the porting process. To say 
> that correcting the man page would slow the process down is like saying 
> that getting the program to run on Solaris just slows the project down. 
> Come to that, wouldn't it be faster to skip that bothersome compile step?
> 
> We usually require man pages for projects that don't have them. I am not 
> saying that the man page has to be perfect, but would it be so bad  to 
> require the project teams to take an hour or so to make it reflect 
> something resembling reality? Or if that really is too much, how about a 
> disclaimer at the top saying that the man page is being delivered "as 
> is" and may not reflect reality?
> 
> This is another one of those pesky "best practices" issues. Either the 
> goal is to have man pages that are good documentation on the use of the 
> commands that are now part of our product, or the goal is to deliver the 
> man pages exactly as delivered by the community. If the former then it 
> is the responsibility of the project team to make a pass over the man 
> page and remove any egregious errors and document Solaris specific 
> issues. If the latter, then we have a responsibility to differentiate 
> between the types of man pages. Right now we appear to primarily deliver 
> the latter and pretend it is the former. That is untenable.
> 
Another question is whether there are any legal implications modifying 
the code and whether modifying the man page is considering modifying the 
code. I believe it is a complicating legal factor to change *any* source 
  in the delivery and it may be the real reason why man pages stay as 
they are in all the GNU ports. I will have to look into that.

--thomas

From Alan.Coopersmith@sun.com Tue Dec 23 09:38:16 2008
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNHcGJB006764
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 09:38:16 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id mBNHc5QY007411
	for <@sunmail2sca.sfbay.sun.com:LSARC-ext@sun.com>; Tue, 23 Dec 2008 17:38:14 GMT
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC00B0HBNMPD00@brm-avmta-1.central.sun.com> for LSARC-ext@sun.com
 (ORCPT LSARC-ext@sun.com); Tue, 23 Dec 2008 10:38:10 -0700 (MST)
Received: from sca-es-mail-2.sun.com ([192.18.43.133])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC008YXBNJK520@brm-avmta-1.central.sun.com> for
 LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 10:38:08 -0700 (MST)
Received: from fe-sfbay-10.sun.com ([192.18.43.129])
	by sca-es-mail-2.sun.com (8.13.7+Sun/8.12.9) with ESMTP id mBNHc7fp023916	for
 <LSARC-ext@sun.com>; Tue, 23 Dec 2008 09:38:07 -0800 (PST)
Received: from conversion-daemon.fe-sfbay-10.sun.com by fe-sfbay-10.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KCC00001BK4GT00@fe-sfbay-10.sun.com>
 (original mail from Alan.Coopersmith@Sun.COM)
 for LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 09:38:07 -0800 (PST)
Received: from [192.168.0.194] ([66.120.186.28])
 by fe-sfbay-10.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb
 28 2007)) with ESMTPSA id <0KCC00HO8BMUR280@fe-sfbay-10.sun.com>; Tue,
 23 Dec 2008 09:37:42 -0800 (PST)
Date: Tue, 23 Dec 2008 09:37:33 -0800
From: Alan Coopersmith <Alan.Coopersmith@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <49511FD5.408@sun.com>
Sender: Alan.Coopersmith@sun.com
To: Thomas Preisler <Thomas.Preisler@sun.com>
Cc: Brian Utterback <Brian.Utterback@sun.com>,
        Danek Duvall <Danek.Duvall@sun.com>, LSARC-ext@sun.com
Message-id: <495121DD.6070908@sun.com>
MIME-version: 1.0
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <4951096D.8020805@sun.com>
 <20081223161106.GD4147@mumak.SFBay.Sun.COM> <49511BA5.4060206@sun.com>
 <49511FD5.408@sun.com>
User-Agent: Thunderbird 2.0.0.18 (Windows/20081105)
Status: RO
Content-Length: 622

Thomas Preisler wrote:
> Another question is whether there are any legal implications modifying 
> the code and whether modifying the man page is considering modifying the 
> code. I believe it is a complicating legal factor to change *any* source 
>  in the delivery and it may be the real reason why man pages stay as 
> they are in all the GNU ports. I will have to look into that.

Code that does not allow modifications is not open source and will not 
make it past the license review by our lawyers.

-- 
	-Alan Coopersmith-           alan.coopersmith@sun.com
	 Sun Microsystems, Inc. - X Window System Engineering


From Thomas.Preisler@sun.com Tue Dec 23 09:48:48 2008
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNHmlFY006945
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 09:48:48 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id mBNHmViJ014261
	for <@sunmail2sca.sfbay.sun.com:LSARC-ext@sun.com>; Tue, 23 Dec 2008 17:48:46 GMT
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC00L01C56E400@nwk-avmta-2.sfbay.sun.com> for LSARC-ext@sun.com
 (ORCPT LSARC-ext@sun.com); Tue, 23 Dec 2008 09:48:42 -0800 (PST)
Received: from sca-es-mail-2.sun.com ([192.18.43.133])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC00FTBC55MW50@nwk-avmta-2.sfbay.sun.com> for
 LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 09:48:41 -0800 (PST)
Received: from fe-sfbay-09.sun.com ([192.18.43.129])
	by sca-es-mail-2.sun.com (8.13.7+Sun/8.12.9) with ESMTP id mBNHmf4q025216	for
 <LSARC-ext@sun.com>; Tue, 23 Dec 2008 09:48:41 -0800 (PST)
Received: from conversion-daemon.fe-sfbay-09.sun.com by fe-sfbay-09.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KCC00601BXYBY00@fe-sfbay-09.sun.com>
 (original mail from Thomas.Preisler@Sun.COM)
 for LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 09:48:41 -0800 (PST)
Received: from [192.168.2.102] ([66.167.206.248])
 by fe-sfbay-09.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb
 28 2007)) with ESMTPSA id <0KCC00BBAC54A0D0@fe-sfbay-09.sun.com>; Tue,
 23 Dec 2008 09:48:40 -0800 (PST)
Date: Tue, 23 Dec 2008 09:48:39 -0800
From: Thomas Preisler <Thomas.Preisler@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <495121DD.6070908@sun.com>
Sender: Thomas.Preisler@sun.com
To: Alan Coopersmith <Alan.Coopersmith@sun.com>
Cc: Brian Utterback <Brian.Utterback@sun.com>,
        Danek Duvall <Danek.Duvall@sun.com>, LSARC-ext@sun.com
Message-id: <49512477.6090203@sun.com>
MIME-version: 1.0
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <4951096D.8020805@sun.com>
 <20081223161106.GD4147@mumak.SFBay.Sun.COM> <49511BA5.4060206@sun.com>
 <49511FD5.408@sun.com> <495121DD.6070908@sun.com>
User-Agent: Thunderbird 2.0.0.18 (Windows/20081105)
Status: RO
Content-Length: 957



Alan Coopersmith wrote:
> Thomas Preisler wrote:
>> Another question is whether there are any legal implications modifying 
>> the code and whether modifying the man page is considering modifying 
>> the code. I believe it is a complicating legal factor to change *any* 
>> source  in the delivery and it may be the real reason why man pages 
>> stay as they are in all the GNU ports. I will have to look into that.
> 
> Code that does not allow modifications is not open source and will not 
> make it past the license review by our lawyers.
> 

I'm no expert in Open Source. I know the GNU license does allow 
modifications but the question is what the legal implications are of 
making any source modification. And whether changing the man page is 
considered making source changes. I don't know. And would it require us 
to also ship the modified sources or make them available? I believe that 
is usually the requirement. Does anyone know?

--thomas

From brian.utterback@sun.com Tue Dec 23 09:56:13 2008
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNHuDwl007291
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 09:56:13 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBNHuASo014507
	for <@sunmail2sca.sfbay.sun.com:LSARC-ext@sun.com>; Tue, 23 Dec 2008 09:56:12 -0800 (PST)
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC00L1DCHNTD00@nwk-avmta-2.sfbay.sun.com> for LSARC-ext@sun.com
 (ORCPT LSARC-ext@sun.com); Tue, 23 Dec 2008 09:56:11 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC00FBDCHMMX70@nwk-avmta-2.sfbay.sun.com> for
 LSARC-ext@sun.com (ORCPT LSARC-ext@sun.com); Tue,
 23 Dec 2008 09:56:11 -0800 (PST)
Received: from [129.148.9.188] (sr1-ubur-30.East.Sun.COM [129.148.9.188])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBNHu6Nt018603; Tue, 23 Dec 2008 12:56:07 -0500 (EST)
Date: Tue, 23 Dec 2008 12:56:06 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <49512477.6090203@sun.com>
To: Thomas Preisler <Thomas.Preisler@sun.com>
Cc: Alan Coopersmith <Alan.Coopersmith@sun.com>,
        Danek Duvall <Danek.Duvall@sun.com>, LSARC-ext@sun.com
Message-id: <49512636.1090806@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <4951096D.8020805@sun.com>
 <20081223161106.GD4147@mumak.SFBay.Sun.COM> <49511BA5.4060206@sun.com>
 <49511FD5.408@sun.com> <495121DD.6070908@sun.com> <49512477.6090203@sun.com>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
Status: RO
Content-Length: 1923

I believe that many, if not most of the delivered projects require 
*some* modification.

We used to provide source code packages for just this reason, to 
satisfy those licenses that required such modifications to be made 
available. However, all of SFW is now published and is freely 
available via the repositories and OS.o, so this is no longer a 
separate requirement. And so, the point is irrelevant.

Thomas Preisler wrote:
> 
> 
> Alan Coopersmith wrote:
>> Thomas Preisler wrote:
>>> Another question is whether there are any legal implications 
>>> modifying the code and whether modifying the man page is considering 
>>> modifying the code. I believe it is a complicating legal factor to 
>>> change *any* source  in the delivery and it may be the real reason 
>>> why man pages stay as they are in all the GNU ports. I will have to 
>>> look into that.
>>
>> Code that does not allow modifications is not open source and will not 
>> make it past the license review by our lawyers.
>>
> 
> I'm no expert in Open Source. I know the GNU license does allow 
> modifications but the question is what the legal implications are of 
> making any source modification. And whether changing the man page is 
> considered making source changes. I don't know. And would it require us 
> to also ship the modified sources or make them available? I believe that 
> is usually the requirement. Does anyone know?
> 
> --thomas

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From brian.utterback@sun.com Tue Dec 23 11:11:16 2008
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id mBNJBGw3008569
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 23 Dec 2008 11:11:16 -0800 (PST)
Received: from nwk-avmta-1.SFBay.Sun.COM (nwk-avmta-1.SFBay.Sun.COM [129.146.11.74])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id mBNJBEU2022086
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 23 Dec 2008 11:11:15 -0800 (PST)
Received: from pmxchannel-daemon.nwk-avmta-1.sfbay.Sun.COM by
 nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KCC0060TFYQPG00@nwk-avmta-1.sfbay.Sun.COM> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 23 Dec 2008 11:11:14 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KCC008JFFYOEGB0@nwk-avmta-1.sfbay.Sun.COM> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 23 Dec 2008 11:11:13 -0800 (PST)
Received: from [129.148.9.188] (sr1-ubur-30.East.Sun.COM [129.148.9.188])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id mBNJB9mS054180; Tue, 23 Dec 2008 14:11:10 -0500 (EST)
Date: Tue, 23 Dec 2008 14:11:09 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <1229961108.6312.13.camel@sr1-umpk-34>
To: John.Fischer@sun.com
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <495137CD.1090603@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
User-Agent: Thunderbird 2.0.0.19pre (X11/20081201)
Status: RO
Content-Length: 79197

I'm sorry, I have just been informed that this case is intended for 
integration into the DevPro consolidation and not into the SFW 
consolidation as I had assumed. That is probably something that should 
be added to the checklist, particularly since other ARCs are adopting 
it for the review of FOSS cases.


> On Mon, 2008-12-22 at 07:28, Brian Utterback wrote:
>> I am submitting this fastrack on behalf of Thomas Preisler.
>>
>> Exposure is open.
>>
>> Template Version: @(#)sac_nextcase %I% %G% SMI
>> This information is Copyright 2008 Sun Microsystems
>> 1. Introduction
>>      1.1. Project/Component Working Name:
>> 	 Exuberant CTags
>>      1.2. Name of Document Author/Supplier:
>> 	 Author:  Brian Utterback
>>      1.3  Date of This Document:
>> 	22 December, 2008
>> 4. Technical Description
>>
>> Exuberant Ctags is a multilanguage reimplementation of the Unix ctags 
>> program. It generates an index of source code object definitions which 
>> is used by a number of editors and tools to instantly locate the 
>> definitions. Exuberant Ctags currently supports the following languages:
>>    Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang,
>>    Fortran, HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl,
>>    PHP, PL/SQL, Python, REXX, Ruby, Scheme,
>>    Shell (Bourne, Korn, Z), S-Lang, SML (Standard ML), Tcl, Vera,
>>    Verilog, Vim, and YACC.
>>
>> This project proposes to deliver the ctags binary from the Exuberant 
>> CTags FOSS project renamed to exctags to avoid conflict with the 
>> existing ctags binary currently delivered as part of the SUNWtoo 
>> programming tools package. This follows the already established 
>> convention used by other platforms.
>>
>> The FOSSchecklist and man page are enclosed for review.
>>
>> A minor/patch binding is requested.
>> -- 
>> blu
>>
>> "Murderous organizations have increased in size and scope; they are
>> more daring, they are served by the most terrible weapons offered by
>> modern science, and the world is nowadays threatened by new forces
>> which, if recklessly unchained, may some day wreck universal
>> destruction."  - Arthur Griffith, 1898
>> ----------------------------------------------------------------------
>> Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
>> Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom
>>
>> ______________________________________________________________________
>> FCL--FOSS Check List
>> 1.0 Project Information
>> 1.1 Name of project/component
>>   Exuberant Ctags Packaging for OpenSolaris
>>
>> 1.2 Author of document
>>   Thomas Preisler
>>
>> 2.0 Project Summary
>>   2.1 Project Description
>>   Package current version (5.7) of Exuberant CTags release.
>>
>>   Exuberant Ctags is a multilanguage reimplementation of the Unix
>>   ctags program. It generates an index of source code object definitions
>>   which is used by a number of editors and tools to instantly locate the
>>   definitions. Exuberant Ctags currently supports the following languages:
>>   Assembler, ASP, AWK, BETA, C, C++, C#, COBOL, Eiffel, Erlang, Fortran,
>>   HTML, Java, Javascript, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL,
>>   Python, REXX, Ruby, Scheme, Shell (Bourne, Korn, Z), S-Lang,
>>   SML (Standard ML), Tcl, Vera, Verilog, Vim, and YACC. 
>>   
>>   2.2 Release binding
>>       What is is the release binding?
>>       (see http://opensolaris.org/os/community/arc/policies/release-taxonomy/)
>>       [ ] Major
>>       [ ] Minor
>>       [x] Patch or Micro
>>       [ ] Unknown -- ARC review required
>>
>>   2.3 Type of project
>>       Is this case a Linux Familiarity project?
>>       [ ] Yes
>>       [x] No
>>
>>   2.4 Originating Community
>>     2.4.1 Community Name
>>     
>>     2.4.2 Community Involvement
>>       Indicate Sun's involvement in the community
>>       [ ] Maintainer
>>       [ ] Contributor
>>       [x] Monitoring
>>       
>>       Will the project team work with the upstream community to resolve
>>       architectural issues of interest to Sun?
>>       [ ] Yes 
>>       [x] No - briefly explain
>>       Not needed.
>>       
>>       Will we or are we forking from the community?
>>       [ ] Yes - ARC review required prior to forking
>>       [x] No
>>       
>> 3.0 Technical Description
>>   3.1 Installation & Sharable
>>     3.1.1S Solaris Installation - section only required for Solaris Software
>>       (see http://opensolaris.org/os/community/arc/policies/install-locations/ for details)
>>       Does this project follow the Install Locations best practice?
>>       [x] Yes 
>>       [ ] No - ARC review required
>>       
>>       Does this project install into /usr under [sbin|bin|lib|include|man|share]?
>>       [x] Yes
>>       [ ] No or N/A
>>       
>>       Does this project install into /opt?
>>       [ ] Yes - explain below
>>       [x] No or N/A
>>       
>>       Does this project install into a different directory structure?
>>       [ ] Yes - ARC review required
>>       [x] No or N/A
>>       
>>       Do any of the components of this project conflict with anything under /usr?
>>       (see http://opensolaris.org/os/community/arc/caselog/2007/047/ for details)
>>       [ ] Yes - explain below (?)
>>       [x] No
>>       Default Exuberant Ctags binary name is ctags and would naturally install into /usr/bin/ctags
>>       but Solaris ctags is already installed in /usr/bin. To avoid conflict, Common pratice
>>       is to rename the binary and install it with the different name in '/usr/bin'. New name of 
>>       Exuberant Ctags is exctags which is a common alternative name used by many others (try google for exctags).
>>       
>>       If conflicts exist then will this project install under /usr/gnu?
>>       [ ] Yes
>>       [ ] No - ARC review required
>>       [x] N/A
>>       Note: Exuberant Ctags is not a GNU product.
>>       
>>       Is this project installing into /usr/sfw?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>     3.1.1W Windows Installation - section only required for Windows Software
>> 	Section not applicable.
>>       
>>     3.1.2 Share and Sharable
>>       Does the module include any components that are used or shared by 
>>       other projects?
>>       [ ] Yes
>>       [x] No
>>     
>>       If yes are these components packaged to be shared with the other FOSS?
>>       [ ] Yes
>>       [ ] No - ARC review required
>>       [x] N/A
>>     
>>   3.2 Exported Libraries
>>       Are libraries being delivered by this project?
>>       [ ] Yes
>>       [x] No - continue with next section (section 3.3)
>>       
>>   3.3 Services and the /etc Directory
>>       (see http://opensolaris.org/os/community/arc/policies/SMF-policy/)
>>       Does the project integrate anything into /etc/init.d or /etc/rc?.d?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the project integrate any new entries into /etc/inittab or
>>       /etc/inetd.conf?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the project integrate any private non-public files into /etc/default
>>       or /etc/ configuration files?
>>       [ ] Yes - ARC review required
>>       [x] No
>>       
>>       Does the service manifests method context grant rights above that
>>       of the noaccess user and basic privilege set?
>>       [ ] Yes - ARC review required
>>       [x] No
>>         
>>   3.4 Security
>>     3.4.1 Secure By Default 
>>       (see http://opensolaris.org/os/community/arc/policies/secure-by-default/ for details)
>>       (see http://www.opensolaris.org/os/community/arc/policies/NITS-policy/ for details)
>>       (see parts of http://opensolaris.org/os/community/arc/policies/SMF-policy/ for
>>        addtional details)
>>       Are there any network services provided by this project?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.4.2)
>>       
>>     3.4.2 Authorization
>>       (see http://opensolaris.org/os/community/arc/bestpractices/rbac-intro/ and
>> 	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/ and
>> 	   http://opensolaris.org/os/community/arc/bestpractices/rbac-profiles/
>>            for details)
>>       Are there any setuid/setgid privileged binaries in the project?
>>       [ ] Yes - ARC review required
>>       [x] No - continue with next section (section 3.4.3)
>>       
>>     3.4.3 Auditing
>>       (see http://opensolaris.org/os/community/arc/policies/audit-policy/ for details)
>>       (see http://opensolaris.org/os/community/arc/caselog/2003/397 for details)
>>       Does this component contain administrative or security enforcing software?
>>       [ ] Yes - ARC review required
>>       [x] No - continue to next section (section 3.4.4)
>>         
>>     3.4.4 Authentication
>>       (see http://opensolaris.org/os/community/arc/policies/PAM/)
>>       Do the components contain any authentication code?
>>       [ ] Yes
>>       [x] No - continue to next section (section 3.4.5)
>>       
>>     3.4.5 Passwords
>>       (see http://opensolaris.org/os/community/arc/bestpractices/passwords-cli/ and
>>            http://opensolaris.org/os/community/arc/bestpractices/passwords-files/ for details)
>>       Do any of the components for the project deal with passwords?
>>       [ ] Yes
>>       [x] No - continue to next section (section 3.4.6)
>>       
>>     3.4.6 General Security Questions
>>       (see http://opensolaris.org/os/community/arc/bestpractices/security-questions/ for details)
>>       Are there any network protocols used by this project?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.5)
>>       
>>   3.5 Networking
>>       Do the components access the network?
>>       [ ] Yes
>>       [x] No - continue with the next section (section 3.6)
>>       
>>   3.6 Core Solaris Components
>>       Do the components of this project compete with or duplicate core 
>>       Solaris components?
>>       [ ] Yes - ARC review required
>>       [x] No 
>>       
>>       Examples of Core Solaris Components include but are not limited to:
>>       
>>         Secure By Default
>>         Authorizations
>>         PAM -- Plugable Authentication Module
>>         Privilege
>>         PRM -- Process Rights Management -- Privilege
>>         Audit
>>         xVm -- Virtualization
>>         zones / Solaris Containers
>>         PRM -- Process Rights Management
>>         RBAC -- Role Based Access Control
>>         TX / Trusted Extensions
>>         ZFS
>>         SMF -- Service Management Facility
>>         FMA -- Fault Management Architecture
>>         SCF -- Smart Card Facility
>>         IPsec
>>         
>> 4.0 Interfaces
>>   (see http://www.opensolaris.org/os/community/arc/policies/interface-taxonomy/ for details)
>>   4.1 Exported Interfaces
>>   
>>     Interface Name                Classification  Comments
>>     ----------------              --------------  ----------------------
>>     SUNWexctags                   Uncommitted     Package
>>     /usr/bin/exctags              Uncommitted     Executable binary file
>>     
>>   4.2 Imported Interfaces
>>     Interface Name		Classification       Comments
>>     --------------------------- -------------------- --------------------------
>>     
>>     
>>   Brief Interface Classifications - See Appendix C for definitions
>>     Volatile - interfaces are fluid and will follow a rapidly changing community
>>     Uncommitted - interfaces are still evolving in the community and might follow
>> 		  the community
>>     Committed - interfaces are stable in the community
>>     Project Private - no review required, just document in table
>>     Contracted (interface modifier) - further review required
>>
>>
>> ______________________________________________________________________
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>> NAME
>>      ctags - Generate tag files for source code
>>
>>
>>
>> SYNOPSIS
>>      ctags [options] [file(s)]
>>
>>      etags [options] [file(s)]
>>
>>
>>
>> DESCRIPTION
>>      The  ctags  and  etags  programs  (hereinafter  collectively
>>      referred  to  as ctags, except where distinguished) generate
>>      an index (or "tag") file for a variety of  language  objects
>>      found  in  file(s).   This tag file allows these items to be
>>      quickly and easily located by a text editor or  other  util-
>>      ity.  A "tag" signifies a language object for which an index
>>      entry is  available  (or,  alternatively,  the  index  entry
>>      created for that object).
>>
>>      Alternatively, ctags can generate  a  cross  reference  file
>>      which  lists,  in human readable form, information about the
>>      various source objects found in a set of language files.
>>
>>      Tag index files are supported  by  numerous  editors,  which
>>      allow  the  user to locate the object associated with a name
>>      appearing in a source file and jump to  the  file  and  line
>>      which  defines  the  name.  Those known about at the time of
>>      this release are:
>>
>>          Vi(1)  and  its  derivatives  (e.g.  Elvis,  Vim,  Vile,
>>          Lemmy),  CRiSP,  Emacs,  FTE (Folding Text Editor), JED,
>>          jEdit, Mined, NEdit (Nirvana  Edit),  TSE  (The  SemWare
>>          Editor), UltraEdit, WorkSpace, X2, Zeus
>>
>>      Ctags is capable of generating different kinds of  tags  for
>>      each  of  many  different  languages. For a complete list of
>>      supported languages, the names by which they are recognized,
>>      and  the kinds of tags which are generated for each, see the
>>      --list-languages and --list-kinds options.
>>
>>
>>
>> SOURCE FILES
>>      Unless  the  --language-force  option  is   specified,   the
>>      language of each source file is automatically selected based
>>      upon a mapping of file names to languages. The  mappings  in
>>      effect   for   each   language  may  be  display  using  the
>>      --list-maps option and may be changed  using  the  --langmap
>>      option.   On  platforms  which  support it, if the name of a
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    1
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      file is not mapped to a language and the file is executable,
>>      the  first line of the file is checked to see if the file is
>>      a "#!" script for a recognized language.
>>
>>      By default, all other files names are ignored. This  permits
>>      running  ctags  on  all  files  in either a single directory
>>      (e.g. "ctags *"), or on all files in an entire source direc-
>>      tory  tree  (e.g.  "ctags -R"), since only those files whose
>>      names are mapped to languages will be scanned.
>>
>>      [The reason that .h  extensions  are  mapped  to  C++  files
>>      rather than C files is because it is common to use .h exten-
>>      sions in C++, and no harm results in treating  them  as  C++
>>      files.]
>>
>>
>>
>> OPTIONS
>>      Despite the wealth of available options, defaults are set so
>>      that  ctags  is  most  commonly executed without any options
>>      (e.g. "ctags *", or "ctags -R"), which  will  create  a  tag
>>      file  in  the  current  directory  for all recognized source
>>      files. The options described below are  provided  merely  to
>>      allow custom tailoring to meet special needs.
>>
>>      Note that spaces separating the single-letter  options  from
>>      their parameters are optional.
>>
>>      Note also that the  boolean  parameters  to  the  long  form
>>      options   (those   beginning  with  "--"  and  that  take  a
>>      "[=yes|no]" parameter) may be omitted, in which case  "=yes"
>>      is  implied. (e.g. --sort is equivalent to --sort=yes). Note
>>      further that "=1" and  "=on"  are  considered  synonyms  for
>>      "=yes", and that "=0" and "=off" are considered synonyms for
>>      "=no".
>>
>>      Some options are either ignored or  useful  only  when  used
>>      while  running  in  etags mode (see -e option). Such options
>>      will be noted.
>>
>>      Most options  may  appear  anywhere  on  the  command  line,
>>      affecting  only  those  files which follow the option. A few
>>      options, however, must appear before the first file name and
>>      will be noted as such.
>>
>>      Options taking language names will  accept  those  names  in
>>      either  upper or lower case. See the --list-languages option
>>      for a complete list of the built-in language names.
>>
>>
>>      -a   Equivalent to --append.
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    2
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      -B   Use  backward  searching  patterns  (e.g.   ?pattern?).
>>           [Ignored in etags mode]
>>
>>
>>      -e   Enable etags mode, which will create a tag file for use
>>           with  the  Emacs  editor.   Alternatively,  if ctags is
>>           invoked by a name containing the string "etags" (either
>>           by  renaming,  or  creating a link to, the executable),
>>           etags mode will be enabled.  This  option  must  appear
>>           before the first file name.
>>
>>
>>      -f tagfile
>>           Use the name specified by  tagfile  for  the  tag  file
>>           (default  is  "tags",  or  "TAGS" when running in etags
>>           mode). If tagfile is specified as  "-",  then  the  tag
>>           file  is written to standard output instead. Ctags will
>>           stubbornly refuse to take orders if tagfile exists  and
>>           its  first  line  contains something other than a valid
>>           tags line. This will save your neck if  you  mistakenly
>>           type  "ctags  -f  *.c", which would otherwise overwrite
>>           your first C file with the tags generated by the  rest!
>>           It  will  also  refuse to accept a multi-character file
>>           name which begins with a '-'  (dash)  character,  since
>>           this  most  likely means that you left out the tag file
>>           name and this option tried to grab the next  option  as
>>           the  file  name. If you really want to name your output
>>           tag file "-ugly", specify it as "./-ugly". This  option
>>           must  appear before the first file name. If this option
>>           is specified more than once, only the last will apply.
>>
>>
>>      -F   Use  forward  searching   patterns   (e.g.   /pattern/)
>>           (default).  [Ignored in etags mode]
>>
>>
>>      -h list
>>           Specifies a  list  of  file  extensions,  separated  by
>>           periods,  which  are  to  be interpreted as include (or
>>           header) files. To indicate files having  no  extension,
>>           use  a  period  not  followed by a non-period character
>>           (e.g. ".", "..x", ".x."). This option only affects  how
>>           the  scoping  of  a  particular kinds of tags is inter-
>>           preted (i.e. whether or not they are considered as glo-
>>           bally  visible or visible only within the file in which
>>           they are defined); it does not map the extension to any
>>           particular  language.  Any  tag  which  is located in a
>>           non-include file and cannot be seen  (e.g.  linked  to)
>>           from  another  file  is considered to have file-limited
>>           (e.g. static) scope. No kind of  tag  appearing  in  an
>>           include  file  will  be considered to have file-limited
>>           scope. If the first character in the  list  is  a  plus
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    3
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           sign,  then the extensions in the list will be appended
>>           to the current list; otherwise, the list  will  replace
>>           the  current  list. See, also, the --file-scope option.
>>           The default list is  ".h.H.hh.hpp.hxx.h++.inc.def".  To
>>           restore the default list, specify -h default. Note that
>>           if an extension supplied to this option is not  already
>>           mapped  to  a  particular  language  (see SOURCE FILES,
>>           above), you will also need to use either the  --langmap
>>           or --language-force option.
>>
>>
>>      -I identifier-list
>>           Specifies a list of identifiers which are  to  be  spe-
>>           cially  handled  while  parsing C and C++ source files.
>>           This option is specifically provided to handle  special
>>           cases  arising  through the use of preprocessor macros.
>>           When the identifiers  listed  are  simple  identifiers,
>>           these identifiers will be ignored during parsing of the
>>           source files. If an identifier is suffixed with  a  '+'
>>           character,  ctags  will  also  ignore  any parenthesis-
>>           enclosed argument list which may immediately follow the
>>           identifier  in the source files. If two identifiers are
>>           separated with the '=' character, the first identifiers
>>           is  replaced by the second identifiers for parsing pur-
>>           poses. The list of identifiers may be supplied directly
>>           on the command line or read in from a separate file. If
>>           the first character of identifier-list is '@', '.' or a
>>           pathname separator ('/' or '\'), or the first two char-
>>           acters specify a drive letter (e.g. "C:"), the  parame-
>>           ter  identifier-list  will be interpreted as a filename
>>           from which to read a list of identifiers, one per input
>>           line.  Otherwise, identifier-list is a list of identif-
>>           iers (or identifier pairs)  to  be  specially  handled,
>>           each  delimited  by  a either a comma or by white space
>>           (in which case the list should be quoted  to  keep  the
>>           entire  list as one command line argument). Multiple -I
>>           options may be supplied.  To clear the list  of  ignore
>>           identifiers,   supply   a   single   dash   ("-")   for
>>           identifier-list.
>>
>>           This feature is useful  when  preprocessor  macros  are
>>           used  in such a way that they cause syntactic confusion
>>           due to their presence. Indeed, this is the best way  of
>>           working around a number of problems caused by the pres-
>>           ence of syntax-busting  macros  in  source  files  (see
>>           CAVEATS,  below).  Some  examples  will illustrate this
>>           point.
>>
>>              int foo ARGDECL4(void *, ptr, long int, nbytes)
>>
>>
>>           In the above example, the  macro  "ARGDECL4"  would  be
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    4
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           mistakenly  interpreted  to be the name of the function
>>           instead of the correct name  of  "foo".  Specifying  -I
>>           ARGDECL4 results in the correct behavior.
>>
>>              /* creates an RCS version string in module */
>>              MODULE_VERSION("$Revision: 590 $")
>>
>>
>>           In the above example the  macro  invocation  looks  too
>>           much  like a function definition because it is not fol-
>>           lowed by a semicolon (indeed, it could even be followed
>>           by  a  global  variable definition that would look much
>>           like a K&R style function  parameter  declaration).  In
>>           fact,  this  seeming function definition could possibly
>>           even cause the rest of the  file  to  be  skipped  over
>>           while  trying to complete the definition. Specifying -I
>>           MODULE_VERSION+ would avoid such a problem.
>>
>>              CLASS Example {
>>                  // your content here
>>              };
>>
>>
>>           The example above uses "CLASS" as a preprocessor  macro
>>           which expands to something different for each platform.
>>           For  instance  CLASS   may   be   defined   as   "class
>>           __declspec(dllexport)"  on  Win32  platforms and simply
>>           "class" on UNIX.  Normally, the absence of the C++ key-
>>           word   "class"  would  cause  the  source  file  to  be
>>           incorrectly parsed. Correct behavior can be restored by
>>           specifying -I CLASS=class.
>>
>>
>>      -L file
>>           Read from file a list of  file  names  for  which  tags
>>           should be generated.  If file is specified as "-", then
>>           file names are read from  standard  input.  File  names
>>           read  using  this  option  are processed following file
>>           names appearing on the command line. Options  are  also
>>           accepted  in  this  input.  If this option is specified
>>           more than once, only the last will apply.  Note:   file
>>           is  read in line-oriented mode, where a new line is the
>>           only delimiter and non-trailing  white  space  is  con-
>>           sidered  significant, in order that file names contain-
>>           ing spaces may be  supplied  (however,  trailing  white
>>           space  is  stripped  from  lines);  this can affect how
>>           options are parsed if included in the input.
>>
>>
>>      -n   Equivalent to --excmd=number.
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    5
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      -N   Equivalent to --excmd=pattern.
>>
>>
>>      -o tagfile
>>           Equivalent to -f tagfile.
>>
>>
>>      -R   Equivalent to --recurse.
>>
>>
>>      -u   Equivalent to --sort=no (i.e. "unsorted").
>>
>>
>>      -V   Equivalent to --verbose.
>>
>>
>>      -w   This  option  is   silently   ignored   for   backward-
>>           compatibility with the ctags of SVR4 Unix.
>>
>>
>>      -x   Print a tabular, human-readable cross reference  (xref)
>>           file  to  standard  output  instead of generating a tag
>>           file. The information contained in the output includes:
>>           the  tag  name;  the kind of tag; the line number, file
>>           name, and source line  (with  extra  white  space  con-
>>           densed)  of the file which defines the tag. No tag file
>>           is written and all options affecting  tag  file  output
>>           will  be ignored. Example applications for this feature
>>           are generating a listing of all functions located in  a
>>           source  file  (e.g. ctags -x --c-kinds=f file), or gen-
>>           erating a list of all externally visible  global  vari-
>>           ables   located   in  a  source  file  (e.g.  ctags  -x
>>           --c-kinds=v --file-scope=no  file).  This  option  must
>>           appear before the first file name.
>>
>>
>>      --append[=yes|no]
>>           Indicates whether tags  generated  from  the  specified
>>           files  should  be  appended to those already present in
>>           the tag file or should replace them. This option is off
>>           by  default.  This  option must appear before the first
>>           file name.
>>
>>
>>      --etags-include=file
>>           Include a reference to  file  in  the  tag  file.  This
>>           option  may be specified as many times as desired. This
>>           supports Emacs' capability to  use  a  tag  file  which
>>           "includes"  other  tag  files. [Available only in etags
>>           mode]
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    6
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --exclude=[pattern]
>>           Add pattern to a list  of  excluded  files  and  direc-
>>           tories.  This  option may be specified as many times as
>>           desired. For each file name considered by  ctags,  each
>>           pattern  specified  using  this option will be compared
>>           against    both     the     complete     path     (e.g.
>>           some/path/base.ext)  and  the base name (e.g. base.ext)
>>           of the file, thus allowing patterns which match a given
>>           file  name  irrespective  of  its path, or match only a
>>           specific path. If appropriate support is available from
>>           the  runtime  library  of your C compiler, then pattern
>>           may contain the  usual  shell  wildcards  (not  regular
>>           expressions)  common  on  Unix  (be  sure  to quote the
>>           option parameter to protect the  wildcards  from  being
>>           expanded  by  the  shell  before being passed to ctags;
>>           also be aware that wildcards can match the slash  char-
>>           acter,  '/').  You can determine if shell wildcards are
>>           available on your platform by examining the  output  of
>>           the  --version  option, which will include "+wildcards"
>>           in the compiled feature  list;  otherwise,  pattern  is
>>           matched  against file names using a simple textual com-
>>           parison.
>>
>>           If pattern begins with the character '@', then the rest
>>           of  the string is interpreted as a file name from which
>>           to read exclusion patterns, one per line. If pattern is
>>           empty,  the list of excluded patterns is cleared.  Note
>>           that at program startup, the default exclude list  con-
>>           tains  "EIFGEN",  "SCCS",  "RCS",  and "CVS", which are
>>           names of directories for  which  it  is  generally  not
>>           desirable  to  descend  while  processing the --recurse
>>           option.
>>
>>
>>      --excmd=type
>>           Determines the type of EX command used to  locate  tags
>>           in the source file.  [Ignored in etags mode]
>>
>>           The valid values for type (either the  entire  word  or
>>           the first letter is accepted) are:
>>
>>
>>           number   Use only line numbers  in  the  tag  file  for
>>                    locating tags. This has four advantages:
>>                    1.  Significantly  reduces  the  size  of  the
>>                        resulting tag file.
>>                    2.  Eliminates failures to find  tags  because
>>                        the  line  defining  the  tag has changed,
>>                        causing the pattern match  to  fail  (note
>>                        that  some  editors, such as vim, are able
>>                        to recover in many such instances).
>>                    3.  Eliminates finding identical matching, but
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    7
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                        incorrect, source lines (see BUGS, below).
>>                    4.  Retains separate entries in the  tag  file
>>                        for  lines which are identical in content.
>>                        In pattern  mode,  duplicate  entries  are
>>                        dropped  because  the search patterns they
>>                        generate are identical, making the  dupli-
>>                        cate entries useless.
>>
>>
>>                    However, this option has one significant draw-
>>                    back:  changes  to  the source files can cause
>>                    the line numbers recorded in the tag  file  to
>>                    no  longer  correspond  to  the  lines  in the
>>                    source file, causing jumps  to  some  tags  to
>>                    miss  the  target  definition  by  one or more
>>                    lines. Basically, this  option  is  best  used
>>                    when the source code to which it is applied is
>>                    not subject to change. Selecting  this  option
>>                    type   causes  the  following  options  to  be
>>                    ignored: -BF.
>>
>>
>>           pattern  Use only search patterns for all tags,  rather
>>                    than  the  line numbers usually used for macro
>>                    definitions. This has  the  advantage  of  not
>>                    referencing  obsolete  line numbers when lines
>>                    have been added or removed since the tag  file
>>                    was generated.
>>
>>
>>           mixed    In this mode, patterns are generally used with
>>                    a few exceptions. For C, line numbers are used
>>                    for  macro  definition  tags.  This  was   the
>>                    default format generated by the original ctags
>>                    and is, therefore, retained as the default for
>>                    this  option.  For  Fortran,  line numbers are
>>                    used   for   common   blocks   because   their
>>                    corresponding   source   lines  are  generally
>>                    identical, making pattern searches useless for
>>                    finding all matches.
>>
>>
>>      --extra=[+|-]flags
>>           Specifies whether to include extra tag entries for cer-
>>           tain kinds of information. The parameter flags is a set
>>           of one-letter flags,  each  representing  one  kind  of
>>           extra tag entry to include in the tag file. If flags is
>>           preceded by by either the '+'  or  '-'  character,  the
>>           effect of each flag is added to, or removed from, those
>>           currently enabled;  otherwise  the  flags  replace  any
>>           current  settings.  The meaning of each flag is as fol-
>>           lows:
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    8
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>              f   Include an entry for the base file name of every
>>                  source file (e.g.  "example.c"), which addresses
>>                  the first line of the file.
>>
>>              q   Include an extra class-qualified tag  entry  for
>>                  each  tag  which  is  a  member  of a class (for
>>                  languages  for   which   this   information   is
>>                  extracted; currently C++, Eiffel, and Java). The
>>                  actual form of the qualified  tag  depends  upon
>>                  the  language  from  which  the  tag was derived
>>                  (using a form that is most natural for how qual-
>>                  ified  calls are specified in the language). For
>>                  C++, it is in the form "class::member"; for Eif-
>>                  fel  and Java, it is in the form "class.member".
>>                  This may allow easier  location  of  a  specific
>>                  tags  when  multiple  occurrences  of a tag name
>>                  occur in the tag file. Note, however, that  this
>>                  could  potentially  more than double the size of
>>                  the tag file.
>>
>>
>>      --fields=[+|-]flags
>>           Specifies the available extension fields which  are  to
>>           be  included  in  the  entries of the tag file (see TAG
>>           FILE FORMAT, below, for more information). The  parame-
>>           ter flags is a set of one-letter flags, each represent-
>>           ing one type of extension field to  include,  with  the
>>           following  meanings  (disabled  by default unless indi-
>>           cated):
>>
>>
>>              a   Access (or export) of class members
>>              f   File-restricted scoping [enabled]
>>              i   Inheritance information
>>              k   Kind of tag as a single letter [enabled]
>>              K   Kind of tag as full name
>>              l   Language of source file containing tag
>>              m   Implementation information
>>              n   Line number of tag definition
>>              s   Scope of tag definition [enabled]
>>              S   Signature of routine (e.g. prototype or  parame-
>>                  ter list)
>>              z   Include the "kind:" key in kind field
>>              t   Type and  name  of  a  variable  or  typedef  as
>>                  "typeref:" field [enabled]
>>
>>           Each letter or group of  letters  may  be  preceded  by
>>           either  '+'  to  add  it  to the default set, or '-' to
>>           exclude it. In the absence of any preceding '+' or  '-'
>>           sign,  only those kinds explicitly listed in flags will
>>           be included in the output (i.e. overriding the  default
>>           set).  This  option is ignored if the option --format=1
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                    9
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           has been specified. The default value of this option is
>>           fks.
>>
>>
>>      --file-scope[=yes|no]
>>           Indicates whether tags scoped only for  a  single  file
>>           (i.e.  tags which cannot be seen outside of the file in
>>           which they are defined, such as "static"  tags)  should
>>           be  included  in  the output. See, also, the -h option.
>>           This option is enabled by default.
>>
>>
>>      --filter[=yes|no]
>>           Causes ctags to behave as a filter, reading source file
>>           names  from  standard  input and printing their tags to
>>           standard output on a file-by-file basis. If --sorted is
>>           enabled, tags are sorted only within the source file in
>>           which they are defined. File names are read from  stan-
>>           dard input in line-oriented input mode (see note for -L
>>           option) and only after file names listed on the command
>>           line  or  from  any  file supplied using the -L option.
>>           When this option is enabled, the options  -f,  -o,  and
>>           --totals are ignored. This option is quite esoteric and
>>           is disabled by default. This option must appear  before
>>           the first file name.
>>
>>
>>      --filter-terminator=string
>>           Specifies a string to print to standard output  follow-
>>           ing  the  tags  for  each  file  name  parsed  when the
>>           --filter option is enabled. This may permit an applica-
>>           tion  reading the output of ctags to determine when the
>>           output for each file is finished. Note that if the file
>>           name read is a directory and --recurse is enabled, this
>>           string will be printed only one once at the end of  all
>>           tags found for by descending the directory. This string
>>           will always be separated from the last tag line for the
>>           file  by its terminating newline.  This option is quite
>>           esoteric and is empty  by  default.  This  option  must
>>           appear before the first file name.
>>
>>
>>      --format=level
>>           Change the format of the output tag file. Currently the
>>           only  valid values for level are 1 or 2. Level 1 speci-
>>           fies the original tag file format and level 2 specifies
>>           a  new extended format containing extension fields (but
>>           in a manner which retains  backward-compatibility  with
>>           original  vi(1)  implementations). The default level is
>>           2. This option must appear before the first file  name.
>>           [Ignored in etags mode]
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   10
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --help
>>           Prints to standard output a detailed usage description,
>>           and then exits.
>>
>>
>>      --if0[=yes|no]
>>           Indicates a preference as to  whether  code  within  an
>>           "#if  0" branch of a preprocessor conditional should be
>>           examined for non-macro  tags  (macro  tags  are  always
>>           included).  Because  the intent of this construct is to
>>           disable code, the default value of this option  is  no.
>>           Note that this indicates a preference only and does not
>>           guarantee skipping code within an "#if 0" branch, since
>>           the  fall-back  algorithm  used  to  generate tags when
>>           preprocessor conditionals are too complex  follows  all
>>           branches  of  a conditional. This option is disabled by
>>           default.
>>
>>
>>      --<LANG>-kinds=[+|-]kinds
>>           Specifies a list of language-specific kinds of tags (or
>>           kinds)  to  include in the output file for a particular
>>           language, where <LANG> is case-insensitive and  is  one
>>           of    the    built-in    language    names   (see   the
>>           --list-languages  option  for  a  complete  list).  The
>>           parameter  kinds  is a group of one-letter flags desig-
>>           nating kinds of tags (particular to  the  language)  to
>>           either include or exclude from the output. The specific
>>           sets of flags recognized for each language, their mean-
>>           ings  and  defaults  may be list using the --list-kinds
>>           option. Each letter or group of letters may be preceded
>>           by  either  '+' to add it to, or '-' to remove it from,
>>           the default set. In the absence of any preceding '+' or
>>           '-'  sign,  only those kinds explicitly listed in kinds
>>           will be included in the output  (i.e.   overriding  the
>>           default for the specified language).
>>
>>           As an example for the C language, in order to add  pro-
>>           totypes  and  external  variable  declarations  to  the
>>           default set of  tag  kinds,  but  exclude  macros,  use
>>           --c-kinds=+px-d;  to  include  only tags for functions,
>>           use --c-kinds=f.
>>
>>
>>      --langdef=name
>>           Defines a new user-defined language, name, to be parsed
>>           with  regular  expressions.  Once  defined, name may be
>>           used in other options taking language names. The  typi-
>>           cal use of this option is to first define the language,
>>           then map file names to it using --langmap, then specify
>>           regular  expressions using --regex-<LANG> to define how
>>           its tags are found.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   11
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --langmap=map[,map[...]]
>>           Controls how file names are mapped  to  languages  (see
>>           the  --list-maps option). Each comma-separated map con-
>>           sists of the language name (either a built-in or  user-
>>           defined  language),  a colon, and a list of file exten-
>>           sions and/or file name patterns. A  file  extension  is
>>           specified  by  preceding  the  extension  with a period
>>           (e.g. ".c").  A  file  name  pattern  is  specified  by
>>           enclosing    the    pattern    in   parentheses   (e.g.
>>           "([Mm]akefile)"). If appropriate support  is  available
>>           from  the  runtime library of your C compiler, then the
>>           file name pattern may contain the usual shell wildcards
>>           common  on  Unix (be sure to quote the option parameter
>>           to protect the wildcards from  being  expanded  by  the
>>           shell  before being passed to ctags). You can determine
>>           if shell wildcards are available on  your  platform  by
>>           examining  the  output  of  the --version option, which
>>           will include "+wildcards" in the compiled feature list;
>>           otherwise,  the  file name patterns are matched against
>>           file names using a simple textual comparison. When map-
>>           ping  a  file extension, it will first be unmapped from
>>           any other languages.
>>
>>           If the first character in a map is a  plus  sign,  then
>>           the  extensions and file name patterns in that map will
>>           be appended to the current map for that language;  oth-
>>           erwise, the map will replace the current map. For exam-
>>           ple, to specify that only files with extensions  of  .c
>>           and  .x  are  to  be  treated  as C language files, use
>>           "--langmap=c:.c.x"; to also add files  with  extensions
>>           of    .j    as    Java    language    files,    specify
>>           "--langmap=c:.c.x,java:+.j".  To  map  makefiles  (e.g.
>>           files  named  either  "Makefile", "makefile", or having
>>           the extension ".mak")  to  a  language  called  "make",
>>           specify   "--langmap=make:([Mm]akefile).mak".   To  map
>>           files having no extension, specify a  period  not  fol-
>>           lowed  by  a  non-period  character  (e.g.  ".", "..x",
>>           ".x."). To clear the mapping for a particular  language
>>           (thus  inhibiting automatic generation of tags for that
>>           language),  specify  an  empty  extension  list   (e.g.
>>           "--langmap=fortran:").  To restore the default language
>>           mappings for all a particular language, supply the key-
>>           word "default" for the mapping.  To specify restore the
>>           default language mappings for  all  languages,  specify
>>           "--langmap=default".  Note  that  file  extensions  are
>>           tested before file name  patterns  when  inferring  the
>>           language of a file.
>>
>>
>>      --language-force=language
>>           By default, ctags automatically selects the language of
>>           a  source  file,  ignoring  those  files whose language
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   12
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           cannot be determined (see SOURCE  FILES,  above).  This
>>           option forces the specified language (case-insensitive;
>>           either built-in or user-defined) to be used  for  every
>>           supplied  file  instead  of automatically selecting the
>>           language based upon its  extension.  In  addition,  the
>>           special  value  auto indicates that the language should
>>           be automatically selected (which  effectively  disables
>>           this option).
>>
>>
>>      --languages=[+|-]list
>>           Specifies the languages for  which  tag  generation  is
>>           enabled, with list containing a comma-separated list of
>>           language names (case-insensitive;  either  built-in  or
>>           user-defined).  If  the  first  language of list is not
>>           preceded by either a '+' or '-', the current list  will
>>           be  cleared  before adding or removing the languages in
>>           list. Until a '-' is encountered, each language in  the
>>           list  will  be added to the current list. As either the
>>           '+' or '-' is encountered in the  list,  the  languages
>>           following  it  are  added  or  removed from the current
>>           list, respectively. Thus, it becomes simple to  replace
>>           the  current  list  with a new one, or to add or remove
>>           languages from the current list.  The  actual  list  of
>>           files for which tags will be generated depends upon the
>>           language extension mapping in effect (see the --langmap
>>           option).  Note  that  all  languages,  including  user-
>>           defined languages are enabled  unless  explicitly  dis-
>>           abled  using  this  option.  Language names included in
>>           list may be any built-in  language  or  one  previously
>>           defined  with --langdef. The default is "all", which is
>>           also  accepted   as   a   valid   argument.   See   the
>>           --list-languages  option  for  a  complete  list of the
>>           built-in language names.
>>
>>
>>      --license
>>           Prints a summary of the software  license  to  standard
>>           output, and then exits.
>>
>>
>>      --line-directives[=yes|no]
>>           Specifies whether "#line" directives should  be  recog-
>>           nized. These are present in the output of preprocessors
>>           and contain the line  number,  and  possibly  the  file
>>           name,  of  the  original  source file(s) from which the
>>           preprocessor output file was generated.  When  enabled,
>>           this  option  will  cause ctags to generate tag entries
>>           marked with the file names and line  numbers  of  their
>>           locations  original  source  file(s),  instead of their
>>           actual locations in the preprocessor output. The actual
>>           file  names placed into the tag file will have the same
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   13
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           leading path  components  as  the  preprocessor  output
>>           file,  since  it  is  assumed  that the original source
>>           files are located relative to the  preprocessor  output
>>           file  (unless, of course, the #line directive specifies
>>           an absolute path). This option is off by default. Note:
>>           This option is generally only useful when used together
>>           with the --excmd=number (-n) option. Also, you may have
>>           to  use either the --langmap or --language-force option
>>           if the extension of the preprocessor output file is not
>>           known to ctags.
>>
>>
>>      --links[=yes|no]
>>           Indicates whether symbolic links (if supported)  should
>>           be followed. When disabled, symbolic links are ignored.
>>           This option is on by default.
>>
>>
>>      --list-kinds[=language|all]
>>           Lists the tag kinds recognized for either the specified
>>           language or all languages, and then exits. Each kind of
>>           tag recorded in the tag file is represented by  a  one-
>>           letter  flag,  which  is  also  used to filter the tags
>>           placed   into   the   output   through   use   of   the
>>           --<LANG>-kinds  option. Note that some languages and/or
>>           tag kinds may be implemented using regular  expressions
>>           and  may  not be available if regex support is not com-
>>           piled into ctags (see the --regex-<LANG> option).  Each
>>           kind listed is enabled unless followed by "[off]".
>>
>>
>>      --list-maps[=language|all]
>>           Lists the file extensions and file name patterns  which
>>           associate  a  file  name with a language for either the
>>           specified language or all languages,  and  then  exits.
>>           See the --langmap option, and SOURCE FILES, above.
>>
>>
>>      --list-languages
>>           Lists the names of the languages understood  by  ctags,
>>           and then exits.  These language names are case insensi-
>>           tive  and  may  be  used   in   the   --language-force,
>>           --languages,    --<LANG>-kinds,    and   --regex-<LANG>
>>           options.
>>
>>
>>      --options=file
>>           Read additional options from file. The file should con-
>>           tain  one  option  per  line.  As  a  special  case, if
>>           --options=NONE is specified as the first option on  the
>>           command  line, it will disable the automatic reading of
>>           any configuration options from either  a  file  or  the
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   14
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           environment (see FILES).
>>
>>
>>      --recurse[=yes|no]
>>           Recurse into directories encountered  in  the  list  of
>>           supplied  files. If the list of supplied files is empty
>>           and no file list is specified with the -L option,  then
>>           the  current  directory (i.e. ".") is assumed. Symbolic
>>           links are followed. If you don't like these  behaviors,
>>           either  explicitly specify the files or pipe the output
>>           of find(1) into ctags -L- instead. Note: This option is
>>           not  supported  on  all  platforms  at  present.  It is
>>           available if the output of the --help  option  includes
>>           this  option.  See, also, the --exclude to limit recur-
>>           sion.
>>
>>
>>      --regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
>>           The /regexp/replacement/ pair define a regular  expres-
>>           sion  replacement pattern, similar in style to sed sub-
>>           stitution commands, with which to  generate  tags  from
>>           source  files  mapped  to  the  named language, <LANG>,
>>           (case-insensitive; either a  built-in  or  user-defined
>>           language).  The  regular expression, regexp, defines an
>>           extended  regular  expression  (roughly  that  used  by
>>           egrep(1)), which is used to locate a single source line
>>           containing a tag and may specify tab  characters  using
>>           \t.  When  a matching line is found, a tag will be gen-
>>           erated for the name defined by replacement, which  gen-
>>           erally  will  contain  the  special  back-references \1
>>           through \9 to refer to matching  sub-expression  groups
>>           within  regexp.  The  '/' separator characters shown in
>>           the parameter to the option can actually be replaced by
>>           any  character. Note that whichever separator character
>>           is used will have to be escaped with a backslash  ('\')
>>           character wherever it is used in the parameter as some-
>>           thing other than a separator.  The  regular  expression
>>           defined  by this option is added to the current list of
>>           regular expressions for the specified  language  unless
>>           the  parameter  is  omitted,  in which case the current
>>           list is cleared.
>>
>>           Unless modified by flags, regexp is  interpreted  as  a
>>           Posix  extended  regular  expression.  The  replacement
>>           should expand for all matching  lines  to  a  non-empty
>>           string  of  characters,  or  a  warning message will be
>>           reported. An optional kind specifier for tags  matching
>>           regexp  may  follow  replacement,  which will determine
>>           what kind of tag is reported in  the  "kind"  extension
>>           field  (see  TAG  FILE FORMAT, below). The full form of
>>           kind-spec is in the form of a single letter, a comma, a
>>           name (without spaces), a comma, a description, followed
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   15
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           by a separator, which specify the short and long  forms
>>           of   the   kind   value  and  its  textual  description
>>           (displayed using --list-kinds). Either  the  kind  name
>>           and/or  the description may be omitted. If kind-spec is
>>           omitted, it defaults to "r,regex". Finally,  flags  are
>>           one or more single-letter characters having the follow-
>>           ing effect upon the interpretation of regexp:
>>
>>
>>              b   The pattern is interpreted as a Posix basic reg-
>>                  ular expression.
>>
>>              e   The pattern is interpreted as a  Posix  extended
>>                  regular expression (default).
>>
>>              i   The regular expression is to  be  applied  in  a
>>                  case-insensitive manner.
>>
>>           Note that this option is available only  if  ctags  was
>>           compiled  with  support  for regular expressions, which
>>           depends upon your platform. You can determine  if  sup-
>>           port  for regular expressions is compiled in by examin-
>>           ing the output of  the  --version  option,  which  will
>>           include "+regex" in the compiled feature list.
>>
>>           For more information on the regular expressions used by
>>           ctags,  see  either the regex(5,7) man page, or the GNU
>>           info documentation for regex (e.g. "info regex").
>>
>>
>>      --sort[=yes|no|foldcase]
>>           Indicates whether the tag file should be sorted on  the
>>           tag name (default is yes). Note that the original vi(1)
>>           required sorted tags. The foldcase value specifies case
>>           insensitive  (or  case-folded)  sorting.   Fast  binary
>>           searches of tag files  sorted  with  case-folding  will
>>           require  special  support  from  tools using tag files,
>>           such as that found in the ctags  readtags  library,  or
>>           Vim  version  6.2  or  higher (using "set ignorecase").
>>           This option must appear before  the  first  file  name.
>>           [Ignored in etags mode]
>>
>>
>>      --tag-relative[=yes|no]
>>           Indicates that the file paths recorded in the tag  file
>>           should  be relative to the directory containing the tag
>>           file, rather than relative to  the  current  directory,
>>           unless  the  files  supplied  on  the  command line are
>>           specified with absolute paths. This option must  appear
>>           before  the  first  file  name. The default is yes when
>>           running in etags mode (see the -e  option),  no  other-
>>           wise.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   16
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      --totals[=yes|no]
>>           Prints statistics about the source files read  and  the
>>           tag  file  written  during  the  current  invocation of
>>           ctags. This option is off by default.  This option must
>>           appear before the first file name.
>>
>>
>>      --verbose[=yes|no]
>>           Enable verbose mode. This  prints  out  information  on
>>           option  processing  and a brief message describing what
>>           action is being  taken  for  each  file  considered  by
>>           ctags. Normally, ctags does not read command line argu-
>>           ments until after options are read from the  configura-
>>           tion files (see FILES, below) and the CTAGS environment
>>           variable. However, if this option is the first argument
>>           on  the  command  line,  it will take effect before any
>>           options are read from these sources. The default is no.
>>
>>
>>      --version
>>           Prints a version identifier for ctags to standard  out-
>>           put,  and then exits. This is guaranteed to always con-
>>           tain the string "Exuberant Ctags".
>>
>>
>>
>> OPERATIONAL DETAILS
>>      As ctags considers each file  name  in  turn,  it  tries  to
>>      determine the language of the file by applying the following
>>      three tests in order: if the file extension has been  mapped
>>      to  a  language,  if  the  file name matches a shell pattern
>>      mapped to a language, and finally if the file is  executable
>>      and  its first line specifies an interpreter using the Unix-
>>      style "#!" specification (if supported on the platform).  If
>>      a  language  was identified, the file is opened and then the
>>      appropriate language parser is  called  to  operate  on  the
>>      currently  open file. The parser parses through the file and
>>      adds an entry to the tag file for each language object it is
>>      written  to  handle. See TAG FILE FORMAT, below, for details
>>      on these entries.
>>
>>      This implementation of ctags imposes no formatting  require-
>>      ments  on  C code as do legacy implementations. Older imple-
>>      mentations of ctags tended to rely upon  certain  formatting
>>      assumptions  in  order  to  help  it resolve coding dilemmas
>>      caused by preprocessor conditionals.
>>
>>      In general,  ctags  tries  to  be  smart  about  conditional
>>      preprocessor  directives.  If  a preprocessor conditional is
>>      encountered within a statement which defines  a  tag,  ctags
>>      follows only the first branch of that conditional (except in
>>      the special case of "#if 0", in which case it  follows  only
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   17
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      the  last  branch).  The  reason for this is that failing to
>>      pursue only one branch can result in ambiguous syntax, as in
>>      the following example:
>>
>>           #ifdef TWO_ALTERNATIVES
>>           struct {
>>           #else
>>           union {
>>           #endif
>>               short a;
>>               long b;
>>           }
>>
>>      Both branches cannot be followed, or  braces  become  unbal-
>>      anced and ctags would be unable to make sense of the syntax.
>>
>>      If the application of this heuristic fails to properly parse
>>      a  file, generally due to complicated and inconsistent pair-
>>      ing within the conditionals, ctags will retry the file using
>>      a different heuristic which does not selectively follow con-
>>      ditional preprocessor branches, but instead  falls  back  to
>>      relying upon a closing brace ("}") in column 1 as indicating
>>      the end of a block once any  brace  imbalance  results  from
>>      following a #if conditional branch.
>>
>>      Ctags will also try  to  specially  handle  arguments  lists
>>      enclosed  in  double  sets of parentheses in order to accept
>>      the following conditional construct:
>>
>>           extern void foo __ARGS((int one, char two));
>>
>>      Any name immediately preceding the "(("  will  be  automati-
>>      cally ignored and the previous name will be used.
>>
>>      C++ operator definitions are specially handled. In order for
>>      consistency  with  all  types  of  operators (overloaded and
>>      conversion), the operator name in the tag file  will  always
>>      be  preceded  by  the  string  "operator " (i.e. even if the
>>      actual operator definition was written as "operator<<").
>>
>>      After creating or appending to the tag file, it is sorted by
>>      the tag name, removing identical tag lines.
>>
>>
>>
>> TAG FILE FORMAT
>>      When not running in etags mode, each entry in the  tag  file
>>      consists  of  a separate line, each looking like this in the
>>      most general case:
>>
>>       tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   18
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      The fields and separators of these lines  are  specified  as
>>      follows:
>>
>>          1.  tag name
>>          2.  single tab character
>>          3.  name of the file in which the object associated with
>>              the tag is located
>>          4.  single tab character
>>          5.  EX command used to locate the tag within  the  file;
>>              generally  a  search  pattern  (either  /pattern/ or
>>              ?pattern?) or line number (see  --excmd).  Tag  file
>>              format  2  (see  --format)  extends  this EX command
>>              under certain circumstances  to  include  a  set  of
>>              extension fields (described below) embedded in an EX
>>              comment immediately  appended  to  the  EX  command,
>>              which  leaves  it  backward-compatible with original
>>              vi(1) implementations.
>>
>>      A few special tags are written into the tag file for  inter-
>>      nal  purposes.  These  tags  are composed in such a way that
>>      they always sort to the top of  the  file.   Therefore,  the
>>      first  two  characters of these tags are used a magic number
>>      to detect a tag file for purposes of determining  whether  a
>>      valid  tag  file  is  being overwritten rather than a source
>>      file.
>>
>>      Note that the name of each source file will be  recorded  in
>>      the  tag  file  exactly  as  it appears on the command line.
>>      Therefore, if the path you specified on the command line was
>>      relative  to the current directory, then it will be recorded
>>      in that same manner in  the  tag  file.  See,  however,  the
>>      --tag-relative option for how this behavior can be modified.
>>
>>      Extension fields are tab-separated key-value pairs  appended
>>      to  the  end  of  the  EX command as a comment, as described
>>      above. These key value pairs  appear  in  the  general  form
>>      "key:value". Their presence in the lines of the tag file are
>>      controlled by the --fields option. The possible keys and the
>>      meaning of their values are as follows:
>>
>>
>>      access      Indicates the visibility of this  class  member,
>>                  where value is specific to the language.
>>
>>
>>      file        Indicates that the tag has file-limited visibil-
>>                  ity. This key has no corresponding value.
>>
>>
>>      kind        Indicates the type, or kind, of tag.  Its  value
>>                  is  either  one  of the corresponding one-letter
>>                  flags described under the various --<LANG>-kinds
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   19
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                  options  above,  or a full name. It is permitted
>>                  (and is, in fact, the default) for the key  por-
>>                  tion  of  this field to be omitted. The optional
>>                  behaviors  are  controlled  with  the   --fields
>>                  option.
>>
>>
>>      implementation
>>                  When present, this indicates a limited implemen-
>>                  tation  (abstract  vs. concrete) of a routine or
>>                  class, where value is specific to  the  language
>>                  ("virtual" or "pure virtual" for C++; "abstract"
>>                  for Java).
>>
>>
>>      inherits    When present, value. is a  comma-separated  list
>>                  of  classes  from  which  this  class is derived
>>                  (i.e. inherits from).
>>
>>
>>      signature   When  present,  value  is  a  language-dependent
>>                  representation  of the signature of a routine. A
>>                  routine signature in its complete form specifies
>>                  the  return  type  of  a  routine and its formal
>>                  argument list. This extension field is presently
>>                  supported  only  for  C-based languages and does
>>                  not include the return type.
>>
>>
>>      In addition, information on the scope of the tag  definition
>>      may  be  available,  with  the  key  portion  equal  to some
>>      language-dependent construct name and  its  value  the  name
>>      declared for that construct in the program. This scope entry
>>      indicates the scope in which the tag was found. For example,
>>      a  tag generated for a C structure member would have a scope
>>      looking like "struct:myStruct".
>>
>>
>>
>> HOW TO USE WITH VI
>>      Vi will, by default, expect a tag file by the name "tags" in
>>      the  current directory. Once the tag file is built, the fol-
>>      lowing commands exercise the tag indexing feature:
>>
>>      vi -t tag   Start vi and position the cursor at the file and
>>                  line where "tag" is defined.
>>
>>      :ta tag     Find a tag.
>>
>>      Ctrl-]      Find the tag under the cursor.
>>
>>      Ctrl-T      Return to previous location before jump  to  tag
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   20
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>                  (not widely implemented).
>>
>>
>>
>> HOW TO USE WITH GNU EMACS
>>      Emacs will, by default, expect a tag file by the name "TAGS"
>>      in  the  current  directory. Once the tag file is built, the
>>      following commands exercise the tag indexing feature:
>>
>>      M-x visit-tags-table <RET> FILE <RET>
>>                Select the tag file, "FILE", to use.
>>
>>      M-. [TAG] <RET>
>>                Find the first definition of TAG. The default  tag
>>                is the identifier under the cursor.
>>
>>      M-*       Pop back to where you previously invoked "M-.".
>>
>>      C-u M-.   Find the next definition for the last tag.
>>
>>
>>      For more commands, see the Tags  topic  in  the  Emacs  info
>>      document.
>>
>>
>>
>> HOW TO USE WITH NEDIT
>>      NEdit version 5.1 and later can handle the new extended  tag
>>      file  format (see --format). To make NEdit use the tag file,
>>      select "File->Load Tags File". To jump to the definition for
>>      a  tag,  highlight the word, the press Ctrl-D. NEdit 5.1 can
>>      can read multiple  tag  files  from  different  directories.
>>      Setting  the  X  resource nedit.tagFile to the name of a tag
>>      file instructs NEdit to automatically load that tag file  at
>>      startup time.
>>
>>
>>
>> CAVEATS
>>      Because ctags is neither a preprocessor nor a compiler,  use
>>      of  preprocessor  macros  can fool ctags into either missing
>>      tags or improperly generating inappropriate  tags.  Although
>>      ctags has been designed to handle certain common cases, this
>>      is the single biggest cause of reported problems. In partic-
>>      ular,  the  use  of  preprocessor constructs which alter the
>>      textual syntax of C can fool ctags. You can work around many
>>      such problems by using the -I option.
>>
>>      Note that since ctags generates patterns for  locating  tags
>>      (see  the  --excmd option), it is entirely possible that the
>>      wrong line may be found  by  your  editor  if  there  exists
>>      another   source   line  which  is  identical  to  the  line
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   21
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      containing the tag. The following example demonstrates  this
>>      condition:
>>
>>           int variable;
>>
>>           /* ... */
>>           void foo(variable)
>>           int variable;
>>           {
>>               /* ... */
>>           }
>>
>>      Depending upon which editor you use and where  in  the  code
>>      you happen to be, it is possible that the search pattern may
>>      locate the local parameter declaration in  foo()  before  it
>>      finds the actual global variable definition, since the lines
>>      (and therefore their search patterns  are  identical).  This
>>      can be avoided by use of the --excmd=n option.
>>
>>
>>
>> BUGS
>>      Ctags has more options than ls(1).
>>
>>      When  parsing  a  C++  member  function   definition   (e.g.
>>      "className::function"),  ctags  cannot determine whether the
>>      scope specifier is a class name or a namespace specifier and
>>      always  lists it as a class name in the scope portion of the
>>      extension fields. Also, if a C++ function is defined outside
>>      of  the  class  declaration  (the  usual  case),  the access
>>      specification  (i.e.  public,  protected,  or  private)  and
>>      implementation information (e.g. virtual, pure virtual) con-
>>      tained in the function declaration are not  known  when  the
>>      tag  is generated for the function definition. It will, how-
>>      ever be available for prototypes (e.g --c++-kinds=+p).
>>
>>      No qualified tags are generated for language objects  inher-
>>      ited into a class.
>>
>>
>>
>> ENVIRONMENT VARIABLES
>>      CTAGS   If this environment  variable  exists,  it  will  be
>>              expected  to  contain a set of default options which
>>              are read when ctags starts, after the  configuration
>>              files  listed  in FILES, below, are read, but before
>>              any command line options are read. Options appearing
>>              on  the command line will override options specified
>>              in this variable. Only options  will  be  read  from
>>              this  variable.  Note  that  all white space in this
>>              variable is considered a separator, making it impos-
>>              sible  to  pass  an  option  parameter containing an
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   22
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>              embedded space. If this is a problem, use  a  confi-
>>              guration file instead.
>>
>>
>>      ETAGS   Similar to the CTAGS variable above, this  variable,
>>              if  found,  will  be read when etags starts. If this
>>              variable is not found, etags will try to  use  CTAGS
>>              instead.
>>
>>
>>      TMPDIR  On Unix-like hosts where mkstemp() is available, the
>>              value  of  this  variable specifies the directory in
>>              which to place temporary files. This can  be  useful
>>              if the size of a temporary file becomes too large to
>>              fit on the partition holding the  default  temporary
>>              directory   defined   at  compilation  time.   ctags
>>              creates  temporary  files  only  if  either  (1)  an
>>              emacs-style tag file is being generated, (2) the tag
>>              file is being sent to standard output,  or  (3)  the
>>              program  was  compiled to use an internal sort algo-
>>              rithm to sort the tag files instead of the the  sort
>>              utility of the operating system. If the sort utility
>>              of the operating system is being used, it will  gen-
>>              erally  observe  this  variable  also.  Note that if
>>              ctags  is  setuid,  the  value  of  TMPDIR  will  be
>>              ignored.
>>
>>
>>
>> FILES
>>      /ctags.cnf (on MSDOS, MSWindows only)
>>      /etc/ctags.conf
>>      /usr/local/etc/ctags.conf
>>      $HOME/.ctags
>>      $HOME/ctags.cnf (on MSDOS, MSWindows only)
>>      .ctags
>>      ctags.cnf (on MSDOS, MSWindows only)
>>           If any of these configuration files exist, each will be
>>           expected  to contain a set of default options which are
>>           read in the order listed when ctags starts, but  before
>>           the  CTAGS  environment variable is read or any command
>>           line options are read. This makes it possible to set up
>>           site-wide,  personal  or  project-level defaults. It is
>>           possible to compile ctags to read an additional  confi-
>>           guration  file  before  any of those shown above, which
>>           will be indicated if the output produced by the  --ver-
>>           sion  option  lists  the "custom-conf" feature. Options
>>           appearing in the CTAGS environment variable or  on  the
>>           command  line  will override options specified in these
>>           files. Only options will be read from these files. Note
>>           that the option files are read in line-oriented mode in
>>           which spaces are significant (since  shell  quoting  is
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   23
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>           not  possible).  Each  line  of the file is read as one
>>           command line parameter (as if it were quoted with  sin-
>>           gle  quotes).  Therefore,  use  new  lines  to indicate
>>           separate command-line arguments.
>>
>>
>>      tags The default tag file created by ctags.
>>
>>      TAGS The default tag file created by etags.
>>
>>
>> SEE ALSO
>>      The official Exuberant Ctags web site at:
>>
>>           http://ctags.sourceforge.net
>>
>>      Also ex(1), vi(1), elvis, or, better yet, vim, the  official
>>      editor  of  ctags.  For more information on vim, see the VIM
>>      Pages web site at:
>>
>>           http://www.vim.org/
>>
>>
>>
>> AUTHOR
>>      Darren Hiebert <dhiebert at users.sourceforge.net>
>>      http://DarrenHiebert.com/
>>
>>
>>
>> MOTIVATION
>>      "Think ye at all times of rendering some  service  to  every
>>      member of the human race."
>>
>>      "All effort and exertion put forth by man from the  fullness
>>      of  his  heart  is worship, if it is prompted by the highest
>>      motives and the will to do service to humanity."
>>
>>           -- From the Baha'i Writings
>>
>>
>>
>> CREDITS
>>      This version  of  ctags  was  originally  derived  from  and
>>      inspired   by   the   ctags   program  by  Steve  Kirkendall
>>      <kirkenda@cs.pdx.edu> that comes with  the  Elvis  vi  clone
>>      (though virtually none of the original code remains).
>>
>>      Credit is also due Bram Moolenaar <Bram@vim.org>, the author
>>      of  vim, who has devoted so much of his time and energy both
>>      to developing the editor as a  service  to  others,  and  to
>>      helping the orphans of Uganda.
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   24
>>
>>
>>
>>
>>
>>
>> Exuberant Ctags                                          CTAGS(1)
>>
>>
>>
>>      The section entitled "HOW TO USE WITH GNU EMACS" was  shame-
>>      lessly stolen from the info page for GNU etags.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> Darren Hiebert      Last change: Version 5.7                   25
>>
>>
>>
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From brian.utterback@sun.com Mon Jan  5 06:22:25 2009
Received: from sunmail2sca.sfbay.sun.com (sunmail2sca.SFBay.Sun.COM [129.145.155.234])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n05EMPv5021459
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 5 Jan 2009 06:22:25 -0800 (PST)
Received: from nwk-avmta-1.SFBay.Sun.COM (nwk-avmta-1.SFBay.Sun.COM [129.146.11.74])
	by sunmail2sca.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id n05EMOWQ015059
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 5 Jan 2009 06:22:25 -0800 (PST)
Received: from pmxchannel-daemon.nwk-avmta-1.sfbay.Sun.COM by
 nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD00041759C4V00@nwk-avmta-1.sfbay.Sun.COM> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 06:22:24 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD0008R259AJ4A0@nwk-avmta-1.sfbay.Sun.COM> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 06:22:23 -0800 (PST)
Received: from [129.148.9.185] (sr1-ubur-27.East.Sun.COM [129.148.9.185])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id n05EMKs0005873; Mon, 05 Jan 2009 09:22:20 -0500 (EST)
Date: Mon, 05 Jan 2009 09:22:20 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <1229961108.6312.13.camel@sr1-umpk-34>
To: lsarc-ext@sun.com
Cc: Thomas Preisler <Thomas.Preisler@sun.com>,
        brian Utterback <brian@utterback.name>
Message-id: <4962179C.7050802@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
User-Agent: Thunderbird 2.0.0.20pre (X11/20090102)
Status: RO
Content-Length: 1519

Another issue has come up. The OpenGrok case (pending, not yet 
submitted) has a dependency on Exuberant CTags. In fact, this 
dependency is what has delayed the filing. In any case, the desire is 
to have OpenGrok integrate in the SFW consolidation for inclusion in 
OpenSolaris. However, OpenGrok requires Exuberant CTags to run work. 
Since this case proposes to integrate Exuberant CTags into the DevPro 
consolidation, this leaves us with a quandary.

One possibility is to deliver OpenGrok into DevPro. The OpenGrok team 
wants to deliver to OpenSolaris, I don't know how the DevPro people 
feel about this. Another is to deliver Exuberant CTags into SFW. I 
suspect that the DevPro people will still want it in DevPro because of 
the support of prior Solaris versions and other platforms. And the 
last possibility is to deliver a private copy of Exuberant CTags with 
OpenGrok, suitably disguised to prevent users from finding it.

Is there a precedent for this situation? Any idea on the best course 
of action?

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From brian.utterback@sun.com Mon Jan  5 06:37:26 2009
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n05EbP1e022473
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 5 Jan 2009 06:37:25 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id n05EbEgu016125
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 5 Jan 2009 14:37:24 GMT
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD00000R5Y90A00@nwk-avmta-2.sfbay.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 06:37:21 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD000GAF5Y8OK60@nwk-avmta-2.sfbay.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 06:37:20 -0800 (PST)
Received: from [129.148.9.185] (sr1-ubur-27.East.Sun.COM [129.148.9.185])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id n05EbH5K013121; Mon, 05 Jan 2009 09:37:18 -0500 (EST)
Date: Mon, 05 Jan 2009 09:37:17 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <1229961108.6312.13.camel@sr1-umpk-34>
To: lsarc-ext@sun.com
Cc: Brian Utterback <brian@utterback.name>,
        Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <49621B1D.9030704@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
User-Agent: Thunderbird 2.0.0.20pre (X11/20090102)
Status: RO
Content-Length: 2023


It was pointed out to me that gmake is not a good example of a case 
where the man page lists a name different from the one delivered, 
since gmake is delivered as both /usr/bin/gmake and /usr/gnu/bin/make. 
Does anybody know of any other precedents in this regard?

So, in any case, we need a "best practice" kind of rule around FOSS 
man pages. Should the team attempt to deliver as close as possible to 
the original page in the package, or should it reflect the 
capabilities of what is actually delivered, or something in between? 
It was already pointed out that an "Attributes" section almost 
certainly must be added. In this particular case, it also seems likely 
that the synopsis needs to be changed to reflect the renamed 
deliverables, no?  These two cases must be decided before this case 
goes forward.  And in general, I believe that we require some kind of 
man page even if the original package didn't have one, right?

What about other changes to the package, such as features not enabled 
under Solaris? Should these be left in, deleted, or flagged somehow as 
not applicable? If so, how?

I feel pretty strongly that since the man page is the canonical source 
of documentation on commands in Solaris, that these pages must reflect 
how the world is, and not how we would like it, or expect it to one 
day be. To me, that is juts part of the porting procedure. Like the 
old poster says, the project isn't done until the paperwork is finished.

But then, that is just me. What do the rest of you feel?


-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From Alan.Coopersmith@sun.com Mon Jan  5 06:57:02 2009
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n05Ev2L7022994
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 5 Jan 2009 06:57:02 -0800 (PST)
Received: from nwk-avmta-1.SFBay.Sun.COM (nwk-avmta-1.SFBay.Sun.COM [129.146.11.74])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id n05Ev1eX027799
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 5 Jan 2009 06:57:01 -0800 (PST)
Received: from pmxchannel-daemon.nwk-avmta-1.sfbay.Sun.COM by
 nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD0008396V1KM00@nwk-avmta-1.sfbay.Sun.COM> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@Sun.COM); Mon, 05 Jan 2009 06:57:01 -0800 (PST)
Received: from sca-es-mail-2.sun.com ([192.18.43.133])
 by nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD0008966UZJED0@nwk-avmta-1.sfbay.Sun.COM> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@Sun.COM); Mon,
 05 Jan 2009 06:57:00 -0800 (PST)
Received: from fe-sfbay-10.sun.com ([192.18.43.129])
	by sca-es-mail-2.sun.com (8.13.7+Sun/8.12.9) with ESMTP id n05EuxFs020248	for
 <lsarc-ext@Sun.COM>; Mon, 05 Jan 2009 06:56:59 -0800 (PST)
Received: from conversion-daemon.fe-sfbay-10.sun.com by fe-sfbay-10.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KD0003016UIK700@fe-sfbay-10.sun.com>
 (original mail from Alan.Coopersmith@Sun.COM)
 for lsarc-ext@Sun.COM (ORCPT lsarc-ext@Sun.COM); Mon,
 05 Jan 2009 06:56:59 -0800 (PST)
Received: from [10.6.102.118] by fe-sfbay-10.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 with ESMTPSA id <0KD000EYE6UZA830@fe-sfbay-10.sun.com> for lsarc-ext@Sun.COM
 (ORCPT lsarc-ext@Sun.COM); Mon, 05 Jan 2009 06:56:59 -0800 (PST)
Date: Mon, 05 Jan 2009 06:56:58 -0800
From: Alan Coopersmith <Alan.Coopersmith@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <4962179C.7050802@sun.com>
Sender: Alan.Coopersmith@sun.com
To: Brian Utterback <Brian.Utterback@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>,
        brian Utterback <brian@utterback.name>
Message-id: <49621FBA.5080302@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
X-Enigmail-Version: 0.95.1
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com>
User-Agent: Thunderbird 2.0.0.6 (X11/20071119)
Status: RO
Content-Length: 1597

What's the problem with them being in different consolidations?
We have lots of cross-consolidation dependencies, including those of
External/Volatile interfaces.   The only obvious complication
I see is that if OpenGrok and CTags are in different consolidations, a
contract will be needed for the interfaces used, since Volatile interfaces
are treated as effectively Consolidation Private for Contract purposes.

	-Alan Coopersmith-           alan.coopersmith@sun.com
	 Sun Microsystems, Inc. - X Window System Engineering

Brian Utterback wrote:
> Another issue has come up. The OpenGrok case (pending, not yet
> submitted) has a dependency on Exuberant CTags. In fact, this dependency
> is what has delayed the filing. In any case, the desire is to have
> OpenGrok integrate in the SFW consolidation for inclusion in
> OpenSolaris. However, OpenGrok requires Exuberant CTags to run work.
> Since this case proposes to integrate Exuberant CTags into the DevPro
> consolidation, this leaves us with a quandary.
> 
> One possibility is to deliver OpenGrok into DevPro. The OpenGrok team
> wants to deliver to OpenSolaris, I don't know how the DevPro people feel
> about this. Another is to deliver Exuberant CTags into SFW. I suspect
> that the DevPro people will still want it in DevPro because of the
> support of prior Solaris versions and other platforms. And the last
> possibility is to deliver a private copy of Exuberant CTags with
> OpenGrok, suitably disguised to prevent users from finding it.
> 
> Is there a precedent for this situation? Any idea on the best course of
> action?
> 



From Brian.Utterback@Sun.COM Mon Jan  5 07:06:41 2009
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n05F6acZ023378
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 5 Jan 2009 07:06:41 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id n05F6W3H004133
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 5 Jan 2009 15:06:35 GMT
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD0001017AXWV00@nwk-avmta-2.sfbay.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 07:06:33 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD000GG17AWOA80@nwk-avmta-2.sfbay.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 07:06:33 -0800 (PST)
Received: from [129.148.9.185] (sr1-ubur-27.East.Sun.COM [129.148.9.185])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id n05F6SMt026477; Mon, 05 Jan 2009 10:06:29 -0500 (EST)
Date: Mon, 05 Jan 2009 10:06:28 -0500
From: Brian Utterback <Brian.Utterback@Sun.COM>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <49621FBA.5080302@sun.com>
To: Alan Coopersmith <Alan.Coopersmith@Sun.COM>
Cc: lsarc-ext@Sun.COM, Thomas Preisler <Thomas.Preisler@Sun.COM>,
        brian Utterback <brian@utterback.name>
Message-id: <496221F4.1080000@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com> <49621FBA.5080302@sun.com>
User-Agent: Thunderbird 2.0.0.20pre (X11/20090102)
Status: RO
Content-Length: 2652

Well, unless I am mistaken, DevPro does not deliver packages bundled 
with Solaris. Thus a user that wants to use OpenGrok would have to 
install the IPS image from the OpenSolaris repository, and install Sun 
Studio. If Sun Studio for OpenSolaris was made available in a 
repository and that repository included a package separately 
installable that had Exuberant CTags, then I guess it wouldn't be a 
problem. But failing that, it would make the barrier to entry of 
OpenGrok very high.

Alan Coopersmith wrote:
> What's the problem with them being in different consolidations?
> We have lots of cross-consolidation dependencies, including those of
> External/Volatile interfaces.   The only obvious complication
> I see is that if OpenGrok and CTags are in different consolidations, a
> contract will be needed for the interfaces used, since Volatile interfaces
> are treated as effectively Consolidation Private for Contract purposes.
> 
> 	-Alan Coopersmith-           alan.coopersmith@sun.com
> 	 Sun Microsystems, Inc. - X Window System Engineering
> 
> Brian Utterback wrote:
>> Another issue has come up. The OpenGrok case (pending, not yet
>> submitted) has a dependency on Exuberant CTags. In fact, this dependency
>> is what has delayed the filing. In any case, the desire is to have
>> OpenGrok integrate in the SFW consolidation for inclusion in
>> OpenSolaris. However, OpenGrok requires Exuberant CTags to run work.
>> Since this case proposes to integrate Exuberant CTags into the DevPro
>> consolidation, this leaves us with a quandary.
>>
>> One possibility is to deliver OpenGrok into DevPro. The OpenGrok team
>> wants to deliver to OpenSolaris, I don't know how the DevPro people feel
>> about this. Another is to deliver Exuberant CTags into SFW. I suspect
>> that the DevPro people will still want it in DevPro because of the
>> support of prior Solaris versions and other platforms. And the last
>> possibility is to deliver a private copy of Exuberant CTags with
>> OpenGrok, suitably disguised to prevent users from finding it.
>>
>> Is there a precedent for this situation? Any idea on the best course of
>> action?
>>
> 
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From Alan.Coopersmith@Sun.COM Mon Jan  5 07:11:53 2009
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n05FBrbw023566
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 5 Jan 2009 07:11:53 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id n05FBq7j006612
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 5 Jan 2009 07:11:53 -0800 (PST)
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD00000F7JR2400@brm-avmta-1.central.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 08:11:51 -0700 (MST)
Received: from sca-es-mail-1.sun.com ([192.18.43.132])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD000MF67JQGF00@brm-avmta-1.central.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 08:11:51 -0700 (MST)
Received: from fe-sfbay-09.sun.com ([192.18.43.129])
	by sca-es-mail-1.sun.com (8.13.7+Sun/8.12.9) with ESMTP id n05FBoBF016050	for
 <lsarc-ext@sun.com>; Mon, 05 Jan 2009 07:11:50 -0800 (PST)
Received: from conversion-daemon.fe-sfbay-09.sun.com by fe-sfbay-09.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KD000B017EB9M00@fe-sfbay-09.sun.com>
 (original mail from Alan.Coopersmith@Sun.COM)
 for lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 07:11:50 -0800 (PST)
Received: from [10.6.102.118] by fe-sfbay-09.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 with ESMTPSA id <0KD000IXA7JDRXC0@fe-sfbay-09.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 07:11:38 -0800 (PST)
Date: Mon, 05 Jan 2009 07:11:37 -0800
From: Alan Coopersmith <Alan.Coopersmith@Sun.COM>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <49621B1D.9030704@sun.com>
Sender: Alan.Coopersmith@Sun.COM
To: Brian Utterback <Brian.Utterback@Sun.COM>
Cc: lsarc-ext@Sun.COM, Brian Utterback <brian@utterback.name>,
        Thomas Preisler <Thomas.Preisler@Sun.COM>
Message-id: <49622329.4030006@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
X-Enigmail-Version: 0.95.1
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <49621B1D.9030704@sun.com>
User-Agent: Thunderbird 2.0.0.6 (X11/20071119)
Status: RO
Content-Length: 2053

Brian Utterback wrote:
> So, in any case, we need a "best practice" kind of rule around FOSS man
> pages. Should the team attempt to deliver as close as possible to the
> original page in the package, or should it reflect the capabilities of
> what is actually delivered, or something in between? It was already
> pointed out that an "Attributes" section almost certainly must be added.
> In this particular case, it also seems likely that the synopsis needs to
> be changed to reflect the renamed deliverables, no?  These two cases
> must be decided before this case goes forward.  And in general, I
> believe that we require some kind of man page even if the original
> package didn't have one, right?

I can't speak to the common practices followed in other consolidations,
but in the X consolidation, we patch the upstream man pages where applicable
to document Solarism's such as our SMF manifests and Secure-by-Default settings,
and to note our different paths.   (Since we have one major upstream source,
X.Org, that produces most of the hundreds of upstream packages we build and
integrate, it was not hard to write a script to do some modifications
automatically, like adding /usr/X11/bin to command synopses, and -L/-l flags
to library synopses, and the required attributes section, while things like
describing the SMF manifests are done in patches.)

Some examples of our man page patches, to see what we change:

http://src.opensolaris.org/source/xref/fox/fox-gate/XW_NV/open-src/lib/libpciaccess/scanpci.man.patch
 - Add RBAC profile notes to scanpci(1) man page
http://src.opensolaris.org/source/xref/fox/fox-gate/XW_NV/open-src/xserver/xorg/sun-manpage.patch
 - Add SMF, SBD, dtlogin, Xsun, etc. notes to Xserver(1) man page.

and the script that modifies man pages, based on flags in the Makefile for
each upstream package:

http://src.opensolaris.org/source/xref/fox/fox-gate/XW_NV/open-src/common/suntouch-manpages.pl

-- 
	-Alan Coopersmith-           alan.coopersmith@sun.com
	 Sun Microsystems, Inc. - X Window System Engineering


From Alan.Coopersmith@sun.com Mon Jan  5 07:17:53 2009
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n05FHrjC023696
	for <LSARC-ext@sac.sfbay.sun.com>; Mon, 5 Jan 2009 07:17:53 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id n05FHp90009858
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Mon, 5 Jan 2009 07:17:53 -0800 (PST)
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD00000J7TRLI00@brm-avmta-1.central.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 08:17:51 -0700 (MST)
Received: from sca-es-mail-1.sun.com ([192.18.43.132])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD000MLR7TQG900@brm-avmta-1.central.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 08:17:50 -0700 (MST)
Received: from fe-sfbay-10.sun.com ([192.18.43.129])
	by sca-es-mail-1.sun.com (8.13.7+Sun/8.12.9) with ESMTP id n05FHocb016532	for
 <lsarc-ext@sun.com>; Mon, 05 Jan 2009 07:17:50 -0800 (PST)
Received: from conversion-daemon.fe-sfbay-10.sun.com by fe-sfbay-10.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 id <0KD000M017P5BV00@fe-sfbay-10.sun.com>
 (original mail from Alan.Coopersmith@Sun.COM)
 for lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Mon,
 05 Jan 2009 07:17:50 -0800 (PST)
Received: from [10.6.102.118] by fe-sfbay-10.sun.com
 (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007))
 with ESMTPSA id <0KD000EIZ7TPA8B0@fe-sfbay-10.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Mon, 05 Jan 2009 07:17:50 -0800 (PST)
Date: Mon, 05 Jan 2009 07:17:49 -0800
From: Alan Coopersmith <Alan.Coopersmith@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <496221F4.1080000@sun.com>
Sender: Alan.Coopersmith@sun.com
To: Brian Utterback <Brian.Utterback@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>,
        brian Utterback <brian@utterback.name>
Message-id: <4962249D.4090703@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
X-Enigmail-Version: 0.95.1
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com> <49621FBA.5080302@sun.com>
 <496221F4.1080000@sun.com>
User-Agent: Thunderbird 2.0.0.6 (X11/20071119)
Status: RO
Content-Length: 507

Brian Utterback wrote:
> Well, unless I am mistaken, DevPro does not deliver packages bundled
> with Solaris. 

Yes they do - DevPro delivers the /usr/ccs/bin/* programs such as cpp & make,
and the libm.so.* math libraries to Solaris.   You would have to make sure that
CTags is one they plan to integrate likewise in the Solaris DevPro consolidation
and not just bundle with the compilers.

-- 
	-Alan Coopersmith-           alan.coopersmith@sun.com
	 Sun Microsystems, Inc. - X Window System Engineering


From brian.utterback@sun.com Tue Jan  6 06:11:24 2009
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n06EBN8E002743
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 6 Jan 2009 06:11:23 -0800 (PST)
Received: from nwk-avmta-1.SFBay.Sun.COM (nwk-avmta-1.SFBay.Sun.COM [129.146.11.74])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id n06EBL6v013449
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 6 Jan 2009 14:11:22 GMT
Received: from pmxchannel-daemon.nwk-avmta-1.sfbay.Sun.COM by
 nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD100E03ZEXUP00@nwk-avmta-1.sfbay.Sun.COM> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 06 Jan 2009 06:11:21 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD1009D2ZEW5F50@nwk-avmta-1.sfbay.Sun.COM> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 06 Jan 2009 06:11:20 -0800 (PST)
Received: from [129.148.9.169] (sr1-ubur-15.East.Sun.COM [129.148.9.169])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id n06EBHMl047438; Tue, 06 Jan 2009 09:11:18 -0500 (EST)
Date: Tue, 06 Jan 2009 09:11:17 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <4962249D.4090703@sun.com>
To: Alan Coopersmith <Alan.Coopersmith@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>,
        brian Utterback <brian@utterback.name>
Message-id: <49636685.9000305@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com> <49621FBA.5080302@sun.com>
 <496221F4.1080000@sun.com> <4962249D.4090703@sun.com>
User-Agent: Thunderbird 2.0.0.20pre (X11/20090102)
Status: RO
Content-Length: 1700

I have heard back from the project team. They plan to deliver 
Exuberant CTags as a stand alone package and have no problem with 
delivering it in the same manner as the /usr/ccs/bin stuff on the 
Solaris platform, i.e. bundled with OpenSolaris rather than part of 
Sun Studio, but bundled with Sun Studio on other platforms. I expect 
that the OpenGrok case will include a contract.

Also, their reluctance to modify the man page to match the renamed 
command was based on a mis-understanding of the terms of the GPL. They 
will deliver a corrected man page.

Okay, I think we are basically resolved now.

Of course, I still have the more general open question on how much 
should a man page be modified, but that is not this case. Still 
looking for opinions though.

Alan Coopersmith wrote:
> Brian Utterback wrote:
>> Well, unless I am mistaken, DevPro does not deliver packages bundled
>> with Solaris. 
> 
> Yes they do - DevPro delivers the /usr/ccs/bin/* programs such as cpp & make,
> and the libm.so.* math libraries to Solaris.   You would have to make sure that
> CTags is one they plan to integrate likewise in the Solaris DevPro consolidation
> and not just bundle with the compilers.
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From brian.utterback@sun.com Tue Jan  6 10:08:18 2009
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n06I8HHm027629
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 6 Jan 2009 10:08:17 -0800 (PST)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id n06I8ADE024470
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 6 Jan 2009 18:08:16 GMT
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD200J03ADR1D00@nwk-avmta-2.sfbay.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 06 Jan 2009 10:08:15 -0800 (PST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD200I7CADQCP10@nwk-avmta-2.sfbay.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 06 Jan 2009 10:08:14 -0800 (PST)
Received: from [129.148.9.169] (sr1-ubur-15.East.Sun.COM [129.148.9.169])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id n06I8A4S038501; Tue, 06 Jan 2009 13:08:11 -0500 (EST)
Date: Tue, 06 Jan 2009 13:08:10 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <49636685.9000305@sun.com>
To: Alan Coopersmith <Alan.Coopersmith@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>,
        brian Utterback <brian@utterback.name>
Message-id: <49639E0A.50400@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com> <49621FBA.5080302@sun.com>
 <496221F4.1080000@sun.com> <4962249D.4090703@sun.com>
 <49636685.9000305@sun.com>
User-Agent: Thunderbird 2.0.0.20pre (X11/20090102)
Status: RO
Content-Length: 1831

This case was approved at today's LSARC meeting.

Brian Utterback wrote:
> I have heard back from the project team. They plan to deliver Exuberant 
> CTags as a stand alone package and have no problem with delivering it in 
> the same manner as the /usr/ccs/bin stuff on the Solaris platform, i.e. 
> bundled with OpenSolaris rather than part of Sun Studio, but bundled 
> with Sun Studio on other platforms. I expect that the OpenGrok case will 
> include a contract.
> 
> Also, their reluctance to modify the man page to match the renamed 
> command was based on a mis-understanding of the terms of the GPL. They 
> will deliver a corrected man page.
> 
> Okay, I think we are basically resolved now.
> 
> Of course, I still have the more general open question on how much 
> should a man page be modified, but that is not this case. Still looking 
> for opinions though.
> 
> Alan Coopersmith wrote:
>> Brian Utterback wrote:
>>> Well, unless I am mistaken, DevPro does not deliver packages bundled
>>> with Solaris. 
>>
>> Yes they do - DevPro delivers the /usr/ccs/bin/* programs such as cpp 
>> & make,
>> and the libm.so.* math libraries to Solaris.   You would have to make 
>> sure that
>> CTags is one they plan to integrate likewise in the Solaris DevPro 
>> consolidation
>> and not just bundle with the compilers.
>>
> 

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

From john.plocher@gmail.com Tue Jan  6 10:20:22 2009
Received: from sunmail5.uk.sun.com (sunmail5.UK.Sun.COM [129.156.85.165])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n06IKLIH028222
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 6 Jan 2009 10:20:22 -0800 (PST)
Received: from nwk-avmta-1.SFBay.Sun.COM (nwk-avmta-1.SFBay.Sun.COM [129.146.11.74])
	by sunmail5.uk.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2) with ESMTP id n06IKH7n002410;
	Tue, 6 Jan 2009 18:20:19 GMT
Received: from pmxchannel-daemon.nwk-avmta-1.sfbay.Sun.COM by
 nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD200005AXTNP00@nwk-avmta-1.sfbay.Sun.COM>; Tue,
 06 Jan 2009 10:20:17 -0800 (PST)
Received: from brmea-mail-2.sun.com ([192.18.98.43])
 by nwk-avmta-1.sfbay.Sun.COM
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD200KAEAXT3C20@nwk-avmta-1.sfbay.Sun.COM>; Tue,
 06 Jan 2009 10:20:17 -0800 (PST)
Received: from relay15i.sun.com
 (ip125.net129179-4.block1.us.syntegra.com [129.179.4.125])
	by brmea-mail-2.sun.com (8.13.6+Sun/8.12.9) with ESMTP id n06IErIU023960; Tue,
 06 Jan 2009 18:20:17 +0000 (GMT)
Received: from mmp12es.mmp.us.syntegra.com ([160.41.208.12] [160.41.208.12])
 by relay15i.sun.com with ESMTP id BT-MMP-1719961; Tue,
 06 Jan 2009 18:20:02 +0000 (Z)
Received: from relay11i.sun.com (relay11i.sun.com [129.179.4.121])
 by mmp12es.mmp.us.syntegra.com with ESMTP id BT-MMP-50977515; Tue,
 06 Jan 2009 18:20:01 +0000 (Z)
Received: from rv-out-0708.google.com ([209.85.198.251] [209.85.198.251])
 by relay1ib.sun.com with ESMTP id BT-MMP-15109913; Tue,
 06 Jan 2009 18:20:01 +0000 (Z)
Received: by rv-out-0708.google.com with SMTP id k29so8335974rvb.8 for
 <multiple recipients>; Tue, 06 Jan 2009 10:19:52 -0800 (PST)
Received: by 10.140.250.14 with SMTP id x14mr11065945rvh.79.1231265992372; Tue,
 06 Jan 2009 10:19:52 -0800 (PST)
Received: by 10.141.20.13 with HTTP; Tue, 06 Jan 2009 10:19:52 -0800 (PST)
Date: Tue, 06 Jan 2009 10:19:52 -0800
From: John Plocher <john.plocher@gmail.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <4962179C.7050802@sun.com>
To: Brian Utterback <brian.utterback@sun.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <acff61d30901061019n137be685pb1c48bc92fa4799b@mail.gmail.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1
Content-transfer-encoding: 7BIT
Content-disposition: inline
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;        d=gmail.com;
 s=gamma; h=domainkey-signature:received:received:message-id:date:from:to
 :subject:cc:in-reply-to:mime-version:content-type
 :content-transfer-encoding:content-disposition:references;
 bh=xbS967HSBMWz/K2aYbkA8mjXc/wboawRJuchF+NuFXE=;
 b=u+ky5roIr6xrCSxcMAwQsKYjy7M0iPxUojVzLPiiA1LY5DE8s8rw4i66v2PP2Krkwa
 Rkdu+awzBmbXw3T87Ronu8ORUYYZAEY0CuyJA9tvugJxHrBOiwewL00KqcjXfXBpamWX
 L/rjvJGshUMd/VP/LD1l7t2nIDSAqBtG0YCAk=
DomainKey-Signature: a=rsa-sha1; c=nofws;        d=gmail.com; s=gamma;
 h=message-id:date:from:to:subject:cc:in-reply-to:mime-version
 :content-type:content-transfer-encoding:content-disposition :references;
 b=bIVmIhrtr5AjG39/UnpPpoUaTJ5g8YqTKO8UQ8RZzT1bvHAlx+xTAdUfGZWSS7dA4Y
 OIo4RDjEdJ3mjOapSfbxBtMJnK414xpxENXVKYbSW7axpJQUd3W6vKTjxtx+Sz8SVb4M
 R6BaTxrTqb8LZv4A3Qkeyp4NX3jpx+mZkIR5A=
X-PMX-Version: 5.4.1.325704
X-Brightmail-Tracker: AAAAAA==
X-Antispam: No, score=0.0/5.0, scanned in 0.073sec at (localhost [127.0.0.1])
	by smf-spamd v1.3.1 - http://smfs.sf.net/
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com>
Status: RO
Content-Length: 2308

It can be delivered into DevPro *AND* the resulting packages can be
co-bundled with the Solaris - the result being that there is only one
definitive source for the packages (and their patches and updates...)

OR

Deliver the same source into SFW and Devpro.  The Devpro install
should ONLY install and/or use its own copy on OS versions previous
to OpenSolaris; on OS, it should use the SFW version...

(Realize that the DevPro version will probably need to be compiled
on Solaris8 instead of Nevada so the bits can run on older OS's...)

  -John


On Mon, Jan 5, 2009 at 6:22 AM, Brian Utterback <brian.utterback@sun.com> wrote:
> Another issue has come up. The OpenGrok case (pending, not yet
> submitted) has a dependency on Exuberant CTags. In fact, this
> dependency is what has delayed the filing. In any case, the desire is
> to have OpenGrok integrate in the SFW consolidation for inclusion in
> OpenSolaris. However, OpenGrok requires Exuberant CTags to run work.
> Since this case proposes to integrate Exuberant CTags into the DevPro
> consolidation, this leaves us with a quandary.
>
> One possibility is to deliver OpenGrok into DevPro. The OpenGrok team
> wants to deliver to OpenSolaris, I don't know how the DevPro people
> feel about this. Another is to deliver Exuberant CTags into SFW. I
> suspect that the DevPro people will still want it in DevPro because of
> the support of prior Solaris versions and other platforms. And the
> last possibility is to deliver a private copy of Exuberant CTags with
> OpenGrok, suitably disguised to prevent users from finding it.
>
> Is there a precedent for this situation? Any idea on the best course
> of action?
>
> --
> blu
>
> "Murderous organizations have increased in size and scope; they are
> more daring, they are served by the most terrible weapons offered by
> modern science, and the world is nowadays threatened by new forces
> which, if recklessly unchained, may some day wreck universal
> destruction."  - Arthur Griffith, 1898
> ----------------------------------------------------------------------
> Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
> Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom
> _______________________________________________
> opensolaris-arc mailing list
> opensolaris-arc@opensolaris.org
>

From brian.utterback@sun.com Tue Jan  6 14:26:17 2009
Received: from sunmail3mpk.sfbay.sun.com (sunmail3mpk.SFBay.Sun.COM [129.146.11.52])
	by sac.sfbay.sun.com (8.13.8+Sun/8.13.8) with ESMTP id n06MQHVR023112
	for <LSARC-ext@sac.sfbay.sun.com>; Tue, 6 Jan 2009 14:26:17 -0800 (PST)
Received: from brm-avmta-1.central.sun.com (brm-avmta-1.Central.Sun.COM [129.147.4.11])
	by sunmail3mpk.sfbay.sun.com (8.13.7+Sun/8.13.7/ENSMAIL,v2.2) with ESMTP id n06MQ2Q3006221
	for <@sunmail2sca.sfbay.sun.com:lsarc-ext@sun.com>; Tue, 6 Jan 2009 14:26:16 -0800 (PST)
Received: from pmxchannel-daemon.brm-avmta-1.central.sun.com by
 brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0KD200605MBSDD00@brm-avmta-1.central.sun.com> for lsarc-ext@sun.com
 (ORCPT lsarc-ext@sun.com); Tue, 06 Jan 2009 15:26:16 -0700 (MST)
Received: from dm-east-01.east.sun.com ([129.148.9.192])
 by brm-avmta-1.central.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0KD200AWEMBRZJD0@brm-avmta-1.central.sun.com> for
 lsarc-ext@sun.com (ORCPT lsarc-ext@sun.com); Tue,
 06 Jan 2009 15:26:16 -0700 (MST)
Received: from [129.148.9.169] (sr1-ubur-15.East.Sun.COM [129.148.9.169])
	by dm-east-01.east.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.2)
 with ESMTP id n06MQCPu045207; Tue, 06 Jan 2009 17:26:13 -0500 (EST)
Date: Tue, 06 Jan 2009 17:26:12 -0500
From: Brian Utterback <brian.utterback@sun.com>
Subject: Re: LSARC 2008/741 Exuberant CTags Packaging for OpenSolaris
In-reply-to: <acff61d30901061019n137be685pb1c48bc92fa4799b@mail.gmail.com>
To: John Plocher <john.plocher@gmail.com>
Cc: lsarc-ext@sun.com, Thomas Preisler <Thomas.Preisler@sun.com>
Message-id: <4963DA84.5060603@sun.com>
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
X-PMX-Version: 5.4.1.325704
References: <494FB208.4020803@sun.com> <1229961108.6312.13.camel@sr1-umpk-34>
 <4962179C.7050802@sun.com>
 <acff61d30901061019n137be685pb1c48bc92fa4799b@mail.gmail.com>
User-Agent: Thunderbird 2.0.0.20pre (X11/20090102)
Status: RO
Content-Length: 2953

I believe that the project team intends to do the former.

John Plocher wrote:
> It can be delivered into DevPro *AND* the resulting packages can be
> co-bundled with the Solaris - the result being that there is only one
> definitive source for the packages (and their patches and updates...)
> 
> OR
> 
> Deliver the same source into SFW and Devpro.  The Devpro install
> should ONLY install and/or use its own copy on OS versions previous
> to OpenSolaris; on OS, it should use the SFW version...
> 
> (Realize that the DevPro version will probably need to be compiled
> on Solaris8 instead of Nevada so the bits can run on older OS's...)
> 
>   -John
> 
> 
> On Mon, Jan 5, 2009 at 6:22 AM, Brian Utterback <brian.utterback@sun.com> wrote:
>> Another issue has come up. The OpenGrok case (pending, not yet
>> submitted) has a dependency on Exuberant CTags. In fact, this
>> dependency is what has delayed the filing. In any case, the desire is
>> to have OpenGrok integrate in the SFW consolidation for inclusion in
>> OpenSolaris. However, OpenGrok requires Exuberant CTags to run work.
>> Since this case proposes to integrate Exuberant CTags into the DevPro
>> consolidation, this leaves us with a quandary.
>>
>> One possibility is to deliver OpenGrok into DevPro. The OpenGrok team
>> wants to deliver to OpenSolaris, I don't know how the DevPro people
>> feel about this. Another is to deliver Exuberant CTags into SFW. I
>> suspect that the DevPro people will still want it in DevPro because of
>> the support of prior Solaris versions and other platforms. And the
>> last possibility is to deliver a private copy of Exuberant CTags with
>> OpenGrok, suitably disguised to prevent users from finding it.
>>
>> Is there a precedent for this situation? Any idea on the best course
>> of action?
>>
>> --
>> blu
>>
>> "Murderous organizations have increased in size and scope; they are
>> more daring, they are served by the most terrible weapons offered by
>> modern science, and the world is nowadays threatened by new forces
>> which, if recklessly unchained, may some day wreck universal
>> destruction."  - Arthur Griffith, 1898
>> ----------------------------------------------------------------------
>> Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
>> Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom
>> _______________________________________________
>> opensolaris-arc mailing list
>> opensolaris-arc@opensolaris.org
>>

-- 
blu

"Murderous organizations have increased in size and scope; they are
more daring, they are served by the most terrible weapons offered by
modern science, and the world is nowadays threatened by new forces
which, if recklessly unchained, may some day wreck universal
destruction."  - Arthur Griffith, 1898
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

