MK-CONFIGURE(7)MK-CONFIGURE(7)NAMEmk-configure - lightweight replacement for GNU autotools
DESCRIPTIONmk-configure is a collection of include files for bmake (portable ver‐
sion of NetBSD make) and a number of executables. It is intended to
simplify crossplatform development and software building.
There are only a few top-level makefiles: mkc.init.mk, mkc.mk, mkc.con‐
figure.mk, mkc.minitest.mk. Everything else (mkc_imp.*.mk files) is
included implicitely. Do not use mkc_imp.*.mk files directly! If you
do, I cannot guarantee backward compatibility. mkc.configure.mk is
included automatically by mkc.mk, but can be included explicitely.
mkc.minitest.mk provides a trivial support for regression tests and
should be included explicitely. Usually mk-c makefiles consist of
variables assignments and inclusion of mkc.mk in the and. One can also
use mkc.prog.mk, mkc.lib.mk, mkc.files.mk, mkc.subdir.mk and mkc.sub‐
prj.mk instead of mkc.mk. The latter activates mkc.lib.mk if variable
LIB is set, mkc.prog.mk if variables PROG or PROGS are set, mkc.sub‐
prj.mk if variable SUBPRJ is set, mkc.subdir.mk if variable SUBDIR is
set, and mkc.files.mk otherwise.
To get system-wide configuration parameters, mkc.init.mk loads "${MAKE‐
CONF}" file if it exists. Otherwise, it loads /usr/local/etc/mk-c.conf
if it exists. If neither ${MAKECONF} nor /usr/local/etc/mk-c.conf
exist, it tries to load /usr/local/etc/mk.conf file. If "${SRC‐
TOP}/Makefile.common" file exists it is also included by all subpro‐
jects. Unless SRCTOP variable is set, "../Makefile.inc" is also
included if exists. These files may define any of the variables
described below. Below in square brackets the default value for vari‐
ables are specified. In triangle brackets -- typical way of use, where
I means "Initialized by mk-configure", Iu means "Initialized by mk-con‐
figure but may be overriden by user", Im means "Initialized by mk-con‐
figure but may be set in Makefile", U means "Usually set by user", M
means "May be set or changed in project's Makefile" and Mu means "May
be set in project's Makefile but may be initialized or overriden by
user".
Targets
Mk-configure provides the following targets:
all build everything.
clean clean temporary files and directories with a help of ${CLEAN‐
FILES_CMD} and ${CLEANDIRS_CMD} commands.
cleandir
remove all of the files removed by the target clean, as well as
cache files created by mkc.configure.mk.
distclean
synonym for target "cleandir".
installdirs
create target directories.
install
install programs, libraries, files, include files, manual pages
etc. to the target directories with a help of ${INSTALL} pro‐
gram.
uninstall
remove installed files with a help of ${UNINSTALL} command.
errorcheck
check for MKC_ERR_MSG variable and fails if it set printing an
error message
depend create .depend file containing list of dependencies (see
mkdep(1)).
filelist
output a list of destination files of the project, one per line,
e.g.
/usr/local/bin/hello
/usr/local/man/man1/hello.1
obj if MKOBJDIR is "yes", creates object directories (${.OBJDIR})
according to MAKEOBJDIR and MAKEOBJPREFIX variables. Current
umask is used for this.
mkgen See mkc_imp.foreign_autotools.mk.
bin_tar, bin_targz, bin_tarbz2, bin_zip, bin_deb
build software, install it to a temporary directory (using DEST‐
DIR) and create .tar/.tar.gz/.tar.bz2/.zip/.deb archive contain‐
ing all installed files. The target bin_deb expects debian con‐
trol files in DEBIAN subdirectory, see examples/hello_files for
the sample.
NOTE: Commands associated with targets all, install, clean, cleandir,
depend, test, installdirs, uninstall, errorcheck and filelist in Make‐
file override the standard behaviour.
NOTE: All targets in this list have pre_*, do_* and post_* counter‐
parts. See ALLTARGETS for details.
mkc.init.mk
This file is included by mkc.mk and mkc.configure.mk automatically but
can be used by users directly. mkc.init.mk uses the following vari‐
ables.
AR Create, modify, and extract from archives. <Iu> [ar]
ARFLAGS
Options to ${AR}. <Iu> [rl]
AS Assembler. <Iu> [as]
AFLAGS Options to ${CC} when compiling or linking .s or .S assembly
source files. []
CC C compiler. <Iu> [cc]
CC_PREFIX
Prefix command for ${CC}, for example, distcc or ccache. <Iu>
[]
CFLAGS Additional flags to the compiler when creating C objects. <IM>
CFLAGS_<project>
Similar to CFLAGS but for project ${PROJECTNAME}. <U>
CLEANFILES_CMD
Command for removing files used by targets "clean" and "cle‐
andir". <Iu> [${RM} -f]
CLEANDIRS_CMD
Command for removing directories used by targets "clean" and
"cleandir". <Iu> [${RM} -rf]
COPTS Additional flags to the compiler when creating C objects. <U>
COPTS_<project>
Similar to COPTS but for project ${PROJECTNAME}. <U>
CXX C++ compiler. <Iu> [c++]
CXX_PREFIX
Prefix command for ${CXX}, for example, distcc or ccache. <Iu>
[]
CXXFLAGS
Additional flags to the compiler when creating C++ objects.
<Iu> [${CFLAGS}]
CXXFLAGS_<project>
Similar to CXXFLAGS but for project ${PROJECTNAME}. <U>
CPP C Pre-Processor. <Iu> [cpp]
CPPFLAGS
Additional flags to the C pre-processor. <Iu>
CPPFLAGS_<project>
Similar to CPPFLAGS but for project ${PROJECTNAME}. <U>
CPPFLAGS0
The same as CPPFLAGS but CPPFLAGS0 are passed to the compiler
before CPPFLAGS. Normally, CPPFLAGS0 should be modified in
makefiles and should not be set from environment by user.
FC Fortran compiler. <Iu> [f77]
FFLAGS Options to {$FC}. <Iu> [-O]
FFLAGS_<project>
Similar to FFLAGS but for project ${PROJECTNAME}. <U>
INSTALL
install(1) command. <Iu> [install or mkc_install]
LEX Lexical analyzer. <Iu> [lex]
LFLAGS Options to ${LEX}. <Iu> []
LN ln(1) tool. <Iu> [ln]
LN_S Tool equivalent to ln -s. <Iu> [${LN} -s]
LPREFIX
Symbol prefix for ${LEX} (see -P option in lex(1)). <Iu> [yy]
<Iu> [yy]
LEXLIB Object file for lex. <Iu> [-ll]
LD Linker. <Iu> [ld]
LORDER List dependencies for object files. <Iu> [lorder]
MAKE bmake(1). [bmake or make on NetBSD]
MAKEDEPEND
makedepend(1) tool. <Iu>
MKDIR mkdir(1) tool. <Iu> [mkdir]
MKDEP mkdep(1) tool. <Iu>
NM List symbols from object files. <Iu> [nm]
PC Pascal compiler. <Iu> [pc]
PFLAGS Options to ${PC}. <Iu> []
OBJCOPY
Copy and translate object files. <Iu> [objcopy]
OBJDUMP
Display information from object files. <Iu> [objdump]
RANLIB Generate index to archive. <Iu> [ranlib]
RM rm(1) tool. <Iu> [rm]
SIZE List section sizes and total size. <Iu> [size]
SRC_PATHADD
List of directories added to .PATH. <Im> []
STRIP Discard symbols from object files. <Iu> [strip]
STRIPFLAG
The flag passed to the install program to cause the binary to be
stripped. <Iu>
TSORT Topological sort of a directed graph. <Iu> [tsort -q]
UNINSTALL
Command for removing files used by target "uninstall". <Iu>
[${RM} -f]
YACC LALR(1) parser generator. <Iu> [yacc]
TAR tar archiver. <Iu> [tar]
GZIP gzip copression tool. <Iu> [gzip]
BZIP2 bzip2 copression tool. <Iu> [bzip2]
ZIP zip copression tool. <Iu> [zip]
YFLAGS Options to ${YACC}. <Iu> []
YHEADER
If defined, add "-d" to YFLAGS, and add dependencies from
<file>.y to <file>.h and <file>.c, and add <foo>.h to CLEAN‐
FILES.
YPREFIX
If defined, add "-p ${YPREFIX}" to YFLAGS.
WARNERR
If "yes", force warnings to be reported as errors. At the
moment this is supported for GCC, Intel C/C++ and Sun's C/C++
compilers. <Iu> [yes if WARNS=4, no otherwise ]
WARNS Crank up warning options; the distinct levels are (the higher
the more strict):
WARNS=0
WARNS=1
WARNS=2
WARNS=3
WARNS=4
At the moment WARNS is supported for GCC and HP-UX C/C++ only.
WARNS=0 means disabling all warnings if such feature is provided
by compiler and mk-configure. <Mu> [0]
PREFIX Target directory. <U> [/usr/local]
BINDIR Target directory for utilities. <Iu Mu> [${PREFIX}/bin]
SBINDIR
Target directory for administration utilities. <Iu> [${PRE‐
FIX}/sbin]
LIBDIR Target directory for libraries. <Iu> [${PREFIX}/lib]
LIBEXECDIR
Target directory for system utilities. <Iu> [${PREFIX}/libexec]
DATADIR
Target directory for architecture-independent text files. <Iu>
[${PREFIX}/share]
SHAREDSTATEDIR
Target directory for modifiable architecture-independent data
files. <Iu> [${PREFIX}/com]
VARDIR Target directory for modifiable single-machine data files. <Iu>
[${PREFIX}/var]
INCSDIR
Target directory for header files. <Iu> [${PREFIX}/include]
SYSCONFDIR
Target directory for configuration files. <Iu> [${PREFIX}/etc]
INFODIR
Target directory for .info files. <Iu> [${PREFIX}/info]
DESTDIR
Installation prefix. <U> []
MKC_ERR_MSG
If set, keep an error message. <I M> []
MKINSTALL
If not "yes", build everything but do not install. This option
is useful for e.g. internal libraries. <Mu> [yes]
MKINSTALLDIRS
If "yes", install target directories (target installdirs) before
installing files (target install). <Iu> [yes]
MKOBJDIR
If "yes", the target "obj" creates object directories, if
"auto", object directories are created automatically. Otherwise
object directories are not created. <Iu> [auto]
BMAKE_REQD
Minimal required version of bmake. If it is older, mkcmake
exits with error. <Im>
MKC_REQD
Minimal required version of mk-configure. If required version
is not found, the target errorcheck fails. <M>
MKC_VERSION
Version of mk-configure. This variable is always set to non-
empty value when mkc.*.mk include files are used, so you can use
it to initialize mk-c variables in mk.conf. For example:
/usr/local/etc/mk.conf:
...
.ifdef MKC_VERSION
COPTS?= -O2 -Werror
SHRTOUT= yes
.endif # MKC_VERSION
<I>
PROJECTNAME
The name of a project. By default it is set to ${PROG}, ${LIB}
or ${.CURDIR:T}. For a top-level project using either mkc.sub‐
dir.mk or mkc.subprj.mk it makes sense to set this variable
explicitely in project's Makefile. This variable is initialized
before including mk.conf, so you can use it to change build
options, e.g. during development process.
/usr/local/etc/mk.conf:
...
.ifdef MKC_VERSION
...
.if ${PROJECTNAME} == "foo"
SHRTOUT= yes
PROG.gcc= /usr/bin/gcc
CC_TYPE= gcc
COPTS= -O0 -g
.endif
.endif # MKC_VERSION
<Im>
CC_TYPE
C compiler type. This variable is set by mk-configure and can be
overriden by user. It can get the following values:
Value Description
----------------------
gcc GNU C/C++ compiler
pcc Portable C compiler
icc Intel C/C++ compiler
msc Microsoft C/C++ compiler
hpc HP-UX C/C++ compiler
sunpro SUNWspro C/C++ compiler
ibmc IBM C/C++ compiler (Visual Age for C/C++?)
bcc Borland C/C++ compiler
watcom Watcom C/C++ compiler
como COMO C/C++ compiler
decc DEC C
mipspro MIPSpro C compiler
<Iu>
CXX_TYPE
C++ compiler type. This variable is set by mk-configure and can
be overriden by user. It can get the same values as CC_TYPE
variable. <Iu>
LD_TYPE
Linker type. This variable is set by mk-configure and can be
overriden by user. It can get the following values:
Value Description
----------------------
aixld AIX linker
darwinld Darwin linker (MacOS-X)
gnuld GNU linker
hpld HP-UX linker
interixld Interix linker
scold SCO linker
sunld SunOS linker
osf1ld OSF1 linker (Tru64)
irixld IRIX linker
<Iu>
SHRTOUT
If not "no", output messages about compiling, linking and creat‐
ing libraries are shortened and formatted. <Iu> [no]
CFLAGS.warns.<cctype>.<warn-level>, CXXFLAGS.warns.<cxxtype>.<warn-
level>
These variables are set by mk-configure and enable warning mes‐
sages for C or C++ compilers according to their types (CC_TYPE
and CXX_TYPE) and warning level (WARNS). <Iu>
CFLAGS.dflt.<cctype>, CXXFLAGS.dflt.<cxxtype>
Additional flags passed to C or C++ compilers according to their
types (CC_TYPE and CXX_TYPE). <Iu>
CFLAGS.pic, CXXFLAGS.pic
Options for C and C++ compilers for generating position indepen‐
dent code. On some platforms it makes sense to override these
variables (initialized by mk-configure) for better performance,
for example, one may use -fpic instead of -fPIC with GNU C/C++
compilers. See SHLIB_MAJOR, MKPIE etc. variables for more
information. <Iu>
CFLAGS.pie, CXXFLAGS.pie
Options for C and C++ compilers for generating position indepen‐
dent executables. On some platforms it makes sense to override
these variables (initialized by mk-configure) for better perfor‐
mance, for example, one may use -fpic instead of -fPIC with GNU
C/C++ compilers. See MKPIE variable for more information. <Iu>
CFLAGS.ssp, CXXFLAGS.ssp
Options for C and C++ compilers for generating stack protection
code. See USE_SSP variable for more information. <Iu>
USE_SSP
If "yes", enables stack protection code, which detects stack
overflows and aborts the program. This enhances security but
imposes some performance penalty. <U> [no]
SRCTOP Top-level project's directory which defaults to ${.CURDIR} if
${.MAKE.LEVEL} is 0. If set, "../Makefile.inc" is not included.
Also, the following command
mkcmake -C subproject target
will be translated to
cd ${SRCTOP}; mkcmake target-subproject <Iu>
OBJTOP Top-level object directory which defaults to ${.OBJDIR} if
${.MAKE.LEVEL} is 0. <I>
mkc.files.mk
The include file mkc.files.mk handles the FILES variable and is
included from mkc.lib.mk and mkc.prog.mk. List of supported variables:
FILES The list of files to install. <M>
FILESDIR
The location to install the files. <Mu> [${PREFIX}/bin]
FILESDIR_<fn>
The location to install the specific file <fn>. <Mu>
FILESOWN
File owner. If bmake is run with root privileges, it defaults to
${BINOWN} or to `id -u` otherwise. <Mu>
FILESOWN_<fn>
File owner of the specific file <fn>. <Mu>
FILESGRP
File group. If bmake is run with root privileges, it defaults to
<Mu> ${BINGRP} or to `id -g` otherwise. <Mu>
FILESGRP_<fn>
File group of the specific file <fn>. <Mu>
FILESMODE
File mode. <Mu> [${NONBINMODE}]
FILESMODE_<fn>
File mode of the specific file <fn>. <Mu>
FILESNAME
Optional name to install each file as. <Mu>
FILESNAME_<fn>
Optional name to install <fn> as. <Mu>
CLEANFILES
Additional files to remove for the clean, cleandir and distclean
targets. <I M>
DISTCLEANFILES
Additional files to remove for the cleandir and distclean tar‐
gets. <I M>
CLEANDIRS
Additional directories to remove (recursively) for the clean,
cleandir and distclean targets. <I M>
DISTCLEANDIRS
Additional directories to remove (recursively) for the cleandir
and distclean targets. <I M>
mkc.prog.mk
The include file mkc.prog.mk handles building program from one or more
source files, along with their manual pages. It has a limited number
of suffixes. List of supported variables:
PROG The name of the program to build.
PROGS The names of the programs to build. If neither PROG nor PROGS
is not supplied, nothing is built. <M>
PROGNAME
The name that the above program will be installed as, if differ‐
ent from ${PROG}. <M>
SRCS List of source files to build the program. If SRCS is not
defined, it's assumed to be ${PROG}.c. <M>
SRCS.<prog>
List of source files to build the program prog listed in PROGS.
If SRCS.<prog> is not defined, it's assumed to be prog.c. <M>
LDADD Additional objects. Usually used for libraries. For example,
to link with the compatibility and utility libraries, use:
LDADD+= -lutil -lcompat
<U>
LDADD_<project>
Similar to LDADD but for project ${PROJECTNAME}.
LDADD0 The same as LDADD but LDFLAGS0 and LDADD0 are passed to the
linker before LDFLAGS and LDADD. <M>
LDFLAGS
Additional linker flags. Often used for specifying library
directories.
LDFLAGS+= -L/opt/company/software/lib
<Mu I>
LDFLAGS_<project>
Similar to LDFLAGS but for project ${PROJECTNAME}.
LDFLAGS0
The same as LDFLAGS but LDFLAGS0 and LDADD0 are passed to the
linker before LDFLAGS and LDADD. Normally, LDFLAGS0 and LDADD0
should be modified in makefiles and should not be set from envi‐
ronment by user. <M>
BINDIR, BINMODE, BINOWN and BINGRP
See Common variables and mkc.files.mk sections.
MKSHARE
If "no", act as "MKHTML=no MKINFO=no MKCATPAGES=no MKMAN=no".
I.e, don't build catman pages, man pages, info documentation,...
<Iu> [yes]
MKPIE If "yes", create Position Independent Executable (PIE), other‐
wise create a regular executable. <Mu> [no]
USE_RELRO
If "yes", enables a technique to harden the data sections of an
ELF binary/process. For security reasons it makes sense to set
it to YES, it may slow down application startup, though. <Iu>
[no]
EXPORT_DYNAMIC
If "yes", add all symbols to the dynamic symbol table, that is
make all symbols visible from dynamic objects at run time (e.g.
dlopen-ed objects), otherwise only symbols referenced by some
object file will be exported. <M> [no]
DPINCDIRS
See LIBDEPS in section mk.subprj.mk.
DPLIBDIRS
See LIBDEPS in section mk.subprj.mk.
DPLDADD
See LIBDEPS in section mk.subprj.mk.
mkc.prog.mk includes mkc.files.mk and therefore supports all variables
supported by it.
mkc.lib.mk
The include file mkc.lib.mk has support for building a static and
dynanic library or DLL. mkc.lib.mk uses the following variables:
LIB The name of the library to build. <M>
LIBDIR See Common variables and mkc.files.mk sections.
SHLIB_MAJOR
Major shared library number. If unset, shared library is not
built. <M>
SHLIB_MINOR
Minor shared library number. <M> [0]
SHLIB_TEENY
Minor shared library number. <M> []
LIBOWN Library owner. If bmake is run by an unprivileged user, it
defaults to `id -u`. <Iu>
LIBGRP Library group. If bmake is run by an unprivileged user, it
defaults to `id -g`. <Iu>
LIBMODE
Library mode. <Iu> [${NONBINMODE}]
SHLIBMODE
Shared library mode. <Iu>
LDADD LDADD_<project>
Additional objects. See mkc.prog.mk
LDFLAGS LDFLAGS_<project>
Additional linker flags. See mkc.prog.mk
MAN The manual pages to be installed (use a .1 - .9 suffix). <M>
SRCS List of source files to build the library. Suffix types
.s, .c, and .f are supported. Note, .s files are preferred
to .c files of the same name. <M>
MKSHLIB
If not "no", build and install shared library provided that
SHLIB_MAJOR is defined. <IMu> [yes] (for MACHINE_ARCHs that
support it)
MKSTATICLIB
If not "no", build and install static library. <IMu> [yes]
MKPICLIB
If not "no", build and install *_pic.a library. <IMu> [no]
MKPROFILELIB
If "no", don't build or install the profiling (*_p.a) libraries.
<Iu> [no]
MKDLL If "yes", build and install the dynamically loaded library
(<lib>.so) instead of shared library. If "only", do not make
static library. <M> [no]
EXPORT_SYMBOLS
Only symbols listed in a specified file (one symbol per line)
are exported. This variable has no effect on some platforms. By
default all symbols are exported. <M> []
DPINCDIRS
See LIBDEPS in section mk.subprj.mk.
DPLIBDIRS
See LIBDEPS in section mk.subprj.mk.
DPLDADD
See LIBDEPS in section mk.subprj.mk.
Libraries are ranlib'd when made. mkc.lib.mk includes mkc.files.mk and
therefore supports all variables supported by it.
mkc.subprj.mk
The include file mkc.subprj.mk handles subprojects (subdirectories)
organized as a dependency graph. It provides all targets provided by
mkc.prog.mk. Variable SUBPRJ contains a list of pairs depdir:dir which
mean that subproject dir depends on depdir. mkcmake all command will
build all subprojects listed in SUBPRJ in a correct order (starting
with subprojects having no dependencies and so on). There is also a
target which allows the command bmake <subdir> where <subdir> is any
directory listed in the variable SUBPRJ. The following targets are
also provided: <target>-<subdir> where <target> is either of the fol‐
lowing: all, clean, cleandir, depend, installdirs, install, uninstall
and filelist. Also provided are: targets nodeps-<target>-<subdir> and
subdir-<target>-<subdir>. Difference between <target>-<subdir> and
nodeps-<target>-<subdir> is that mkcmake <target>-<subdir> runs the
specified <target> for <subdir> and all its dependencies while mkcmake
nodeps-<target>-<subdir> -- only for <subdir>. A target subdir-<tar‐
get>-<subdir> is a synonym for nodeps-<target>-<subdir> See exam‐
ples/hello_dictd subdirectory for the sample of use.
mkc.subprj.mk provides the following variables:
SUBPRJ List of subprojects (subdirectories) and dependencies. If the
subdirectory doesn't exist the subproject becomes "virtual" and
may be used to group several subprojects into a new virtual one.
<M>
LIBDEPS
A list of library dependencies. Each token is a colon-separated
pair. Its first component is a library subproject (dependency),
the second one is the subproject for library or executable. The
value of this variable is automatically added to SUBPRJ. Library
dependencies listed in LIBDEPS automatically change CPPFLAGS0,
LDFLAGS0 and LDADD0 of approptiate subprojects. <M> Suppose, we
have <library:program> pair in LIBDEPS, also suppose that vari‐
able library is set to "library" subdirectory and variable pro‐
gram is set to "program" subdirectory.
${SRCDIR_library}/linkme.mk file is automatically included from
${SRCDIR_program}/Makefile if it exists. In this file DPLDADD
[${library:T:S/^lib//}], DPLIBDIRS
[${OBJDIR_${library:S,/,_,g}}] and DPINCDIRS
[${SRCDIR_${library:S,/,_,g}} ${OBJDIR_${library:S,/,_,g}}], may
be set to non-default values. These three variables then changes
LDADD0, LDFLAGS0 and CPPFLAGS0 respectively in subproject "pro‐
gram". The dependency graph specified by variable LIBDEPS is
available to all subproject via environment.
STATICLIBS
A list of subprojects (basenames) with static libraries. If
dependency is mentioned in this variable, the suffix _pic is
automatically added for PIE-executables or shared libraries that
depend on this library. This variable is automatically passed
to subprojects via environment. <Mu> []
INTERNALLIBS
A list of subprojects (basenames) with internal libraries.
These libraries are static and not installed by target
"install". <M> []
COMPATLIB
Subproject's basename for compatibility library. If this vari‐
able is set, MKC_SOURCE_FUNCLIBS and FEATURES do not change SRCS
for subprojects other than ${COMPATLIB}. <M> []
SUBPRJ_DFLT
List of projects built and installed by default. The default is
all projects listed in SUBPRJ. <IMu>
EXPORT_VARNAMES
List of variables to export before running make for subdirecto‐
ries. <Mu> [MKC_CACHEDIR]
NOEXPORT_VARNAMES
List of variables excluded from EXPORT_VARNAMES. <Mu> []
NODEPS This variable specifies a list of patterns that describes edges
from dependency graph in targdep-prjdep:targ-prj or targ-
prj:targ formats to be excluded from dependency graph. <M> []
NOSUBDIR
If for some reason you want to exclude some subdirectories from
build, list them in this variable. <U> []
OBJDIR_<dir>
Value of ${.OBJDIR} inside dir subdirectory. Slash symbols
inside <dir> are replaced with underlines. In addition,
OBJDIR_<dir:T> variable is set to ${OBJDIR_<dir>} if ${SHORTPRJ‐
NAME} is "yes".
SRCDIR_<dir>
Value of ${.CURDIR} inside dir subdirectory. Slash symbols
inside <dir> are replaced with underlines. In addition,
SRCDIR_<dir:T> variable is set to ${SRCDIR_<dir>} if ${SHORTPRJ‐
NAME} is "yes".
TARGETS
A list of recursive targets. "Recursive" means that the target
will be called for all subproject recursively (See mkc.subprj.mk
and mkc.subdir.mk). <Im> [all, install, installdirs, uninstall,
clean, cleandir, depends, test, errorcheck, filelist, obj] By
setting this variable in the Makefile one can add new targets
for special purposes, for example, static code analysis, partial
builds etc.
ALLTARGETS
A list of targets for which pre_*, do_* and post_* counterparts
exist, for example, pre_all, do_all and post_all. pre_* target
runs before do_* target which in turn runs before post_*. Unless
action is provided for do_* targets they implement the standard
behaviour of mk-configure. No action is provided for targets
pre_* and post_*, so they are for user's extensions. The stan‐
dard behaviour for ${ALLTARGETS} may also be extended by adding
new prerequisites to targets do_*.
SHORTPRJNAME
If "yes", special targets with last component of the subprojects
are provided. <Im> [yes]
MKRELOBJDIR
If "yes", object directories ${OBJTOP}/dir are used. Unlike
MAKEOBJDIRPREFIX object directories do not contain top-level
${.CURDIR} in paths. <Iu> [no]
SUBPRJSRCTOP
This variables contains ${.CURDIR} directory and is passed to
subprojects. <I> [${.CURDIR}]
mkc.subprj.mk provides the following targets:
<subdir> and <subdir:T>
<subdir> is a subdirectory listed in SUBDIR or SUBPRJ. This
target is equivalent to all-<subdir>. <subdir:T> means the last
component of the directory and is created if ${SHORTPRJNAME} is
"yes".
<target>-<subdir>
Runs the specified <target> for the specified <subdir>. The
target <target>-<subdir:T> is provided if ${SHORTPRJNAME} is
"yes".
subdir-<target>-<subdir> and nodeps-<target>-<subdir>
Runs the specified <target> for the specified <subdir> without
dependencies. Targets subdir-<target>-<subdir:T> and
nodeps-<target>-<subdir:T> are provided if ${SHORTPRJNAME} is
"yes".
print_deps
Outputs the dependency graph on targets in tsort(1) format tak‐
ing NODEPS and NOSUBDIR variables into account.
mkc.subdir.mk
The include file mkc.subdir.mk contains the default targets for build‐
ing subdirectories. It provides the same targets as mkc.prog.mk. For
all of the directories listed in the variable SUBDIR, the specified
directory will be visited and the target made. There is also a default
target which allows the command bmake <subdir> where <subdir>
is any directory listed in the variable SUBDIR. As a special case,
the use of a token .WAIT as an entry in SUBDIR acts as a synchroniza‐
tion barrier when multiple make jobs are run; subdirs before the .WAIT
must complete before any subdirs after .WAIT are started. See bmake(1)
for some caveats on use of .WAIT and other special sources. SUBDIR
variable is provided as well as all variables provided by mkc.subprj.mk
except SUBPRJ.
SUBDIR List of subdirectories <M> mkc.subprj.mk
mkc.configure.mk
mkc.configure.mk is an auxiliary include file for checking platform's
features like headers, function or variable declarations, function
implementation in a particular libraries, data types sizes etc. This
include file is included by mkc.prog.mk and mkc.lib.mk automatically
but in some cases it makes sense to include it explicitly. mkc.config‐
ure.mk supports the following variables.
MKCHECKS
If "no", none of the checks are performed. It is set to "yes"
unless target is "clean", "cleandir or distclean".
MKC_CHECK_HEADERS
List of headers to be checked. As a result of the check bmake's
variable HAVE_HEADER.<header> is set to either 0 or 1.
<header>: tr|./|__|g
Also -DHAVE_HEADER_<HEADER>=(0 or 1) is added to CFLAGS unless
MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
Ex: MKC_CHECK_HEADERS += sys/time.h fcntl.h execinfo.h
Res: HAVE_HEADER.sys_time_h = 1
HAVE_HEADER.fcntl_h = 1
HAVE_HEADER.execinfo_h = 1
CFLAGS += -DHAVE_HEADER_SYS_TIME_H=1 -DHAVE_HEADER_FCNTL=1
MKC_REQUIRE_HEADERS
The same as MKC_CHECK_HEADERS, but absense of header is treated
as a fatal error (See errorcheck target.
MKC_CHECK_FUNCLIBS
List of <function>:<library> pairs to be checked, <library> part
is optional. If <library> is present, presense of <function> in
libc is also checked automatically.
As a result of the check bmake's variable HAVE_FUNCLIB.<func‐
tion>.<library> (or HAVE_FUNCLIB.<function>) is set to either 0
or 1.
By default, if <function> is found in <library> but not in libc,
"-l<library>" is automatically added to LDADD unless <func‐
tion>:<library> is listed in MKC_NOAUTO_FUNCLIBS or
MKC_NOAUTO_FUNCLIBS is equal to 1 or MKC_NOAUTO is set to 1
Ex: MKC_CHECK_FUNCLIBS += strlcat fgetln getline getopt_long
MKC_CHECK_FUNCLIBS += crypt:crypt dlopen:dl nanosleep:rt
MKC_CHECK_FUNCLIBS += ftime:compat gettimeofday
MKC_NOAUTO_FUNCLIBS += ftime:compat
Res: HAVE_FUNCLIB.strlcat = 1
HAVE_FUNCLIB.fgetln = 1
HAVE_FUNCLIB.getline = 0
HAVE_FUNCLIB.getopt_long = 1
HAVE_FUNCLIB.crypt = 0
HAVE_FUNCLIB.crypt.crypt = 1
HAVE_FUNCLIB.dlopen = 1
HAVE_FUNCLIB.dlopen.dl = 0
HAVE_FUNCLIB.nanosleep = 1
HAVE_FUNCLIB.nanosleep.rt = 1
HAVE_FUNCLIB.ftime = 0
HAVE_FUNCLIB.ftime.compat = 1
HAVE_FUNCLIB.gettimeofday = 1
LDADD += -lcrypt
MKC_REQUIRE_FUNCLIBS
The same as MKC_CHECK_FUNCLIBS, but absense of funclib is
treated as a fatal error (See errorcheck target.
MKC_SOURCE_FUNCLIBS
The same as MKC_CHECK_FUNCLIBS, but if <function> is absent both
in the specified <library> and in libc, function.c is added to
SRCS unless MKC_NOAUTO=1.
Ex: MKC_SOURCE_FUNCLIBS+= getline
Res: SRCS+= getline.c
HAVE_FUNCLIB.getline= 0
MKC_SOURCE_DIR, MKC_SOURCE_DIR.<source>
Directory with sources for MKC_SOURCE_FUNCLIBS. If
MKC_SOURCE_DIR.<source> is unset, MKC_SOURCE_DIR is used that
defaults to ${.CURDIR}.
Ex: MKC_SOURCE_FUNCLIBS += getline
MKC_SOURCE_DIR.getline.c = ${.CURDIR}/../missing
Res: SRCS+= ${.CURDIR}/../missing/getline.c
HAVE_FUNCLIB.getline= 0
MKC_CHECK_DEFINES
List of define:header to check. <header> part is optional.
As a result of the check bmake's variable
HAVE_DEFINE.<define>.<header> (or HAVE_DEFINE.<define>) is set
to either 0 or 1.
<header>: tr|./|__|g
Also -DHAVE_DEFINE_<DEFINE>_<HEADER>=1 or
-DHAVE_DEFINE_<DEFINE>=1 is added to CFLAGS if the specified
define was detected unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
<DEFINE>: tr|a-z|A-Z|g
Ex: MKC_CHECK_DEFINES += RTLD_LAZY:dlfcn.h __GNUC__ _MSC_VER_
Res: HAVE_DEFINE.RTLD_LAZY.dlfcn_h = 1
HAVE_DEFINE.__GNUC__ = 1
HAVE_DEFINE._MSC_VER_ = 0
CFLAGS += -DHAVE_DEFINE_RTLD_LAZY_DLFCN_H=1 \
-DHAVE_DEFINE___GNUC__=1
MKC_REQUIRE_DEFINES
The same as MKC_CHECK_DEFINES, but absense of the define is
treated as a fatal error (See errorcheck target.
MKC_CHECK_TYPES
List of type:header to check. <header> part is optional.
As a result of the check bmake's variable
HAVE_TYPE.<type>.<header> (or HAVE_TYPE.<type>) is set to either
0 or 1.
<header>: tr|./|__|g
Also -DHAVE_TYPE_<TYPE>_<HEADER>=1 (or -DHAVE_TYPE_<TYPE>=1)
is added to CFLAGS if the specified type was detected unless
MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
<TYPE>: tr|a-z|A-Z|g
Ex: MKC_CHECK_TYPES += size_t:string.h
Res: HAVE_TYPE.size_t.string_h = 1
CFLAGS += -DHAVE_TYPE_SIZE_T_STRING_H=1
MKC_REQUIRE_TYPES
The same as MKC_CHECK_TYPES, but absense of the type declaration
is treated as a fatal error (See errorcheck target.
MKC_CHECK_VARS
List of variable:header to check. <header> part is optional.
As a result of the check bmake's variable HAVE_DEFINE.<vari‐
able>.<header> (or HAVE_DEFINE.<variable>) is set to either 0 or
1
<header>: tr|./|__|g
Also -DHAVE_DEFINE_<VARIABLE>_<HEADER>=1 (or
-DHAVE_DEFINE_<VARIABLE>=1) is added to CFLAGS if the specified
variable was detected unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
Ex: MKC_CHECK_VARS += sys_errlist:errno.h
Res: HAVE_VAR.sys_errlist.errno_h = 1
CFLAGS += -DHAVE_VAR_SYS_ERRLIST_ERRNO_H
MKC_REQUIRE_VARS
The same as MKC_CHECK_VARS, but absense of the variable declara‐
tion is treated as a fatal error (See errorcheck target.
MKC_CHECK_MEMBERS
List of <type>.<member>:<header> to check. <header> part is
optional.
As a result of the check bmake's variable HAVE_MEM‐
BER.<type>_<member>.<header> (or HAVE_MEMBER.<type>_<member>) is
set to either 0 or 1 depending on the result.
<header>: tr|./|__|g
Also -DHAVE_MEMBER_<TYPE>_<MEMBER>_<HEADER>=1 (or -DHAVE_MEM‐
BER_<TYPE>_<MEMBER>=1) is added to CFLAGS if the specified mem‐
ber was found in appropriate type unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
<TYPE>: tr|a-z./|A-Z__|g
<MEMBER>: tr|a-z./|A-Z__|g
Ex: MKC_CHECK_VARS += struct-ifreq.ifr_ifrn.ifrn_name:net/if.h
MKC_CHECK_VARS += struct-tm.tm_isdst:time.h
Res: HAVE_MEMBER.struct_ifreq_ifr_ifrn_ifrn_name.net_if_h=1
HAVE_MEMBER.struct_tm_tm_isdst.time_h=1
CFLAGS += -DHAVE_MEMBER_STRUCT_IFREQ_IFR_IFRN_IFRN_NAME_NET_IF_H=1
CFLAGS += -DHAVE_MEMBER_STRUCT_TM_TM_ISDST_TIME_H=1
MKC_REQUIRE_MEMBERS
The same as MKC_CHECK_MEMBERS, but absense of the member is
treated as a fatal error (See errorcheck target.
MKC_CHECK_FUNCS<N>
List of <func>:<header> to be check. <header> part is optional.
Here <N> means the number of arguments. As a result of the
check bmake's variable HAVE_FUNC<N>.<func>.<header> (or
HAVE_FUNC<N>.<func>) is set to either 0 or 1.
<header>: tr|./|__|g
Also -DHAVE_FUNC<N>_<FUNC>_<HEADER>=(0 or 1) (or
-DHAVE_FUNC<N>_<FUNC>=(0 or 1)) is added to CFLAGS if the speci‐
fied function was detected unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
Ex: MKC_CHECK_FUNCS2 += fgetln:stdio.h
MKC_CHECK_FUNCS6 += pselect:sys/select.h
Res: HAVE_FUNC2.fgetln.stdio_h = 1
HAVE_FUNC6.pselect.sys.select_h = 1
CFLAGS += -DHAVE_FUNC2_FGETLN_STDIO_H=1 \
+= -DHAVE_FUNC6_PSELECT_SYS_SELECT_H=1
MKC_REQUIRE_FUNCS<N>
The same as MKC_CHECK_FUNCS<N>, but absense of the function dec‐
laration is treated as a fatal error (See errorcheck target.
MKC_CHECK_CUSTOM
A list of custom checks (list of names). MKC_CUSTOM_FN.<cus‐
tom_check_name> is a "C", "C++" or "Fortran" source filename or
an executable program for your custom check, e.g., filename.c,
filename.cc, subdir/filename.cxx, filename.C, filename.cpp,
mychecks/filename.f or subdir/executable_script. mk-configure
tries to compile or run the specified file and sets CUSTOM.<cus‐
tom_check_name> variable to 1, 0 or other value. If MKC_CUS‐
TOM_FN.<custom_check_name> is unset, it defaults to cus‐
tom_check_name.c
Also -DCUSTOM_<CUSTOM_CHECK_NAME>=1 is added to CFLAGS if the
specified check succeeded unless MKC_NOAUTO is set to 1.
<CUSTOM_CHECK_NAME>: tr|a-z|A-Z|g
Ex. MKC_CHECK_CUSTOM+= nested_funcs
MKC_CUSTOM_FN.nested_funcs= nested_funcs.c
MKC_CUSTOM_FN.script_check= checks/script_check
Res. CUSTOM.nested_funcs= 1
CUSTOM.script_check= 0
CFLAGS+= -DCUSTOM_NESTED_FUNCS=1
Note that script for the check should be an executable file.
MKC_REQUIRE_CUSTOM
The same as MKC_CHECK_CUSTOM, but failure is treated as a fatal
error (See errorcheck target. 0 and empty value of CUSTOM.xxx
means failure.
MKC_CUSTOM_DIR
Directory with custom checks source files. See MKC_CHECK_CUS‐
TOM. It defaults to ${.CURDIR}.
MKC_CHECK_BUILTINS
mk-configure provides a number of built-in custom checks, that
is, source files to compile or scripts to run in order to check
for something. Checks listed in MKC_CHECK_BUILTINS will be run.
Avalable values:
prog_flex, prog_bison, prog_gawk, prog_gm4, prog_gmake
Find flex, bison, GNU awk, GNU m4 or GNU make respec‐
tively by analysing program's help and/or version mes‐
sages. If found, BUILTIN.prog_<progname> is set to the
path, otherwise it is set to empty string. Note that gawk
may be found as awk, bison as yacc, gm4 as m4, flex as
lex and gmake as make.
prog_mkdep, prog_nbmkdep
Find traditional BSD mkdep(1) or recent NetBSD version of
it respectively.
endianness
BUILTIN.endianness variable is set to either little, big
or unknown depending on a hardware.
MKC_CHECK_PROGS
List of <progname>s to check. As a result of the check bmake's
variable HAVE_PROG.<progname> is set to either 1 (true) or 0
(false). Also PROG.<progname> is set to a full path of a pro‐
gram or to an empty string.
Ex: MKC_CHECK_PROGS += lua ruby gawk runawk
Res: HAVE_PROG.lua = 1
PROG.lua = /usr/pkg/bin/lua
HAVE_PROG.ruby = 0
HAVE_PROG.gawk = 1
PROG.gawk = /usr/bin/gawk
HAVE_PROG.runawk = 1
PROG.runawk = /usr/pkg/bin/runawk
If MKC_PROG.id.<progname> is set to, e.g, <prog_id>, then
HAVE_PROG.<prog_id> and PROG.<prog_id> are set.
MKC_PROG.id.<progname> also changes cache file names.
MKC_REQUIRE_PROGS
The same as MKC_CHECK_PROGS, but absense of program is treated
as a fatal error (See errorcheck target).
MKC_CHECK_SIZEOF
List of <type>:<header> to check. <header> part is optional.
As a result of the check bmake's variable SIZEOF.<type>.<header>
(or SIZEOF.<type>) is set to the data type size or string
"failed".
<type>: tr|*-|P_|g
<header>: tr|/.|__|g
Also -DSIZEOF_<TYPE>_<HEADER>=<failed|1|2|...> (or
-DSIZEOF_<TYPE>=<failed|1|2|...>) is added to CFLAGS if sizeof()
check was successful unless MKC_NOAUTO is set to 1
<TYPE>: tr|a-z*-|A-ZP_|g
<HEADER>: tr|a-z/.|A-Z__|g
Ex: MKC_CHECK_SIZEOF += void*
MKC_CHECK_SIZEOF += long-long off_t:sys/types.h
Res: SIZEOF.voidP = 4
SIZEOF.long_long = 4
SIZEOF.off_t.sys_types_h = 8
CFLAGS += -DSIZEOF_VOIDP=4 \
-DSIZEOF_LONG_LONG=4 \
-DSIZEOF_OFF_T_SYS_TYPES_H=8
MKC_CHECK_PROTOTYPES
A list of checks (list of names) for C function prototypes.
MKC_PROTOTYPE_FUNC.<name> is a C function prototype. MKC_PROTO‐
TYPE_HEADERS.<name> is a list of headers to #include. mk-con‐
figure verifies that the specified prototype is correct and if
so, HAVE_PROTOTYPE.<name> bmake variable is set to 1 and
-DHAVE_PROTOTYPE_<NAME>=1 is added to CFLAGS unless MKC_NOAUTO
is set to 1. Otherwise, HAVE_PROTOTYPE.<name> variable is set
to 0.
Ex.
MKC_CHECK_PROTOTYPES = posix_iconv const_iconv
MKC_PROTOTYPE_FUNC.posix_iconv =
size_t iconv(iconv_t,char**,size_t*,char**,size_t*)
MKC_PROTOTYPE_FUNC.const_iconv =
size_t iconv(iconv_t,const char**,size_t*,char**,size_t*)
MKC_PROTOTYPE_HEADERS.posix_iconv = iconv.h
MKC_PROTOTYPE_HEADERS.const_iconv = iconv.h
Res.
HAVE_PROTOTYPE.posix_iconv=0
HAVE_PROTOTYPE.const_iconv=1
CFLAGS += -DHAVE_PROTOTYPE_CONST_ICONV=1
MKC_REQUIRE_PROTOTYPES
The same as MKC_CHECK_PROTOTYPES, but incorrect prototype is
treated as a fatal error (See errorcheck target.
MKC_CHECK_CC_OPTS
A list of C compiler options to check. If ${CC} -c support the
specified option, variable HAVE_CC_OPT.<option:S/=/_/g> is set
to 1 and 0 otherwise.
Ex.
MKC_CHECK_CC_OPTS = -Wall -errwarn=%all
Res.
HAVE_CC_OPT.-Wall=1
HAVE_CC_OPT.-errwarn_%all=0
MKC_CHECK_CXX_OPTS and HAVE_CXX_OPT.<option>
The same as MKC_CHECK_CC_OPTS and HAVE_CC_OPT but for C++ com‐
piler.
MKC_NOAUTO_FUNCLIBS
See MKC_CHECK_FUNCLIBS
MKC_NOAUTO
See MKC_CHECK_{HEADERS,FUNCLIBS,FUNCS,VARS,DEFINES,SIZEOF}.
MKC_COMMON_HEADERS
List of header files always #include'd to the test .c file in
MKC_CHECK_{DEFINES,VARS,FUNCS<N>,SIZEOF} checks. The default
value is an empty list.
Ex: MKC_COMMON_HEADERS += unistd.h stdlib stdio.h string.h
MKC_CHECK_SIZEOF += offs_t size_t ssize_t
MKC_COMMON_DEFINES
List of defines always passed to compiler in
MKC_CHECK_{DEFINES,VARS,FUNCS<N>,SIZEOF} checks.
Ex: MKC_COMMON_DEFINES += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 # Linux
MKC_COMMON_DEFINES += -D_ALL_SOURCE # Interix
MKC_COMMON_DEFINES.<OPSYS>
The same as MKC_COMMON_DEFINES but only for OPSYS (uname -s).
Ex: MKC_COMMON_DEFINES.Linux += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
MKC_COMMON_DEFINES.Interix += -D_ALL_SOURCE
MKC_CACHEDIR
Directory where intermediate and cache files are created. It
defaults to ${.OBJDIR}. By default MKC_CACHEDIR variable is
exported for subprojects. As a result cache files for subpro‐
jects are created in the top-level directory. If cache direc‐
tory doesn't exist, it is created automatically.
MKC_SHOW_CACHED
Setting it to 0 will hide
Checking ... (cached) ...
messages, that is, messages about fetching results from cache
files.
MKC_DELETE_TMPFILES
If set to 1, temporary files are removed.
MKC_NOCACHE
All results are cached unless MKC_NOCACHE variable is set non-
empty value
MKC_FEATURES
This is a list of "features" required by project. In general, a
feature is something that has problems with portability. This
may be a function name or header missing on some platforms, for
example. What developer needs to do is to add FEATURENAME to
MKC_FEATURES variable and add #include <mkc_FEATURENAME.h> where
it is needed. Internally, system requiremets are checked in the
automatically included mkc_imp.f_FEATURENAME.mk file and all
required actions (includes, define checks etc.) are made in
mkc_FEATURENAME.h header file. Currently the following features
are provided:
strlcat
This feature corresponds to strlcat(3) function available
on almost all systems except glibc-based Linux-es.
mkc_imp.f_strlcat.mk checks whether strlcat declaration
is available in string.h and implementation is available
in libc. If not, strlcat.c provided by mk-configure is
added to SRCS and declaration is provided in mkc_strl‐
cat.h header.
strlcpy
Similar to strlcat.
getline
This feature corresponds to getline(3) function which is
a part of POSIX2008 unavailable on some systems.
mkc_imp.f_getline.mk checks whether getline declaration
is available in stdio.h and implementation is available
in libc. If not, getline.c provided by mk-configure is
added to SRCS and declaration is provided in mkc_get‐
line.h header.
progname
This feature provides getprogname(3) and setprogname(3)
functions available in *BSD.
fgetln This feature provides fgetln(3) BSD-ism.
err This feature provides err(3), errx(3), verr(3) and
verrx(3) BSD-isms.
warn This feature provides warn(3), warnx(3), vwarn(3) and
vwarnx(3) BSD-isms.
libm This feature checks whether libm is available and if yes,
adds -lm to LDADD. Most UNIX-like systems have libm but
Haiku, for example, does not. mkc_imp.f_libm.mk checks
whether libm library is available and if yes, -lm is
added to LDADD.
libdl This feature checks whether libdl library is available
and dlopen(3) is declared in dlfcn.h. If yes, -ldl is
added to LDADD. mkc_libdl.h provides declarations for
dlopen(3), dlsym(3), dlclose(3) etc.
RB SPLAY
BSD systems provide sys/tree.h header where RB_* and
SPLAY_* macroses are defined for red-black tree and
splay. These features check whether sys/tree.h and appro‐
priate macroses are available. If yes, mkc_RB.h and
mkc_SPLAY.h include system-wide sys/tree.h, otherwise
NetBSD version of sys/tree.h provided by mk-configure is
included.
SLIST SIMPLEQ STAILQ LIST TAILQ CIRCLEQ
BSD systems provide sys/queue.h header where SLIST_* etc.
macroses are defined for lists and queues. These features
check whether sys/queue.h and appropriate macroses are
available. If yes, mkc_SLIST.h and others include system-
wide sys/queue.h, otherwise NetBSD version of sys/queue.h
provided by mk-configure is included.
mkc_imp.scripts.mk
is internal include file which is included from mkc.prog.mk, mkc.lib.mk
and mkc.files.mk. Do not use it directly! It provides installing and
uninstalling the scripts. The following variables are provided:
SCRIPTS
A list of interpreter scripts (written in shell, awk, lua etc).
These are installed like programs. <M>
SCRIPTSNAME
The name that the above program will be installed as, if differ‐
ent from ${SCRIPTS}. <Mu>
SCRIPTSNAME_<script>
Optional name to install <script> as. If <script> has a form
<subdir>/<filename>, SCRIPTSNAME_<subdir>_<filename> is used.
<Mu>
SCRIPTSDIR
Target directory for scripts. <Iu> [${BINDIR}]
SCRIPTSDIR_<script>
Optional directory to install <script> to. If <script> has a
form <subdir>/<filename>, SCRIPTSDIR_<subdir>_<filename> is
used. <Mu>
SCRIPTSOWN
Script files owner. <Iu> [${BINOWN}]
SCRIPTSGRP
Script file group. <Iu> [${BINGRP}]
SCRIPTSMODE
Script file mode. <Iu> [${BINMODE}]
mkc_imp.lua.mk
mkc_imp.lua.mk is internal include file which is included from
mkc.prog.mk and mkc.lib.mk. Do not use it directly. It provides sup‐
port for Lua programming language, i.e. building and installing Lua-
and/or C-based modules. The following variables are provided:
LUA_MODULES
List of Lua modules to build and install. Dot in the module
name separates a dirname from basename. That is, actual .lua
file names are made of LUA_MODULES with dots replaced with unde‐
line symbol. At installation time dots are replaced with slash.
For example, if LUA_MODULES=socket.foo, then socket_foo.lua will
be installed to ${LUA_LMODDIR}/socket/foo.lua <M>
LUA_LMODULES
Deprecated. Filenames of Lua modules. Use LUA_MODULES instead.
<M>
LUA_CMODULE
Compiled Lua module written in, e.g., C or C++. Dot in the mod‐
ule name separates a dirname from basename. That is, actual .c
file names are made of LUA_MODULES with dots replaced with unde‐
line symbol. At installation time dots are replaced with slash.
For example, if LUA_CMODULES=socket.foo, then socket_foo.c will
be used for compiling a module and will be installed to
${LUA_CMODDIR}/socket/foo.so. <M>
SRCS List of source files to build the LUA_CMODULE. SRCS defaults to
${LUA_CMODULE:S|.|_|g}.c. <M>
LUA_LMODDIR
Directory for Lua modules written in Lua. It is assigned with a
help of pkg-config --variable=INSTALL_LMOD lua command and can
be overriden by user. <Iu>
LUA_CMODDIR
Directory for compiled Lua modules written in, e.g., C or C++.
It is assigned with a help of pkg-config --variable=INSTALL_CMOD
lua command and can be overriden by user. <Iu>
mkc_imp.intexts.mk
mkc_imp.intexts.mk is internal include file which is included from
mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly. It
provides conversion of <fn>.in files to <fn> by expanding the following
@@ patterns:
Pattern Result
----------------------
@prefix@ ${PREFIX}
@bindir@ ${BINDIR}
@mandir@ ${MANDIR}
@sbindir@ ${SBINDIR}
@libdir@ ${LIBDIR}
@libexecdir@ ${LIBEXECDIR}
@datadir@ ${DATADIR}
@sysconfdir@ ${SYSCONFDIR}
@incsdir@ ${INCSDIR}
@vardir@ ${VARDIR}
@sharedstate@ ${SHAREDSTATEDIR}
The following variables are provided:
INFILES
List of files to generate. <M>
INSCRIPTS
List of scripts to generate. <M>
INTEXTS_REPLS
List of Pattern/Replacement pairs separated by space, e.g.
INTEXTS_REPLS+= version ${VERSION}
INTEXTS_REPLS+= author_email ${AUTHOR_EMAIL}
<M>
INTEXTS_SED
List of additional sed(1) expressions for expanding, e.g.
INTEXTS_SED+= -e 's,0.29.1,${VERSION},g'
<M>
mkc_imp.info.mk
mkc_imp.info.mk is internal include file which is included from
mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly!
This module provides creation of .info files from .txi, .texi and .tex‐
info sources and provides the following variables:
MKINFO If "no", don't build or install Info documentation from Texinfo
source files. <Iu> [yes]
TEXINFO
List of Texinfo source files. Info documentation will consist
of single files with the extension replaced by .info. <M>
INFOFLAGS
Flags to pass to makeinfo. [] <Iu>
mkc_imp.man.mk
mkc_imp.man.mk is internal include file which is included from
mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly!
This module provides installation of manual pages and creation of cat‐
pages and HTML pages and provides the following variables:
MANDIR Target directory for man pages. <Iu> [${PREFIX}/man]
USETBL If not "no", preprocess man pages using tbl(1) while generating
cat pages. <IM> [no]
MANZ If not "no", compress manual pages at installation time. <Iu>
[no]
MAN Manual pages (should end in .1 - .9). If no MAN variable is
defined, "MAN=${PROG}.1" is assumed if it exists. <M>
MKMAN If "no", don't build or install the man pages, and also acts as
"MKCATPAGES=no MKHTML=no". <Iu> [yes]
MKCATPAGES
If "no", don't build or install the catman pages. <Iu> [no]
MKHTML If "no", don't build or install the HTML man pages. <Iu> [no]
HTMLDIR
Target directory for html pages generated from man pages. <Iu>
[${MANDIR}]
MLINKS List of manual page links (using a .1 - .9 suffix). The linked-
to file must come first, the linked file second, and there may
be multiple pairs. The files are hard-linked. <M>
mkc_imp.links.mk
mkc_imp.links.mk is internal include file which is included from
mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly! This
module provides creation of hard and symbolic links and provides the
following variables:
LINKS The list of binary links; should be full pathnames, the linked-
to file coming first, followed by the linked file. The files
are hard-linked. For example, to link ${BINDIR}/gzip and
${BINDIR}/gunzip, use:
LINKS= ${DESTDIR}/bin/gzip ${DESTDIR}${BINDIR}/gunzip
<M>
SYMLINKS
The list of symbolic links; should be full pathnames. Syntax is
identical to LINKS. Note that DESTDIR is not automatically
included in the link. <M>
mkc_imp.inc.mk
mkc_imp.inc.mk is internal include file which is included from
mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly!
This module provides installation of header files and provides the fol‐
lowing variables:
INCSDIR
See mkc.init.mk.
INCS The list of include files. <M>
INCSNAME
Target name of the include file, if only one; same as FILESNAME,
but for include files. <M>
INCSNAME_<file>
The name file <file> should be installed as, if not <file>, same
as FILESNAME_<file>, but for include files. <Mu>
INCSSRCDIR
Source directory for include files. This variable have an influ‐
ence on CPPFLAGS (-I${INCSSRCDIR} is added) and on an installa‐
tion of include files (paths in ${INCS} are relative to ${INCSS‐
RCDIR}). <M> [.]
mkc.minitest.mk
mkc.minitest.mk is an auxiliary include file that implement simple
framework for unit tests. Idea: application provides the target
test_output and expect.out file that contains ideal output. "bmake
test" runs "bmake test_output" and compare generated output with
expect.out.
TEST_PREREQS
Prerequisites for target "test". <Iu> [all]
mkc_imp.pkg-config.mk
mkc_imp.pkg-config.mk is internal include file which is included from
mkc.prog.mk and mkc.lib.mk. Do not use it directly! This module sup‐
ports dependencies controlled by pkg-config program. As a result
CPPFLAGS and LDADD variables are modified according to "pkg-config
--cflags ..." and "pkg-config --libs ...". The following variables are
provided:
MKC_CHECK_PKGCONFIG
List of libraries to check, for example, glib-2.0>=2.1. Spaces
around <=, >=, =, < and > are not allowed. As a result of the
check bmake's variable PKG_CONFIG.exists.<lib> is set to 1 for
success or 0 for failure. Unless MKC_NOAUTO is set to 1
-DHAVE_PKGCONFIG_<LIB>=1 is also added to CFLAGS if <lib> was
found. <LIB> is tr/a-z+.-/A-ZP__/ of <lib>. <M>
MKC_REQUIRE_PKGCONFIG
The same as MKC_REQUIRE_PKGCONFIG, but absense of library is
treated as a fatal error (See errorcheck target. <M>
PKG_CONFIG_DEPS
Synonym for MKC_REQUIRE_PKGCONFIG. Deprecated.
PKG_CONFIG.exists.<lib>
If "1", <lib> exists, "0" otherwise. Inside <lib> <=, >=, =, <
and > and replaced with _le_, _ge_, _eq_, _lt_ and _gt_ respec‐
tively. <Iu>
PKG_CONFIG_VARS.<lib>
List of variables to check for library <lib>. <M>
PKG_CONFIG.var.<lib>.<var>
Variable value (pkg-config --variable=<var> <lib>). <Iu>
PCNAME.<lib>
On some systems several versions of the same library may be
installed to differet directories (for example liblua for Lua
5.1 and 5.2). In order to avoid conflicts between them pc name
is changed (for example, lua5.1 and lua5.2 instead of lua).
This variable is a map from library name to pc name. <Iu>
[${lib}]
mkc_imp.pod.mk
mkc_imp.pod.mk is internal include file which is included from
mkc.prog.mk and mkc.lib.mk. Do not use it directly! It provides sup‐
port for POD (Plain Old Documentation) markup language, i.e. convertion
of POD documents to MAN pages (suffix rules: .pod.1, ... , .pod.9) and
HTMLs (.pod.html). The following variables are provided:
POD2MAN
Path to POD to MAN conversion utility <Iu> [pod2man].
POD2MAN_FLAGS
Flags passed to ${POD2MAN} <Iu> [-r '' -n '${.TARGET:T:R}' -c
''].
POD2HTML
Path to POD to HTML conversion utility <Iu> [pod2html].
POD2HTML_FLAGS
Flags passed to ${POD2HTML} <Iu> [].
mkc_imp.dep.mk
mkc_imp.dep.mk is internal include file which is included from
mkc.prog.mk and mkc.lib.mk. Do not use it directly! This include file
contains the default targets for building .depend files. It creates .d
files from entries in SRCS and DPSRCS that are C, C++, or Objective C
source files, and builds .depend from the .d files. All other files in
SRCS and all of DPSRCS will be used as dependencies for the .d files.
The following variables are provided:
SRCS The same as in mkc.prog.mk and mkc.lib.mk.
DPSRCS List of source files which are needed for generating dependen‐
cies, but are not needed in ${SRCS}.
MKDEP_CC
Compiler passed to mkdep(1). <Iu> [${CC}].
mkc_imp.foreign_autotools.mk
This module is activated if variable FOREIGN is set to "autotools" and
provides support for building external projects using autotools. It
also provides a recursive target mkgen for generating "configure"
script, "Makefile.in" file etc. using autoreconf(1) utility. The fol‐
lowing variables are provided:
FSRCDIR
Relative (to ${.CURDIR}) or absolute directory to autotools-
based sources.
AT_MAKE
Make(1)-like utility for the project. <Imu> [${MAKE}].
AT_USE_AUTOMAKE
If "yes", automake(1) is used. <M> [yes].
AT_CONFIGURE_ARGS
Extra arguments passed to "configure" script set in addition to
standard ones (--prefix, --bindir etc.). <Mu> [].
AT_CONFIGURE_ENV
Environment variables for "configure" script set in addition to
standard ones (CC, CFLAGS etc.). <Mu> [].
AT_AUTORECONF_ARGS
Arguments passed to autoreconf(1). <U> [-sif].
CROSS COMPILATION
The following variables are used for compiling software using cross-
tools.
MACHINE_GNU_PLATFORM
See TOOLCHAIN_PREFIX.
OPSYS_TARGET
OPSYS for target OS.
SYSROOT
Root directory for headers and libraries. If set, the following
variables are set to ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}<tool‐
name>: AR, AS, CXX, CPP, CC, INSTALL, LD, NM, OBJCOPY, OBJDUMP,
RANLIB, SIZE and STRIP. <U> [].
TOOLDIR
See TOOLCHAIN_DIR.
TOOLCHAIN_DIR
Directory that contains cross-toolchain. <U> [${TOOLDIR}/bin].
TOOLCHAIN_PREFIX
See SYSROOT. <U> [${MACHINE_GNU_PLATFORM}-].
ENVIRONMENT VARIABLES
MAKECONF
Path to mk.conf file .include-ed by mkc.*.mk files
FILES
/usr/local/etc/mk.conf
.include-ed by mkc.init.mk if exists
BUGS
Target errorcheck (configure) doesn't support parallel builds. In order
to build project in parallel, run it like the following
mkcmake errorcheck
mkcmake -j4 all
SEE ALSOmkc_check_header(1), mkc_check_prog(1), mkc_check_decl(1),
mkc_check_funclib(1), mkc_check_sizeof(1), mkc_check_custom(1),
bmake(1), mkdep(1),
AUTHOR
Aleksey Cheusov <vle@gmx.net>
Nov 30, 2014 MK-CONFIGURE(7)