mk-configure man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

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
       included	 automatically	by  mkc.mk,  but  can be included explicitely.
       mkc.minitest.mk provides a trivial support  for	regression  tests  and
       should  be  included  explicitely.   Usually  mk-c makefiles consist of
       variables assignments and inclusion of mkc.mk in the and.  One can also
       use  mkc.prog.mk,  mkc.lib.mk, mkc.files.mk, mkc.subdir.mk and mkc.sub‐
       prj.mk instead of mkc.mk.  The latter activates mkc.lib.mk if  variable
       LIB  is	set,  mkc.prog.mk if variables PROG or PROGS are set, mkc.sub‐
       prj.mk if variable SUBPRJ is set, mkc.subdir.mk if variable  SUBDIR  is
       set, and mkc.files.mk otherwise.

       To get system-wide configuration parameters, mkc.init.mk loads "${MAKE‐
       CONF}" file if it exists.  Otherwise, it loads /usr/local/etc/mk-c.conf
       if  it  exists.	 If  neither  ${MAKECONF} nor /usr/local/etc/mk-c.conf
       exist, it  tries	 to  load  /usr/local/etc/mk.conf  file.   If  "${SRC‐
       TOP}/Makefile.common"  file  exists  it is also included by all subpro‐
       jects.  Unless  SRCTOP  variable	 is  set,  "../Makefile.inc"  is  also
       included	 if  exists.   These  files  may  define  any of the variables
       described below. Below in square brackets the default value  for	 vari‐
       ables are specified.  In triangle brackets -- typical way of use, where
       I means "Initialized by mk-configure", Iu means "Initialized by mk-con‐
       figure  but may be overriden by user", Im means "Initialized by mk-con‐
       figure but may be set in Makefile", U means "Usually set	 by  user",  M
       means  "May  be set or changed in project's Makefile" and Mu means "May
       be set in project's Makefile but may be	initialized  or	 overriden  by
       user".

   Targets
       Mk-configure provides the following targets:

       all    build everything.

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

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

       distclean
	      synonym for target "cleandir".

       installdirs
	      create target directories.

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

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

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

       depend create  .depend  file  containing	 list  of  dependencies	  (see
	      mkdep(1)).

       filelist
	      output a list of destination files of the project, one per line,
	      e.g.

		/usr/local/bin/hello
		/usr/local/man/man1/hello.1

       obj    if MKOBJDIR is "yes", creates  object  directories  (${.OBJDIR})
	      according	 to  MAKEOBJDIR	 and  MAKEOBJPREFIX variables. Current
	      umask is used for this.

       mkgen  See mkc_imp.foreign_autotools.mk.

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

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

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

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

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

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

       AS     Assembler.  <Iu> [as]

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

       CC     C compiler.  <Iu> [cc]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       FC     Fortran compiler.	 <Iu> [f77]

       FFLAGS Options to {$FC}.	 <Iu> [-O]

       FFLAGS_<project>
	      Similar to FFLAGS but for project ${PROJECTNAME}.	 <U>

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

       LEX    Lexical analyzer.	 <Iu> [lex]

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

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

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

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

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

       LD     Linker.  <Iu> [ld]

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

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

       MAKEDEPEND
	      makedepend(1) tool.  <Iu>

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

       MKDEP  mkdep(1) tool.  <Iu>

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

       PC     Pascal compiler.	<Iu> [pc]

       PFLAGS Options to ${PC}.	 <Iu> []

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

       OBJDUMP
	      Display information from object files.  <Iu> [objdump]

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

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

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

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

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

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

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

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

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

       TAR    tar archiver.  <Iu> [tar]

       GZIP   gzip copression tool.  <Iu> [gzip]

       BZIP2  bzip2 copression tool.  <Iu> [bzip2]

       ZIP    zip copression tool.  <Iu> [zip]

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

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

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

       WARNERR
	      If "yes", force warnings to  be  reported	 as  errors.   At  the
	      moment  this  is	supported for GCC, Intel C/C++ and Sun's C/C++
	      compilers.  <Iu> [yes if WARNS=4, no otherwise ]

       WARNS  Crank up warning options; the distinct levels  are  (the	higher
	      the more strict):

		  WARNS=0
		  WARNS=1
		  WARNS=2
		  WARNS=3
		  WARNS=4

	      At  the  moment WARNS is supported for GCC and HP-UX C/C++ only.
	      WARNS=0 means disabling all warnings if such feature is provided
	      by compiler and mk-configure.  <Mu> [0]

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

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

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

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

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

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

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

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

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

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

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

       DESTDIR
	      Installation prefix.  <U> []

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

       MKINSTALL
	      If  not  "yes", build everything but do not install. This option
	      is useful for e.g. internal libraries.  <Mu> [yes]

       MKINSTALLDIRS
	      If "yes", install target directories (target installdirs) before
	      installing files (target install).  <Iu> [yes]

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

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

       MKC_REQD
	      Minimal required version of mk-configure.	 If  required  version
	      is not found, the target errorcheck fails.  <M>

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

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

	      <I>

       PROJECTNAME
	      The  name	 of a project. By default it is set to ${PROG}, ${LIB}
	      or ${.CURDIR:T}.	For a top-level project using either  mkc.sub‐
	      dir.mk  or  mkc.subprj.mk	 it  makes  sense to set this variable
	      explicitely in project's Makefile.  This variable is initialized
	      before  including	 mk.conf,  so  you  can use it to change build
	      options, e.g. during development process.

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

	      <Im>

       CC_TYPE
	      C compiler type. This variable is set by mk-configure and can be
	      overriden by user. It can get the following values:

	      Value	Description
	      ----------------------
	      gcc	GNU C/C++ compiler
	      pcc	Portable C compiler
	      icc	Intel C/C++ compiler
	      msc	Microsoft C/C++ compiler
	      hpc	HP-UX C/C++ compiler
	      sunpro	SUNWspro C/C++ compiler
	      ibmc	IBM C/C++ compiler (Visual Age for C/C++?)
	      bcc	Borland C/C++ compiler
	      watcom	Watcom C/C++ compiler
	      como	COMO C/C++ compiler
	      decc	DEC C
	      mipspro	MIPSpro C compiler

	      <Iu>

       CXX_TYPE
	      C++  compiler type. This variable is set by mk-configure and can
	      be overriden by user. It can get	the  same  values  as  CC_TYPE
	      variable.	 <Iu>

       LD_TYPE
	      Linker  type.  This  variable  is set by mk-configure and can be
	      overriden by user. It can get the following values:

	      Value	   Description
	      ----------------------
	      aixld	   AIX linker
	      darwinld	   Darwin linker (MacOS-X)
	      gnuld	   GNU linker
	      hpld	   HP-UX linker
	      interixld	   Interix linker
	      scold	   SCO linker
	      sunld	   SunOS linker
	      osf1ld	   OSF1 linker (Tru64)
	      irixld	   IRIX linker

	      <Iu>

       SHRTOUT
	      If not "no", output messages about compiling, linking and creat‐
	      ing libraries are shortened and formatted.  <Iu> [no]

       CFLAGS.warns.<cctype>.<warn-level>,     CXXFLAGS.warns.<cxxtype>.<warn-
       level>
	      These variables are set by mk-configure and enable warning  mes‐
	      sages  for  C or C++ compilers according to their types (CC_TYPE
	      and CXX_TYPE) and warning level (WARNS).	<Iu>

       CFLAGS.dflt.<cctype>, CXXFLAGS.dflt.<cxxtype>
	      Additional flags passed to C or C++ compilers according to their
	      types (CC_TYPE and CXX_TYPE).  <Iu>

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

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

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

       USE_SSP
	      If  "yes",  enables  stack  protection code, which detects stack
	      overflows and aborts the program.	 This  enhances	 security  but
	      imposes some performance penalty.	 <U> [no]

       SRCTOP Top-level	 project's  directory  which defaults to ${.CURDIR} if
	      ${.MAKE.LEVEL} is 0.  If set, "../Makefile.inc" is not included.
	      Also, the following command
		 mkcmake -C subproject target
	      will be translated to
		 cd ${SRCTOP}; mkcmake target-subproject <Iu>

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

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

       FILES  The list of files to install.  <M>

       FILESDIR
	      The location to install the files.  <Mu> [${PREFIX}/bin]

       FILESDIR_<fn>
	      The location to install the specific file <fn>.  <Mu>

       FILESOWN
	      File owner. If bmake is run with root privileges, it defaults to
	      ${BINOWN} or to `id -u` otherwise.  <Mu>

       FILESOWN_<fn>
	      File owner of the specific file <fn>.  <Mu>

       FILESGRP
	      File group. If bmake is run with root privileges, it defaults to
	      <Mu> ${BINGRP} or to `id -g` otherwise.  <Mu>

       FILESGRP_<fn>
	      File group of the specific file <fn>.  <Mu>

       FILESMODE
	      File mode.  <Mu> [${NONBINMODE}]

       FILESMODE_<fn>
	      File mode of the specific file <fn>.  <Mu>

       FILESNAME
	      Optional name to install each file as.  <Mu>

       FILESNAME_<fn>
	      Optional name to install <fn> as.	 <Mu>

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

       DISTCLEANFILES
	      Additional files to remove for the cleandir and  distclean  tar‐
	      gets.  <I M>

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

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

   mkc.prog.mk
       The  include file mkc.prog.mk handles building program from one or more
       source files, along with their manual pages.  It has a  limited	number
       of suffixes.  List of supported variables:

       PROG   The name of the program to build.

       PROGS  The  names  of the programs to build.  If neither PROG nor PROGS
	      is not supplied, nothing is built.  <M>

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

       SRCS   List of source files to build the program.  If SRCS is not
	       defined, it's assumed to be ${PROG}.c.  <M>

       SRCS.<prog>
	      List  of source files to build the program prog listed in PROGS.
	      If SRCS.<prog> is not defined, it's assumed to be prog.c.	 <M>

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

		  LDADD+=  -lutil -lcompat

	      <U>

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

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

       LDFLAGS
	      Additional linker	 flags.	 Often	used  for  specifying  library
	      directories.

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

	      <Mu I>

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

       LDFLAGS0
	      The  same	 as  LDFLAGS but LDFLAGS0 and LDADD0 are passed to the
	      linker before LDFLAGS and LDADD.	Normally, LDFLAGS0 and	LDADD0
	      should be modified in makefiles and should not be set from envi‐
	      ronment by user.	<M>

       BINDIR, BINMODE, BINOWN and BINGRP
	      See Common variables and mkc.files.mk sections.

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

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

       USE_RELRO
	      If  "yes", enables a technique to harden the data sections of an
	      ELF binary/process.  For security reasons it makes sense to  set
	      it  to  YES, it may slow down application startup, though.  <Iu>
	      [no]

       EXPORT_DYNAMIC
	      If "yes", add all symbols to the dynamic symbol table,  that  is
	      make  all symbols visible from dynamic objects at run time (e.g.
	      dlopen-ed objects), otherwise only symbols  referenced  by  some
	      object file will be exported.  <M> [no]

       DPINCDIRS
	      See LIBDEPS in section mk.subprj.mk.

       DPLIBDIRS
	      See LIBDEPS in section mk.subprj.mk.

       DPLDADD
	      See LIBDEPS in section mk.subprj.mk.

       mkc.prog.mk  includes mkc.files.mk and therefore supports all variables
       supported by it.

   mkc.lib.mk
       The include file mkc.lib.mk has	support	 for  building	a  static  and
       dynanic library or DLL.	mkc.lib.mk uses the following variables:

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

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

       SHLIB_MAJOR
	      Major  shared  library  number.  If unset, shared library is not
	      built.  <M>

       SHLIB_MINOR
	      Minor shared library number.  <M> [0]

       SHLIB_TEENY
	      Minor shared library number.  <M> []

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

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

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

       SHLIBMODE
	      Shared library mode.  <Iu>

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

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

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

       SRCS   List of source files to build the library.  Suffix types
	       .s, .c, and .f are supported.  Note, .s files are preferred
	       to .c files of the same name.  <M>

       MKSHLIB
	      If not "no", build and  install  shared  library	provided  that
	      SHLIB_MAJOR  is  defined.	  <IMu>	 [yes] (for MACHINE_ARCHs that
	      support it)

       MKSTATICLIB
	      If not "no", build and install static library.  <IMu> [yes]

       MKPICLIB
	      If not "no", build and install *_pic.a library.  <IMu> [no]

       MKPROFILELIB
	      If "no", don't build or install the profiling (*_p.a) libraries.
	      <Iu> [no]

       MKDLL  If  "yes",  build	 and  install  the  dynamically loaded library
	      (<lib>.so) instead of shared library. If	"only",	 do  not  make
	      static library.  <M> [no]

       EXPORT_SYMBOLS
	      Only  symbols  listed  in a specified file (one symbol per line)
	      are exported. This variable has no effect on some platforms.  By
	      default all symbols are exported.	 <M> []

       DPINCDIRS
	      See LIBDEPS in section mk.subprj.mk.

       DPLIBDIRS
	      See LIBDEPS in section mk.subprj.mk.

       DPLDADD
	      See LIBDEPS in section mk.subprj.mk.

       Libraries are ranlib'd when made.  mkc.lib.mk includes mkc.files.mk and
       therefore supports all variables supported by it.

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

       mkc.subprj.mk provides the following variables:

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

       LIBDEPS
	      A	 list of library dependencies. Each token is a colon-separated
	      pair.  Its first component is a library subproject (dependency),
	      the  second one is the subproject for library or executable. The
	      value of this variable is automatically added to SUBPRJ. Library
	      dependencies  listed  in LIBDEPS automatically change CPPFLAGS0,
	      LDFLAGS0 and LDADD0 of approptiate subprojects.  <M> Suppose, we
	      have  <library:program> pair in LIBDEPS, also suppose that vari‐
	      able library is set to "library" subdirectory and variable  pro‐
	      gram	 is	 set	  to	  "program"	 subdirectory.
	      ${SRCDIR_library}/linkme.mk file is automatically included  from
	      ${SRCDIR_program}/Makefile  if  it  exists. In this file DPLDADD
	      [${library:T:S/^lib//}],				     DPLIBDIRS
	      [${OBJDIR_${library:S,/,_,g}}]	       and	     DPINCDIRS
	      [${SRCDIR_${library:S,/,_,g}} ${OBJDIR_${library:S,/,_,g}}], may
	      be set to non-default values. These three variables then changes
	      LDADD0, LDFLAGS0 and CPPFLAGS0 respectively in subproject	 "pro‐
	      gram".   The  dependency	graph specified by variable LIBDEPS is
	      available to all subproject via environment.

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

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

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

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

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

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

       NODEPS This variable specifies a list of patterns that describes	 edges
	      from   dependency	 graph	in  targdep-prjdep:targ-prj  or	 targ-
	      prj:targ formats to be excluded from dependency graph.  <M> []

       NOSUBDIR
	      If for some reason you want to exclude some subdirectories  from
	      build, list them in this variable.  <U> []

       OBJDIR_<dir>
	      Value  of	 ${.OBJDIR}  inside  dir  subdirectory.	 Slash symbols
	      inside  <dir>  are  replaced  with  underlines.	In   addition,
	      OBJDIR_<dir:T> variable is set to ${OBJDIR_<dir>} if ${SHORTPRJ‐
	      NAME} is "yes".

       SRCDIR_<dir>
	      Value of	${.CURDIR}  inside  dir	 subdirectory.	Slash  symbols
	      inside   <dir>  are  replaced  with  underlines.	 In  addition,
	      SRCDIR_<dir:T> variable is set to ${SRCDIR_<dir>} if ${SHORTPRJ‐
	      NAME} is "yes".

       TARGETS
	      A	 list  of recursive targets. "Recursive" means that the target
	      will be called for all subproject recursively (See mkc.subprj.mk
	      and mkc.subdir.mk).  <Im> [all, install, installdirs, uninstall,
	      clean, cleandir, depends, test, errorcheck,  filelist,  obj]  By
	      setting  this  variable  in the Makefile one can add new targets
	      for special purposes, for example, static code analysis, partial
	      builds etc.

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

       SHORTPRJNAME
	      If "yes", special targets with last component of the subprojects
	      are provided.  <Im> [yes]

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

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

       mkc.subprj.mk provides the following targets:

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

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

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

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

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

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

   mkc.configure.mk
       mkc.configure.mk	 is  an auxiliary include file for checking platform's
       features like headers,  function	 or  variable  declarations,  function
       implementation  in  a particular libraries, data types sizes etc.  This
       include file is included by mkc.prog.mk	and  mkc.lib.mk	 automatically
       but in some cases it makes sense to include it explicitly.  mkc.config‐
       ure.mk supports the following variables.

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

       MKC_CHECK_HEADERS
	      List of headers to be checked.  As a result of the check bmake's
	      variable HAVE_HEADER.<header> is set to either 0 or 1.
	      <header>: tr|./|__|g
	      Also -DHAVE_HEADER_<HEADER>=(0 or 1) is added to	CFLAGS	unless
	      MKC_NOAUTO is set to 1.
	      <HEADER>: tr|a-z./|A-Z__|g

	       Ex:  MKC_CHECK_HEADERS += sys/time.h fcntl.h execinfo.h
	       Res: HAVE_HEADER.sys_time_h = 1
		    HAVE_HEADER.fcntl_h	   = 1
		    HAVE_HEADER.execinfo_h = 1
		    CFLAGS += -DHAVE_HEADER_SYS_TIME_H=1 -DHAVE_HEADER_FCNTL=1

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

       MKC_CHECK_FUNCLIBS
	      List of <function>:<library> pairs to be checked, <library> part
	      is  optional. If <library> is present, presense of <function> in
	      libc is also checked automatically.

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

	      By default, if <function> is found in <library> but not in libc,
	      "-l<library>"  is	 automatically	added  to  LDADD unless <func‐
	      tion>:<library>	is   listed    in    MKC_NOAUTO_FUNCLIBS    or
	      MKC_NOAUTO_FUNCLIBS is equal to 1 or MKC_NOAUTO is set to 1

	       Ex:  MKC_CHECK_FUNCLIBS	+= strlcat fgetln getline getopt_long
		    MKC_CHECK_FUNCLIBS	+= crypt:crypt dlopen:dl nanosleep:rt
		    MKC_CHECK_FUNCLIBS	+= ftime:compat gettimeofday
		    MKC_NOAUTO_FUNCLIBS += ftime:compat
	       Res: HAVE_FUNCLIB.strlcat      = 1
		    HAVE_FUNCLIB.fgetln	      = 1
		    HAVE_FUNCLIB.getline      = 0
		    HAVE_FUNCLIB.getopt_long  = 1
		    HAVE_FUNCLIB.crypt	      = 0
		    HAVE_FUNCLIB.crypt.crypt  = 1
		    HAVE_FUNCLIB.dlopen	      = 1
		    HAVE_FUNCLIB.dlopen.dl    = 0
		    HAVE_FUNCLIB.nanosleep    = 1
		    HAVE_FUNCLIB.nanosleep.rt = 1
		    HAVE_FUNCLIB.ftime	      = 0
		    HAVE_FUNCLIB.ftime.compat = 1
		    HAVE_FUNCLIB.gettimeofday = 1
		    LDADD += -lcrypt

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

       MKC_SOURCE_FUNCLIBS
	      The same as MKC_CHECK_FUNCLIBS, but if <function> is absent both
	      in  the  specified <library> and in libc, function.c is added to
	      SRCS unless MKC_NOAUTO=1.

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

       MKC_SOURCE_DIR, MKC_SOURCE_DIR.<source>
	      Directory	  with	  sources    for    MKC_SOURCE_FUNCLIBS.    If
	      MKC_SOURCE_DIR.<source>  is  unset,  MKC_SOURCE_DIR is used that
	      defaults to ${.CURDIR}.

	       Ex:  MKC_SOURCE_FUNCLIBS += getline
		    MKC_SOURCE_DIR.getline.c = ${.CURDIR}/../missing
	       Res: SRCS+= ${.CURDIR}/../missing/getline.c
		    HAVE_FUNCLIB.getline= 0

       MKC_CHECK_DEFINES
	      List of define:header to check. <header> part is optional.

	      As    a	 result	   of	 the	check	  bmake's     variable
	      HAVE_DEFINE.<define>.<header>  (or  HAVE_DEFINE.<define>) is set
	      to either 0 or 1.
	      <header>: tr|./|__|g
	      Also	      -DHAVE_DEFINE_<DEFINE>_<HEADER>=1		    or
	      -DHAVE_DEFINE_<DEFINE>=1	is  added  to  CFLAGS if the specified
	      define was detected unless MKC_NOAUTO is set to 1.
	      <HEADER>: tr|a-z./|A-Z__|g
	      <DEFINE>: tr|a-z|A-Z|g

	       Ex:  MKC_CHECK_DEFINES += RTLD_LAZY:dlfcn.h __GNUC__ _MSC_VER_
	       Res: HAVE_DEFINE.RTLD_LAZY.dlfcn_h = 1
		    HAVE_DEFINE.__GNUC__	  = 1
		    HAVE_DEFINE._MSC_VER_	  = 0
		    CFLAGS += -DHAVE_DEFINE_RTLD_LAZY_DLFCN_H=1 \
			      -DHAVE_DEFINE___GNUC__=1

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

       MKC_CHECK_TYPES
	      List of type:header to check. <header> part is optional.

	      As     a	   result    of	   the	  check	   bmake's    variable
	      HAVE_TYPE.<type>.<header> (or HAVE_TYPE.<type>) is set to either
	      0 or 1.
	      <header>: tr|./|__|g

	      Also  -DHAVE_TYPE_<TYPE>_<HEADER>=1  (or	 -DHAVE_TYPE_<TYPE>=1)
	      is added to CFLAGS if the specified  type	 was  detected	unless
	      MKC_NOAUTO is set to 1.
	      <HEADER>: tr|a-z./|A-Z__|g
	      <TYPE>:	tr|a-z|A-Z|g

	       Ex:  MKC_CHECK_TYPES += size_t:string.h
	       Res: HAVE_TYPE.size_t.string_h = 1
		    CFLAGS += -DHAVE_TYPE_SIZE_T_STRING_H=1

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

       MKC_CHECK_VARS
	      List of variable:header to check. <header> part is optional.

	      As a result of the  check	 bmake's  variable  HAVE_DEFINE.<vari‐
	      able>.<header> (or HAVE_DEFINE.<variable>) is set to either 0 or
	      1
	      <header>: tr|./|__|g
	      Also	     -DHAVE_DEFINE_<VARIABLE>_<HEADER>=1	   (or
	      -DHAVE_DEFINE_<VARIABLE>=1)  is added to CFLAGS if the specified
	      variable was detected unless MKC_NOAUTO is set to 1.
	      <HEADER>: tr|a-z./|A-Z__|g

	       Ex:  MKC_CHECK_VARS += sys_errlist:errno.h
	       Res: HAVE_VAR.sys_errlist.errno_h = 1
		    CFLAGS += -DHAVE_VAR_SYS_ERRLIST_ERRNO_H

       MKC_REQUIRE_VARS
	      The same as MKC_CHECK_VARS, but absense of the variable declara‐
	      tion is treated as a fatal error (See errorcheck target.

       MKC_CHECK_MEMBERS
	      List  of	<type>.<member>:<header>  to  check.  <header> part is
	      optional.

	      As  a  result  of	  the	check	bmake's	  variable   HAVE_MEM‐
	      BER.<type>_<member>.<header> (or HAVE_MEMBER.<type>_<member>) is
	      set to either 0 or 1 depending on the result.
	      <header>: tr|./|__|g
	      Also -DHAVE_MEMBER_<TYPE>_<MEMBER>_<HEADER>=1 (or	   -DHAVE_MEM‐
	      BER_<TYPE>_<MEMBER>=1)  is added to CFLAGS if the specified mem‐
	      ber was found in appropriate type unless MKC_NOAUTO is set to 1.
	      <HEADER>: tr|a-z./|A-Z__|g
	      <TYPE>:	tr|a-z./|A-Z__|g
	      <MEMBER>: tr|a-z./|A-Z__|g

		 Ex:  MKC_CHECK_VARS += struct-ifreq.ifr_ifrn.ifrn_name:net/if.h
		      MKC_CHECK_VARS += struct-tm.tm_isdst:time.h
		 Res: HAVE_MEMBER.struct_ifreq_ifr_ifrn_ifrn_name.net_if_h=1
		      HAVE_MEMBER.struct_tm_tm_isdst.time_h=1
		      CFLAGS += -DHAVE_MEMBER_STRUCT_IFREQ_IFR_IFRN_IFRN_NAME_NET_IF_H=1
		      CFLAGS += -DHAVE_MEMBER_STRUCT_TM_TM_ISDST_TIME_H=1

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

       MKC_CHECK_FUNCS<N>
	      List  of <func>:<header> to be check. <header> part is optional.
	      Here <N> means the number of arguments.	As  a  result  of  the
	      check    bmake's	 variable   HAVE_FUNC<N>.<func>.<header>   (or
	      HAVE_FUNC<N>.<func>) is set to either 0 or 1.
	      <header>: tr|./|__|g
	      Also     -DHAVE_FUNC<N>_<FUNC>_<HEADER>=(0     or	    1)	   (or
	      -DHAVE_FUNC<N>_<FUNC>=(0 or 1)) is added to CFLAGS if the speci‐
	      fied function was detected unless MKC_NOAUTO is set to 1.
	      <HEADER>: tr|a-z./|A-Z__|g

	       Ex:  MKC_CHECK_FUNCS2 += fgetln:stdio.h
		    MKC_CHECK_FUNCS6 += pselect:sys/select.h
	       Res: HAVE_FUNC2.fgetln.stdio_h = 1
		    HAVE_FUNC6.pselect.sys.select_h = 1
		    CFLAGS += -DHAVE_FUNC2_FGETLN_STDIO_H=1 \
			   += -DHAVE_FUNC6_PSELECT_SYS_SELECT_H=1

       MKC_REQUIRE_FUNCS<N>
	      The same as MKC_CHECK_FUNCS<N>, but absense of the function dec‐
	      laration is treated as a fatal error (See errorcheck target.

       MKC_CHECK_CUSTOM
	      A	 list  of  custom checks (list of names).  MKC_CUSTOM_FN.<cus‐
	      tom_check_name> is a "C", "C++" or "Fortran" source filename  or
	      an  executable  program for your custom check, e.g., filename.c,
	      filename.cc,  subdir/filename.cxx,   filename.C,	 filename.cpp,
	      mychecks/filename.f  or  subdir/executable_script.  mk-configure
	      tries to compile or run the specified file and sets CUSTOM.<cus‐
	      tom_check_name>  variable	 to  1, 0 or other value.  If MKC_CUS‐
	      TOM_FN.<custom_check_name>  is  unset,  it  defaults   to	  cus‐
	      tom_check_name.c

	      Also  -DCUSTOM_<CUSTOM_CHECK_NAME>=1  is	added to CFLAGS if the
	      specified check succeeded unless MKC_NOAUTO is set to 1.
	      <CUSTOM_CHECK_NAME>: tr|a-z|A-Z|g

	       Ex.  MKC_CHECK_CUSTOM+=		     nested_funcs
		    MKC_CUSTOM_FN.nested_funcs=	     nested_funcs.c
		    MKC_CUSTOM_FN.script_check=	     checks/script_check
	       Res. CUSTOM.nested_funcs=	1
		    CUSTOM.script_check=	0
		    CFLAGS+= -DCUSTOM_NESTED_FUNCS=1

	      Note that script for the check should be an executable file.

       MKC_REQUIRE_CUSTOM
	      The same as MKC_CHECK_CUSTOM, but failure is treated as a	 fatal
	      error  (See  errorcheck  target. 0 and empty value of CUSTOM.xxx
	      means failure.

       MKC_CUSTOM_DIR
	      Directory with custom checks source files.   See	MKC_CHECK_CUS‐
	      TOM. It defaults to ${.CURDIR}.

       MKC_CHECK_BUILTINS
	      mk-configure  provides  a number of built-in custom checks, that
	      is, source files to compile or scripts to run in order to	 check
	      for something.  Checks listed in MKC_CHECK_BUILTINS will be run.
	      Avalable values:

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

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

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

       MKC_CHECK_PROGS
	      List of <progname>s to check.  As a result of the check  bmake's
	      variable	HAVE_PROG.<progname>  is  set  to either 1 (true) or 0
	      (false).	Also PROG.<progname> is set to a full path of  a  pro‐
	      gram or to an empty string.

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

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

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

       MKC_CHECK_SIZEOF
	      List of <type>:<header> to check. <header> part is optional.

	      As a result of the check bmake's variable SIZEOF.<type>.<header>
	      (or  SIZEOF.<type>)  is  set  to	the  data  type size or string
	      "failed".
	      <type>: tr|*-|P_|g
	      <header>: tr|/.|__|g
	      Also	  -DSIZEOF_<TYPE>_<HEADER>=<failed|1|2|...>	   (or
	      -DSIZEOF_<TYPE>=<failed|1|2|...>) is added to CFLAGS if sizeof()
	      check was successful unless MKC_NOAUTO is set to 1
	      <TYPE>: tr|a-z*-|A-ZP_|g
	      <HEADER>: tr|a-z/.|A-Z__|g

	       Ex:  MKC_CHECK_SIZEOF += void*
		    MKC_CHECK_SIZEOF += long-long off_t:sys/types.h
	       Res: SIZEOF.voidP	     = 4
		    SIZEOF.long_long	     = 4
		    SIZEOF.off_t.sys_types_h = 8
		    CFLAGS += -DSIZEOF_VOIDP=4 \
			      -DSIZEOF_LONG_LONG=4 \
			      -DSIZEOF_OFF_T_SYS_TYPES_H=8

       MKC_CHECK_PROTOTYPES
	      A list of checks (list of	 names)	 for  C	 function  prototypes.
	      MKC_PROTOTYPE_FUNC.<name> is a C function prototype.  MKC_PROTO‐
	      TYPE_HEADERS.<name> is a list of headers to  #include.   mk-con‐
	      figure  verifies	that the specified prototype is correct and if
	      so,  HAVE_PROTOTYPE.<name>  bmake	 variable  is  set  to	1  and
	      -DHAVE_PROTOTYPE_<NAME>=1	 is  added to CFLAGS unless MKC_NOAUTO
	      is set to 1.  Otherwise, HAVE_PROTOTYPE.<name> variable  is  set
	      to 0.

	      Ex.
		MKC_CHECK_PROTOTYPES = posix_iconv const_iconv
		MKC_PROTOTYPE_FUNC.posix_iconv =
		  size_t iconv(iconv_t,char**,size_t*,char**,size_t*)
		MKC_PROTOTYPE_FUNC.const_iconv =
		  size_t iconv(iconv_t,const char**,size_t*,char**,size_t*)
		MKC_PROTOTYPE_HEADERS.posix_iconv = iconv.h
		MKC_PROTOTYPE_HEADERS.const_iconv = iconv.h
	      Res.
	       HAVE_PROTOTYPE.posix_iconv=0
	       HAVE_PROTOTYPE.const_iconv=1
	       CFLAGS += -DHAVE_PROTOTYPE_CONST_ICONV=1

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

       MKC_CHECK_CC_OPTS
	      A list of C compiler options to check.  If ${CC} -c support  the
	      specified	 option,  variable HAVE_CC_OPT.<option:S/=/_/g> is set
	      to 1 and 0 otherwise.

	      Ex.
		MKC_CHECK_CC_OPTS = -Wall -errwarn=%all
	      Res.
	       HAVE_CC_OPT.-Wall=1
	       HAVE_CC_OPT.-errwarn_%all=0

       MKC_CHECK_CXX_OPTS and HAVE_CXX_OPT.<option>
	      The same as MKC_CHECK_CC_OPTS and HAVE_CC_OPT but for  C++  com‐
	      piler.

       MKC_NOAUTO_FUNCLIBS
	      See MKC_CHECK_FUNCLIBS

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

       MKC_COMMON_HEADERS
	      List  of	header	files always #include'd to the test .c file in
	      MKC_CHECK_{DEFINES,VARS,FUNCS<N>,SIZEOF}	checks.	  The  default
	      value is an empty list.

		Ex: MKC_COMMON_HEADERS += unistd.h stdlib stdio.h string.h
		    MKC_CHECK_SIZEOF   += offs_t size_t ssize_t

       MKC_COMMON_DEFINES
	      List    of    defines    always	 passed	   to	 compiler   in
	      MKC_CHECK_{DEFINES,VARS,FUNCS<N>,SIZEOF} checks.

		 Ex: MKC_COMMON_DEFINES += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 # Linux
		     MKC_COMMON_DEFINES += -D_ALL_SOURCE # Interix

       MKC_COMMON_DEFINES.<OPSYS>
	      The same as MKC_COMMON_DEFINES but only for OPSYS (uname -s).

		 Ex: MKC_COMMON_DEFINES.Linux	+= -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
		     MKC_COMMON_DEFINES.Interix += -D_ALL_SOURCE

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

       MKC_SHOW_CACHED
	      Setting it to 0 will hide

		 Checking ... (cached) ...

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

       MKC_DELETE_TMPFILES
	      If set to 1, temporary files are removed.

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

       MKC_FEATURES
	      This is a list of "features" required by project. In general,  a
	      feature  is  something  that has problems with portability. This
	      may be a function name or header missing on some platforms,  for
	      example.	 What  developer  needs to do is to add FEATURENAME to
	      MKC_FEATURES variable and add #include <mkc_FEATURENAME.h> where
	      it  is needed. Internally, system requiremets are checked in the
	      automatically included  mkc_imp.f_FEATURENAME.mk	file  and  all
	      required	actions	 (includes,  define  checks etc.)  are made in
	      mkc_FEATURENAME.h header file.  Currently the following features
	      are provided:

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

	      strlcpy
		     Similar to strlcat.

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

	      progname
		     This  feature  provides getprogname(3) and setprogname(3)
		     functions available in *BSD.

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

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

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

	      libm   This feature checks whether libm is available and if yes,
		     adds  -lm to LDADD.  Most UNIX-like systems have libm but
		     Haiku, for example, does  not.  mkc_imp.f_libm.mk	checks
		     whether  libm  library  is	 available  and if yes, -lm is
		     added to LDADD.

	      libdl  This feature checks whether libdl	library	 is  available
		     and  dlopen(3)  is	 declared in dlfcn.h.  If yes, -ldl is
		     added to LDADD.  mkc_libdl.h  provides  declarations  for
		     dlopen(3), dlsym(3), dlclose(3) etc.

	      RB SPLAY
		     BSD  systems  provide  sys/tree.h	header	where RB_* and
		     SPLAY_* macroses  are  defined  for  red-black  tree  and
		     splay. These features check whether sys/tree.h and appro‐
		     priate macroses  are  available.  If  yes,	 mkc_RB.h  and
		     mkc_SPLAY.h  include  system-wide	sys/tree.h,  otherwise
		     NetBSD version of sys/tree.h provided by mk-configure  is
		     included.

	      SLIST SIMPLEQ STAILQ LIST TAILQ CIRCLEQ
		     BSD systems provide sys/queue.h header where SLIST_* etc.
		     macroses are defined for lists and queues. These features
		     check  whether  sys/queue.h  and appropriate macroses are
		     available. If yes, mkc_SLIST.h and others include system-
		     wide sys/queue.h, otherwise NetBSD version of sys/queue.h
		     provided by mk-configure is included.

   mkc_imp.scripts.mk
       is internal include file which is included from mkc.prog.mk, mkc.lib.mk
       and  mkc.files.mk.  Do not use it directly!  It provides installing and
       uninstalling the scripts.  The following variables are provided:

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

       SCRIPTSNAME
	      The name that the above program will be installed as, if differ‐
	      ent from ${SCRIPTS}.  <Mu>

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

       SCRIPTSDIR
	      Target directory for scripts.  <Iu> [${BINDIR}]

       SCRIPTSDIR_<script>
	      Optional directory to install <script> to.  If  <script>	has  a
	      form   <subdir>/<filename>,   SCRIPTSDIR_<subdir>_<filename>  is
	      used.  <Mu>

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

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

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

   mkc_imp.lua.mk
       mkc_imp.lua.mk  is  internal  include  file  which  is  included	  from
       mkc.prog.mk  and mkc.lib.mk.  Do not use it directly.  It provides sup‐
       port for Lua programming language, i.e. building	 and  installing  Lua-
       and/or C-based modules.	The following variables are provided:

       LUA_MODULES
	      List  of	Lua  modules  to build and install.  Dot in the module
	      name separates a dirname from basename.  That  is,  actual  .lua
	      file names are made of LUA_MODULES with dots replaced with unde‐
	      line symbol.  At installation time dots are replaced with slash.
	      For example, if LUA_MODULES=socket.foo, then socket_foo.lua will
	      be installed to ${LUA_LMODDIR}/socket/foo.lua <M>

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

       LUA_CMODULE
	      Compiled Lua module written in, e.g., C or C++.  Dot in the mod‐
	      ule name separates a dirname from basename. That is,  actual  .c
	      file names are made of LUA_MODULES with dots replaced with unde‐
	      line symbol.  At installation time dots are replaced with slash.
	      For  example, if LUA_CMODULES=socket.foo, then socket_foo.c will
	      be used  for  compiling  a  module  and  will  be	 installed  to
	      ${LUA_CMODDIR}/socket/foo.so.  <M>

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

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

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

   mkc_imp.intexts.mk
       mkc_imp.intexts.mk is internal include  file  which  is	included  from
       mkc.prog.mk,  mkc.lib.mk and mkc.files.mk.  Do not use it directly.  It
       provides conversion of <fn>.in files to <fn> by expanding the following
       @@ patterns:

	Pattern	      Result
       ----------------------
       @prefix@	      ${PREFIX}
       @bindir@	      ${BINDIR}
       @mandir@	      ${MANDIR}
       @sbindir@      ${SBINDIR}
       @libdir@	      ${LIBDIR}
       @libexecdir@   ${LIBEXECDIR}
       @datadir@      ${DATADIR}
       @sysconfdir@   ${SYSCONFDIR}
       @incsdir@      ${INCSDIR}
       @vardir@	      ${VARDIR}
       @sharedstate@  ${SHAREDSTATEDIR}

       The following variables are provided:

       INFILES
	      List of files to generate.  <M>

       INSCRIPTS
	      List of scripts to generate.  <M>

       INTEXTS_REPLS
	      List of Pattern/Replacement pairs separated by space, e.g.

		  INTEXTS_REPLS+=   version ${VERSION}
		  INTEXTS_REPLS+=   author_email ${AUTHOR_EMAIL}

	      <M>

       INTEXTS_SED
	      List of additional sed(1) expressions for expanding, e.g.

		  INTEXTS_SED+=	  -e 's,0.29.1,${VERSION},g'

	      <M>

   mkc_imp.info.mk
       mkc_imp.info.mk	is  internal  include  file  which  is	included  from
       mkc.prog.mk, mkc.lib.mk and mkc.files.mk.   Do  not  use	 it  directly!
       This module provides creation of .info files from .txi, .texi and .tex‐
       info sources and provides the following variables:

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

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

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

   mkc_imp.man.mk
       mkc_imp.man.mk  is  internal  include  file  which  is  included	  from
       mkc.prog.mk,  mkc.lib.mk	 and  mkc.files.mk.   Do  not use it directly!
       This module provides installation of manual pages and creation of  cat‐
       pages and HTML pages and provides the following variables:

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

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

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

       MAN    Manual  pages  (should  end  in .1 - .9).	 If no MAN variable is
	      defined, "MAN=${PROG}.1" is assumed if it exists.	 <M>

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

       MKCATPAGES
	      If "no", don't build or install the catman pages.	 <Iu> [no]

       MKHTML If "no", don't build or install the HTML man pages.  <Iu> [no]

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

       MLINKS List of manual page links (using a .1 - .9 suffix).  The linked-
	      to  file	must come first, the linked file second, and there may
	      be multiple pairs.  The files are hard-linked.  <M>

   mkc_imp.links.mk
       mkc_imp.links.mk is  internal  include  file  which  is	included  from
       mkc.prog.mk, mkc.lib.mk and mkc.files.mk.  Do not use it directly! This
       module provides creation of hard and symbolic links  and	 provides  the
       following variables:

       LINKS  The  list of binary links; should be full pathnames, the linked-
	      to file coming first, followed by the linked  file.   The	 files
	      are  hard-linked.	  For  example,	 to  link  ${BINDIR}/gzip  and
	      ${BINDIR}/gunzip, use:

		  LINKS=   ${DESTDIR}/bin/gzip ${DESTDIR}${BINDIR}/gunzip

	      <M>

       SYMLINKS
	      The list of symbolic links; should be full pathnames.  Syntax is
	      identical	 to  LINKS.  Note  that	 DESTDIR  is not automatically
	      included in the link.  <M>

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

       INCSDIR
	      See mkc.init.mk.

       INCS   The list of include files.  <M>

       INCSNAME
	      Target name of the include file, if only one; same as FILESNAME,
	      but for include files.  <M>

       INCSNAME_<file>
	      The name file <file> should be installed as, if not <file>, same
	      as FILESNAME_<file>, but for include files.  <Mu>

       INCSSRCDIR
	      Source directory for include files. This variable have an influ‐
	      ence on CPPFLAGS (-I${INCSSRCDIR} is added) and on an  installa‐
	      tion of include files (paths in ${INCS} are relative to ${INCSS‐
	      RCDIR}).	<M> [.]

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

       TEST_PREREQS
	      Prerequisites for target "test".	<Iu> [all]

   mkc_imp.pkg-config.mk
       mkc_imp.pkg-config.mk is internal include file which is	included  from
       mkc.prog.mk  and mkc.lib.mk.  Do not use it directly!  This module sup‐
       ports dependencies  controlled  by  pkg-config  program.	 As  a	result
       CPPFLAGS	 and  LDADD  variables	are  modified according to "pkg-config
       --cflags ..." and "pkg-config --libs ...".  The following variables are
       provided:

       MKC_CHECK_PKGCONFIG
	      List  of libraries to check, for example, glib-2.0>=2.1.	Spaces
	      around <=, >=, =, < and > are not allowed.  As a result  of  the
	      check  bmake's  variable PKG_CONFIG.exists.<lib> is set to 1 for
	      success or 0  for	 failure.   Unless  MKC_NOAUTO	is  set	 to  1
	      -DHAVE_PKGCONFIG_<LIB>=1	is  also  added to CFLAGS if <lib> was
	      found. <LIB> is tr/a-z+.-/A-ZP__/ of <lib>.  <M>

       MKC_REQUIRE_PKGCONFIG
	      The same as MKC_REQUIRE_PKGCONFIG, but  absense  of  library  is
	      treated as a fatal error (See errorcheck target.	<M>

       PKG_CONFIG_DEPS
	      Synonym for MKC_REQUIRE_PKGCONFIG. Deprecated.

       PKG_CONFIG.exists.<lib>
	      If  "1", <lib> exists, "0" otherwise.  Inside <lib> <=, >=, =, <
	      and > and replaced with _le_, _ge_, _eq_, _lt_ and _gt_  respec‐
	      tively.  <Iu>

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

       PKG_CONFIG.var.<lib>.<var>
	      Variable value (pkg-config --variable=<var> <lib>).  <Iu>

       PCNAME.<lib>
	      On  some	systems	 several  versions  of the same library may be
	      installed to differet directories (for example  liblua  for  Lua
	      5.1  and 5.2).  In order to avoid conflicts between them pc name
	      is changed (for example, lua5.1  and  lua5.2  instead  of	 lua).
	      This  variable  is  a  map  from	library name to pc name.  <Iu>
	      [${lib}]

   mkc_imp.pod.mk
       mkc_imp.pod.mk  is  internal  include  file  which  is  included	  from
       mkc.prog.mk  and mkc.lib.mk.  Do not use it directly!  It provides sup‐
       port for POD (Plain Old Documentation) markup language, i.e. convertion
       of  POD documents to MAN pages (suffix rules: .pod.1, ... , .pod.9) and
       HTMLs (.pod.html).  The following variables are provided:

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

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

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

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

   mkc_imp.dep.mk
       mkc_imp.dep.mk	is  internal  include  file  which  is	included  from
       mkc.prog.mk and mkc.lib.mk.  Do not use it directly!  This include file
       contains the default targets for building .depend files.	 It creates .d
       files from entries in SRCS and DPSRCS that are C, C++, or  Objective  C
       source files, and builds .depend from the .d files.  All other files in
       SRCS and all of DPSRCS will be used as dependencies for the  .d	files.
       The following variables are provided:

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

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

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

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

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

       AT_MAKE
	      Make(1)-like utility for the project.  <Imu> [${MAKE}].

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

       AT_CONFIGURE_ARGS
	      Extra  arguments passed to "configure" script set in addition to
	      standard ones (--prefix, --bindir etc.).	<Mu> [].

       AT_CONFIGURE_ENV
	      Environment variables for "configure" script set in addition  to
	      standard ones (CC, CFLAGS etc.).	<Mu> [].

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

CROSS COMPILATION
       The  following  variables  are used for compiling software using cross-
       tools.

       MACHINE_GNU_PLATFORM
	      See TOOLCHAIN_PREFIX.

       OPSYS_TARGET
	      OPSYS for target OS.

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

       TOOLDIR
	      See TOOLCHAIN_DIR.

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

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

ENVIRONMENT VARIABLES
       MAKECONF
	      Path to mk.conf file .include-ed by mkc.*.mk files

FILES
       /usr/local/etc/mk.conf
	       .include-ed by mkc.init.mk if exists

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

	  mkcmake errorcheck
	  mkcmake -j4 all

SEE ALSO
       mkc_check_header(1),	  mkc_check_prog(1),	    mkc_check_decl(1),
       mkc_check_funclib(1),	 mkc_check_sizeof(1),	  mkc_check_custom(1),
       bmake(1), mkdep(1),

AUTHOR
       Aleksey Cheusov <vle@gmx.net>

				 Nov 30, 2014		       MK-CONFIGURE(7)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net