Building an RPM for OProfile
==================================

When building an RPM for OProfile, please follow the RPM packaging guidelines
described in:
   http://www.rpm.org/RPM-HOWTO/build.html


New file to install as of release 0.9.3
---------------------------------------

As of release 0.9.3, opreport is capable of generating XML output.
Tool developers who wish to use the xml output will need to have
access to the doc/opreport.xsd file, which describes the schema.
RPM packagers may install this file in the same package as the other
standard OProfile components or in a separate devel package if desired.


New files to install as of release 0.9.4
---------------------------------------

As of release 0.9.4, OProfile includes a JIT support library called libopagent.
This library is needed at runtime when profiling JITed code from supported
virtual machines.  The install location for this library is:
	<oprof-install-dir>/<libdir>/oprofile

And there's a new binary file to install that's used for JIT profiling called
opjitconv.  As with the other oprofile executables, this file is installed in
the <oprof-install-dir>/bin directory.

OProfile also includes support for profiling Java applications.  This support
must be configured by way of the '--with-java=<path_to_jdk>' configure
option.  If your JDK is older than version 1.5, only a JVMPI agent library
is built.  If your JDK is version 1.5, both JVMPI and JVMTI agent
libraries are built.  If your JDK is 1.6 or newer, only the JVMTI agent
library is built.  As with libopagent described above, the install location
for these is '<libdir>/oprofile'.

RPM packagers can install the <libdir>/oprofile libraries in the same package
as the other standard OProfile components or in a separate package if desired.
It is recommended to run ldconfig in %post and %postun to add/remove the
<libdir>/oprofile path from the standard library search paths.

On bi-arch platforms that support more than one "bitness" of userspace software
(e.g., 32-bit and 64-bit programs), it is recommended that the libopagent and
Java agent libraries be packaged in a separate RPM.  You could then build
OProfile twice -- once for each bitness type.  You would then distribute both
versions of the RPMs containing the libraries, but only one RPM containing the
"base" OProfile (i.e., executables, scripts, etc.).

The new JIT support also provides the ability for third parties to develop
JIT agents for other virtual machines.  The development files provided for this
purpose are:
	doc/op-jit-devel.html
	include/opagent.h

Again, the RPM packager may package these files in the default package
or in a separate devel package.


Requirement for building a binary RPM package
----------------------------------------

OProfile requires the special user account "oprofile" to exist for purposes
of processing samples from JIT'ed code (e.g., Java applications).

When defining the spec file for the OProfile RPM, you should add the automatic
creation of the special "oprofile" user account.  Please refer to the URL
below for an example of how this can be done:
   http://fedoraproject.org/wiki/Packaging/UsersAndGroups

For example, the following commands would add the necessary user account:

   %pre
   getent group oprofile >/dev/null || groupadd -r oprofile
   getent passwd oprofile >/dev/null || \
   useradd -r -g oprofile -d /home/oprofile -s /sbin/nologin \
       -c "Special user account to be used by OProfile" oprofile
   exit 0