mk-configure(7) - Linux man page
Name
mk-configure - lightweight replacement for GNU autotools
Description
mk-configure is a collection of include files for bmake (portable version of NetBSD make) and a number of executables. It is intended to simplify crossplatform development and software building.
To get system-specific configuration parameters, mkc.*.mk include files will try to include the file specified by the "MAKECONF" variable. If MAKECONF is not set, or no such file exists, the system make configuration file, /usr/etc/mk.conf or /etc/mk.conf, is included. These files may define any of the variables described below. Below in square brackets the default value for variables are specified. In triangle brackets -- typical way of use, where I means "Initialized by mk-configure", Iu means "Initialized by mk-configure but may be overriden by user", Im means "Initialized by mk-configure but may be set in Makefile", U means "Usually set by user", M means "May be set or changed in project's Makefile" and Mu means "May be set in project's Makefile but may be initialized or overriden by user".
Targets
- mkc.prog.mk, mkc.lib.mk, mkc.files.mk, mkc.subdir.mk, and mkc.subprj.mk include files provide the following
targets:
- all
build everything
clean
clean temporary files created while building.
- cleandir
- all
- 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
- uninstall
- remove installed files
- 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
- bin_tar, bin_targz, bin_tarbz2, bin_zip, bin_deb
- build software, install it to a temporary directory (using DESTDIR) and create .tar/.tar.gz/.tar.bz2/.zip/.deb archive containing all installed files. The target bin_deb expects debian control files in DEBIAN subdirectory, see examples/hello_files for the sample.
- <subdir>
- <subdir> is a subdirectory listed in SUBDIR or SUBPRJ. This target is equivalent to all-<subdir> and is provided by mkc.subdir.mk and mkc.subprj.mk only. For details see mkc.subdir.mk or mkc.subprj.mk sections below.
- <target>-<subdir>
- runs the specified <target> for the specified <subdir>. This target is provided by mkc.subdir.mk and mkc.subprj.mk only. For details see mkc.subdir.mk or mkc.subprj.mk sections below.
- subdir-<target>-<subdir> and nodeps-<target>-<subdir>
- runs the specified <target> for the specified <subdir> without dependencies. These targets are provided by mkc.subprj.mk only. For details see mkc.subprj.mk section below.
- NOTE: Commands associated with targets all, install, clean, cleandir, depend, test, installdirs, uninstall, errorcheck and filelist in Makefile override the standard behaviour.
Common variables
- The following variables control how various files are compiled/built.
- AR
Create, modify, and extract from archives. <Iu> [ar]
- ARFLAGS
- AR
- 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]
CFLAGS
Additional flags to the compiler when creating C objects. <IM>
- CFLAGS_<project>
- Similar to CFLAGS but for project ${PROJECTNAME}. <U>
- 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++]
- 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>
- 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> []
- 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]
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]
SIZE
List section sizes and total size. <Iu> [size]
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]
YACC
LALR(1) parser generator. <Iu> [yacc]
TAR
tar archiver. <Iu> [tar]
GZIP
gzip copression tool. <Iu> [gzip]
BZIP2
bzip2 copression tool. <Iu> [bzip2]
ZIP
zip copression tool. <Iu> [zip]
YFLAGS
Options to ${YACC}. <Iu> []
- YHEADER
- If defined, add "-d" to YFLAGS, and add dependencies from <file>.y to <file>.h and <file>.c, and add <foo>.h to CLEANFILES.
- YPREFIX
- If defined, add "-p ${YPREFIX}" to YFLAGS.
- WARNERR
- If "yes", force warnings to be reported as errors. At the moment this is supported for GCC, Intel C/C++ and Sun's C/C++ compilers. <Iu> [yes if WARNS=4, no otherwise ]
- WARNS
Crank up warning options; the distinct levels are (the higher the more strict):
-
WARNS=0 WARNS=1 WARNS=2 WARNS=3 WARNS=4
At the moment WARNS is supported for GCC and HP-UX C/C++ only. WARNS=0 means disabling all warnings if such feature is provided by compiler and mk-configure. <Mu> [0] - PREFIX
Target directory. <U> [/usr/local]
BINDIR
Target directory for utilities. <Iu Mu>
- [${PREFIX}/bin]
- SBINDIR
- [${PREFIX}/bin]
- Target directory for administration utilities. <Iu> [${PREFIX}/sbin]
- LIBDIR
Target directory for libraries. <Iu> [${PREFIX}/lib]
- LIBEXECDIR
- Target directory for system utilities. <Iu> [${PREFIX}/libexec]
- DATADIR
- Target directory for architecture-independent text files. <Iu> [${PREFIX}/share]
- 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]
- 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/etc/mk.conf: ... .ifdef MKC_VERSION COPTS?= -O2 -Werror SHRTOUT= yes .endif # MKC_VERSION
<I> - PROJECTNAME
- The name of a project. By default it is set to ${PROG}, ${LIB} or ${.CURDIR:T}. For a top-level project using either mkc.subdir.mk or mkc.subprj.mk it makes
sense to set this variable explicitely in project's Makefile. This variable is initialized before including mk.conf, so you can use it to change build options,
e.g. during development process.
/usr/etc/mk.conf: ... .ifdef MKC_VERSION ... .if ${PROJECTNAME} == "foo" SHRTOUT= yes PROG.gcc= /usr/bin/gcc CC_TYPE= gcc COPTS= -O0 -g .endif .endif # MKC_VERSION<Im> - CC_TYPE
- C compiler type. This variable is set by mk-configure and can be overriden by user. It can get the following values:
Value Description ---------------------- gcc GNU C/C++ compiler pcc Portable C compiler icc Intel C/C++ compiler msc Microsoft C/C++ compiler hpc HP-UX C/C++ compiler sunpro SUNWspro C/C++ compiler ibmc IBM C/C++ compiler (Visual Age for C/C++?) bcc Borland C/C++ compiler watcom Watcom C/C++ compiler como COMO C/C++ compiler decc DEC C mipspro MIPSpro C compiler
<Iu> - CXX_TYPE
- C++ compiler type. This variable is set by mk-configure and can be overriden by user. It can get the same values as CC_TYPE variable. <Iu>
- LD_TYPE
- Linker type. This variable is set by mk-configure and can be overriden by user. It can get the following values:
Value Description ---------------------- aixld AIX linker darwinld Darwin linker (MacOS-X) gnuld GNU linker hpld HP-UX linker interixld Interix linker scold SCO linker sunld SunOS linker osf1ld OSF1 linker (Tru64) irixld IRIX linker
<Iu> - SHRTOUT
- If not "no", output messages about compiling, linking and creating libraries are shortened and formatted. <Iu> [no]
- CFLAGS.warns.<cctype>.<warn-level>, CXXFLAGS.warns.<cxxtype>.<warn-level>
- These variables are set by mk-configure and enable warning messages for C or C++ compilers according to their types (CC_TYPE and CXX_TYPE) and warning level (WARNS). <Iu>
- CFLAGS.pic, CXXFLAGS.pic
- Options for C and C++ compilers for generating position independent code. On some platforms it makes sense to override these variables (initialized by mk-configure) for better performance, for example, one may use -fpic instead of -fPIC with GNU C/C++ compilers. See SHLIB_MAJOR, MKPIE etc. variables for more information. <Iu>
- CFLAGS.pie, CXXFLAGS.pie
- Options for C and C++ compilers for generating position independent executables. On some platforms it makes sense to override these variables (initialized by mk-configure) for better performance, for example, one may use -fpic instead of -fPIC with GNU C/C++ compilers. See MKPIE variable for more information. <Iu>
- CFLAGS.ssp, CXXFLAGS.ssp
- Options for C and C++ compilers for generating stack protection code. See USE_SSP variable for more information. <Iu>
- USE_SSP
- If "yes", enables stack protection code, which detects stack overflows and aborts the program. This enhances security but imposes some performance penalty.
mkc.files.mk
- The include file mkc.files.mk handles the FILES variables and is included from mkc.lib.mk and mkc.prog.mk. mkc_imp.files.mk List
of supported variables:
- FILES
The list of files to install. <M>
- FILESDIR
- FILES
- The location to install the files. <Mu> [${PREFIX}/bin]
- FILESDIR_<fn>
- The location to install the specific file <fn>. <Mu>
- FILESOWN
- File owner. If bmake is run with root privileges, it defaults to ${BINOWN} or to 'id -u' otherwise. <Mu>
- FILESOWN_<fn>
- File owner of the specific file <fn>. <Mu>
- FILESGRP
- File group. If bmake is run with root privileges, it defaults to <Mu> ${BINGRP} or to 'id -g' otherwise. <Mu>
- FILESGRP_<fn>
- File group of the specific file <fn>. <Mu>
- FILESMODE
- File mode. <Mu> [${NONBINMODE}]
- FILESMODE_<fn>
- File mode of the specific file <fn>. <Mu>
- FILESNAME
- Optional name to install each file as. <Mu>
- FILESNAME_<fn>
- Optional name to install <fn> as. <Mu>
- CLEANFILES
- Additional files to remove for the clean, cleandir and distclean targets. <I M>
- DISTCLEANFILES
- Additional files to remove for the cleandir and distclean targets. <I M>
- CLEANDIRS
- Additional directories to remove (recursively) for the clean, cleandir and distclean targets. <I M>
- DISTCLEANDIRS
- Additional directories to remove (recursively) for the cleandir and distclean targets. <I M>
mkc.prog.mk
- The include file mkc.prog.mk handles building program from one or more source files, along with their manual pages. It has a limited number of
suffixes. The include file mkc.prog.mk includes the file named "../Makefile.inc" if it exists. 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
- PROG
- The name that the above program will be installed as, if different from ${PROG}. <M>
- SRCS
List of source files to build the program. If SRCS is not defined, it's assumed to be ${PROG}.c. <M>
- SRCS.<prog>
- List of source files to build the program prog listed in PROGS. If SRCS.<prog> is not defined, it's assumed to be prog.c. <M>
- LDADD
Additional objects. Usually used for libraries. For example, to link with the compatibility and utility libraries, use:
-
LDADD+= -lutil -lcompat
<U> - LDADD_<project>
- Similar to LDADD but for project ${PROJECTNAME}.
- 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}.
- BINDIR, BINMODE, BINOWN and BINGRP
- See Common variables and mkc.files.mk sections.
- MKSHARE
- If "no", act as "MKHTML=no MKINFO=no MKCATPAGES=no MKMAN=no". I.e, don't build catman pages, man pages, info documentation,... <Iu> [yes]
- MKPIE
If "yes", create Position Independent Executable (PIE), otherwise create a regular executable. <Mu> [no]
- USE_RELRO
- If "yes", enables a technique to harden the data sections of an ELF binary/process. For security reasons it makes sense to set it to YES, it may slow down application startup, though. <Iu> [no]
- EXPORT_DYNAMIC
- If "yes", add all symbols to the dynamic symbol table, that is make all symbols visible from dynamic objects at run time (e.g. dlopen-ed objects), otherwise only symbols referenced by some object file will be exported. <M> [no]
- 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 or dynanic library. It has a limited number of suffixes. The include file
mkc.lib.mk includes the file named "../Makefile.inc" if it exists. 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
- LIB
- 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>
- LDCOMPILER
- If "yes", ${CC} is used for linking instead of ${LD}. For C++ sources ${CXX} is used for linking. <Iu> [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]
- 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> []
- 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 includes the file named "../Makefile.inc" if
it exists, and provides all targets provided by mkc.prog.mk. Variable SUBPRJ contains a list of pairs depdir:dir which mean that subproject
dir depends on depdir. mkcmake all command will build all subprojects listed in SUBPRJ in a correct order (starting with subprojects
having no dependencies and so on). There is also a target which allows the command bmake <subdir> where <subdir> is any directory listed in
the variable SUBPRJ. The following targets are also provided: <target>-<subdir> where <target> is either of the following: all, clean,
cleandir, depend, installdirs, install, uninstall and filelist. Also provided are: targets nodeps-<target>-<subdir> and
subdir-<target>-<subdir>. Difference between <target>-<subdir> and nodeps-<target>-<subdir> is that mkcmake
<target>-<subdir> runs the specified <target> for <subdir> and all its dependencies while mkcmake
nodeps-<target>-<subdir> -- only for <subdir>. A target subdir-<target>-<subdir> is a synonym for
nodeps-<target>-<subdir> See examples/hello_dictd subdirectory for the sample of use.
- 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
- SUBPRJ
- List of projects built and installed by default. The default is all projects listed in SUBPRJ. <IMu>
- EXPORT_VARNAMES
- List of variables to export before running make for subdirectories. By default MKC_CACHEDIR variable is exported. As a result cache files for subprojects are created in a top-level directory. <Mu> [MKC_CACHEDIR]
- NOEXPORT_VARNAMES
- List of variables excluded from EXPORT_VARNAMES. <Mu> []
- NOSUBDIR
- The same as in mkc.subdir.mk
- OBJDIR_<dir>
- The same as in mkc.subdir.mk
mkc.subdir.mk
- The include file mkc.subdir.mk contains the default targets for building subdirectories. It includes the file named "../Makefile.inc" if it exists,
and provides the same targets as mkc.prog.mk. For all of the directories listed in the variable SUBDIR, the specified directory will be visited and the
target made. There is also a default target which allows the command bmake <subdir> where <subdir> is any directory listed in the
variable SUBDIR. As a special case, the use of a token .WAIT as an entry in SUBDIR acts as a synchronization barrier when multiple make jobs are run; subdirs
before the .WAIT must complete before any subdirs after .WAIT are started. See bmake(1) for some caveats on use of .WAIT and other special
sources.
- SUBDIR
List of subdirectories <M>
- EXPORT_VARNAMES and NOEXPORT_VARNAMES
- SUBDIR
- The same as in mkc.subprj.mk include file.
- 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.
mkc.configure.mk
- mkc.configure.mk is an auxiliary include file for checking platform's features like headers, function or variable declarations, function
implementation in a particular libraries, data types sizes etc. This include file is included by mkc.prog.mk and mkc.lib.mk automatically but in
some cases it makes sense to include it explicitly. mkc.configure.mk supports the following variables.
- MKCHECKS
- If "no", none of the checks are performed. It is set to "yes" unless target is "clean", "cleandir or distclean".
- MKC_CHECK_HEADERS
- List of headers to be checked. As a result of the check bmake's variable HAVE_HEADER.<header> is set to either 0 or 1.
<header>: tr|./|__|g
Also -DHAVE_HEADER_<HEADER>=(0 or 1) is added to CFLAGS unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|gEx: MKC_CHECK_HEADERS += sys/time.h fcntl.h execinfo.h Res: HAVE_HEADER.sys_time_h = 1 HAVE_HEADER.fcntl_h = 1 HAVE_HEADER.execinfo_h = 1 CFLAGS += -DHAVE_HEADER_SYS_TIME_H=1 -DHAVE_HEADER_FCNTL=1 - MKC_REQUIRE_HEADERS
- The same as MKC_CHECK_HEADERS, but absense of header is treated as a fatal error (See errorcheck target.
- MKC_CHECK_FUNCLIBS
- List of <function>:<library> pairs to be checked, <library> part is optional. If <library> is present, presense of <function>
in libc is also checked automatically.
As a result of the check bmake's variable HAVE_FUNCLIB.<function>.<library> (or HAVE_FUNCLIB.<function>) is set to either 0 or 1.
By default, if <function> is found in <library> but not in libc, "-l<library>" is automatically added to LDADD unless <function>:<library> is listed in MKC_NOAUTO_FUNCLIBS or MKC_NOAUTO_FUNCLIBS is equal to 1 or MKC_NOAUTO is set to 1
Ex: MKC_CHECK_FUNCLIBS += strlcat fgetln getline getopt_long MKC_CHECK_FUNCLIBS += crypt:crypt dlopen:dl nanosleep:rt MKC_CHECK_FUNCLIBS += ftime:compat gettimeofday MKC_NOAUTO_FUNCLIBS += ftime:compat Res: HAVE_FUNCLIB.strlcat = 1 HAVE_FUNCLIB.fgetln = 1 HAVE_FUNCLIB.getline = 0 HAVE_FUNCLIB.getopt_long = 1 HAVE_FUNCLIB.crypt = 0 HAVE_FUNCLIB.crypt.crypt = 1 HAVE_FUNCLIB.dlopen = 1 HAVE_FUNCLIB.dlopen.dl = 0 HAVE_FUNCLIB.nanosleep = 1 HAVE_FUNCLIB.nanosleep.rt = 1 HAVE_FUNCLIB.ftime = 0 HAVE_FUNCLIB.ftime.compat = 1 HAVE_FUNCLIB.gettimeofday = 1 LDADD += -lcrypt - MKC_REQUIRE_FUNCLIBS
- The same as MKC_CHECK_FUNCLIBS, but absense of funclib is treated as a fatal error (See errorcheck target.
- MKC_SOURCE_FUNCLIBS
- The same as MKC_CHECK_FUNCLIBS, but if <function> is absent both in the specified <library> and in libc, function.c is added to SRCS unless
MKC_NOAUTO=1.
Ex: MKC_SOURCE_FUNCLIBS+= getline Res: SRCS+= getline.c HAVE_FUNCLIB.getline= 0 - MKC_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|gEx: 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|./|__|gAlso -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|gEx: MKC_CHECK_TYPES += size_t:string.h Res: HAVE_TYPE.size_t.string_h = 1 CFLAGS += -DHAVE_TYPE_SIZE_T_STRING_H=1 - MKC_REQUIRE_TYPES
- The same as MKC_CHECK_TYPES, but absense of the type declaration is treated as a fatal error (See errorcheck target.
- MKC_CHECK_VARS
- List of variable:header to check. <header> part is optional.
As a result of the check bmake's variable HAVE_DEFINE.<variable>.<header> (or HAVE_DEFINE.<variable>) is set to either 0 or 1
<header>: tr|./|__|g
Also -DHAVE_DEFINE_<VARIABLE>_<HEADER>=1 (or -DHAVE_DEFINE_<VARIABLE>=1) is added to CFLAGS if the specified variable was detected unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|gEx: MKC_CHECK_VARS += sys_errlist:errno.h Res: HAVE_VAR.sys_errlist.errno_h = 1 CFLAGS += -DHAVE_VAR_SYS_ERRLIST_ERRNO_H - MKC_REQUIRE_VARS
- The same as MKC_CHECK_VARS, but absense of the variable declaration is treated as a fatal error (See errorcheck target.
- MKC_CHECK_MEMBERS
- List of <type>.<member>:<header> to check. <header> part is optional.
As a result of the check bmake's variable HAVE_MEMBER.<type>_<member>.<header> (or HAVE_MEMBER.<type>_<member>) is set to either 0 or 1 depending on the result.
<header>: tr|./|__|g
Also -DHAVE_MEMBER_<TYPE>_<MEMBER>_<HEADER>=1 (or -DHAVE_MEMBER_<TYPE>_<MEMBER>=1) is added to CFLAGS if the specified member was found in appropriate type unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|g
<TYPE>: tr|a-z./|A-Z__|g
<MEMBER>: tr|a-z./|A-Z__|gEx: 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.
As a result of the check bmake's variable HAVE_FUNC<N>.<func>.<header> (or HAVE_FUNC<N>.<func>) is set to either 0 or 1.
<header>: tr|./|__|g
Also -DHAVE_FUNC<N>_<FUNC>_<HEADER>=(0 or 1) (or -DHAVE_FUNC<N>_<FUNC>=(0 or 1)) is added to CFLAGS if the specified function was detected unless MKC_NOAUTO is set to 1.
<HEADER>: tr|a-z./|A-Z__|gEx: MKC_CHECK_FUNCS2 += fgetln:stdio.h MKC_CHECK_FUNCS6 += pselect:sys/select.h Res: HAVE_FUNC2.fgetln.stdio_h = 1 HAVE_FUNC6.pselect.sys.select_h = 1 CFLAGS += -DHAVE_FUNC2_FGETLN_STDIO_H=1 \ += -DHAVE_FUNC6_PSELECT_SYS_SELECT_H=1 - MKC_REQUIRE_FUNCS<N>
- The same as MKC_CHECK_FUNCS<N>, but absense of the function declaration is treated as a fatal error (See errorcheck target.
- MKC_CHECK_CUSTOM
- A list of custom checks (list of names). MKC_CUSTOM_FN.<custom_check_name> is a "C", "C++" or "Fortran" source filename or an executable program for
your custom check, e.g., filename.c, filename.cc, subdir/filename.cxx, filename.C, filename.cpp, mychecks/filename.f or subdir/executable_script.
mk-configure tries to compile or run the specified file and sets CUSTOM.<custom_check_name> variable to 1, 0 or other value. If MKC_CUSTOM_FN.<custom_check_name> is unset, it defaults to custom_check_name.c
Also -DCUSTOM_<CUSTOM_CHECK_NAME>=1 is added to CFLAGS if the specified check succeeded unless MKC_NOAUTO is set to 1.
<CUSTOM_CHECK_NAME>: tr|a-z|A-Z|gEx. 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=1Note that script for the check should be an executable file. - MKC_REQUIRE_CUSTOM
- The same as MKC_CHECK_CUSTOM, but failure is treated as a fatal error (See errorcheck target. 0 and empty value of CUSTOM.xxx means failure.
- MKC_CUSTOM_DIR
- Directory with custom checks source files. See MKC_CHECK_CUSTOM. It defaults to ${.CURDIR}.
- MKC_CHECK_BUILTINS
- mk-configure provides a number of built-in custom checks, that is, source files to compile or scripts to run in order to check for something. Checks
listed in MKC_CHECK_BUILTINS will be run.
- Avalable values:
- prog_flex, prog_bison, prog_gawk, prog_gm4
- Avalable values:
Find flex, bison, GNU awk or GNU m4 by analysing program's help and/or version messages. If found, BUILTIN.prog_<progname> is set to a path, otherwise it is set to an empty string. Note that gawk may be found as awk, bison as yacc, gm4 as m4 and flex as lex.
- endianess
BUILTIN.endianess variable is set to either little, big or unknown depending on a hardware.
- MKC_CHECK_PROGS
- List of <progname>s to check. As a result of the check bmake's variable HAVE_PROG.<progname> is set to either 1 (true) or 0 (false). Also
PROG.<progname> is set to a full path of a program or to an empty string.
Ex: MKC_CHECK_PROGS += lua ruby gawk runawk Res: HAVE_PROG.lua = 1 PROG.lua = /usr/pkg/bin/lua HAVE_PROG.ruby = 0 HAVE_PROG.gawk = 1 PROG.gawk = /usr/bin/gawk HAVE_PROG.runawk = 1 PROG.runawk = /usr/pkg/bin/runawkIf 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__|gEx: 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_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}.
- 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_imp.scripts.mk
- mkc_imp.scripts.mk is internal include file which is included from mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it
directly! It provides installing and uninstalling the scripts. The following variables are provided:
- SCRIPTS
- A list of interpreter scripts (written in shell, awk, lua etc). These are installed like programs. <M>
- SCRIPTSNAME
- The name that the above program will be installed as, if different from ${SCRIPTS}. <Mu>
- SCRIPTSNAME_<script>
- Optional name to install <script> as. If <script> has a form <subdir>/<filename>, SCRIPTSNAME_<subdir>_<filename> is used. <Mu>
- SCRIPTSDIR
- Target directory for scripts. <Iu> [${BINDIR}]
- SCRIPTSDIR_<script>
- Optional directory to install <script> to. If <script> has a form <subdir>/<filename>, SCRIPTSDIR_<subdir>_<filename> is used. <Mu>
- SCRIPTSOWN
- Script files owner. <Iu> [${BINOWN}]
- SCRIPTSGRP
- Script file group. <Iu> [${BINGRP}]
- SCRIPTSMODE
- Script file mode. <Iu> [${BINMODE}]
mkc_imp.lua.mk
- mkc_imp.lua.mk is internal include file which is included from mkc.prog.mk and mkc.lib.mk. Do not use it directly. It provides support
for Lua programming language, i.e. building and installing Lua- and/or C-based modules. The following variables are provided:
- LUA_MODULES
- List of Lua modules to build and install. Dot in the module name separates a dirname from basename, that is module mod is installed to ${LUA_LMODDIR}/${mod:S|.|/|g}.lua <M>
- LUA_LMODULES
- Deprecated. Filenames of Lua modules. Consider using LUA_MODULES. <M>
- LUA_CMODULE
- Compiled Lua module written in, e.g., C or C++. Module is installed to
${LUA_CMODDIR}/${LUA_CMODULE:S|.|/|g}.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 ---------------------- /usr ${PREFIX} /usr/bin ${BINDIR} /usr/share/man ${MANDIR} /usr/sbin ${SBINDIR} /usr/lib ${LIBDIR} /usr/libexec ${LIBEXECDIR} /usr/share ${DATADIR} /usr/etc ${SYSCONFDIR} /usr/include ${INCSDIR}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.23.0,${VERSION},g'<M>
mkc_imp.info.mk
- mkc_imp.info.mk is internal include file which is included from mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it
directly! This module provides creation of .info files from .txi, .texi and .texinfo sources and provides the following variables:
- MKINFO
If "no", don't build or install Info documentation from Texinfo source files. <Iu> [yes]
- TEXINFO
- MKINFO
- List of Texinfo source files. Info documentation will consist of single files with the extension replaced by .info. <M>
- INFOFLAGS
- Flags to pass to makeinfo. [] <Iu>
mkc_imp.man.mk
- mkc_imp.man.mk is internal include file which is included from mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly!
This module provides installation of manual pages and creation of catpages and HTML pages and provides the following variables:
- MANDIR
Target directory for man pages. <Iu> [${PREFIX}/man]
USETBL
If not "no", preprocess man pages using tbl(1) while generating cat pages. <IM> [no]
MANZ
If not "no", compress manual pages at installation time. <Iu> [no]
MAN
Manual pages (should end in .1 - .9). If no MAN variable is defined, "MAN=${PROG}.1" is assumed if it exists. <M>
MKMAN
If "no", don't build or install the man pages, and also acts as "MKCATPAGES=no MKHTML=no". <Iu> [yes]
- MKCATPAGES
- MANDIR
- 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
-
LINKS= ${DESTDIR}/bin/gzip ${DESTDIR}${BINDIR}/gunzip<M> - SYMLINKS
- The list of symbolic links; should be full pathnames. Syntax is identical to LINKS. Note that DESTDIR is not automatically included in the link. <M>
mkc_imp.inc.mk
- mkc_imp.inc.mk is internal include file which is included from mkc.prog.mk, mkc.lib.mk and mkc.files.mk. Do not use it directly!
This module provides installation of header files and provides the following variables:
- INCSDIR
- Target directory for includes. <Iu> [${PREFIX}/include]
- INCS
The list of include files. <M>
- INCSNAME
- Target name of the include file, if only one; same as FILESNAME, but for include files. <M>
- INCSNAME_<file>
- The name file <file> should be installed as, if not <file>, same as FILESNAME_<file>, but for include files. <Mu>
- INCSSRCDIR
- Source directory for include files. This variable have an influence on CPPFLAGS (-I${INCSSRCDIR} is added) and on an installation of include files (paths in ${INCS} are relative to ${INCSSRCDIR}). <M> [.]
mkc.minitest.mk
- mkc.minitest.mk is an auxiliary include file that implement simple framework for unit tests. Idea: application provides the target test_output and expect.out file that contains ideal output. "bmake test" runs "bmake test_output" and compare generated output with expect.out. Look at the sources.
mkc_imp.pkg-config.mk
- mkc_imp.pkg-config.mk is internal include file which is included from mkc.prog.mk and mkc.lib.mk. Do not use it directly! This module
supports dependencies controlled by pkg-config program. As a result CPPFLAGS and LDADD variables are modified according to "pkg-config --cflags ..." and
"pkg-config --libs ...". The following variables are provided:
- PKG_CONFIG_DEPS
- List of dependency libraries. Spaces around <=, >=, =, < and > are not allowed. <M>
- PKG_CONFIG.exists.<lib>
- If "1", <lib> exists, "0" otherwise. Inside <lib> <=, >=, =, < and > and replaced with _le_, _ge_, _eq_, _lt_ and _gt_ respectively. <Iu>
- PKG_CONFIG_VARS.<lib>
- List of variables to check for library <lib>. <M>
- PKG_CONFIG.var.<lib>.<var>
- Variable value (pkg-config --variable=<var> <lib>). <Iu>
- PCNAME.<lib>
- On some systems several versions of the same library may be installed to differet directories (for example liblua for Lua 5.1 and 5.2). In order to avoid conflicts between them pc name is changed (for example, lua5.1 and lua5.2 instead of lua). This variable is a map from library name to pc name. <Iu> [${lib}]
mkc_imp.pod.mk
- mkc_imp.pod.mk is internal include file which is included from mkc.prog.mk and mkc.lib.mk. Do not use it directly! It provides support
for POD (Plain Old Documentation) markup language, i.e. convertion of POD documents to MAN pages (suffix rules: .pod.1, ... , .pod.9) and HTMLs (.pod.html).
The following variables are provided:
- POD2MAN
- Path to POD to MAN conversion utility <Iu> [pod2man].
- POD2MAN_FLAGS
- Flags passed to ${POD2MAN} <Iu> [-r '' -n '${.TARGET:T:R}' -c ''].
- POD2HTML
- Path to POD to HTML conversion utility <Iu> [pod2html].
- POD2HTML_FLAGS
- Flags passed to ${POD2HTML} <Iu> [].
Cross Compilation
The following variables are used for compiling software using cross-rools.
- SYSROOT
- Root directory for headers and libraries. If set, the following variables are set to ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}<toolname>: AR, AS, CXX, CPP, CC, INSTALL, LD, NM, OBJCOPY, OBJDUMP, RANLIB, SIZE and STRIP. <U> [].
- 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/etc/mk.conf
- .include-ed by mkc.*.mk if exists
- /etc/mk.conf
- .include-ed by mkc.*.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>