mk-configure is a collection of include files for bmake
(portable version 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.configure.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.subprj.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.subprj.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
"${MAKECONF}" file if it exists. Otherwise, it loads
/etc/mk-c.conf if it exists. If neither ${MAKECONF} nor /etc/mk-c.conf
exist, it tries to load /etc/mk.conf file. If
"${SRCTOP}/Makefile.common" file exists it is also included by all
subprojects. 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 variables
are specified. In triangle brackets -- typical way of use, where I
means "Initialized by mk-configure", Iu means
"Initialized by mk-configure but may be overriden by user",
Im means "Initialized by mk-configure 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".
Mk-configure provides the following targets:
- all
- build everything.
- clean
- clean temporary files and directories with a help of ${CLEANFILES_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} program.
- 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 DESTDIR) and
create .tar/.tar.gz/.tar.bz2/.zip/.deb archive containing all installed
files. The target bin_deb expects debian control 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 Makefile override the standard behaviour.
NOTE: All targets in this list have pre_*,
do_* and post_* counterparts. See ALLTARGETS for details.
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 variables.
- 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
"cleandir". <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> []
- If defined, add "-d" to YFLAGS, and add dependencies from
<file>.y to <file>.h and <file>.c, and add <foo>.h
to CLEANFILES.
- 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>
[${PREFIX}/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:
/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.subdir.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.
/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
creating 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 messages 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 independent 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 independent
executables. 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 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>
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
targets. <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>
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 different 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 environment 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),
otherwise 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.
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.
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
following: 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-<target>-<subdir> is a synonym for
nodeps-<target>-<subdir> See examples/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 variable library is set to
"library" subdirectory and variable program 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 "program". 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 variable 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 subdirectories.
<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
${SHORTPRJNAME} 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
${SHORTPRJNAME} 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 standard 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 taking NODEPS
and NOSUBDIR variables into account.
The include file mkc.subdir.mk contains the default targets
for building 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 synchronization 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 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.configure.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".
- 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
- 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.<function>.<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 <function>:<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.<variable>.<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 declaration 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_MEMBER.<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_MEMBER_<TYPE>_<MEMBER>=1) is added to CFLAGS if the
specified member 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
specified 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
declaration is treated as a fatal error (See errorcheck
target.
- MKC_CHECK_CUSTOM
- A list of custom checks (list of names).
MKC_CUSTOM_FN.<custom_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.<custom_check_name> variable to 1, 0
or other value. If MKC_CUSTOM_FN.<custom_check_name> is unset, it
defaults to custom_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_CUSTOM. 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 respectively by analysing
program's help and/or version messages. 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 program 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_PROTOTYPE_HEADERS.<name> is a list of headers to #include.
mk-configure 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++ compiler.
- MKC_NOAUTO_FUNCLIBS
- See MKC_CHECK_FUNCLIBS
- MKC_NOAUTO
- See MKC_CHECK_{HEADERS,FUNCLIBS,FUNCS,VARS,DEFINES,SIZEOF}.
- 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 subprojects are created in the top-level
directory. If cache directory 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_strlcat.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_getline.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 appropriate 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.
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 different 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 is internal include file which is included
from mkc.prog.mk and mkc.lib.mk. Do not use it directly. It
provides support 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 undeline 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 module name
separates a dirname from basename. That is, actual .c file names are made
of LUA_MODULES with dots replaced with undeline 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 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 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 .texinfo 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 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 catpages 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 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 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 following 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 influence on
CPPFLAGS (-I${INCSSRCDIR} is added) and on an installation of include
files (paths in ${INCS} are relative to ${INCSSRCDIR}). <M>
[.]
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 is internal include file which is
included from mkc.prog.mk and mkc.lib.mk. Do not use it
directly! This module supports 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_ respectively. <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 is internal include file which is included
from mkc.prog.mk and mkc.lib.mk. Do not use it directly! It
provides support 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 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 dependencies, but are
not needed in ${SRCS}.
- MKDEP_CC
- Compiler passed to mkdep(1). <Iu> [${CC}].
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 following 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].