Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MK-CONFIGURE(7) 						 MK-CONFIGURE(7)

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.config-
     ure.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  automati-
     cally 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 "${MAKE-
     CONF}" file if it exists.	Otherwise, it loads  /usr/local/etc/mkcmake.conf
     if  it  exists.  If neither ${MAKECONF} nor /usr/local/etc/mkcmake.conf ex-
     ist, it tries to load  /usr/local/etc/mk.conf  file.   If	"${SRCTOP}/Make-
     file.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.  Compiler-spe-
     cific  defaults  are  also  loaded from "~/.mkcmake" or system directories.
     This compiler-specific defaults are determined at build time  or  with  the
     help of mkc_compiler_settings utility.

     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  ini-
     tialized or overriden by user".

     Variable MKCMAKE is always 1 in mkcmake.

   Targets
     Mk-configure provides the following targets:

     all    build everything.

     clean  clean  temporary  files  and  directories  with the help of ${CLEAN-
	    FILES_CMD} and ${CLEANDIRS_CMD} commands.

     cleandir
	    remove all of the files removed by the  target  clean,  as	well  as
	    cache files created by mkc.configure.mk.

     installdirs
	    create target directories.

     installinstall programs, libraries, files, include files, manual pages etc.
	    to the target directories with the help of ${INSTALL} program.

     uninstall
	    remove installed files with the help of ${UNINSTALL} command.

     configure
	    check for MKC_ERR_MSG variable and fails if it set printing an error
	    message

     depend create  .depend_${.CURDIR:T}  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}) ac-
	    cording 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/files for the sample.

     NOTE:  Commands  associated with targets all, install, clean, cleandir, de-
     pend, test, installdirs, uninstall,  configure  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.

     AFLAGS Options  to ${CC} when compiling or linking .s or .S assembly source
	    files.  []

     AR     Create, modify, and extract from archives.	<Iu> [ar]

     ARFLAGSOptions to ${AR}.  <Iu> [rl]

     AS     Assembler.	<Iu> [as]

     BINDIR Target directory for utilities.  <Iu Mu> [${PREFIX}/bin]

     BMAKE_REQD
	    Minimal required version of bmake.	If it is  older,  mkcmake  exits
	    with error.  <Im>

     BZIP2  bzip2 copression tool.  <Iu> [bzip2]

     CC     C compiler.  <Iu> [cc]

     CC_PREFIX
	    Prefix command for ${CC}, for example, distcc or ccache.  <Iu> []

     CC_TYPEC  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
	    armcc     ARM 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> [no]

     CC_VERSION
	    C compiler version.  <I>

     CCSTD  Add C language standard command line option to the	compiler.   Sup-
	    ported  options:  c89,  gnu89  (C89 with GNU extensions), c99, gnu99
	    (C99 with GNU extensions), c11, gnu11  (C89  with  GNU  extensions),
	    c17,  gnu17 (C17 with GNU extensions).  If compiler is not known for
	    mk-configure or does not support appropriate option,  no  additional
	    options are applied.  <M> []

     CFLAGS Additional flags to the compiler when creating C objects.  <IM>

     CFLAGS0The  same  as  CFLAGS  but	CFLAGS0 is passed to the compiler before
	    CFLAGS.  Normally, CFLAGS0	should	be  modified  in  makefiles  and
	    should not be set from environment by user.  <M>

     CFLAGS.check
	    Same as CFLAGS but every option is checked whether it is a valid one
	    for  C  compiler.	Double	underline in the flag is considered as a
	    single space character.  <M> [unset]

     CFLAGS.dflt, CXXFLAGS.dflt
	    Additional flags passed to C or C++ compilers.  <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++ compil-
	    ers.  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>

     CFLAGS.warns.<warn-level>, CXXFLAGS.warns.<warn-level>
	    These variables are set by mk-configure and enable warnings for C or
	    C++ compilers according to warning level (WARNS).  <Iu>

     CFLAGS_<project>
	    Similar to CFLAGS but for project ${PROJECTNAME}.  <U>

     CFLAGS_<source>
	    Similar  to  CFLAGS  but for the specified source file.  Basename of
	    the source file is used.  <Mu>

     CLEANDIRS_CMD
	    Command for removing directories used by targets "clean"  and  "cle-
	    andir".  <Iu> [${RM} -rf]

     CLEANFILES_CMD
	    Command  for  removing files used by targets "clean" and "cleandir".
	    <Iu> [${RM} -f]

     COPTS  Additional flags to the compiler when creating C objects.  <U>

     COPTS_<project>
	    Similar to COPTS but for project ${PROJECTNAME}.  <U>

     CPP    C Pre-Processor.  <Iu> [cpp]

     CPPFLAGS
	    Additional flags to the C/C++ pre-processor.  <Iu>

     CPPFLAGS0
	    The same as CPPFLAGS but CPPFLAGS0 is passed to the compiler  before
	    CPPFLAGS.	Normally,  CPPFLAGS0 should be modified in makefiles and
	    should not be set from environment by user.  <M>

     CPPFLAGS_<project>
	    Similar to CPPFLAGS but for project ${PROJECTNAME}.  <U>

     CPPFLAGS_<source>
	    Similar to CPPFLAGS but for the specified source file.  Basename  of
	    the source file is used.  <Mu>

     CXX    C++ compiler.  <Iu> [c++]

     CXX_PREFIX
	    Prefix command for ${CXX}, for example, distcc or ccache.  <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>

     CXX_VERSION
	    C++ compiler version.  <I>

     CXXFLAGS
	    Additional flags to the compiler when creating C++ objects.  <Iu> []

     CXXFLAGS0
	    The  same as CXXFLAGS but CXXFLAGS0 is passed to the compiler before
	    CXXFLAGS.  Normally, CXXFLAGS0 should be modified in  makefiles  and
	    should not be set from environment by user.  <M>

     CXXFLAGS.check
	    Same  as  CXXFLAGS but every option is checked whether it is a valid
	    one for C++ compiler.  <M> [unset]

     CXXFLAGS_<project>
	    Similar to CXXFLAGS but for project ${PROJECTNAME}.  <U>

     CXXFLAGS_<source>
	    Similar to CXXFLAGS but for the specified source file.  Basename  of
	    the source file is used.  <Mu>

     CXXOPTSAdditional flags to the compiler when creating C++ objects.  <U>

     CXXOPTS_<project>
	    Similar to CXXOPTS but for project ${PROJECTNAME}.	<U>

     CXXSTD Add  C++  language	standard command line option to the compiler and
	    linker.  Supported options: c++98, gnu++98 (C++98  with  GNU  exten-
	    sions),  c++11,  gnu++11 (C++11 with GNU extensions), c++14, gnu++14
	    (C++14 with GNU extensions), c++17, gnu++17 (C++17 with  GNU  exten-
	    sions) If compiler is not known for mk-configure or does not support
	    appropriate option, no additional options are applied.  <M> []

     DATADIRTarget  directory  for  architecture-independent  text  files.  <Iu>
	    [${PREFIX}/share]

     DESTDIRInstallation prefix.  <U> []

     GZIP   gzip copression tool.  <Iu> [gzip]

     INCSDIRTarget directory for header files.	<Iu> [${PREFIX}/include]

     INFODIRTarget directory for .info files.  <Iu> [${PREFIX}/info]

     INSTALLinstall(1) command.  <Iu> [install or mkc_install]

     INSTALL_FLAGS
	    Flags passed to ${INSTALL} program.  <Iu> [-c]

     LD     Linker.  <Iu> [ld]

     LD_TYPELinker type. This variable is set by mk-configure and can be overri-
	    den 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>

     LEX    Lexical analyzer.  <Iu> [lex]

     LEXLIB Object file for lex.  <Iu> [-ll]

     LFLAGS Options to ${LEX}.	<Iu> []

     LIBDIR Target directory for libraries.  <Iu> [${PREFIX}/lib]

     LIBEXECDIR
	    Target directory for system utilities.  <Iu> [${PREFIX}/libexec]

     LN     ln(1) tool.  <Iu> [ln]

     LN_S   Tool equivalent to ln -s.  <Iu> [${LN} -s]

     LORDER List dependencies for object files.  <Iu> [lorder]

     LPREFIXSymbol prefix for ${LEX} (see -P option in lex(1)).  <Iu> [yy]  <Iu>
	    [yy]

     MAKE   bmake(1).  [bmake or make on NetBSD]

     MAKEDEPEND
	    makedepend(1) tool.  <Iu>

     MKC_ERR_MSG
	    If set, keep an error message.  <I M> []

     MKC_REQD
	    Minimal  required  version	of mk-configure.  If required version is
	    not found,	mkcmake  fails.  This  variable  should  be  set  before
	    mkc.init.mk is included, directly or indirectly.  <M>

     MKC_VERSION
	    Version  of  mk-configure.	This variable is always set to non-empty
	    value when mkc.*.mk include files are used, so you	can  use  it  to
	    initialize mk-c variables in mk.conf. For example:

	    /usr/local/etc/mk.conf:
	       ...
	       .ifdef MKC_VERSION
	       COPTS?=	    -O2 -Werror
	       SHRTOUT=    yes
	       .endif # MKC_VERSION

	    <I>

     MKCOMPILERSETTINGS
	    At	build  time mk-configure detects some compilers capabilities and
	    saves   them    to	  system-wide	 mkc_imp.cc_${CC_TYPE}-${CC_VER-
	    SION}-${CC_TRIPLET}.mk	  (for	     C	     compiler)	     and
	    mkc_imp.cxx_${CXX_TYPE}-${CXX_VERSION}-${CXX_TRIPLET}.mk  (for   C++
	    compiler)  files.  At  run	time mk-configure loads these files when
	    necessary. If they are absent, that is, if you use compilers unknown
	    to mk-configure, it exits with error. In order to fix this, you have
	    to run mkc_compiler_setting(1) utility manually. This utility gener-
	    ates similar files in ${HOME}/.mkcmake directory.  However,  if  MK-
	    COMPILERSETTINGS  variable is set to yes, mkc_compiler_setting(1) is
	    run automaticlly and mk-configure loads the generated files.  If MK-
	    COMPILERSETTINGS is force, compiler configuration file is always re-
	    generated.	Triplet component of  the  compiler  configuration  file
	    name may absent for some compilers.  <Iu> [no]

     MKDEP  mkdep(1) tool.  <Iu>

     MKDEPEND
	    If this variable is set to yes and compiler supports -MMD or -MD op-
	    tions,  these  option are applied and .d dependency files are gener-
	    ated. These .d files are automatically  loaded  by	mkcmake.   Thus,
	    continuous	development  is possible without explicit call of depend
	    target.  <U> []

     MKDIR  mkdir(1) tool.  <Iu> [mkdir]

     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 in-
	    stalling files (target install).  <Iu> [yes]

     MKOBJDIR
	    If	"yes",	the  target "obj" creates object directories, if "auto",
	    object directories are created automatically. Otherwise  object  di-
	    rectories are not created.	<Iu> [auto]

     NM     List symbols from object files.  <Iu> [nm]

     OBJCOPYCopy and translate object files.  <Iu> [objcopy]

     OBJDUMPDisplay information from object files.  <Iu> [objdump]

     OBJTOP Top-level	object	 directory   which  defaults  to  ${.OBJDIR}  if
	    ${.MAKE.LEVEL} is 0.  <I>

     PREFIX Target directory.  <U> [/usr/local]

     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 de-
	    velopment process.

	    /usr/local/etc/mk.conf:
	       ...
	       .ifdef MKC_VERSION
	       ...
	       .if ${PROJECTNAME} == "foo"
	       SHRTOUT=    yes
	       PROG.gcc=   /usr/bin/gcc
	       CC_TYPE=    gcc
	       COPTS=	   -O0 -g
	       .endif
	       .endif # MKC_VERSION

	    <Im>

     RANLIB Generate index to archive.	<Iu> [ranlib]

     RM     rm(1) tool.  <Iu> [rm]

     SBINDIRTarget  directory  for  administration  utilities.	  <Iu>	 [${PRE-
	    FIX}/sbin]

     SHAREDSTATEDIR
	    Target directory for modifiable architecture-independent data files.
	    <Iu> [${PREFIX}/com]

     SHRTOUTIf	not  "no", output messages about compiling, linking and creating
	    libraries are shortened and formatted.  <Iu> [no]

     SIZE   List section sizes and total size.	<Iu> [size]

     SRC_PATHADD
	    List of directories added to .PATH.  <Im> []

     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>

     STRIP  Discard symbols from object files.	<Iu> [strip]

     STRIPFLAG
	    The flag passed to the install program to cause  the  binary  to  be
	    stripped.  <Iu>

     SYSCONFDIR
	    Target directory for configuration files.  <Iu> [${PREFIX}/etc]

     TAR    tar archiver.  <Iu> [tar]

     TSORT  Topological sort of a directed graph.  <Iu> [tsort -q]

     UNINSTALL
	    Command  for removing files used by target "uninstall".  <Iu> [${RM}
	    -f]

     USE_SSPIf "yes", enables stack protection code, which detects  stack  over-
	    flows  and	aborts	the  program. This enhances security but imposes
	    some performance penalty.  <U>

     VARDIR Target directory for modifiable  single-machine  data  files.   <Iu>
	    [${PREFIX}/var]

     WARNERRIf	"yes",	force  warnings to be reported as errors.  At the moment
	    this is supported for GCC, clang, Intel C/C++ and Sun's  C/C++  com-
	    pilers.  <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]

     YACC   LALR(1) parser generator.  <Iu> [yacc]

     YFLAGS Options to ${YACC}.  <Iu> []

     YHEADERIf defined, add "-d" to YFLAGS, and add dependencies  from	<file>.y
	    to <file>.h and <file>.c, and add <foo>.h to CLEANFILES.

     YPREFIXIf defined, add "-p ${YPREFIX}" to YFLAGS.

     ZIP    zip copression tool.  <Iu> [zip]

   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:

     CLEANDIRDIRS
	    Additional directories to remove (recursively) for the cleandir tar-
	    get.  <I M>

     CLEANDIRFILES
	    Additional files to remove for the cleandir target.  <I M>

     CLEANDIRS
	    Additional directories to remove (recursively)  for  the  clean  and
	    cleandir targets.  <I M>

     CLEANFILES
	    Additional	files  to remove for the clean and cleandir targets.  <I
	    M>

     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>

     FILESGRP
	    File group. If bmake is run with root  privileges,	it  defaults  to
	    <Mu>

     FILESGRP_<fn>
	    File  group of the specific file <fn>.  <Mu> ${BINGRP} or to `id -g`
	    otherwise.	<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>

     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>

   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:

     DPINCDIRS
	    See LIBDEPS in section mk.subprj.mk.

     DPLDADDSee LIBDEPS in section mk.subprj.mk.

     DPLIBDIRS
	    See LIBDEPS in section mk.subprj.mk.

     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]

     LDADD  Additional objects.  Usually used for libraries.   For  example,  to
	    link with the compatibility and utility libraries, use:

		LDADD+=  -lutil -lcompat

	    <U>

     LDADD0 The  same  as LDADD but LDFLAGS0 and LDADD0 are passed to the linker
	    before LDFLAGS and LDADD.  <M>

     LDADD_<project>
	    Similar to LDADD but for project ${PROJECTNAME}.

     LDFLAGSAdditional linker flags. Often used for specifying library	directo-
	    ries.

		LDFLAGS+=  -L/opt/company/software/lib

	    <Mu I>

     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>

     LDFLAGS_<project>
	    Similar to LDFLAGS but for project ${PROJECTNAME}.

     MKPIE  If	"yes",	create	Position Independent Executable (PIE), otherwise
	    create a regular executable.  <Mu> [no]

     MKSHAREIf "no", act as "MKHTML=no MKINFO=no MKCATPAGES=no MKMAN=no".   I.e,
	    don't  build  catman  pages, man pages, info documentation,...  <Iu>
	    [yes]

     PROG   The name of the program to build.

     PROGNAME
	    The name that the above program will be installed as,  if  different
	    from ${PROG}.  <M>

     PROGS  The  names	of  the programs to build.  If neither PROG nor PROGS is
	    not supplied, nothing is built.  <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>

     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]

     mkc.prog.mk includes mkc.files.mk and therefore supports all variables sup-
     ported by it.

     The  order  of  options  passed  to  the  C  compiler: CPPFLAGS0, CPPFLAGS,
     CPPFLAGS_<project>,   CFLAGS.ssp,	 CFLAGS.pie,	CFLAGS.warns,	 CFLAGS,
     CFLAGS_<project>, CFLAGS.pic (for shared objects), COPTS, COPTS_<project>

     The  order  of  options  passed  to  the C++ compiler: CPPFLAGS0, CPPFLAGS,
     CPPFLAGS_<project>, CXXFLAGS.ssp, CXXFLAGS.pie,  CXXFLAGS.warns,  CXXFLAGS,
     CXXFLAGS_<project>,    CXXFLAGS.pic    (for    shared    objects),   COPTS,
     COPTS_<project>

   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:

     DPINCDIRS
	    See LIBDEPS in section mk.subprj.mk.

     DPLDADDSee LIBDEPS in section mk.subprj.mk.

     DPLIBDIRS
	    See LIBDEPS in section mk.subprj.mk.

     EXPORT_SYMBOLS
	    Only  symbols  listed  in a specified file (one symbol per line) are
	    exported. Empty lines and comments started with  #	symbol	are  ig-
	    nored.  This  variable  has no effect on some platforms.  By default
	    all symbols are exported.  <M> []

     LDADD LDADD_<project>
	    Additional objects. See mkc.prog.mk

     LDFLAGS LDFLAGS_<project>
	    Additional linker flags. See mkc.prog.mk

     LIB    The name of the library to build.  <M>

     LIBDIR See Common variables and mkc.files.mk sections.

     LIBGRP Library group. If bmake is run by an unprivileged user, it	defaults
	    to `id -g`.  <Iu>

     LIBMODELibrary mode.  <Iu> [${NONBINMODE}]

     LIBOWN Library  owner. If bmake is run by an unprivileged user, it defaults
	    to `id -u`.  <Iu>

     MAN    The manual pages to be installed (use a .1 - .9 suffix).  <M>

     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]

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

     SHLIBMODE
	    Shared library mode.  <Iu>

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

     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>

     Static  libraries are ranlib'd when made.	mkc.lib.mk includes mkc.files.mk
     and therefore supports all its variables as well.	 After	creaion  of  li-
     braries  ${.CURDIR:T}.done  file  is  created  and used for handling inter-
     project (See LIBDEPS variable) dependencies.

     The order of options passed to the C and C++ compilers are the same  as  in
     mkc.prog.mk.

   mkc.subprj.mk
     The  include  file mkc.subprj.mk handles subprojects (subdirectories) orga-
     nized  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  subpro-
     jects  having no dependencies and so on).	There is also a target which al-
     lows the command bmake <subdir> where <subdir> is any directory  listed  in
     the  variable  SUBPRJ.   The  following  targets  are  also provided: <tar-
     get>-<subdir> where <target> is either of the following: all,  clean,  cle-
     andir, depend, installdirs, install, uninstall and filelist.  Also provided
     are:  targets  nodeps-<target>-<subdir> and subdir-<target>-<subdir>.  Dif-
     ference between <target>-<subdir> and nodeps-<target>-<subdir> is that mkc-
     make <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:

     ALLTARGETS
	    A  list of targets for which pre_*, do_* and post_* counterparts ex-
	    ist, 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_*.

     COMPATLIB
	    Subproject's basename for compatibility library.  If  this	variable
	    is set, MKC_SOURCE_FUNCLIBS and FEATURES do not change SRCS for sub-
	    projects other than ${COMPATLIB}.  <M> []

     EXPORT_VARNAMES
	    List  of variables to export before running make for subdirectories.
	    <Mu> [MKC_CACHEDIRSRCTOPOBJTOPSTATICLIBSCOMPATLIB]

     INTERNALLIBS
	    A list of subprojects (basenames) with  internal  libraries.   These
	    libraries are static and not installed by target "install".  <M> []

     LIBDEPSA  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 <li-
	    brary: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  auto-
	    matically  included from ${SRCDIR_program}/Makefile if it exists. In
	    this file DPLDADD [${library:T:S/^lib//}], DPLIBDIRS [${OBJDIR_${li-
	    brary:S,/,_,g}}] and DPINCDIRS  [${SRCDIR_${library:S,/,_,g}}  ${OB-
	    JDIR_${library:S,/,_,g}}],	may  be set to non-default values. These
	    three variables then changes LDADD0, LDFLAGS0 and CPPFLAGS0  respec-
	    tively  in	subproject "program".  The dependency graph specified by
	    variable LIBDEPS is available to all subproject via environment.

     MKRELOBJDIR
	    If "yes", object directories ${OBJTOP}/dir are used. Unlike  MAKEOB-
	    JDIRPREFIX object directories do not contain top-level ${.CURDIR} in
	    paths.  <Iu> [no]

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

     NOEXPORT_VARNAMES
	    List of variables excluded from EXPORT_VARNAMES.  <Mu> []

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

     SHORTPRJNAME
	    If "yes", special targets with last component of the subprojects are
	    provided.  <Im> [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".

     STATICLIBS
	    A list of subprojects (basenames) with static libraries.  If  depen-
	    dency  is  mentioned  in this variable, the suffix _pic is automati-
	    cally added for PIE-executables or shared libraries that  depend  on
	    this  library.  This variable is automatically passed to subprojects
	    via environment.  <Mu> []

     SUBPRJ List of subprojects (subdirectories) and dependencies. If the subdi-
	    rectory doesn't exist the subproject becomes "virtual"  and  may  be
	    used to group several subprojects into a new virtual one.  <M>

     SUBPRJ_DFLT
	    List of projects built and installed by default.  The default is all
	    projects listed in SUBPRJ.	<IMu>

     SUBPRJSRCTOP
	    This  variables  contains ${.CURDIR} directory and is passed to sub-
	    projects.  <I> [${.CURDIR}]

     TARGETSA 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, configure, filelist, obj] By setting this
	    variable in the Makefile one can add new targets  for  special  pur-
	    poses, for example, static code analysis, partial builds etc.

     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  de-
	    pendencies.   Targets  subdir-<target>-<subdir:T>  and  nodeps-<tar-
	    get>-<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 al-
     lows 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 bar-
     rier when multiple make jobs are run; subdirs before the  .WAIT  must  com-
     plete  before  any  subdirs after .WAIT are started.  See bmake(1) for some
     caveats on use of .WAIT and other special sources. SUBDIR variable is  pro-
     vided 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 fea-
     tures like headers, function or variable declarations, function implementa-
     tion 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 itself includes
     mkc.init.mk, then mkc.conf.mk , and finally internal include file which up-
     dates CPPFLAGS, CFLAGS, LDADD and SRCS.  mkc.configure.mk supports the fol-
     lowing variables.

     MKCHECKS
	    If "no", none of the checks are performed. It is set to "yes" unless
	    target is "clean" and "cleandir".

     MKC_CACHEDIR
	    Directory where intermediate and cache files are  created.	 It  de-
	    faults  to ${.OBJDIR}.  By default MKC_CACHEDIR variable is exported
	    for subprojects.  As a result cache files for subprojects  are  cre-
	    ated  in the top-level directory.  If cache directory doesn't exist,
	    it is created automatically.

     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,  bi-
		   son 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_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.  Double underline in the option is considered as a
	    single space character.

	    Ex.
	      MKC_CHECK_CC_OPTS = -Wall -errwarn=%all --param__ssp-buffer-size=1
	    Res.
	     HAVE_CC_OPT.-Wall=1
	     HAVE_CC_OPT.-errwarn_%all=0
	     HAVE_CC_OPT.--param__ssp-buffer-size_1=1

     MKC_CHECK_CCLD_OPTS
	    Same as MKC_CHECK_CC_OPTS except that option "-c" is not  passed  to
	    the   compiler,   so,   executable	 is   created.	  As   a  result
	    HAVE_CCLD_OPT.<option:S/=/_/g> is set to 1 or 0.

     MKC_CHECK_CUSTOM
	    A list  of	custom	checks	(list  of  names).   MKC_CUSTOM_FN.<cus-
	    tom_check_name>  is  a "C" or "C++" source filename or an executable
	    program for your custom check, e.g., filename.c,  filename.cc,  sub-
	    dir/filename.cxx,  filename.C,  filename.cpp,  filename.c++  or sub-
	    dir/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_<CUS-
	    TOM_CHECK_NAME>=1 is added to CPPFLAGS if the specified  check  suc-
	    ceeded  unless  MKC_NOAUTO	is  set to 1 and MKC_CUSTOM_NOAUTO.<cus-
	    tom_check_name> is set to "yes".  Here <CUSTOM_CHECK_NAME> is upper-
	    case    for    <custom_check_name>.     If	   MKC_CUSTOM_LINK.<cus-
	    tom_check_name>  is "yes", then C or C++ source file is compiled and
	    linked into executable.  Also, CPPFLAGS, CFLAGS, CXXFLAGS,	LDFLAGS,
	    LDADD,	 MKC_CUSTOM_CPPFLAGS.<custom_check_name>,	MKC_CUS-
	    TOM_CFLAGS.<custom_check_name>,	       MKC_CUSTOM_CXXFLAGS.<cus-
	    tom_check_name>, MKC_CUSTOM_LDFLAGS.<custom_check_name> and MKC_CUS-
	    TOM_LDADD.<custom_check_name> flags are passed to the compiler. Nor-
	    mally  cache  file name contains <custom_check_name> unless MKC_CUS-
	    TOM_CACHE.<custom_check_name> is set to something else.

	     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_CHECK_CXX_OPTS
	    Same as  MKC_CHECK_CC_OPTS	but  for  C++  compiler.   As  a  result
	    HAVE_CXX_OPT.<option:S/=/_/g> is set to 1 or 0.

     MKC_CHECK_CXXLD_OPTS
	    Same  as  MKC_CHECK_CCLD_OPTS  but	for  C++  compiler.  As a result
	    HAVE_CXXLD_OPT.<option:S/=/_/g> is set to 1 or 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.<de-
	    fine>.<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  CPPFLAGS  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_CHECK_FUNCLIBS
	    List of <function>:<library> pairs to check, <library> part  is  op-
	    tional.  If  <library> is present, presense of <function> in libc is
	    also checked automatically.

	    As a  result  of  the  check  bmake's  variable  HAVE_FUNCLIB.<func-
	    tion>.<library>  (or  HAVE_FUNCLIB.<function>) is set to either 0 or
	    1.

	    If <function> is found in <library> but not in libc or <function> is
	    "main" and is found in  <library>,	"-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_CHECK_FUNCS<N>
	    List  of  <func>:<header> to 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 CPPFLAGS if  the  speci-
	    fied  function  was  detected  unless  MKC_NOAUTO  is  set	to 1. If
	    MKC_FUNC_OR_DEFINE.<func> is "yes", equivalent define leads  to  the
	    same results.
	    <HEADER>: tr|a-z./|A-Z__|g

	     Ex:  MKC_CHECK_FUNCS2 += fgetln:stdio.h
		  MKC_CHECK_FUNCS6 += pselect:sys/select.h
		  MKC_CHECK_FUNCS1 += htobe32:sys/endian.h
		  MKC_FUNC_OR_DEFINE.htobe32 += yes
	     Res: HAVE_FUNC2.fgetln.stdio_h = 1
		  HAVE_FUNC6.pselect.sys_select_h = 1
		  HAVE_FUNC1.htobe32.sys_endian_h=1
		  CFLAGS += -DHAVE_FUNC2_FGETLN_STDIO_H=1 \
			 += -DHAVE_FUNC6_PSELECT_SYS_SELECT_H=1 \
		      += -DHAVE_FUNC1_HTOBE32_SYS_ENDIAN_H

     MKC_CHECK_HEADER_FILES
	    Same as MKC_CHECK_HEADERS but $CC -E is used for checking instead of
	    $CC    -c.	   Also,    HAVE_HEADER_FILE.<header>	 variables   and
	    HAVE_HEADER_FILE<HEADER> defines are set.

     MKC_CHECK_HEADERS
	    List of headers to check with the help of $CC -c.  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	CPPFLAGS  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_CHECK_MEMBERS
	    List  of  <type>.<member>:<header>	to  check.  <header> part is op-
	    tional.

	    As a result of the check bmake's  variable	HAVE_MEMBER.<type>_<mem-
	    ber>.<header> (or HAVE_MEMBER.<type>_<member>) is set to either 0 or
	    1 depending on the result.
	    <header>: tr|./|__|g
	    Also   -DHAVE_MEMBER_<TYPE>_<MEMBER>_<HEADER>=1   (or    -DHAVE_MEM-
	    BER_<TYPE>_<MEMBER>=1) is added to CPPFLAGS 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_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.<prog-
	    name> also changes cache file names.

     MKC_CHECK_PROTOTYPES
	    A  list  of  checks  (list	of  names)  for  C  function prototypes.
	    MKC_PROTOTYPE_FUNC.<name> is a  C  function  prototype.   MKC_PROTO-
	    TYPE_HEADERS.<name>  is  a	list  of  headers  separated by space or
	    comma.  mk-configure verifies that the specified prototype	is  cor-
	    rect and if so, HAVE_PROTOTYPE.<name> bmake variable is set to 1 and
	    -DHAVE_PROTOTYPE_<NAME>=1  is added to CPPFLAGS 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_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 CPPFLAGS 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_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  CPPFLAGS  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_CHECK_VARS
	    List of variable:header to check. <header> part is optional.

	    As	a  result  of  the  check  bmake's  variable  HAVE_DEFINE.<vari-
	    able>.<header> (or HAVE_DEFINE.<variable>) is set to either 0 or 1
	    <header>: tr|./|__|g
	    Also  -DHAVE_DEFINE_<VARIABLE>_<HEADER>=1  (or  -DHAVE_DEFINE_<VARI-
	    ABLE>=1) is added to CPPFLAGS 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_COMMON_DEFINES
	    List   of  defines	always	passed	to  compiler  in  MKC_CHECK_{DE-
	    FINES,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_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_CUSTOM_DIR
	    Directory with custom checks source files.	See MKC_CHECK_CUSTOM. It
	    defaults to ${.CURDIR}.

     MKC_DELETE_TMPFILES
	    If set to 1, temporary files are removed.

     MKC_FEATURES
	    This is a list of "features" required by project. In general, a fea-
	    ture 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  in-
	    cluded  mkc_imp.f_FEATURENAME.mk  file and all required actions (in-
	    cludes, define checks etc.)  are made  in  mkc_FEATURENAME.h  header
	    file.  Currently the following features are provided:

	    arc4random
		   This  feature  provides  arc4random(3), arc4random_buf(3) and
		   arc4random_uniform(3) functions available in BSDs.  If  these
		   functions are absent on your system, install libbsd library.

	    bswap  This  feature  provides bswap16(3), bswap32(3) and bswap64(3)
		   functions available in *BSD.

	    dprintf
		   This feature provides dprintf(3).

	    efun   This feature  provides  esetfunc(3),  efopen(3),  ecalloc(3),
		   emalloc(3),	 erealloc(3),  ereallocarr(3),	estrdup(3),  es-
		   trndup(3),  estrlcpy(3),  estrlcat(3),  easprintf(3),   estr-
		   toi(3), estrtou(3) and evasprintf(3) functions from NetBSD.

	    err    This  feature  provides err(3), errx(3), verr(3) and verrx(3)
		   BSD-isms.

	    errc   This feature provides errc(3) and verrc(3) BSD-isms.

	    fgetln
		   This feature provides fgetln(3) BSD-ism.

	    fparseln
		   This feature provides fparseln(3) BSD-ism.

	    fts    This feature provides fts_open(3), fts_read(3) etc. functions
		   available on BSDs and Linux. If it is absent on your  system,
		   you	have  to  install  libfts  (both  headers  and library).
		   libfts is a part of musl project.

	    getdelim
		   This feature provides getdelim(3) from POSIX.

	    getline
		   This feature corresponds to getline(3) function  which  is  a
		   part of POSIX2008 unavailable on some systems. mkc_imp.f_get-
		   line.mk  checks  whether  getline declaration is available in
		   stdio.h and implementation is available in libc. If not, get-
		   line.c provided by mk-configure is added to SRCS and declara-
		   tion is provided in mkc_getline.h header.

	    humanize_number
		   This  feature  provides  humanize_number(3)	 function   from
		   NetBSD.

	    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), dl-
		   sym(3), dlclose(3) etc.

	    libl   Adds -ll or -lfl to LDADD depending on which  one  is  avail-
		   able. One can use this feature instead of LIBLEX variable.

	    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.

	    macro  This feature provides the following macro stolen from NetBSD.

		   __aligned(x)
			  defined as __attribute__((aligned(x))) if supported by
			  compiler,

		   __always_inline
			  defined as __attribute__((always_inline)) if supported
			  by compiler,

		   __arraycount(a)
			  defined as (sizeof(__a)/sizeof(__a[0])) ,

		   __constfunc
			  defined as __attribute__((const)) if supported by com-
			  piler,

		   __dead
			  defined as __attribute__((noreturn)) if  supported  by
			  compiler,

		   MIN(a,b) and MAX(a,b),
			  __pure  defined  as __attribute__((pure)) if supported
			  by compiler,

		   __printflike(n,m)
			  defined as __attribute__((format (printf, n,	m)))  if
			  supported by compiler.

		   __UNCONST(a)
			  defined  as ((void *) ((const char *)(p) - (const char
			  *)0))

	    posix_getopt
		   It is well-known that glibc getopt(3)  does	not  conform  to
		   POSIX  by  default.	 This  feature provides POSIX-ly correct
		   getopt.

	    progname
		   This feature provides getprogname(3) and setprogname(3) func-
		   tions available in *BSD.

	    pwdgrp
		   This  feature  provides  user_from_uid(3),  uid_from_user(3),
		   group_from_gid(3), gid_from_group(3) functions from *BSD.

	    raise_default_signal
		   This  feature  provides function raise_default_signal(3) from
		   NetBSD.

	    RB SPLAY
		   BSD systems provide sys/tree.h header where RB_* and  SPLAY_*
		   macroses are defined for red-black tree and splay. These fea-
		   tures  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 pro-
		   vided by mk-configure is included.

	    reallocarr
		   This feature provides reallocarr(3) function from NetBSD.

	    reallocarray
		   This feature provides reallocarray(3) function from OpenBSD.

	    shquote
		   This feature provides shquote(3) function from NetBSD.

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

	    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.

	    strndup
		   This feature provides strndup(3) from POSIX.

	    strsep
		   This features provides strsep(3) and stresep(3) functions.

	    strtoi
		   This  feature  provides  strtoi(3)  function  introduced   in
		   NetBSD.

	    strtou
		   This   feature  provides  strtoi(3)	function  introduced  in
		   NetBSD.

	    vis    This feature provides  vis(3),  nvis(3),  svis(3),  snvis(3),
		   strvis(3),  strnvis(3),  strsvis(3), strsnvis(3), strvisx(3),
		   strnvisx(3), strenvisx(3), strsvisx(3), strsnvisx(3), strsen-
		   visx(3),  strunvis(3),  strnunvis(3),  strunvisx(3),  strnun-
		   visx(3) and unvis(3) from NetBSD.

	    warn   This   feature   provides  warn(3),	warnx(3),  vwarn(3)  and
		   vwarnx(3) BSD-isms.

     MKC_NOAUTO
	    See MKC_CHECK_{HEADERS,FUNCLIBS,FUNCS,VARS,DEFINES,SIZEOF}.

     MKC_NOAUTO_FUNCLIBS
	    See MKC_CHECK_FUNCLIBS

     MKC_NOCACHE
	    All results are cached unless MKC_NOCACHE variable is set  non-empty
	    value

     MKC_REQUIRE_BUILTINS
	    The  same  as  MKC_CHECK_BUILTINS, but failure is treated as a fatal
	    error (See configure target).

     MKC_REQUIRE_CUSTOM
	    The same as MKC_CHECK_CUSTOM, but failure is treated as a fatal  er-
	    ror  (See  configure  target). 0 and empty value of CUSTOM.xxx means
	    failure.

     MKC_REQUIRE_DEFINES
	    The same as MKC_CHECK_DEFINES, but absense of the define is  treated
	    as a fatal error (See configure target).

     MKC_REQUIRE_FUNCLIBS
	    The same as MKC_CHECK_FUNCLIBS, but absense of funclib is treated as
	    a fatal error (See configure target).

     MKC_REQUIRE_FUNCS<N>
	    The same as MKC_CHECK_FUNCS<N>, but absense of the function declara-
	    tion is treated as a fatal error (See configure target).

     MKC_REQUIRE_HEADER_FILES
	    The same as MKC_CHECK_HEADER_FILES, but absense of header is treated
	    as a fatal error (See configure target).

     MKC_REQUIRE_HEADERS
	    The same as MKC_CHECK_HEADERS, but absense of header is treated as a
	    fatal error (See configure target).

     MKC_REQUIRE_MEMBERS
	    The  same as MKC_CHECK_MEMBERS, but absense of the member is treated
	    as a fatal error (See configure target).

     MKC_REQUIRE_PROGS
	    The same as MKC_CHECK_PROGS, but absense of program is treated as  a
	    fatal error (See configure target).

     MKC_REQUIRE_PROTOTYPES
	    The same as MKC_CHECK_PROTOTYPES, but incorrect prototype is treated
	    as a fatal error (See configure target).

     MKC_REQUIRE_TYPES
	    The  same as MKC_CHECK_TYPES, but absense of the type declaration is
	    treated as a fatal error (See configure target).

     MKC_REQUIRE_VARS
	    The same as MKC_CHECK_VARS, but absense of the variable  declaration
	    is treated as a fatal error (See configure target).

     MKC_SHOW_CACHED
	    Setting it to 0 will hide

	       Checking ... (cached) ...

	    messages, that is, messages about fetching results from cache files.

     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  de-
	    faults 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_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 un-
	    less MKC_NOAUTO=1.

	     Ex:  MKC_SOURCE_FUNCLIBS+= getline
	     Res: SRCS+= getline.c
		  HAVE_FUNCLIB.getline= 0

   mkc.conf.mk
     The same as mkc.configure.mk but mkc.init.mk is not included by mkc.conf.mk
     in the beginning, and CFLAGS, CPPFLAGS, LDADD and SRCS  varibales	are  not
     modified.	Instead,  internal variables MKC_CFLAGS, MKC_CPPFLAGS, MKC_LDADD
     and MKC_SRCS contain all changes and will be applied  later.  One	can  use
     this module for implementing your own "features" similar to MKC_FEATURES.

   mkc_imp.scripts.mk
     It  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:

     SCRIPTSA  list  of  interpreter  scripts  (written in shell, awk, lua etc).
	    These are installed like programs.	<M>

     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>

     SCRIPTSGRP
	    Script file group.	<Iu> [${BINGRP}]

     SCRIPTSMODE
	    Script file mode.  <Iu> [${BINMODE}]

     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  <sub-
	    dir>/<filename>, SCRIPTSNAME_<subdir>_<filename> is used.  <Mu>

     SCRIPTSOWN
	    Script files owner.  <Iu> [${BINOWN}]

   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  pro-
     gramming  language,  i.e.	building and installing Lua- and/or C-based mod-
     ules.  The following variables are provided:

     LUA_CMODDIR
	    Directory for compiled Lua modules written in, e.g., C or  C++.   It
	    is	assigned with the help of pkg-config --variable=INSTALL_CMOD lua
	    command and can be overriden by user.  <Iu>

     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  sym-
	    bol.   At  installation time dots are replaced with slash. For exam-
	    ple, if LUA_CMODULES=socket.foo, then socket_foo.c will be used  for
	    compiling	a   module   and   will   be  installed  to  ${LUA_CMOD-
	    DIR}/socket/foo.so.  <M>

     LUA_LMODDIR
	    Directory for Lua modules written in Lua. It is  assigned  with  the
	    help  of  pkg-config  --variable=INSTALL_LMOD lua command and can be
	    overriden by user.	<Iu>

     LUA_LMODULES
	    Deprecated. Filenames of Lua modules. Use LUA_MODULES instead.  <M>

     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>

     SRCS   List of source files to build the  LUA_CMODULE.   SRCS  defaults  to
	    ${LUA_CMODULE:S|.|_|g}.c.  <M>

   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 pro-
     vides 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:

     INFILESList 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.40.0,${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:

     INFOFLAGS
	    Flags to pass to makeinfo. [] <Iu>

     MKINFO If "no", don't build or  install  Info  documentation  from  Texinfo
	    source files.  <Iu> [yes]

     TEXINFOList  of  Texinfo  source files.  Info documentation will consist of
	    single files with the extension replaced by .info.	<M>

   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:

     HTMLDIRTarget  directory  for  html  pages  generated from man pages.  <Iu>
	    [${MANDIR}]

     MAN    Manual pages (usually end in .1 - .9).  <M>

     MANDIR Target directory for man pages.  <Iu> [${PREFIX}/man]

     MANZ   If not "no", compress manual pages at installation time.  <Iu> [no]

     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]

     MKMAN  If "no", don't build or install the man pages, and also acts as "MK-
	    CATPAGES=no MKHTML=no".  <Iu> [yes]

     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 mul-
	    tiple pairs.  The files are hard-linked.  <M>

     USETBL If not "no", preprocess man pages using tbl(1) while generating  cat
	    pages.  <IM> [no]

   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 fol-
     lowing 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=	 ${BINDIR}/gzip ${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:

     INCS   The list of include files.	<M>

     INCSDIRSee mkc.init.mk.

     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 in-
	    clude files (paths in ${INCS} are relative to  ${INCSSRCDIR}).   <M>
	    [.]

   mkc.minitest.mk
     mkc.minitest.mk  is  an auxiliary include file that implement simple frame-
     work for unit tests.  Idea: application provides the target test_output and
     expect.out file that contains ideal  output.   mkcmake  test  runs  mkcmake
     test_output and compare generated output with expect.out.

     MKC_DIFF
	    diff(1)  command  for  comparing  expected and actual results.  <Iu>
	    [diff]

     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_PKGCON-
	    FIG_<LIB>=1  is  also added to CPPFLAGS 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 configure target).

     PCNAME.<lib>
	    On some systems several versions of the  same  library  may  be  in-
	    stalled  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}]

     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.var.<lib>.<var>
	    Variable value (pkg-config --variable=<var> <lib>).  <Iu>

     PKG_CONFIG_VARS.<lib>
	    List of variables to check for library <lib>.  <M>

   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:

     POD2HTML
	    Path to POD to HTML conversion utility <Iu> [pod2html].

     POD2HTML_FLAGS
	    Flags passed to ${POD2HTML} <Iu> [].

     POD2MANPath to POD to MAN conversion utility <Iu> [pod2man].

     POD2MAN_FLAGS
	    Flags passed to ${POD2MAN} <Iu> [-r '' -n '${.TARGET:T:R}' -c ''].

   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_${.CURDIR:T}	files.	 It  creates  .d
     files  from  entries  in  SRCS  and  DPSRCS that are C, C++, or Objective C
     source files, and builds .depend_${PROJECTNAME} 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:

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

     SRCS   The same as in mkc.prog.mk and mkc.lib.mk.

   mkc_imp.foreign_autotools.mk
     This module is activated if variable FOREIGN is set to "autotools" and pro-
     vides support for building external projects using autotools.  It also pro-
     vides  a  recursive  target mkgen for generating "configure" script, "Make-
     file.in" file etc. using autoreconf(1) utility.   The  following  variables
     are provided:

     AT_AUTORECONF_ARGS
	    Arguments passed to autoreconf(1).	<U> [-sif].

     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_MAKEMake(1)-like utility for the project.  <Imu> [${MAKE}].

     AT_USE_AUTOMAKE
	    If "yes", automake(1) is used.  <M> [yes].

     FSRCDIRRelative  (to  ${.CURDIR})	or absolute directory to autotools-based
	    sources.

   mkc_imp.help.mk
     This mk file implements targets help, help_subprj and help_use.

     help_use
	    Outputs the configuring options available for the  project	and  de-
	    scriptions for their values. Configuring options should be specified
	    in USE_VARIABLES variable described below.

     help_subprj
	    Outputs  the  list of subprojects (mkc.subprj.mk) and their descrip-
	    tions.  Subprojects are mentioned in SUBPRJ  and  SUBPRJ_DFLT  vari-
	    ables. Description are specified in HELP_MSG.<subproject> variable.

     USE_VARIABLES
	    A  list of configuring variables. Let's assume that the only config-
	    uring variable is USESOMETHING and the valid values for it	are:  no
	    (the default) and yes.  Then developer may provide the following as-
	    signments in Makefile:

		USE_VARIABLES  += USESOMETHING
		USESOMETHING.descr  = "Configuring parameter SOMETHING"
		USESOMETHING.0	= "no: disable feature SOMETHING"
		USESOMETHING.1	= "yes: enable feature SOMETHING"

	    <M> [unset]

     HELP_MSG.<subproject>
	    Description for project <subproject>.  <M> [unset]

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.

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

     TOOLDIRSee 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 included by mkc.*.mk files

FILES
     /usr/local/etc/mkcmake.conf
	    included by mkc.init.mk if exists

     /usr/local/etc/mk.conf
	    included by mkc.init.mk if exists

BUGS
     Target  configure	(configure) doesn't support parallel builds. In order to
     build project in parallel, run it like the following

	mkcmake configure
	mkcmake -j4 all

SEE ALSO
     mkc_check_header(1), mkc_check_prog(1),  mkc_check_decl(1),  mkc_check_fun-
     clib(1), mkc_check_sizeof(1), mkc_check_custom(1), bmake(1), mkdep(1),

AUTHOR
     Aleksey Cheusov <vle@gmx.net>

				  Dec 16, 2023			 MK-CONFIGURE(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=mk-configure&sektion=7&manpath=FreeBSD+Ports+15.1.quarterly>

home | help