Cross-configuring Lsof
Introduction
============
Lsof cross-configuration is useful when the target dialect or target
dialect version for which lsof is to be configured and built differs
from the one on which the Configure operation is done.
Marty Leisner <leisner@sdsp.mc.xerox.com> suggested the method
described here for lsof cross-configuration, and he supplied
modifications to the Configure script for cross-configuring Linux
lsof.
Marty says:
"I used this to successfully compile (lsof) on the same machine
for (Linux) 2.0.30 and 2.1.42. (I normally don't bring up a
2.1.42 machine all the time). Also it (the 2.0.30 system)
doesn't have much storage and compiles on it are slow.
Set LSOF_VERS if it's not the (version of the) current system.
(Actually, you should get the version out of include/linux/version.h.)
Define LINUX_KERNEL to (the path) where the kernel sources
are (located). (No longer necessary as of lsof revision 4.53.)
This should work on most systems; they put a kernel in
/usr/src/linux, which is the default.
Now I can just do:
LINUX_KERNEL=/some/other/kernel LSOF_VERS=2142 ./Configure linux
Comments? Its very convenient when running multiple kernels.
(It would be (have been) very handy when the structures changed
between 2.0.2* and 2.0.30 , or whatever.)
I run multiple OSes at a time (not to mention multiple
architectures. It's very pleasant to cross-build either
operating systems or versions."
So, the situation is that you have lsof sources on a UNIX dialect
version, and you want to configure them to build lsof for some
other version of the same dialect, or perhaps for some other UNIX
dialect altogether.
The Cross-Configure Method
==========================
The lsof cross-configure method uses environment variables to tell
the lsof Configure script about the target dialect. The environment
variables may specify alternate locations for Configure to examine
when it determines characteristics of the target, or they may
specify the values Configure would discover when it examined the
target's characteristics.
Consult each environment variable description for the UNIX dialect
in which you're interested to see how it affects the operation of
the Configure script.
The number and values of the variables differ by dialect. Each
variable begins with an upper case version of the dialect's Configure
abbreviation -- e.g., AIX for aix or aixgcc, LINUX for linux,
UW for uw (UnixWare), etc.
Of course, the UNIX dialect's version is probably different from
that of the system on which you're doing the cross-configuration,
so you will need to specify the new version, too. For example, to
configure for FreeBSD 3.0 on a 2.1.7 system, where the standard
3.0 header files are in /3.0/usr/include and the 3.0 system sources
are in /3.0/sys, do this:
LSOF_VERS=300 LSOF_INCLUDE=/3.0/usr/include \
FREEBSD_SYS=/3.0/sys Configure -n freebsd
General Environment Variables
=============================
There are some environment variables whose names don't begin with
an upper case rendering of a dialect abbreviation. Generally they
apply to all dialects.
AFS_VICE is for AFS configuration. It need be set only if
lsof supports AFS on your dialect and you want to
specify an alternate path to the VICE files.
default: /usr/vice
LSOF_AR is the path to and arguments for the library archive
application that is used to build the lsof library,
liblsof.a. When this value is placed in the library
Makefile as the contents of the AR make string, it is
followed by the path to the library and the relative
paths of the library module
default: ar cr
LSOF_ARCH is the architecture type string for the system.
Usually this is the output of `uname -m`. Consult
the Configure script for details. The LSOF_ARCH
value may have to be quoted if it contains spaces.
default: auto-detection (e.g., from `uname -m`)
LSOF_BLDCMT may be used to introduce a builder's comment into
lsof's -v output. It defaults to the null string,
causing no builder's comment to appear in -v output.
default: none
LSOF_CC is the path to the C compiler. You may need to
specify it if your C compiler is in a non-standard
place, not found by your path. If you specify a
compiler different from the expected default, you
may have to change the compile time flags by
specifying new CFGF, CFGL, and DEBUG strings on
the make command line.
default: normally cc, but some dialects have other
defaults and some have auto-detection.
Check the dialect stanza in the lsof Configure
script to see how LSOF_CC is set by default.
LSOF_CCV is the C compiler version. You should specify it
if you have specified a compiler path in LSOF_CC.
default: the lsof Configure script knows how to find
the version number of gcc and some other
dialect-specific compilers.
Check the dialect stanza in the lsof Configure
script to see how lsof_CCV is set by default.
LSOF_HOST may be used to specify a value in lsof's -v output
other than the name of the host where lsof was
built. A value of "none" inhibits host name display
in -v output.
default: the dialect's host name application -- e.g.,
hostname or uname -n
LSOF_INCLUDE is the path to the standard header files. You may
need to specify it if you want Configure to test
header files in a tree different from /usr/include,
and you want to compile lsof from the header files
in that different tree.
LSOF_LOGNAME may be used to specify a value in lsof's -v output
other than the one in the LOGNAME environment
variable for the login name of the person who built
lsof. A value of "none" inhibits login name display
in -v output.
default: the LOGNAME environment variable
LSOF_MKC may be used to specify an alternate method of
connecting dialect sources to the top-level lsof
directory. See 00PORTING for more information.
default: ln -s
LSOF_SYSINFO may be used to specify a value in lsof's -v output
other than the standard system identification --
e.g., output from uname. A value of "none" inhibits
system information display in -v output.
default: the dialect's standard system identification
application output -- e.g., uname, sysinfo
LSOF_USER may be used to specify a value in lsof's -v output
other than the one in the USER environment variable
for the login name of the person who built lsof.
A value of "none" inhibits login name display in
-v output.
default: the USER environment variable
LSOF_VERS is the target dialect version number. It must be
stated in the dialect's form -- e.g., FreeBSD 2.0.5
is given as 205, Solaris 7 as 70000, etc. The
table, "Abbreviations, Variable Prefixes, and
Version Numbers," in this file gives the form for
LSOF_VERS for each dialect lsof supports.
default: auto-detection (e.g., from `uname -r`)
LSOF_VSTR is the version string from which LSOF_VERS is
derived. Usually this is the output of `uname -r`
or `uname -v`. Consult the Configure script for
details. The LSOF_VSTR value may have to be quoted
if it contains spaces.
default: auto-detection (e.g., output from
`hostname`, `uname -r`, or `uname -v)
Make Strings
============
The CFGF, CFGL, and DEBUG strings can be specified on the make
command line to change default values placed in the top-level and
library Makefiles by Configure. For example, Configure usually
defines the compiler optimization level to be -O, but you can change
that with "DEBUG=-g" on the make command -- e.g.,
$ make DEBUG=-g lsof
Similarly, the CFGF string contains miscellaneous compile-time
options, and CFGL contains loader options. Consult the Makefiles
generated by Configure for the values it defines by default for
CFGF and CFGL.
As an example, Configure might define CFGL to be "-L./lib -llsof -w"
for NextStep 3.1; to remove "-w", use this make invocation:
$ make CFGL="-L./lib -llsof"
Abbreviations, Variable Prefixes, and Version Numbers
=====================================================
The following table describes the relationship between Configure
abbreviations, environment variable prefixes, and lsof UNIX dialect
version numbers. The lsof UNIX dialect version number must be
declared exactly in the listed form when supplied via the LSOF_VERS
environment variable.
Dialect Lsof Version
Configure Variable Version Number for
Abbreviation* Prefix Number LSOF_VERS
aix AIX 3.2.5 3250
aixgcc 4.1.0 4100
4.1.4 4140
4.1.4 4150
4.2.0 4200
4.2.1 4210
4.3 4300
4.3.1 4310
4.3.2 4320
4.3.3 4330
5.0.x 5000
5.1.x 5100
5.2.x 5200
5.3.x 5300
darwin DARWIN 1.2* 120
1.3* 130
1.4* 140
5.[012] 500
5.[3-9] 530
6.x 600
7.x 700
8.x 800
du DU 2.0 20000
3.0 30000
3.2 30200
4.0 40000
5.0 50000
5.1 50100
freebsd FREEBSD 1.x 1000
2.x 2000
2.0.5 2005
2.1.x 2010
2.2.x 2020
3.x 30x0
4.x 40x0
4.1x 41x0
5.x 50x0
6.x 60x0
hpux HPUX 9.1 901
hpuxgcc HPUX 9.5 905
10.0 1000
10.10 1010
10.20 1020
11.00 1100
11.11 1111
linux LINUX 2.1.x 21xxx
2.2.x 22xxx
2.3.x 23xxx
2.4.x 24xxx
2.6.x 26xxx
netbsd NETBSD 1.2 1002000
1.3 1003000
1.4 1004000
1.5 1005000
1.6 1006000
2.0 2000000
2.99.9 2099009
2.99.10 2099010
ns NEXTSTEP 3.1 31
openbsd OPENBSD 1.2 1020
2.0 2000
2.1 2010
2.2 2020
2.3 2030
2.4 2040
2.5 2050
2.6 2060
2.7 2070
2.8 2080
2.9 2090
3.0 3000
3.1 3010
3.2 3020
3.3 3030
3.4 3040
3.5 3050
3.6 3060
os OPENSTEP 4.x 4x
osr OSR 3.2v2.0 20
3.2v2.1 21
3.2v4.0 40
3.2v4.1 41
3.2v4.2 42
3.2v5.0.0 500
3.2v5.0.2 502
3.2v5.0.4 504
3.2v5.0.6 506
ou OU 8.0.0 80000
solaris SOLARIS 2.3 20300
solariscc SOLARIS 2.4 20400
2.5 20500
2.5.1 20501
2.6 20600
7 70000
8 80000
9 90000
10 100000
uw UW 7.0 70000
7.1.0 70100
7.1.1 70101
7.1.3 70103
* -- The optional Configure abbreviations -- e.g., the ``decosf''
and ``digital_unix'' alternatives to ``du'' -- aren't listed
here.
Dialect-Specific Environment Variables
======================================
Here are the dialect-specific environment variables, listed
alphabetically. The first part of any environment variable will
be the dialect abbreviation, as specified to Configure, converted
to upper case characters. See the `Configure -help` output for a
listing of the abbreviations.
AIX_ARCH specifies the AIX architecture when the AIX version is
5.0 or higher. A value of "" signifies POWER; "ia64",
64 bit x86 (Itanium).
default: none (tested via `uname -a`)
AIX_HAS_AFS specifies the state of AIX ADS support when the AIX
version is 4.3.3 or lower. (Lsof doesn't support AFS
above AIX 4.3.3.) A value of "" allows the Configure
script to determine the AFS support state; "no",
disables AFS support; and "yes", forces the enabling of
AFS support.
default: none (tested via presence of AFS files and the
lsof AFSConfig shell script)
AIX_KERNBITS specifies the kernel bit size, 32 or 64, of the Power
architecture AIX 5.x kernel for which lsof was built.
default: determined by the Configure script with a test
program that uses <sys/systemcfg.h> macros.
AIX_USHACK If this environment variable has a value of "Y" or "y",
and if the aixgcc Configure abbreviation is selected,
the AIX 4.1 and greater gcc user structure hack is
activated; any other non-NULL value, it's not set; a
NULL value, it's tested by compilation.
default: none (tested by compilation)
DARWIN_XNUDIR If this environment variable has a value, the value is
used as the path to the Darwin XNU kernel source code.
default: none (entry requested)
DARWIN_XNU_HEADERS If this environment variable has a value, the value is
used as the path to the Darwin XNU kernel header files.
This path would match the DSTROOT environment variable
used when a "make installhdrs" was executed from the
Darwin XNU kernel source directory.
default: none
DU_ADVFSV specifies the DEC OSF/1, Digital UNIX, or Tru64 UNIX
ADVFS file system version -- e.g., 200 for 2.0, 400
for 4.0, etc.
default: determined via /usr/sbin/setld
DU_CDIR specifies the name of the DEC OSF/1, Digital UNIX, or
Tru64 UNIX system configuration directory.
default: first host name component, converted to upper
case
DU_SHLIB specifies the DEC OSF/1, Digital UNIX, or Tru64 UNIX
shared library directory path.
default: /usr/shlib
DU_SYSDIR DEC OSF/1, Digital UNIX, or Tru64 UNIX system
directory path.
2.x and 3.x default: /sys
4.x default: /usr/sys
FREEBSD_KERNEL specifies the path to the FreeBSD kernel for FreeBSD
version less than 2.0.
default: /386bsd
FREEBSD_SYS specifies the path to the FreeBSD system source
directory.
default: /sys
HPUX_BASE specifies the HP-UX lsof source code base, kmem or
pstat, to be used.
default: determined by testing for the
/usr/include/sys/pstat subdirectory
HPUX_BOOTFILE specifies the file in which lsof's Configure script can
find kernel information. This specification may be
useful for defining the path to a copy of /stand/vmunix
that has been processed by pxdb or q4pxdb.
default: /stand/vmunix
HPUX_CCDIR1 specifies the first directory where Configure might
find an HP-UX C compiler. This is ignored when
LSOF_CC has been specified.
default: /bin
HPUX_CCDIR2 specifies the second directory where Configure might
find an HP-UX C compiler. This is ignored when
LSOF_CC has been specified.
default: /usr/ccs/bin
HPUX_HASONLINEJFS If this environment variable has a value of "Y" or "y",
the HASONLINEJFS definition will be enabled in the
Makefile CFLAGS. That will cause dnode1.c to use an
alternate vx_inode.h header file in the hpux11 sub-
directory of dialects/hpux/kmem.
default: determined using nm and grep
HPUX_IPC_S_PATCH If this environment variable has a value of "1", the
ipc_s structure of the HP-UX 11 kernel is assumed to
have an ipc_ipis member, but it is assumed the ipis_s
structure lacks the ipis_msgsqueued member; "2", ipc_s
has ipc_ipis, but ipis_s has ipis_msgsqueued; "n" or
"N", ipc_s lacks ipc_ipis; any other non-NULL value is
considered an error; a NULL value, HPUX_IPC_S_PATCH is
determined by testing.
default: determined with q4 and grep
HPUX_KERNBITS specifies the number of bits (32 or 64) in the HP-UX
11 "basic kernel word.
default: `getconf _SC_KERNEL_BITS`
HPUX_LIBC1 specifies the first directory that might contain the
HP-UX C library, libc.sl.
default: /usr/lib
HPUX_LIBC2 specifies the second directory that might contain the
HP-UX C library, libc.sl.
default: /lib
HPUX_RNODE3 If this environment variable has a value of "1", the
Configure script will define HASRNODE3 in the Makefile
CFGF flags. If it is defined, but not "1", Configure
will not define HASRNODE2.
default: determined using `nm -x /stand/vmunix` and
`grep r_fh3 /usr/include/nfs/rnode.h`
HPUX_X25DIR specifies path to the HP-UX X25 directory that contains
configuration header files.
default: /etc/conf
LINUX_CLIB specifies the definition of the Linux C library:
default: "" (standard C library)
others: -DGLIBCV=2 (glibc2)
LINUX_HASSELINUX If this environment variable has a value of "Y" or "y",
Configure unconditionally activates SELinux support.
If it has any other value, Configure unconditionally
inhibits SELinux suport.
Default: assumed to be "Y" if <selinux/selinux.h>
exists
LINUX_LSEEK If this environment variable has a value of "Y" or "y",
Configure uses Makefile.lseek in place of Makefile in
order to enable use of the private lseek() function for
2.1.x kernels; any other non-NULL value, Makefile.lseek
will isn't used; a NULL value, the alternate lseek()
need is determined by compilation.
default: determined by test program
NETBSD_SYS specifies the path to the NetBSD system source
directory.
default: /usr/include
NETBSD_UVM If this environment variable has a value of "Y" or "y",
the NetBSD system uses the UVM virtual memory system;
any other non-NULL value, it does not; a NULL value,
it will be determined by the contents of /etc/mk.conf.
default: tested by grep'ping /etc/mk.conf
OPENBSD_SYS specifies the path to the OpenBSD system source
directory.
default: /sys
OPENBSD_UVM If this environment variable has a value of "Y" or "y",
the OpenBSD system uses the UVM virtual memory system;
any other non-NULL value, it does not; a NULL value,
it will be determined by examining /bsd.
default: tested by grep'ping `nm /bsd` output
OSR_CFGF The value of this environment variable is made the
initial value for the compiler flags the lsof Configure
script constructs for the Makefile CFGF macro.
default: ""
OSR_CFGL The value of this environment variable is made the
initial value for the loader flags the lsof Configure
script constructs for the Makefile CFGL macro.
default: ""
OSR_STATLSTAT If this environment variable has a value of "Y" or "y",
HAS_STATLSTAT is defined in the Makefile's CFGL string;
any other non-NULL value, it's not defined; a NULL
value, it is determined with nm and grep.
default: determined with nm and grep
SOLARIS_23P101318 If this environment variable has a non-NULL value, the
value is interpreted as the patch level of the Solaris
2.3 P101318 patch.
default: pkginfo tested with grep
SOLARIS_24P101945 If this environment variable has a non-NULL value, the
value is interpreted as the patch level of the Solaris
2.4 P101945 patch.
default: pkginfo tested with grep
SOLARIS_24P102303 If this environment variable has a non-NULL value, the
value is interpreted as the patch level of the Solaris
2.4 P102303 patch.
default: pkginfo tested with grep
SOLARIS_26PR_GWINDOWS If this environment variable has a value of "Y" or "y",
the HASPR_GWINDOWS definition is set in the Solaris 2.6
and 7 Makefile's CFG string; any other non-NULL value,
it's not set; a NULL value, it's tested by compilation.
default: tested by compilation
SOLARIS_26PR_LDT If this environment variable has a value of "Y" or "y",
the HASPR_LDT definition is set in the Solaris 2.6
Makefile's CFGL string; any other non-NULL value, it's
not set; a NULL value, it's tested by compilation.
default: tested by compilation
SOLARIS_CCDIR specifies the path to the Sun C compiler -- i.e., when
`Configure solariscc` is used. This is ignored when
LSOF_CC has been specified.
default: /opt/SUNWspro/bin
SOLARIS_INSTR specifies the Sun C compiler target instruction set
when building lsof for a 64 bit kernel -- i.e., when
the Configure abbreviation is "solariscc". Possible
values include amd64 and sparcv9. This is ignored when
the Configure abbreviation is "solaris" -- i.e., the
compiler is gcc.
default: tested with /bin/isainfo -k
SOLARIS_KERNBITS specifies the number of bits in the Solaris 7, 8, 9 or
10 kernel: 32 or 64.
default: tested with /bin/isainfo -kv
SOLARIS_VSOCK If this environment variable has a value of "Y" or "y",
the HAS_VSOCK definition is in the Solaris Makefile's
CFGL string; any other non-NULL value, it's not set; a
NULL value, it's tested by compilation.
default: tested by compilation
SOLARIS_VXFSINCL This environment variable defines the path to the
header files of the VxFS 3.4 or greater version. If
SOLARIS_VXFSINCL is not set, the default is used.
default: VxFS < 4.0:
/opt/VRTSvxfs/include
VxFS 4.0 and above:
/opt/VRTSfssdk/<version>/include
SOLARIS_VXFSLIB This environment variable defines the path to the
VxFS 3.4 or greater utility libraries, libvxfsutil.a
(32 bit) and libvxfsutil64.a (64 bit). If
SOLARIS_VXFSLIB is not set, the default is used.
Note: end SOLARIS_VXFSLIB at the "/lib" component; do
NOT put "/sparcv9" at its end. The lsof
Configure script will add "/sparcv9" if it is
required; hence, if Configure finds that
"/sparcv9" is needed, your SOLARIS_VXFSLIB
directory tree must have a sparcv9 subdirectory.
default: `dirname $SOLARIS_VXFSINCL`/lib
SUN_AFSAPATHDEF specifies the path to the AFS library modload file
for either Solaris or SunOS.
default: /usr/vice/etc/modload/libafs
Verified with ls.
Note: the SunOS support is no longer maintained.
UW_HAS_NSC If this environment variable has a value of "Y" or "y",
lsof will be configured for a UnixWare 7.1.1 or above
NonStop Cluster (NSC) system.
default: tested via /bin/node_self
Vic Abell <abe@purdue.edu>
April 15, 2008
Copyright 2K16 - 2K18 Indonesian Hacker Rulez