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 ver-
       sion of NetBSD make) and	a number of executables.  It  is  intended  to
       simplify	crossplatform development and software building.

       There are only a	few top-level makefiles: mkc.init.mk, mkc.mk, mkc.con-
       figure.mk,  mkc.minitest.mk.   Everything  else (mkc_imp.*.mk files) is
       included	implicitely. Do	not use	mkc_imp.*.mk files  directly!  If  you
       do, I cannot guarantee backward compatibility.  mkc.configure.mk	is in-
       cluded  automatically  by  mkc.mk,  but	can  be	 included explicitely.
       mkc.minitest.mk provides	a trivial support  for	regression  tests  and
       should  be  included  explicitely.   Usually  mk-c makefiles consist of
       variables assignments and inclusion of mkc.mk in	the and.  One can also
       use mkc.prog.mk,	mkc.lib.mk, mkc.files.mk, mkc.subdir.mk	 and  mkc.sub-
       prj.mk  instead of mkc.mk.  The latter activates	mkc.lib.mk if variable
       LIB is set, mkc.prog.mk if variables PROG or PROGS  are	set,  mkc.sub-
       prj.mk  if  variable SUBPRJ is set, mkc.subdir.mk if variable SUBDIR is
       set, and	mkc.files.mk otherwise.

       To get system-wide configuration	parameters, mkc.init.mk	loads "${MAKE-
       CONF}" file if it  exists.   Otherwise,	it  loads  /usr/local/etc/mkc-
       make.conf if it exists.	If neither ${MAKECONF} nor /usr/local/etc/mkc-
       make.conf  exist,  it  tries  to	 load /usr/local/etc/mk.conf file.  If
       "${SRCTOP}/Makefile.common" file	exists it is also included by all sub-
       projects.  Unless SRCTOP	variable is set, "../Makefile.inc" is also in-
       cluded if exists.  These	files may define  any  of  the	variables  de-
       scribed	 below.	  Compiler-specific  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 initialized 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.

       install
	      install  programs, libraries, files, include files, manual pages
	      etc.  to the target directories with the help of ${INSTALL} pro-
	      gram.

       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})
	      according	to MAKEOBJDIR  and  MAKEOBJPREFIX  variables.  Current
	      umask is used for	this.

       mkgen  See mkc_imp.foreign_autotools.mk.

       bin_tar,	bin_targz, bin_tarbz2, bin_zip,	bin_deb
	      build software, install it to a temporary	directory (using DEST-
	      DIR) and create .tar/.tar.gz/.tar.bz2/.zip/.deb archive contain-
	      ing all installed	files.	The target bin_deb expects debian con-
	      trol  files  in  DEBIAN subdirectory, see	examples/files for the
	      sample.

       NOTE: Commands associated with targets all, install,  clean,  cleandir,
       depend,	test,  installdirs, uninstall, configure and filelist in Make-
       file override the standard behaviour.

       NOTE: All targets in this list have pre_*,  do_*	 and  post_*  counter-
       parts. See ALLTARGETS for details.

   mkc.init.mk
       This  file is included by mkc.mk	and mkc.configure.mk automatically but
       can be used by users directly.  mkc.init.mk uses	 the  following	 vari-
       ables.

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

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

       ARFLAGS
	      Options 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  ex-
	      its 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_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
	      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.
	      Supported	 options:  c89,	 gnu89 (C89 with GNU extensions), c99,
	      gnu99 (C99 with GNU extensions), c11, gnu11 (C89 with GNU	exten-
	      sions), c17, gnu17 (C17 with GNU extensions).   If  compiler  is
	      not  known  for mk-configure or does not support appropriate op-
	      tion, no additional options are applied.	<M> []

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

       CFLAGS0
	      The 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 indepen-
	      dent  code.   On some platforms it makes sense to	override these
	      variables	(initialized by	mk-configure) for better  performance,
	      for  example,  one may use -fpic instead of -fPIC	with GNU C/C++
	      compilers.  See SHLIB_MAJOR, MKPIE etc. variables	for  more  in-
	      formation.  <Iu>

       CFLAGS.pie, CXXFLAGS.pie
	      Options for C and	C++ compilers for generating position indepen-
	      dent  executables.  On some platforms it makes sense to override
	      these variables (initialized by mk-configure) for	better perfor-
	      mance, for example, one may use -fpic instead of -fPIC with  GNU
	      C/C++ compilers.	See MKPIE variable for more information.  <Iu>

       CFLAGS.ssp, CXXFLAGS.ssp
	      Options  for C and C++ compilers for generating stack protection
	      code.  See USE_SSP variable for more information.	 <Iu>

       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
	      "cleandir".  <Iu>	[${RM} -rf]

       CLEANFILES_CMD
	      Command  for  removing  files  used by targets "clean" and "cle-
	      andir".  <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 be-
	      fore CPPFLAGS.  Normally,	CPPFLAGS0 should be modified in	 make-
	      files 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 be-
	      fore  CXXFLAGS.  Normally, CXXFLAGS0 should be modified in make-
	      files 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>

       CXXOPTS
	      Additional 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
	      extensions),  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  extensions)	If  compiler  is not known for mk-configure or
	      does not support appropriate option, no additional  options  are
	      applied.	<M> []

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

       DESTDIR
	      Installation prefix.  <U>	[]

       GZIP   gzip copression tool.  <Iu> [gzip]

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

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

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

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

       LD     Linker.  <Iu> [ld]

       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>

       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]

       LPREFIX
	      Symbol  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  compil-
	      ers  unknown  to	mk-configure, it exits with error. In order to
	      fix this,	you have to run	mkc_compiler_setting(1)	utility	 manu-
	      ally.  This  utility generates similar files in ${HOME}/.mkcmake
	      directory.  However, if MKCOMPILERSETTINGS variable  is  set  to
	      yes,  mkc_compiler_setting(1) is run automaticlly	and mk-config-
	      ure loads	the generated files.  If MKCOMPILERSETTINGS is	force,
	      compiler configuration file is always regenerated.  Triplet com-
	      ponent  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
	      options, these option are	applied	and .d	dependency  files  are
	      generated.  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
	      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]

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

       OBJCOPY
	      Copy and translate object	files.	<Iu> [objcopy]

       OBJDUMP
	      Display 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.sub-
	      dir.mk  or mkc.subprj.mk it makes	sense to set this variable ex-
	      plicitely	in project's Makefile.	This variable  is  initialized
	      before  including	mk.conf, so you	can use	it to change build op-
	      tions, e.g. during development process.

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

	      <Im>

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

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

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

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

       SHRTOUT
	      If not "no", output messages about compiling, linking and	creat-
	      ing 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_SSP
	      If "yes",	enables	stack protection  code,	 which	detects	 stack
	      overflows	and aborts the program.	This enhances security but im-
	      poses some performance penalty.  <U>

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

       WARNERR
	      If  "yes",  force	warnings to be reported	as errors.  At the mo-
	      ment this	is supported for GCC, clang,  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]

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

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

       YHEADER
	      If  defined,  add	 "-d"  to  YFLAGS,  and	 add dependencies from
	      <file>.y to <file>.h and <file>.c, and  add  <foo>.h  to	CLEAN-
	      FILES.

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

       ZIP    zip copression tool.  <Iu> [zip]

   mkc.files.mk
       The  include  file  mkc.files.mk	 handles the FILES variable and	is in-
       cluded from mkc.lib.mk and mkc.prog.mk.	List of	supported variables:

       CLEANDIRDIRS
	      Additional directories to	remove (recursively) for the  cleandir
	      target.  <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.

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

       LDFLAGS
	      Additional linker	flags. Often used for specifying  library  di-
	      rectories.

		  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 envi-
	      ronment by user.	<M>

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

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

       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]

       PROG   The name of the program to build.

       PROGNAME
	      The name that the	above program will be installed	as, if differ-
	      ent 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
       supported 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  dy-
       nanic library or	DLL.  mkc.lib.mk uses the following variables:

       DPINCDIRS
	      See LIBDEPS in section mk.subprj.mk.

       DPLDADD
	      See 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
	      ignored. This variable has no effect on some platforms.  By  de-
	      fault 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 de-
	      faults to	`id -g`.  <Iu>

       LIBMODE
	      Library mode.  <Iu> [${NONBINMODE}]

       LIBOWN Library owner. If	bmake is run by	an unprivileged	user,  it  de-
	      faults 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]

       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]

       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 libraries ${.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) or-
       ganized as a dependency graph.  It provides  all	 targets  provided  by
       mkc.prog.mk.  Variable SUBPRJ contains a	list of	pairs depdir:dir which
       mean  that  subproject dir depends on depdir.  mkcmake all command will
       build all subprojects listed in SUBPRJ in  a  correct  order  (starting
       with  subprojects  having  no dependencies and so on).  There is	also a
       target which allows the command bmake <subdir> where  <subdir>  is  any
       directory  listed  in  the  variable SUBPRJ.  The following targets are
       also provided: <target>-<subdir>	where <target> is either of  the  fol-
       lowing:	all,  clean, cleandir, depend, installdirs, install, uninstall
       and filelist.  Also provided are: targets nodeps-<target>-<subdir>  and
       subdir-<target>-<subdir>.   Difference  between	<target>-<subdir>  and
       nodeps-<target>-<subdir>	is that	 mkcmake  <target>-<subdir>  runs  the
       specified  <target> for <subdir>	and all	its dependencies while mkcmake
       nodeps-<target>-<subdir>	-- only	for <subdir>.  A  target  subdir-<tar-
       get>-<subdir>  is  a  synonym  for  nodeps-<target>-<subdir>  See exam-
       ples/hello_dictd	subdirectory for the sample of use.

       mkc.subprj.mk provides the following variables:

       ALLTARGETS
	      A	list of	targets	for which pre_*, do_* and post_*  counterparts
	      exist,  for  example, pre_all, do_all and	post_all. pre_*	target
	      runs before do_* target which in turn runs before	post_*.	Unless
	      action is	provided for do_* targets they implement the  standard
	      behaviour	 of  mk-configure.   No	action is provided for targets
	      pre_* and	post_*,	so they	are for	user's extensions.  The	 stan-
	      dard  behaviour for ${ALLTARGETS}	may also be extended by	adding
	      new prerequisites	to targets do_*.

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

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

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

       LIBDEPS
	      A	list of	library	dependencies. Each token is a  colon-separated
	      pair.  Its first component is a library subproject (dependency),
	      the  second one is the subproject	for library or executable. The
	      value of this variable is	automatically added to SUBPRJ. Library
	      dependencies listed in LIBDEPS automatically  change  CPPFLAGS0,
	      LDFLAGS0 and LDADD0 of approptiate subprojects.  <M> Suppose, we
	      have  <library:program> pair in LIBDEPS, also suppose that vari-
	      able library is set to "library" subdirectory and	variable  pro-
	      gram   is	  set	to   "program"	 subdirectory.	  ${SRCDIR_li-
	      brary}/linkme.mk	file  is  automatically	 included  from	 ${SR-
	      CDIR_program}/Makefile if	it exists. In this file	DPLDADD	[${li-
	      brary:T:S/^lib//}], DPLIBDIRS [${OBJDIR_${library:S,/,_,g}}] and
	      DPINCDIRS	     [${SRCDIR_${library:S,/,_,g}}	${OBJDIR_${li-
	      brary: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 environ-
	      ment.

       MKRELOBJDIR
	      If "yes",	object	directories  ${OBJTOP}/dir  are	 used.	Unlike
	      MAKEOBJDIRPREFIX	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 in-
	      side <dir> are  replaced	with  underlines.   In	addition,  OB-
	      JDIR_<dir:T>  variable  is set to	${OBJDIR_<dir>}	if ${SHORTPRJ-
	      NAME} 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  in-
	      side  <dir>  are	replaced  with	underlines.   In addition, SR-
	      CDIR_<dir:T> variable is set to ${SRCDIR_<dir>}  if  ${SHORTPRJ-
	      NAME} is "yes".

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

       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>

       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
	      subprojects.  <I>	[${.CURDIR}]

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

       mkc.subprj.mk provides the following targets:

       <subdir>	and <subdir:T>
	      <subdir>	is  a  subdirectory  listed in SUBDIR or SUBPRJ.  This
	      target is	equivalent to all-<subdir>.  <subdir:T>	means the last
	      component	of the directory and is	created	if ${SHORTPRJNAME}  is
	      "yes".

       <target>-<subdir>
	      Runs  the	 specified  <target>  for the specified	<subdir>.  The
	      target <target>-<subdir:T> is  provided  if  ${SHORTPRJNAME}  is
	      "yes".

       subdir-<target>-<subdir>	and nodeps-<target>-<subdir>
	      Runs  the	 specified <target> for	the specified <subdir> without
	      dependencies.	Targets	    subdir-<target>-<subdir:T>	   and
	      nodeps-<target>-<subdir:T>  are  provided	 if ${SHORTPRJNAME} is
	      "yes".

       print_deps
	      Outputs the dependency graph on targets in tsort(1) format  tak-
	      ing NODEPS and NOSUBDIR variables	into account.

   mkc.subdir.mk
       The  include file mkc.subdir.mk contains	the default targets for	build-
       ing subdirectories.  It provides	the same targets as mkc.prog.mk.   For
       all of the directories listed in	the variable SUBDIR, the specified di-
       rectory	will  be visited and the target	made.  There is	also a default
       target which allows the command bmake <subdir> where <subdir>
	is any directory listed	in the variable	SUBDIR.	 As  a	special	 case,
       the  use	 of a token .WAIT as an	entry in SUBDIR	acts as	a synchroniza-
       tion barrier when multiple make jobs are	run; subdirs before the	 .WAIT
       must complete before any	subdirs	after .WAIT are	started.  See bmake(1)
       for  some  caveats  on  use  of .WAIT and other special sources.	SUBDIR
       variable	is provided as well as all variables provided by mkc.subprj.mk
       except SUBPRJ.

       SUBDIR List of subdirectories <M> mkc.subprj.mk

   mkc.configure.mk
       mkc.configure.mk	is an auxiliary	include	file for  checking  platform's
       features	 like headers, function	or variable declarations, function im-
       plementation in a particular libraries, data types sizes	etc.  This in-
       clude file is included by mkc.prog.mk and mkc.lib.mk automatically  but
       in  some	 cases	it  makes sense	to include it explicitly.  mkc.config-
       ure.mk itself includes mkc.init.mk, then	mkc.conf.mk , and finally  in-
       ternal  include	file  which  updates CPPFLAGS, CFLAGS, LDADD and SRCS.
       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" and "cleandir".

       MKC_CACHEDIR
	      Directory	 where	intermediate  and cache	files are created.  It
	      defaults to ${.OBJDIR}.  By default MKC_CACHEDIR variable	is ex-
	      ported 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_CHECK_BUILTINS
	      mk-configure  provides  a	number of built-in custom checks, that
	      is, source files to compile or scripts to	run in order to	 check
	      for something.  Checks listed in MKC_CHECK_BUILTINS will be run.
	      Avalable values:

	      prog_flex, prog_bison, prog_gawk,	prog_gm4, prog_gmake
		     Find  flex,  bison,  GNU  awk, GNU	m4 or GNU make respec-
		     tively by analysing program's help	 and/or	 version  mes-
		     sages.  If	 found,	 BUILTIN.prog_<progname> is set	to the
		     path, otherwise it	is set to empty	string.	Note that gawk
		     may be found as awk, bison	as yacc, gm4 as	 m4,  flex  as
		     lex and gmake as make.

	      prog_mkdep, prog_nbmkdep
		     Find traditional BSD mkdep(1) or recent NetBSD version of
		     it	respectively.

	      endianness
		     BUILTIN.endianness	 variable is set to either little, big
		     or	unknown	depending on a hardware.

       MKC_CHECK_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 consid-
	      ered 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 exe-
	      cutable program for your custom check, e.g.,  filename.c,	 file-
	      name.cc,	subdir/filename.cxx,  filename.C,  filename.cpp, file-
	      name.c++ or  subdir/executable_script.   mk-configure  tries  to
	      compile	or  run	 the  specified	 file  and  sets  CUSTOM.<cus-
	      tom_check_name> variable to 1, 0 or other	 value.	  If  MKC_CUS-
	      TOM_FN.<custom_check_name>   is	unset,	it  defaults  to  cus-
	      tom_check_name.c.	 Also -DCUSTOM_<CUSTOM_CHECK_NAME>=1 is	 added
	      to  CPPFLAGS  if the specified check succeeded unless MKC_NOAUTO
	      is set to	1 and MKC_CUSTOM_NOAUTO.<custom_check_name> is set  to
	      "yes".	Here   <CUSTOM_CHECK_NAME>   is	 uppercase  for	 <cus-
	      tom_check_name>.	 If   MKC_CUSTOM_LINK.<custom_check_name>   is
	      "yes", then C or C++ source file is compiled and linked into ex-
	      ecutable.	  Also,	 CPPFLAGS,  CFLAGS,  CXXFLAGS, LDFLAGS,	LDADD,
	      MKC_CUSTOM_CPPFLAGS.<custom_check_name>, MKC_CUSTOM_CFLAGS.<cus-
	      tom_check_name>,	      MKC_CUSTOM_CXXFLAGS.<custom_check_name>,
	      MKC_CUSTOM_LDFLAGS.<custom_check_name>	    and	      MKC_CUS-
	      TOM_LDADD.<custom_check_name> flags are passed to	the  compiler.
	      Normally	cache  file  name  contains <custom_check_name>	unless
	      MKC_CUSTOM_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_<DE-
	      FINE>=1  is  added  to  CPPFLAGS if the specified	define was de-
	      tected 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
	      optional.	 If  <library>	is  present, presense of <function> in
	      libc is also checked automatically.

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

	      If <function> is found in	<library> but not in  libc  or	<func-
	      tion>  is	"main" and is found in <library>, "-l<library>"	is au-
	      tomatically 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
	      specified	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  in-
	      stead  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 ei-
	      ther 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_MEM-
	      BER.<type>_<member>.<header> (or HAVE_MEMBER.<type>_<member>) is
	      set to either 0 or 1 depending on	the result.
	      <header>:	tr|./|__|g
	      Also -DHAVE_MEMBER_<TYPE>_<MEMBER>_<HEADER>=1 (or	   -DHAVE_MEM-
	      BER_<TYPE>_<MEMBER>=1)  is  added	 to  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  pro-
	      gram or to an empty string.

	       Ex:  MKC_CHECK_PROGS += lua ruby	gawk runawk
	       Res: HAVE_PROG.lua	      =	1
		    PROG.lua		      =	/usr/pkg/bin/lua
		    HAVE_PROG.ruby	      =	0
		    HAVE_PROG.gawk	      =	1
		    PROG.gawk		      =	/usr/bin/gawk
		    HAVE_PROG.runawk	      =	1
		    PROG.runawk		      =	/usr/pkg/bin/runawk

	      If  MKC_PROG.id.<progname>  is  set  to,	e.g,  <prog_id>,  then
	      HAVE_PROG.<prog_id>     and     PROG.<prog_id>	 are	  set.
	      MKC_PROG.id.<progname> also changes cache	file names.

       MKC_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
	      correct 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>	 vari-
	      able 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_DE-
	      FINE_<VARIABLE>=1)  is  added to CPPFLAGS	if the specified vari-
	      able 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_CUS-
	      TOM. 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
	      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 re-
	      quired  actions  (includes,  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. func-
		     tions 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_getline.mk  checks  whether getline declaration
		     is	available in stdio.h and implementation	 is  available
		     in	 libc.	If  not, getline.c provided by mk-configure is
		     added to SRCS and declaration  is	provided  in  mkc_get-
		     line.h header.

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

	      libl   Adds  -ll	or  -lfl  to  LDADD  depending on which	one is
		     available.	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  sup-
			    ported by compiler,

		     __always_inline
			    defined as __attribute__((always_inline)) if  sup-
			    ported by compiler,

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

		     __constfunc
			    defined  as	__attribute__((const)) if supported by
			    compiler,

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

		     MIN(a,b) and MAX(a,b),
			    __pure  defined  as	 __attribute__((pure)) if sup-
			    ported 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)
		     functions 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 features check whether sys/tree.h and	appro-
		     priate macroses  are  available.  If  yes,	 mkc_RB.h  and
		     mkc_SPLAY.h  include  system-wide	sys/tree.h,  otherwise
		     NetBSD version of sys/tree.h provided by mk-configure  is
		     included.

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

	      strlcat
		     This feature corresponds to strlcat(3) function available
		     on	  almost  all  systems	except	glibc-based  Linux-es.
		     mkc_imp.f_strlcat.mk checks whether  strlcat  declaration
		     is	 available in string.h and implementation is available
		     in	libc. If not, strlcat.c	provided  by  mk-configure  is
		     added  to	SRCS  and declaration is provided in mkc_strl-
		     cat.h header.

	      strlcpy
		     Similar to	strlcat.

	      strndup
		     This feature provides strndup(3) from POSIX.

	      strsep This features provides  strsep(3)	and  stresep(3)	 func-
		     tions.

	      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),  strsenvisx(3),  strunvis(3), strnunvis(3),
		     strunvisx(3), strnunvisx(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  fa-
	      tal error	(See configure target).

       MKC_REQUIRE_CUSTOM
	      The  same	as MKC_CHECK_CUSTOM, but failure is treated as a fatal
	      error (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 dec-
	      laration 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 declara-
	      tion 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
	      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_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.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	 "fea-
       tures" 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  in-
       stalling	 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>

       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 differ-
	      ent from ${SCRIPTS}.  <Mu>

       SCRIPTSNAME_<script>
	      Optional	name  to  install  <script> as.	If <script> has	a form
	      <subdir>/<filename>,  SCRIPTSNAME_<subdir>_<filename>  is	 used.
	      <Mu>

       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  sup-
       port  for  Lua  programming language, i.e. building and installing Lua-
       and/or C-based modules.	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=IN-
	      STALL_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 mod-
	      ule name separates a dirname from	basename. That is,  actual  .c
	      file names are made of LUA_MODULES with dots replaced with unde-
	      line symbol.  At installation time dots are replaced with	slash.
	      For  example, if LUA_CMODULES=socket.foo,	then socket_foo.c will
	      be used  for  compiling  a  module  and  will  be	 installed  to
	      ${LUA_CMODDIR}/socket/foo.so.  <M>

       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 unde-
	      line symbol.  At installation time dots are replaced with	slash.
	      For example, if LUA_MODULES=socket.foo, then socket_foo.lua will
	      be installed to ${LUA_LMODDIR}/socket/foo.lua <M>

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

       TEXINFO
	      List  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  cat-
       pages and HTML pages and	provides the following variables:

       HTMLDIR
	      Target  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
	      "MKCATPAGES=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 multiple 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
       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=   ${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 in-
	      cluded in	the link.  <M>

   mkc_imp.inc.mk
       mkc_imp.inc.mk  is  internal  include  file  which  is  included	  from
       mkc.prog.mk,  mkc.lib.mk	 and  mkc.files.mk.   Do  not use it directly!
       This module provides installation of header files and provides the fol-
       lowing variables:

       INCS   The list of include files.  <M>

       INCSDIR
	      See 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	influ-
	      ence on CPPFLAGS (-I${INCSSRCDIR}	is added) and on an  installa-
	      tion of include files (paths in ${INCS} are relative to ${INCSS-
	      RCDIR}).	<M> [.]

   mkc.minitest.mk
       mkc.minitest.mk	is  an	auxiliary  include  file that implement	simple
       framework for  unit  tests.   Idea:  application	 provides  the	target
       test_output  and	 expect.out  file that contains	ideal output.  mkcmake
       test runs mkcmake test_output and compare  generated  output  with  ex-
       pect.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  sup-
       ports  dependencies  controlled	by  pkg-config	program.  As  a	result
       CPPFLAGS	and LDADD variables  are  modified  according  to  "pkg-config
       --cflags	..." and "pkg-config --libs ...".  The following variables are
       provided:

       MKC_CHECK_PKGCONFIG
	      List  of libraries to check, for example,	glib-2.0>=2.1.	Spaces
	      around <=, >=, =,	< and >	are not	allowed.  As a result  of  the
	      check  bmake's  variable PKG_CONFIG.exists.<lib> is set to 1 for
	      success or 0  for	 failure.   Unless  MKC_NOAUTO	is  set	 to  1
	      -DHAVE_PKGCONFIG_<LIB>=1	is also	added to 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_  respec-
	      tively.  <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  sup-
       port for	POD (Plain Old Documentation) markup language, i.e. convertion
       of  POD documents to MAN	pages (suffix rules: .pod.1, ... , .pod.9) and
       HTMLs (.pod.html).  The following variables are provided:

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

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

       POD2MAN
	      Path 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 de-
       pendencies for the .d files.  The following variables are provided:

       DPSRCS List of source files which are needed for	 generating  dependen-
	      cies, but	are not	needed in ${SRCS}.

       MKDEP_CC
	      Compiler passed to mkdep(1).  <Iu> [${CC}].

       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
       provides	support	for building external projects	using  autotools.   It
       also  provides  a  recursive  target  mkgen  for	generating "configure"
       script, "Makefile.in" file etc. using autoreconf(1) utility.  The  fol-
       lowing variables	are provided:

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

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

       FSRCDIR
	      Relative	(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
	      descriptions  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  de-
	      scriptions.  Subprojects are mentioned in	SUBPRJ and SUBPRJ_DFLT
	      variables.  Description  are  specified in HELP_MSG.<subproject>
	      variable.

       USE_VARIABLES
	      A	list of	configuring variables. Let's assume that the only con-
	      figuring variable	is USESOMETHING	and the	valid  values  for  it
	      are:  no	(the default) and yes.	Then developer may provide the
	      following	assignments 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.

       SYSROOT
	      Root directory for headers and libraries.	 If set, the following
	      variables	 are set to ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}<tool-
	      name>: AR, AS, CXX, CPP, CC, INSTALL, LD,	NM, OBJCOPY,  OBJDUMP,
	      RANLIB, SIZE and STRIP.  <U> [].

       TOOLDIR
	      See TOOLCHAIN_DIR.

       TOOLCHAIN_DIR
	      Directory	that contains cross-toolchain.	<U> [${TOOLDIR}/bin].

       TOOLCHAIN_PREFIX
	      See SYSROOT.  <U>	[${MACHINE_GNU_PLATFORM}-].

ENVIRONMENT VARIABLES
       MAKECONF
	      Path to mk.conf file 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_funclib(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.0.quarterly>

home | help