xenial (7) mk-configure.7.gz

Provided by: mk-configure_0.29.1-1_all bug

NAME

       mk-configure - lightweight replacement for GNU autotools

DESCRIPTION

       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".

   Targets
       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.

   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 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> []

       YHEADER
              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>

   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 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>

   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 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.

   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
       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.

   mkc.subdir.mk
       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
       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".

       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.<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}.

       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  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.

   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 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
       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
       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  .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
       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
       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 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
       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 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
       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
       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}].

   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 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].

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}<toolname>: 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

       /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 ALSO

       mkc_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)