summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
Diffstat (limited to 'mk')
-rw-r--r--mk/Makefile48
-rw-r--r--mk/configure.mk341
-rw-r--r--mk/mkc.configure.mk12
-rw-r--r--mk/mkc.files.mk2
-rw-r--r--mk/mkc.init.mk674
-rw-r--r--mk/mkc.lib.mk2
-rw-r--r--mk/mkc.minitest.mk26
-rw-r--r--mk/mkc.mk21
-rw-r--r--mk/mkc.prog.mk2
-rw-r--r--mk/mkc.subdir.mk2
-rw-r--r--mk/mkc.subprj.mk2
-rw-r--r--mk/mkc_imp.arch.mk38
-rw-r--r--mk/mkc_imp.dep.mk96
-rw-r--r--mk/mkc_imp.files.mk49
-rw-r--r--mk/mkc_imp.final.mk58
-rw-r--r--mk/mkc_imp.inc.mk37
-rw-r--r--mk/mkc_imp.info.mk67
-rw-r--r--mk/mkc_imp.intexts.mk52
-rw-r--r--mk/mkc_imp.lib.mk179
-rw-r--r--mk/mkc_imp.links.mk35
-rw-r--r--mk/mkc_imp.lua.mk61
-rw-r--r--mk/mkc_imp.man.mk189
-rw-r--r--mk/mkc_imp.mk68
-rw-r--r--mk/mkc_imp.obj.mk34
-rw-r--r--mk/mkc_imp.objdir.mk43
-rw-r--r--mk/mkc_imp.pkg-config.mk80
-rw-r--r--mk/mkc_imp.platform.sys.mk503
-rw-r--r--mk/mkc_imp.pod.mk34
-rw-r--r--mk/mkc_imp.preinit.mk32
-rw-r--r--mk/mkc_imp.prog.mk73
-rw-r--r--mk/mkc_imp.scripts.mk44
-rw-r--r--mk/mkc_imp.subprj.mk92
-rw-r--r--mk/mkc_imp.vars.mk.in7
-rw-r--r--mk/sys.mk22
34 files changed, 3025 insertions, 0 deletions
diff --git a/mk/Makefile b/mk/Makefile
new file mode 100644
index 0000000..5e2b695
--- /dev/null
+++ b/mk/Makefile
@@ -0,0 +1,48 @@
+FILES = sys.mk mkc.configure.mk configure.mk mkc.mk \
+ mkc.init.mk mkc_imp.intexts.mk mkc_imp.mk \
+ mkc.minitest.mk mkc_imp.pkg-config.mk \
+ mkc_imp.files.mk mkc_imp.inc.mk mkc_imp.info.mk mkc_imp.lib.mk \
+ mkc_imp.links.mk mkc_imp.man.mk mkc_imp.prog.mk \
+ mkc_imp.subprj.mk \
+ mkc_imp.final.mk mkc_imp.scripts.mk \
+ mkc_imp.platform.sys.mk mkc_imp.dep.mk mkc_imp.lua.mk \
+ mkc_imp.arch.mk mkc_imp.pod.mk mkc_imp.preinit.mk \
+ mkc.prog.mk mkc.files.mk mkc.lib.mk mkc.subdir.mk mkc.subprj.mk \
+ mkc_imp.objdir.mk mkc_imp.obj.mk ${INFILES}
+
+FILESDIR = ${MKFILESDIR}
+
+INFILES += mkc_imp.vars.mk
+
+#################################################
+.for i in prog_mkdep prog_nbmkdep
+MKC_CHECK_CUSTOM += ${i}
+MKC_CUSTOM_FN.${i} = ${.CURDIR}/../custom/${i}
+.endfor
+
+MKC_CHECK_PROGS += makedepend
+
+.include <mkc.configure.mk>
+
+.if ${HAVE_PROG.makedepend:U0}
+makedepend_cmd = ${PROG.makedepend}
+mkdep_cmd = mkdep
+mkdep_type = makedepend
+.elif !empty(CUSTOM.prog_nbmkdep)
+mkdep_cmd = ${CUSTOM.prog_nbmkdep}
+mkdep_type = nbmkdep
+.elif !empty(CUSTOM.prog_mkdep)
+mkdep_cmd = ${CUSTOM.prog_mkdep}
+mkdep_type = mkdep
+.else
+MKC_ERR_MSG += "mkdep(1) cannot be found"
+.endif
+
+makedepend_cmd ?= makedepend
+
+INTEXTS_REPLS += mkdep_cmd ${mkdep_cmd}
+INTEXTS_REPLS += makedepend_cmd ${makedepend_cmd}
+INTEXTS_REPLS += mkdep_type ${mkdep_type}
+
+#################################################
+.include <mkc.mk>
diff --git a/mk/configure.mk b/mk/configure.mk
new file mode 100644
index 0000000..8d7571c
--- /dev/null
+++ b/mk/configure.mk
@@ -0,0 +1,341 @@
+# Copyright (c) 2009-2013, Aleksey Cheusov <vle@gmx.net>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+######################################################################
+# See mk-configure(7) for documentation
+#
+
+# user defined variables
+MKC_SHOW_CACHED ?= 0 # set it to `1' to show "...(cached)..." lines
+MKC_DELETE_TMPFILES ?= 0 # set it to `1' to delete temporary files
+MKC_CACHEDIR ?= ${.OBJDIR} # directory for cache and intermediate files
+MKC_COMMON_HEADERS ?= # list of headers always #included
+MKC_NOCACHE ?= # 1 or yes for disabling cache
+MKC_CUSTOM_DIR ?=${.CURDIR} # directory with custom tests.c
+
+#
+MKC_SOURCE_FUNCLIBS ?=
+_MKC_SOURCE_FUNCS = ${MKC_SOURCE_FUNCLIBS:C/:.*//}
+
+# .endif for the next .if is in the end of file
+.if ${MKCHECKS:Uno:tl} == "yes"
+
+HAVE_FUNCLIB.main ?= 1
+
+#
+.undef MKC_SRCS
+.undef MKC_LDADD
+.undef MKC_CFLAGS
+
+.if defined(MKC_COMMON_DEFINES.${TARGET_OPSYS})
+CPPFLAGS += ${MKC_COMMON_DEFINES.${TARGET_OPSYS}}
+.endif
+.if defined(MKC_COMMON_DEFINES)
+CPPFLAGS += ${MKC_COMMON_DEFINES}
+.endif
+
+#
+_MKC_CPPFLAGS := ${CPPFLAGS}
+_MKC_CFLAGS := ${CFLAGS}
+_MKC_CXXFLAGS := ${CXXFLAGS}
+_MKC_FFLAGS := ${FFLAGS}
+_MKC_LDFLAGS := ${LDFLAGS}
+_MKC_LDADD := ${LDADD}
+
+mkc.environ=CC='${CC}' CXX='${CXX}' FC='${FC}' CPPFLAGS='${_MKC_CPPFLAGS}' CFLAGS='${_MKC_CFLAGS}' CXXFLAGS='${_MKC_CXXFLAGS}' FFLAGS='${_MKC_FFLAGS}' LDFLAGS='${_MKC_LDFLAGS}' LDADD='${_MKC_LDADD}' LEX='${LEX}' YACC='${YACC}' MKC_CACHEDIR='${MKC_CACHEDIR}' MKC_COMMON_HEADERS='${MKC_COMMON_HEADERS}' MKC_DELETE_TMPFILES='${MKC_DELETE_TMPFILES}' MKC_SHOW_CACHED='${MKC_SHOW_CACHED}' MKC_NOCACHE='${MKC_NOCACHE}' MKC_VERBOSE=1
+
+######################################################
+# checking for builtin checks
+.for i in ${MKC_CHECK_BUILTINS} ${MKC_REQUIRE_BUILTINS}
+MKC_CUSTOM_FN.${i} ?= ${BUILTINSDIR}/${i}
+MKC_CHECK_CUSTOM += ${i}
+MKC_REQUIRE_CUSTOM += ${MKC_REQUIRE_BUILTINS:M${i}}
+.endfor
+
+######################################################
+# checking for headers
+.for h in ${MKC_CHECK_HEADERS} ${MKC_REQUIRE_HEADERS}
+.if !defined(HAVE_HEADER.${h:S|.|_|g:S|/|_|g})
+HAVE_HEADER.${h:S|.|_|g:S|/|_|g} != env ${mkc.environ} mkc_check_header ${h}
+.endif
+.if ${HAVE_HEADER.${h:S|.|_|g:S|/|_|g}}
+.if empty(MKC_REQUIRE_HEADERS:U:M${h})
+MKC_CFLAGS += -DHAVE_HEADER_${h:tu:S|.|_|g:S|/|_|g}=${HAVE_HEADER.${h:S|.|_|g:S|/|_|g}}
+.endif
+.elif !empty(MKC_REQUIRE_HEADERS:U:M${h})
+_fake != env ${mkc.environ} mkc_check_header -d ${h} && echo
+MKC_ERR_MSG += "ERROR: cannot find header ${h}"
+.endif
+.endfor
+
+.undef MKC_CHECK_HEADERS
+.undef MKC_REQUIRE_HEADERS
+
+######################################################
+# checking for functions in libraries
+.for f in ${MKC_CHECK_FUNCLIBS:U} ${MKC_SOURCE_FUNCLIBS:U} ${MKC_REQUIRE_FUNCLIBS:U}
+.if !defined(HAVE_FUNCLIB.${f:S/:/./g})
+HAVE_FUNCLIB.${f:S/:/./g} != env ${mkc.environ} mkc_check_funclib ${f:S/:/ /g}
+.endif
+.if !defined(HAVE_FUNCLIB.${f:C/:.*//})
+HAVE_FUNCLIB.${f:C/:.*//} != env ${mkc.environ} mkc_check_funclib ${f:C/:.*//}
+.endif
+.if ${HAVE_FUNCLIB.${f:C/:.*//}} != ${HAVE_FUNCLIB.${f:S/:/./g}}
+.if empty(MKC_NOAUTO_FUNCLIBS:U:S/:/./g:M${f:S/:/./g}) && empty(MKC_NOAUTO_FUNCLIBS:U:M1) && ${HAVE_FUNCLIB.${f:S/:/./g}} && !${HAVE_FUNCLIB.${f:C/:.*//}}
+MKC_LDADD += -l${f:C/^.*://}
+.endif
+.endif
+.if !${HAVE_FUNCLIB.${f:S/:/./g}} && !${HAVE_FUNCLIB.${f:C/:.*//}} && !empty(_MKC_SOURCE_FUNCS:M${f:C/:.*//})
+MKC_SRCS += ${f:C/:.*//}.c
+.endif
+.endfor # f
+
+.for f in ${MKC_REQUIRE_FUNCLIBS:U}
+.if !${HAVE_FUNCLIB.${f:S/:/./g}} && !${HAVE_FUNCLIB.${f:C/:.*//}}
+_fake != env ${mkc.environ} mkc_check_funclib -d ${f:C/:.*//} && echo
+_fake != env ${mkc.environ} mkc_check_funclib -d ${f:S/:/ /g} && echo
+MKC_ERR_MSG += "ERROR: cannot find function ${f}"
+.endif
+.endfor # f
+
+.undef MKC_CHECK_FUNCLIBS
+.undef MKC_REQUIRE_FUNCLIBS
+
+######################################################
+# checking for sizeof(xxx)
+.for t in ${MKC_CHECK_SIZEOF:U}
+.if !defined(SIZEOF.${t:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g})
+SIZEOF.${t:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g} != env ${mkc.environ} mkc_check_sizeof ${t:S/:/ /g}
+.endif
+.if ${SIZEOF.${t:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g}} != failed
+MKC_CFLAGS += -DSIZEOF_${t:S/-/_/g:S| |_|g:S|*|P|g:S|:|_|g:S|.|_|g:tu}=${SIZEOF.${t:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g}}
+.endif
+.endfor
+
+.undef MKC_CHECK_SIZEOF
+
+######################################################
+# checking for declared #define
+.for d in ${MKC_CHECK_DEFINES:U} ${MKC_REQUIRE_DEFINES:U}
+.if !defined(HAVE_DEFINE.${d:S/./_/g:S/:/./g:S|/|_|g})
+HAVE_DEFINE.${d:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc_check_decl define ${d:S/:/ /g}
+.endif
+.if ${HAVE_DEFINE.${d:S/./_/g:S/:/./g:S|/|_|g}}
+.if empty(MKC_REQUIRE_DEFINES:U:M${d})
+MKC_CFLAGS += -DHAVE_DEFINE_${d:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+.endif
+.endif
+.endfor
+
+.for d in ${MKC_REQUIRE_DEFINES:U}
+.if !${HAVE_DEFINE.${d:S/./_/g:S/:/./g:S|/|_|g}}
+_fake != env ${mkc.environ} mkc_check_decl -d define ${d:S/:/ /g} && echo
+MKC_ERR_MSG += "ERROR: cannot find declaration of define ${d}"
+.endif
+.endfor
+
+.undef MKC_CHECK_DEFINES
+.undef MKC_REQUIRE_DEFINES
+
+######################################################
+# checking for declared type
+.for t in ${MKC_CHECK_TYPES:U} ${MKC_REQUIRE_TYPES:U}
+.if !defined(HAVE_TYPE.${t:S/./_/g:S/:/./g:S|/|_|g})
+HAVE_TYPE.${t:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc_check_decl type ${t:S/:/ /g}
+.endif
+.if ${HAVE_TYPE.${t:S/./_/g:S/:/./g:S|/|_|g}}
+.if empty(MKC_REQUIRE_TYPES:U:M${t})
+MKC_CFLAGS += -DHAVE_TYPE_${t:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+.endif
+.endif
+.endfor
+
+.for t in ${MKC_REQUIRE_TYPES:U}
+.if !${HAVE_TYPE.${t:S/./_/g:S/:/./g:S|/|_|g}}
+_fake != env ${mkc.environ} mkc_check_decl -d type ${t:S/:/ /g} && echo
+MKC_ERR_MSG += "ERROR: cannot find declaration of type ${t}"
+.endif
+.endfor
+
+.undef MKC_CHECK_TYPES
+.undef MKC_REQUIRE_TYPES
+
+######################################################
+# checking for declared variables
+.for d in ${MKC_CHECK_VARS:U} ${MKC_REQUIRE_VARS:U}
+.if !defined(HAVE_VAR.${d:S/./_/g:S/:/./g:S|/|_|g})
+HAVE_VAR.${d:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc_check_decl variable ${d:S/:/ /g}
+.endif
+.if ${HAVE_VAR.${d:S/./_/g:S/:/./g:S|/|_|g}}
+.if empty(MKC_REQUIRE_VARS:U:M${d})
+MKC_CFLAGS += -DHAVE_VAR_${d:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+.endif
+.endif
+.endfor
+
+.for d in ${MKC_REQUIRE_VARS:U}
+.if !${HAVE_VAR.${d:S/./_/g:S/:/./g:S|/|_|g}}
+_fake != env ${mkc.environ} mkc_check_decl -d variable ${d:S/:/ /g} && echo
+MKC_ERR_MSG += "ERROR: cannot find declaration of variable ${d}"
+.endif
+.endfor
+
+.undef MKC_CHECK_VARS
+.undef MKC_REQUIRE_VARS
+
+######################################################
+# checking for struct members
+.for m in ${MKC_CHECK_MEMBERS:U} ${MKC_REQUIRE_MEMBERS:U}
+.if !defined(HAVE_MEMBER.${m:S/./_/g:S/:/./g:S|/|_|g:S/-/_/g})
+HAVE_MEMBER.${m:S/./_/g:S/:/./g:S|/|_|g:S/-/_/g} != env ${mkc.environ} mkc_check_decl member ${m:S/:/ /g}
+.endif
+.if ${HAVE_MEMBER.${m:S/./_/g:S/:/./g:S|/|_|g:S/-/_/g}}
+.if empty(MKC_REQUIRE_MEMBERS:U:M${m})
+MKC_CFLAGS += -DHAVE_MEMBER_${m:tu:S/:/_/g:S/./_/g:S|/|_|g:S/-/_/g}=1
+.endif
+.endif
+.endfor
+
+.for m in ${MKC_REQUIRE_MEMBERS:U}
+.if !${HAVE_MEMBER.${m:S/./_/g:S/:/./g:S|/|_|g:S/-/_/g}}
+_fake != env ${mkc.environ} mkc_check_decl -d member ${m:S/:/ /g} && echo
+MKC_ERR_MSG += "ERROR: cannot find member ${m}"
+.endif
+.endfor
+
+.undef MKC_CHECK_MEMBERS
+.undef MKC_REQUIRE_MEMBERS
+
+######################################################
+# checking for declared functions
+.for n in 0 1 2 3 4 5 6 7 8 9
+
+.for d in ${MKC_CHECK_FUNCS${n}:U} ${MKC_REQUIRE_FUNCS${n}:U}
+.if !defined(HAVE_FUNC${n}.${d:S/./_/g:S/:/./g:S|/|_|g})
+HAVE_FUNC${n}.${d:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc_check_decl func${n} ${d:S/:/ /g}
+.endif
+.if ${HAVE_FUNC${n}.${d:S/./_/g:S/:/./g:S|/|_|g}}
+.if empty(MKC_REQUIRE_FUNCS${n}:U:M${d})
+MKC_CFLAGS += -DHAVE_FUNC${n}_${d:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+.endif
+.endif
+.endfor # d
+
+.for d in ${MKC_REQUIRE_FUNCS${n}:U}
+.if !${HAVE_FUNC${n}.${d:S/./_/g:S/:/./g:S|/|_|g}}
+_fake != env ${mkc.environ} mkc_check_decl -d func${n} ${d:S/:/ /g} && echo
+MKC_ERR_MSG += "ERROR: cannot find declaration of function ${d}"
+.endif
+.endfor # d
+
+.undef MKC_CHECK_FUNCS${n}
+.undef MKC_REQUIRE_FUNCS${n}
+
+.endfor # n
+
+######################################################
+# custom checks
+.for c in ${MKC_CHECK_CUSTOM} ${MKC_REQUIRE_CUSTOM}
+.if !defined(CUSTOM.${c})
+.if !defined(MKC_CUSTOM_FN.${c})
+MKC_CUSTOM_FN.${c} = ${c}.c
+.endif
+.if empty(MKC_CUSTOM_FN.${c}:M/*)
+MKC_CUSTOM_FN.${c} := ${MKC_CUSTOM_DIR}/${MKC_CUSTOM_FN.${c}}
+.endif
+CUSTOM.${c} != env ${mkc.environ} mkc_check_custom ${MKC_CUSTOM_FN.${c}}
+.endif
+.if !empty(CUSTOM.${c}) && ${CUSTOM.${c}} != 0
+.if empty(MKC_REQUIRE_CUSTOM:U:M${c})
+MKC_CFLAGS += -DCUSTOM_${c:tu}=${CUSTOM.${c}}
+.endif
+.endif
+.endfor
+
+.for c in ${MKC_REQUIRE_CUSTOM}
+.if empty(CUSTOM.${c}) || ${CUSTOM.${c}} == 0
+_fake != env ${mkc.environ} mkc_check_custom -d ${MKC_CUSTOM_FN.${c}} && echo
+MKC_ERR_MSG += "ERROR: custom test ${c} failed"
+.endif
+.endfor
+
+.for c in ${MKC_CHECK_BUILTINS}
+BUILTIN.${c} = ${CUSTOM.${c}}
+.endfor
+
+######################################################
+# checking for programs
+.for p in ${MKC_CHECK_PROGS} ${MKC_REQUIRE_PROGS}
+p_ := ${p}
+prog_id := ${MKC_PROG.id.${p:S|+|x|g}:U${p}:S|/|_|g}
+.ifdef PROG.${prog_id}
+.elif !empty(p_:M/*)
+PROG.${prog_id} = ${p}
+.else
+PROG.${prog_id} != env ${mkc.environ} mkc_check_prog -i '${prog_id}' '${p}'
+.endif # !defined(PROG.${prog_id})
+.ifndef HAVE_PROG.${prog_id}
+.if !empty(PROG.${prog_id}) && exists(${PROG.${prog_id}})
+HAVE_PROG.${prog_id} = 1
+.else
+HAVE_PROG.${prog_id} = 0
+.endif
+.endif # ifndef HAVE_PROG.${prog_id}
+
+.if !${HAVE_PROG.${prog_id}} && !empty(MKC_REQUIRE_PROGS:U1:M${p})
+_fake != env ${mkc.environ} mkc_check_prog -d -i '${prog_id}' '${p}' && echo
+MKC_ERR_MSG += "ERROR: cannot find program ${p}"
+.endif
+.endfor # p
+
+.undef MKC_CHECK_PROGS
+.undef MKC_REQUIRE_PROGS
+
+.undef MKC_CHECK_CUSTOM
+.undef MKC_REQUIRE_CUSTOM
+
+######################################################
+# final assignment
+.if !${MKC_NOAUTO:U0}
+.for i in ${MKC_CFLAGS}
+CFLAGS += ${i}
+.endfor
+.for i in ${MKC_LDADD}
+LDADD += ${i}
+.endfor
+.for i in ${MKC_SRCS}
+SRCS += ${i}
+.endfor
+.endif # .if MKC_AUTO
+
+.endif # MKCHECKS == yes
+
+######################################################
+######################################################
+######################################################
+.for i in ${_MKC_SOURCE_FUNCS}
+CLEANFILES += ${i}.o
+.endfor
+
+.undef MKC_SOURCE_FUNCLIBS
diff --git a/mk/mkc.configure.mk b/mk/mkc.configure.mk
new file mode 100644
index 0000000..f93c615
--- /dev/null
+++ b/mk/mkc.configure.mk
@@ -0,0 +1,12 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.include <mkc_imp.preinit.mk>
+.include <mkc.init.mk>
+
+.include <configure.mk>
+
+.PHONY: configure
+configure: errorcheck
diff --git a/mk/mkc.files.mk b/mk/mkc.files.mk
new file mode 100644
index 0000000..8974529
--- /dev/null
+++ b/mk/mkc.files.mk
@@ -0,0 +1,2 @@
+_top_mk := mkc.files.mk
+.include <mkc.mk>
diff --git a/mk/mkc.init.mk b/mk/mkc.init.mk
new file mode 100644
index 0000000..218f57e
--- /dev/null
+++ b/mk/mkc.init.mk
@@ -0,0 +1,674 @@
+# Copyright (c) 2009-2013 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef OPSYS
+OPSYS != uname -s
+OPSYS := ${OPSYS:C/^CYGWIN.*$/Cygwin/}
+.endif
+TARGET_OPSYS ?= ${OPSYS}
+
+###########
+SHORTPRJNAME ?= yes
+
+.ifdef DPLIBDIRS
+.for _dir in ${DPLIBDIRS}
+.ifndef DPLIBDIRS.${_dir}
+.if ${SHORTPRJNAME:tl} == "yes"
+DPLIBDIRS.${_dir} = ${OBJDIR_${_dir:T}}
+.else
+DPLIBDIRS.${_dir} = ${OBJDIR_${_dir:S,/,_,g}}
+.endif
+.if ${TARGET_OPSYS} == "HP-UX"
+LDFLAGS += ${CFLAGS.cctold}+b ${CFLAGS.cctold}${LIBDIR}
+.endif
+LDFLAGS += -L${DPLIBDIRS.${_dir}}
+.endif
+.endfor
+
+#.undef DPLIBDIRS
+
+.endif # DPLIBDIRS
+
+######################################################################
+.ifndef __initialized__
+__initialized__ := 1
+
+.MAIN: all
+
+###########
+.sinclude <mkc_imp.vars.mk> # .sinclude for bootstrapping
+
+#.if defined(MKC_SHELL)
+#.SHELL: name=${MKC_SHELL}
+#.elif ${OPSYS} == "SunOS"
+#.SHELL: name=/usr/xpg4/bin/sh
+#.endif
+
+###########
+
+.for p in ${PROGS}
+SRCS.${p} ?= ${p}.c
+SRCS.${p} += ${SRCS} # SRCS may be changed by mkc_imp.configure.mk
+_srcsall += ${SRCS.${p}}
+.endfor
+
+.if defined(PROG)
+PROGS ?= ${PROG}
+SRCS ?= ${PROG}.c
+SRCS.${PROG} ?= ${SRCS}
+_srcsall += ${SRCS}
+.elif defined(LIB)
+SRCS ?= ${LIB}.c
+_srcsall += ${SRCS}
+.endif # defined(PROG)
+
+.if !empty(_srcsall:U:M*.cxx) || !empty(_srcsall:U:M*.cpp) || !empty(_srcsall:U:M*.C) || !empty(_srcsall:U:M*.cc)
+src_type += cxx
+LDCOMPILER = yes
+LDREAL ?= ${CXX}
+.elif !empty(_srcsall:U:M*.pas) || !empty(_srcsall:U:M*.p)
+src_type += pas
+LDCOMPILER = yes
+LDREAL ?= ${PC}
+.endif
+
+LDCOMPILER.Interix = yes
+LDCOMPILER.Darwin = yes
+#LDCOMPILER.HP-UX= yes
+LDCOMPILER ?= ${LDCOMPILER.${TARGET_OPSYS}:Uyes}
+
+.if !empty(_srcsall:U:M*.c) || !empty(_srcsall:U:M*.l) || !empty(_srcsall:U:M*.y) || defined(MKC_SOURCE_FUNCLIBS)
+src_type += c
+.endif
+
+src_type ?= 0
+
+.if ${LDCOMPILER:tl} == "yes"
+LDREAL ?= ${CC}
+.endif
+
+.if defined(PROGS)
+LDREAL ?= ${CC}
+.else
+LDREAL ?= ${LD}
+.endif
+
+MKC_CACHEDIR ?= ${.OBJDIR} # directory for cache and intermediate files
+
+init_make_level ?= 0 # for mkc.configure.mk
+
+.if ${.MAKE.LEVEL} == ${init_make_level}
+SRCTOP ?= ${.CURDIR}
+OBJTOP ?= ${.OBJDIR}
+.endif
+
+###########
+.if exists(${.CURDIR}/Makefile.rec)
+REC_MAKEFILES += ${.CURDIR}/Makefile.rec
+.endif
+.for dir in ${REC_MAKEFILES}
+.include "${dir}"
+.endfor
+
+.if ${SRCTOP:U} != ${.CURDIR} && exists(${.CURDIR}/../Makefile.inc)
+.include "${.CURDIR}/../Makefile.inc"
+.endif
+
+###########
+
+PROJECTNAME ?= ${!empty(PROG):?${PROG}:${!empty(LIB):?${LIB}:${.CURDIR:T}}}
+
+.if defined(MAKECONF) && exists(${MAKECONF})
+.include "${MAKECONF}"
+.elif defined(MKC_SYSCONFDIR) && exists(${MKC_SYSCONFDIR}/mk.conf)
+.include "${MKC_SYSCONFDIR}/mk.conf"
+.elif exists(/etc/mk.conf)
+.include "/etc/mk.conf"
+.endif
+
+.if ${OPSYS:Ux} == "SunOS"
+_MKC_USER != /usr/xpg4/bin/id -un
+_MKC_GROUP != /usr/xpg4/bin/id -gn
+.else
+_MKC_USER != id -un
+_MKC_GROUP != id -gn
+.endif
+
+.if ${_MKC_USER} != root && ${OPSYS}${_MKC_USER} != "InterixAdministrator"
+ROOT_USER ?= ${_MKC_USER}
+ROOT_GROUP ?= ${_MKC_GROUP}
+.endif
+
+# Define MANZ to have the man pages compressed (gzip)
+#MANZ= 1
+
+PREFIX ?= /usr/local
+
+BINDIR ?= ${PREFIX}/bin
+SBINDIR ?= ${PREFIX}/sbin
+FILESDIR ?= ${PREFIX}/bin
+LIBEXECDIR ?= ${PREFIX}/libexec
+INCSDIR ?= ${PREFIX}/include
+DATADIR ?= ${PREFIX}/share
+SYSCONFDIR ?= ${PREFIX}/etc
+INFODIR ?= ${PREFIX}/info
+MANDIR ?= ${PREFIX}/man
+LIBDIR ?= ${PREFIX}/lib
+SCRIPTSDIR ?= ${BINDIR}
+
+DOCDIR? = ${DATADIR}/doc
+HTMLDOCDIR ?= ${DOCDIR}/html
+HTMLDIR ?= ${MANDIR}
+
+BINGRP ?= ${ROOT_GROUP}
+BINOWN ?= ${ROOT_USER}
+
+SHLIBMODE.HP-UX = ${BINMODE}
+SHLIBMODE.OSF1 = ${BINMODE}
+SHLIBMODE.Interix = ${BINMODE}
+SHLIBMODE ?= ${SHLIBMODE.${TARGET_OPSYS}:U${NONBINMODE}}
+
+ROOT_GROUP.NetBSD = wheel
+ROOT_GROUP.OpenBSD = wheel
+ROOT_GROUP.FreeBSD = wheel
+ROOT_GROUP.Darwin = wheel
+ROOT_GROUP.DragonFly = wheel
+ROOT_GROUP.MirBSD = wheel
+ROOT_GROUP.HP-UX = bin
+ROOT_GROUP.OSF1 = bin
+ROOT_GROUP.Interix = +Administrators
+ROOR_GROUP.Haiku = root
+
+ROOT_USER.HP-UX = bin
+ROOT_USER.OSF1 = bin
+ROOT_USER.Interix = Administrator
+ROOT_USER.Haiku = user
+
+ROOT_USER ?= ${ROOT_USER.${OPSYS}:Uroot}
+ROOT_GROUP ?= ${ROOT_GROUP.${OPSYS}:Uroot}
+
+BINMODE.Interix.Administrator = 775
+NONBINMODE.Interix.Administrator = 664
+
+BINMODE ?= ${BINMODE.${TARGET_OPSYS}.${ROOT_USER}:U755}
+NONBINMODE ?= ${BINMODE.${TARGET_OPSYS}.${ROOT_USER}:U644}
+DIRMODE ?= ${BINMODE}
+
+MANGRP ?= ${ROOT_GROUP}
+MANOWN ?= ${ROOT_USER}
+MANMODE ?= ${NONBINMODE}
+MANINSTALL ?= maninstall catinstall
+
+INFOGRP ?= ${ROOT_GROUP}
+INFOOWN ?= ${ROOT_USER}
+INFOMODE ?= ${NONBINMODE}
+
+LIBGRP ?= ${BINGRP}
+LIBOWN ?= ${BINOWN}
+LIBMODE ?= ${NONBINMODE}
+
+DOCGRP ?= ${ROOT_GROUP}
+DOCOWN ?= ${ROOT_USER}
+DOCMODE ?= ${NONBINMODE}
+
+FILESOWN ?= ${BINOWN}
+FILESGRP ?= ${BINGRP}
+FILESMODE ?= ${NONBINMODE}
+
+SCRIPTSOWN ?= ${BINOWN}
+SCRIPTSGRP ?= ${BINGRP}
+SCRIPTSMODE ?= ${BINMODE}
+
+COPY ?= -c
+PRESERVE ?=
+STRIPFLAG ?= -s
+
+MKINSTALL ?= yes
+
+MKCATPAGES ?= no
+MKHTML ?= no
+MKDOC ?= yes
+MKINFO ?= yes
+MKMAN ?= yes
+MKSHARE ?= yes
+
+#
+# MKOBJDIRS controls whether object dirs are created during "make all" or "make obj".
+#
+MKOBJDIRS ?= auto
+MKRELOBJDIR ?= no
+
+MKPIE ?= no
+USE_SSP ?= no
+USE_RELRO ?= no
+USE_FORT ?= no
+
+MKDLL ?= no
+.if ${MKDLL:tl} == "only"
+MKDLL = yes
+MKSTATICLIB ?= no
+.else
+MKSTATICLIB ?= yes
+.endif # MKDLL
+
+SHLIB_MINOR ?= 0
+.if ${MKDLL:tl} != "no"
+SHLIB_MAJOR ?= 1
+.endif # MKDLL
+
+.if defined(SHLIB_MAJOR)
+MKSHLIB ?= yes
+.else
+MKSHLIB ?= no
+.endif # SHLIB_MAJOR
+
+MKPICLIB ?= no
+MKPROFILELIB ?= no
+
+MKINSTALLDIRS ?= yes
+
+EXPORT_VARNAMES += MKC_CACHEDIR REC_MAKEFILES TARGETS SHORTPRJNAME SRCTOP OBJTOP
+
+EXPORT_DYNAMIC ?= no
+
+DISTCLEANFILES += ${MKC_CACHEDIR}/_mkc_*
+
+.include <mkc_imp.platform.sys.mk>
+
+######
+.SUFFIXES: .a .o .op .os .s .S .c .cc .cpp .cxx .C .F .f .r .m .y .l .cl .p .h
+
+.LIBS: .a
+
+.if ${MKPIE:U:tl} == "yes"
+LDFLAGS.prog += ${LDFLAGS.pie}
+CFLAGS += ${CFLAGS.pie}
+CXXFLAGS += ${CXXFLAGS.pie}
+.endif
+
+.if ${USE_SSP:U:tl} == "yes"
+CFLAGS += ${CFLAGS.ssp}
+CXXFLAGS += ${CXXFLAGS.ssp}
+.endif
+
+.if ${USE_RELRO:U:tl} == "yes"
+LDFLAGS.prog += ${LDFLAGS.relro}
+.endif
+
+.if ${USE_FORT:U:tl} == "yes"
+CPPFLAGS += -D_FORTIFY_SOURCE=2
+.endif
+
+SHRTOUT ?= no
+
+.if ${SHRTOUT:tl} != "no"
+_MESSAGE ?= echo
+_MESSAGE_V ?= :
+_V ?= @
+.else
+_MESSAGE ?= :
+_MESSAGE_V ?= echo
+_V ?=
+.endif
+
+AR ?= ar
+ARFLAGS ?= rl
+RANLIB ?= ranlib
+MESSAGE.ar ?= @${_MESSAGE} "AR: ${.TARGET}"
+
+AS ?= as
+AFLAGS ?=
+COMPILE.s ?= ${_V} ${CC_PREFIX} ${CC} ${AFLAGS} -c
+LINK.s ?= ${_V} ${CC} ${AFLAGS} ${LDFLAGS}
+MESSAGE.s ?= @${_MESSAGE} "AS: ${.IMPSRC}"
+
+CC ?= cc
+CFLAGS ?=
+COMPILE.c ?= ${_V} ${CC_PREFIX} ${CC} ${CFLAGS} ${CPPFLAGS} ${CFLAGS.warnerr} -c
+LINK.c ?= ${_V} ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${LDFLAGS.prog}
+MESSAGE.c ?= @${_MESSAGE} "CC: ${.IMPSRC}"
+
+CXX ?= c++
+CXXFLAGS += ${CFLAGS}
+COMPILE.cc ?= ${_V} ${CXX_PREFIX} ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CFLAGS.warnerr} -c
+LINK.cc ?= ${_V} ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} ${LDFLAGS.prog}
+MESSAGE.cc ?= @${_MESSAGE} "CXX: ${.IMPSRC}"
+
+OBJC ?= ${CC}
+OBJCFLAGS ?= ${CFLAGS}
+COMPILE.m ?= ${_V} ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c
+LINK.m ?= ${_V} ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS}
+MESSAGE.m ?= @${_MESSAGE} "OBJC: ${.IMPSRC}"
+
+CPP ?= cpp
+CPPFLAGS ?=
+
+FC ?= f77
+FFLAGS ?= -O
+RFLAGS ?=
+COMPILE.f ?= ${_V} ${FC} ${FFLAGS} -c
+LINK.f ?= ${_V} ${FC} ${FFLAGS} ${LDFLAGS}
+MESSAGE.f ?= @${_MESSAGE} "FC: ${.IMPSRC}"
+COMPILE.F ?= ${_V} ${FC} ${FFLAGS} ${CPPFLAGS} -c
+LINK.F ?= ${_V} ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS}
+MESSAGE.F ?= ${MESSAGE.f}
+COMPILE.r ?= ${_V} ${FC} ${FFLAGS} ${RFLAGS} -c
+LINK.r ?= ${_V} ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS}
+MESSAGE.r ?= ${MESSAGE.f}
+
+MESSAGE.ld ?= @${_MESSAGE} "LD: ${.TARGET}"
+
+CLEANFILES_CMD ?= ${RM} -f
+CLEANDIRS_CMD ?= ${RM} -rf
+
+INSTALL ?= install
+UNINSTALL ?= ${RM} -f
+
+LEX ?= lex
+LFLAGS ?=
+LEX.l ?= ${_V} ${LEX} ${LFLAGS}
+MESSAGE.l ?= @${_MESSAGE} "LEX: ${.IMPSRC}"
+
+LD.SunOS ?= /usr/ccs/bin/ld
+LD.OSF1 ?= /usr/bin/ld
+LD ?= ${LD.${TARGET_OPSYS}:Uld}
+LDFLAGS ?=
+
+LN ?= ln
+LN_S ?= ${LN} -s
+
+LORDER ?= lorder
+
+NM ?= nm
+
+MKDIR ?= mkdir
+
+PC ?= pc
+PFLAGS ?=
+COMPILE.p ?= ${_V} ${PC} ${PFLAGS} ${CPPFLAGS} -c
+LINK.p ?= ${_V} ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS}
+MESSAGE.p ?= @${_MESSAGE} "PC: ${.IMPSRC}"
+
+SHELL ?= sh
+
+SIZE ?= size
+
+TSORT ?= tsort -q
+
+YACC ?= yacc
+YFLAGS ?=
+YACC.y ?= ${_V} ${YACC} ${YFLAGS}
+MESSAGE.y ?= @${_MESSAGE} "YACC: ${.IMPSRC}"
+
+TAR ?= tar
+GZIP ?= gzip
+BZIP2 ?= bzip2
+ZIP ?= zip
+
+OBJCOPY ?= objcopy
+
+OBJDUMP ?= objdump
+
+STRIP ?= strip
+
+RM ?= rm
+
+#ADDR2LINE ?= addr2line
+#READELF ?= readelf
+#STRINGS ?= strings
+
+# C
+_PN = ${PROJECTNAME} # short synonym
+
+.c.o:
+ ${MESSAGE.c}
+ ${COMPILE.c} ${CPPFLAGS_${_PN}} ${CFLAGS_${_PN}} \
+ ${COPTS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+.c.op:
+ ${MESSAGE.c}
+ ${COMPILE.c} -pg ${CPPFLAGS_${_PN}} ${CFLAGS_${_PN}} \
+ ${COPTS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+.c.os:
+ ${MESSAGE.c}
+ ${COMPILE.c} ${CFLAGS.pic} ${CPPFLAGS_${_PN}} \
+ ${CFLAGS_${_PN}} ${COPTS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+
+# C++
+.cc.o .cpp.o .cxx.o .C.o:
+ ${MESSAGE.cc}
+ ${COMPILE.cc} ${CPPFLAGS_${_PN}} ${CXXFLAGS_${_PN}} \
+ ${COPTS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+.cc.op .C.op .cpp.op:
+ ${MESSAGE.cc}
+ ${COMPILE.cc} -pg ${CPPFLAGS_${_PN}} ${CXXFLAGS_${_PN}} \
+ ${COPTS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+.cc.os .C.os .cpp.os:
+ ${MESSAGE.cc}
+ ${COMPILE.cc} ${CXXFLAGS.pic} ${CPPFLAGS_${_PN}} \
+ ${CXXFLAGS_${_PN}} ${COPTS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+
+# Fortran/Ratfor
+.f.o:
+ ${MESSAGE.f}
+ ${COMPILE.f} ${FFLAGS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+.f.op:
+ ${MESSAGE.f}
+ ${COMPILE.f} -pg ${FFLAGS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+.f.os:
+ ${MESSAGE.f}
+ ${COMPILE.f} ${FFLAGS.pic} ${FFLAGS_${_PN}} -o ${.TARGET} ${.IMPSRC}
+
+#.F:
+.F.o:
+ ${MESSAGE.F}
+ ${COMPILE.F} -o ${.TARGET} ${.IMPSRC}
+
+#.r:
+.r.o:
+ ${MESSAGE.r}
+ ${COMPILE.r} -o ${.TARGET} ${.IMPSRC}
+
+# Pascal
+.p.o:
+ ${MESSAGE.p}
+ ${COMPILE.p} -o ${.TARGET} ${.IMPSRC}
+
+# Assembly
+.S.o .s.o:
+ ${MESSAGE.s}
+ ${COMPILE.s} -o ${.TARGET} ${.IMPSRC}
+.S.op .s.op:
+ ${MESSAGE.s}
+ ${COMPILE.s} -o ${.TARGET} -pg ${.IMPSRC}
+.S.os .s.os:
+ ${MESSAGE.s}
+ ${COMPILE.s} ${CAFLAGS.pic} -o ${.TARGET} ${.IMPSRC}
+
+# Objective-C
+.m.o:
+ ${MESSAGE.m}
+ ${COMPILE.m} ${.IMPSRC}
+.m.op:
+ ${MESSAGE.m}
+ ${COMPILE.m} -pg -o ${.TARGET} ${.IMPSRC}
+.m.os:
+ ${MESSAGE.m}
+ ${COMPILE.m} ${CMFLAGS.pic} -o ${.TARGET} ${.IMPSRC}
+
+# Lex
+LPREFIX ?= yy
+.if ${LPREFIX} != "yy"
+LFLAGS += -P${LPREFIX}
+.endif
+LEXLIB ?= -ll
+
+.l.c:
+ ${MESSAGE.l}
+ ${LEX.l} -t ${.IMPSRC} > ${.TARGET}
+
+# Yacc
+YFLAGS += ${YPREFIX:D-p${YPREFIX}} ${YHEADER:D-d}
+
+.y.h: ${.TARGET:R}.c
+.y.c:
+ ${MESSAGE.y}
+ ${YACC.y} ${.IMPSRC}
+ ${_V}mv y.tab.c ${.TARGET}
+.ifdef YHEADER
+ ${_V}mv y.tab.h ${.TARGET:R}.h
+.endif
+
+###########
+.include <mkc_imp.obj.mk>
+
+###########
+.if !empty(_srcsall:U:M*.y)
+MKC_REQUIRE_PROGS += ${YACC:[1]}
+MKC_PROG.id.${YACC:[1]:S/+/x/g} = yacc
+.endif
+
+.if !empty(_srcsall:U:M*.l)
+MKC_REQUIRE_PROGS += ${LEX:[1]}
+MKC_PROG.id.${LEX:[1]:S/+/x/g} = lex
+.endif
+
+.if !empty(_srcsall:U:M*.c) || !empty(_srcsall:U:M*.l) || !empty(_srcsall:U:M*.y)
+MKC_REQUIRE_PROGS += ${CC:[1]}
+MKC_PROG.id.${CC:[1]:S|+|x|g} = cc
+.endif
+
+.if !empty(_srcsall:U:M*.cc) || !empty(_srcsall:U:M*.C) || !empty(_srcsall:U:M*.cxx) || !empty(_srcsall:U:M*.cpp)
+MKC_REQUIRE_PROGS += ${CXX:[1]}
+MKC_PROG.id.${CXX:[1]:S/+/x/g} = cxx
+.endif
+
+.if !empty(_srcsall:U:M*.f)
+MKC_REQUIRE_PROGS += ${FC:[1]}
+MKC_PROG.id.${FC:[1]:S/+/x/g} = fc
+.endif
+
+.if !empty(_srcsall:U:M*.p)
+MKC_REQUIRE_PROGS += ${PC:[1]}
+MKC_PROG.id.${PC:[1]:S/+/x/g} = pc
+.endif
+
+###########
+.PHONY : print-values
+print-values :
+.for v in ${VARS}
+ @printf "%s=%s\n" ${v} ${${v}:Q}
+.endfor
+
+.PHONY : print-values2
+print-values2 :
+.for v in ${VARS}
+ @printf "%s\n" ${${v}:Q}
+.endfor
+
+###########
+.PHONY: realall realerrorcheck
+
+__errorcheck: .USE
+ @if test -n '${MKC_ERR_MSG}'; then \
+ for msg in '' ${MKC_ERR_MSG}; do \
+ fn=`printf '%s\n' "$$msg" | sed -n 's/^%%%: //p'`; \
+ if test -n "$$fn"; then \
+ awk '{print "ERROR: " $$0}' "$$fn"; ex=1; \
+ elif test -n "$$msg"; then printf '%s\n' "$$msg"; ex=1; \
+ fi; \
+ done; \
+ exit $$ex; \
+ fi
+
+realall : realerrorcheck
+realerrorcheck: __errorcheck
+
+###########
+
+.if defined(MKC_REQD) && defined(MKC_VERSION)
+_mkc_version_ok != mkc_check_version ${MKC_REQD} ${MKC_VERSION}
+.if !${_mkc_version_ok}
+MKC_ERR_MSG += "ERROR: We need mk-configure v.${MKC_REQD} while ${MKC_VERSION} is detected"
+MKCHECKS = no
+.endif
+.endif
+
+###########
+
+LDLIBS = ${LDFLAGS} ${LDADD}
+
+###########
+# skip uninstalling files and creating destination dirs for mkc.subprj.mk
+.if !defined(SUBPRJ)
+
+uninstall:
+ -${UNINSTALL} ${UNINSTALLFILES}
+
+installdirs:
+ for d in _ ${INSTALLDIRS:O:u:S|/.$||}; do \
+ test "$$d" = _ || ${INSTALL} -d -m ${DIRMODE} "$$d"; \
+ done
+
+filelist:
+ @for d in ${UNINSTALLFILES:O:u}; do \
+ echo $$d; \
+ done
+
+test:
+
+.endif # SUBPRJ
+
+TARGETS += all all install clean cleandir depend test \
+ installdirs uninstall errorcheck filelist obj
+TARGETS := ${TARGETS:O:u}
+
+# Make sure all of the standard targets are defined, even if they do nothing.
+.PHONY: ${TARGETS} realinstall realinstall2 realall
+${TARGETS} realinstall realinstall2 realall:
+
+distclean: cleandir
+
+all: realall
+
+.if ${MKINSTALLDIRS:tl} == "yes"
+install: installdirs .WAIT realinstall .WAIT realinstall2
+.else
+install: realinstall .WAIT realinstall2
+.endif
+
+
+###########
+
+VERBOSE_ECHO ?= echo
+### for mkc.subdir.mk and mkc.subprj.mk
+__recurse: .USE
+ @targ=${.TARGET:S/^nodeps-//:C/-.*$//}; \
+ dir=${.TARGET:S/^nodeps-//:C/^[^-]*-//}; \
+ if ! test -f ${.CURDIR}/$$dir/Makefile; then exit 0; fi; \
+ test "$${targ}_${MKINSTALL:tl}" = 'install_no' && exit 0; \
+ test "$${targ}_${MKINSTALL:tl}" = 'installdirs_no' && exit 0; \
+ ${export_cmd} \
+ set -e; \
+ ${VERBOSE_ECHO} ================================================== 1>&2;\
+ case "$$dir" in /*) \
+ ${VERBOSE_ECHO} "$$targ ===> $$dir" 1>&2; \
+ cd "$$dir"; \
+ env "_THISDIR_=$$dir/" ${MAKE} ${MAKEFLAGS} $$targ; \
+ ;; \
+ *) \
+ ${VERBOSE_ECHO} "$$targ ===> ${_THISDIR_}$$dir" 1>&2; \
+ cd "${.CURDIR}/$$dir"; \
+ env "_THISDIR_=${_THISDIR_}$$dir/" ${MAKE} ${MAKEFLAGS} $$targ; \
+ ;; \
+ esac
+
+###########
+
+.endif # __initialized__
diff --git a/mk/mkc.lib.mk b/mk/mkc.lib.mk
new file mode 100644
index 0000000..299adb6
--- /dev/null
+++ b/mk/mkc.lib.mk
@@ -0,0 +1,2 @@
+_top_mk := mkc.lib.mk
+.include <mkc.mk>
diff --git a/mk/mkc.minitest.mk b/mk/mkc.minitest.mk
new file mode 100644
index 0000000..e62be8a
--- /dev/null
+++ b/mk/mkc.minitest.mk
@@ -0,0 +1,26 @@
+# Copyright (c) 2009-2013 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+TEST_PREREQS ?= all
+
+.PHONY : test
+test: ${TEST_PREREQS}
+ @echo 'Testing ${.CURDIR}... ' 1>&2; \
+ set -e; cd ${.CURDIR}; \
+ tmp_out=${.OBJDIR}/${.CURDIR:T}.test.out; \
+ ${RM} -f $$tmp_out; \
+ ${MAKE} ${MAKEFLAGS} test_output > $$tmp_out.tmp; \
+ mv $$tmp_out.tmp $$tmp_out; \
+ if test -f ${.CURDIR}/expect.${OPSYS}.out; then \
+ expect=${.CURDIR}/expect.${OPSYS}.out; \
+ else \
+ expect=${.CURDIR}/expect.out; \
+ fi; \
+ diff $$expect $$tmp_out && \
+ echo ' succeeded' 1>&2 || \
+ { echo ' FAILED' 1>&2; false; }
+
+CLEANFILES += ${.OBJDIR}/${.CURDIR:T}.test.out
+#DISTCLEANFILES+= ${.OBJDIR}/${.CURDIR:T}.test.out.tmp
diff --git a/mk/mkc.mk b/mk/mkc.mk
new file mode 100644
index 0000000..3528e5a
--- /dev/null
+++ b/mk/mkc.mk
@@ -0,0 +1,21 @@
+# Copyright (c) 2013 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef _MKC_MK
+_MKC_MK := 1
+
+init_make_level ?= 0
+
+.if defined(SRCTOP) && ${SRCTOP:U} != ${.CURDIR} && ${.MAKE.LEVEL} == ${init_make_level}
+MKC_CACHEDIR ?= ${SRCTOP}
+.export MKC_CACHEDIR
+.MAIN: all
+.DEFAULT:
+ @set -e; cd ${SRCTOP}; ${MAKE} ${MAKEFLAGS} ${.TARGET}-${.CURDIR:S,${SRCTOP}/,,}
+.else
+.include <mkc_imp.mk>
+.endif #SRCTOP
+
+.endif # _MKC_MK
diff --git a/mk/mkc.prog.mk b/mk/mkc.prog.mk
new file mode 100644
index 0000000..ee33237
--- /dev/null
+++ b/mk/mkc.prog.mk
@@ -0,0 +1,2 @@
+_top_mk := mkc.prog.mk
+.include <mkc.mk>
diff --git a/mk/mkc.subdir.mk b/mk/mkc.subdir.mk
new file mode 100644
index 0000000..d13879d
--- /dev/null
+++ b/mk/mkc.subdir.mk
@@ -0,0 +1,2 @@
+_top_mk := mkc.subdir.mk
+.include <mkc.mk>
diff --git a/mk/mkc.subprj.mk b/mk/mkc.subprj.mk
new file mode 100644
index 0000000..ef6e0b2
--- /dev/null
+++ b/mk/mkc.subprj.mk
@@ -0,0 +1,2 @@
+_top_mk := mkc.subprj.mk
+.include <mkc.mk>
diff --git a/mk/mkc_imp.arch.mk b/mk/mkc_imp.arch.mk
new file mode 100644
index 0000000..fda3999
--- /dev/null
+++ b/mk/mkc_imp.arch.mk
@@ -0,0 +1,38 @@
+# Copyright (c) 2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef _MKC_IMP_ARCH_MK
+_MKC_IMP_ARCH_MK := 1
+
+rnd != echo $$$$
+destdir = ${TMPDIR:U/tmp}/mkc.${rnd}
+basefile = ${.CURDIR}/${PROJECTNAME}
+
+.PHONY: bin_cleanup bin_tar bin_targz bin_tarbz2
+
+bin_cleanup:
+ set -e; ${RM} -rf ${destdir}; ${MKDIR} -m 0700 ${destdir}; \
+ ${MAKE} ${MAKEFLAGS} all install DESTDIR=${destdir}
+
+bin_tar: bin_cleanup
+ set -e; ${RM} -f ${basefile}.tar; cd ${destdir}; \
+ ${TAR} -cf ${basefile}.tar .; cd /; ${RM} -rf ${destdir}
+
+bin_targz: bin_tar
+ ${GZIP} ${basefile}.tar
+
+bin_tarbz2: bin_tar
+ ${BZIP2} ${basefile}.tar
+
+bin_zip: bin_cleanup
+ set -e; ${RM} -f ${basefile}.zip; cd ${destdir}; \
+ ${ZIP} -r ${basefile}.zip .; ${RM} -rf ${destdir}
+
+bin_deb: DEBIAN/control bin_cleanup
+ set -e; cp -rp DEBIAN ${destdir}; ${RM} -rf ${destdir}/DEBIAN/CVS; \
+ dpkg-deb -b ${destdir} ${.CURDIR:T:S/_/-/g}.deb; \
+ ${RM} -rf ${destdir}
+
+.endif # _MKC_IMP_ARCH_MK
diff --git a/mk/mkc_imp.dep.mk b/mk/mkc_imp.dep.mk
new file mode 100644
index 0000000..bf5c512
--- /dev/null
+++ b/mk/mkc_imp.dep.mk
@@ -0,0 +1,96 @@
+# Copyright (c) 2010-1013 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+
+######################################################################
+.ifndef _MKC_IMP_DEP_MK
+_MKC_IMP_DEP_MK := 1
+
+DISTCLEANFILES += .depend ${__DPSRCS.d} ${CLEANDEPEND}
+
+##### Basic targets
+.PHONY: _beforedepend depend
+_beforedepend .depend: # ensure existence
+
+.ORDER: _beforedepend .depend
+depend: _beforedepend .depend
+
+##### Default values
+MKDEP ?= mkdep
+MKDEP_SUFFIXES ?= .o .os .op
+
+##### Build rules
+# some of the rules involve .h sources, so remove them from mkdep line
+
+.if defined(_SRCS_ALL)
+__DPSRCS.all = ${_SRCS_ALL:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/} \
+ ${DPSRCS:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/}
+__DPSRCS.d = ${__DPSRCS.all:O:u:M*.d}
+__DPSRCS.notd = ${__DPSRCS.all:O:u:N*.d}
+
+_beforedepend: ${DPSRCS}
+
+MESSAGE.dep ?= @${_MESSAGE} "DEP: ${.TARGET}"
+
+.NOPATH: .depend ${__DPSRCS.d}
+
+.if !empty(__DPSRCS.d)
+${__DPSRCS.d}: ${__DPSRCS.notd} ${DPSRCS}
+.endif # __DPSRCS.d
+
+.if ${MKDEP_TYPE:U} == "nbmkdep"
+ddash=--
+.else
+ddash=
+.endif
+
+.if ${MKDEP_TYPE:U} == "makedepend"
+MKDEP.c = @${MAKEDEPEND} -f- ${ddash} ${MKDEPFLAGS} \
+ ${CFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS} > ${.TARGET}
+MKDEP.m = @${MKDEP} -f- ${ddash} ${MKDEPFLAGS} \
+ ${OBJCFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS} > ${.TARGET}
+MKDEP.cc = @${MKDEP} -f- ${ddash} ${MKDEPFLAGS} \
+ ${CXXFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS} > ${.TARGET}
+MKDEP.s = @${MKDEP} -f- ${ddash} ${MKDEPFLAGS} \
+ ${AFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS} > ${.TARGET}
+.else
+MKDEP.c = @${MKDEP} -f ${.TARGET} ${ddash} ${MKDEPFLAGS} \
+ ${CFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS}
+MKDEP.m = @${MKDEP} -f ${.TARGET} ${ddash} ${MKDEPFLAGS} \
+ ${OBJCFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS}
+MKDEP.cc = @${MKDEP} -f ${.TARGET} ${ddash} ${MKDEPFLAGS} \
+ ${CXXFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS}
+MKDEP.s = @${MKDEP} -f ${.TARGET} ${ddash} ${MKDEPFLAGS} \
+ ${AFLAGS:C/-([IDU])[ ]*/-\1/Wg:M-[IDU]*} ${CPPFLAGS}
+.endif
+
+.depend: ${__DPSRCS.d}
+ ${MESSAGE.dep}
+ @${RM} -f ${.TARGET}
+.if ${MKDEP_TYPE:U} == "nbmkdep"
+ @${MKDEP} -d -f ${.TARGET} -s ${MKDEP_SUFFIXES:Q} ${__DPSRCS.d}
+.else
+ @sed 's/^\([^ ]*\)[.]o\(.*\)$$/${MKDEP_SUFFIXES:C,^,\\\\1,}\2/' ${__DPSRCS.d} > ${.TARGET}
+.endif
+
+.SUFFIXES: .d .s .S .c .C .cc .cpp .cxx .m
+
+.c.d:
+ ${MESSAGE.dep}
+ @${MKDEP.c} ${.IMPSRC}
+
+.m.d:
+ ${MESSAGE.dep}
+ @${MKDEP.m} ${.IMPSRC}
+
+.s.d .S.d:
+ ${MESSAGE.dep}
+ @${MKDEP.s} ${.IMPSRC}
+
+.C.d .cc.d .cpp.d .cxx.d:
+ ${MESSAGE.dep}
+ @${MKDEP.cc} ${.IMPSRC}
+
+.endif # defined(SRCS)
+
+######################################################################
+.endif # _MKC_IMP_DEP_MK
diff --git a/mk/mkc_imp.files.mk b/mk/mkc_imp.files.mk
new file mode 100644
index 0000000..e1cb16f
--- /dev/null
+++ b/mk/mkc_imp.files.mk
@@ -0,0 +1,49 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_BSD_FILES_MK)
+_BSD_FILES_MK := 1
+
+.include <mkc.init.mk>
+
+.PHONY: filesinstall
+realinstall: filesinstall
+
+.if defined(FILES) && !empty(FILES)
+
+realall: ${FILES}
+
+.if ${MKINSTALL:tl} == "yes"
+destination_files = ${FILES:@F@${DESTDIR}${FILESDIR_${F}:U${FILESDIR}}/${FILESNAME_${F}:U${FILESNAME:U${F:T}}}@}
+
+filesinstall: ${destination_files}
+.PRECIOUS: ${destination_files}
+.PHONY: ${destination_files}
+
+__fileinstall: .USE
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ -o ${FILESOWN_${.ALLSRC:T}:U${FILESOWN}} \
+ -g ${FILESGRP_${.ALLSRC:T}:U${FILESGRP}} \
+ -m ${FILESMODE_${.ALLSRC:T}:U${FILESMODE}} \
+ ${.ALLSRC} ${.TARGET}
+
+.for F in ${FILES:O:u}
+${DESTDIR}${FILESDIR_${F}:U${FILESDIR}}/${FILESNAME_${F}:U${FILESNAME:U${F:T}}}: ${F} __fileinstall
+.endfor
+
+UNINSTALLFILES += ${destination_files}
+INSTALLDIRS += ${destination_files:H}
+.endif # MKINSTALL
+.endif # FILES
+
+.if !target(filesinstall)
+filesinstall:
+.endif
+
+.endif # _BSD_FILES_MK
diff --git a/mk/mkc_imp.final.mk b/mk/mkc_imp.final.mk
new file mode 100644
index 0000000..e7fdb49
--- /dev/null
+++ b/mk/mkc_imp.final.mk
@@ -0,0 +1,58 @@
+# Copyright (c) 2009-2012 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef MKC_IMP.FINAL.MK
+MKC_IMP.FINAL.MK = 1
+
+LDADD += ${DPLIBS} # DPLIBS is deprecated (2012-08-13)
+LDADD += ${LDADD_${PROJECTNAME}}
+
+LDFLAGS += ${LDFLAGS_${PROJECTNAME}}
+
+.if !empty(SRCS:U:M*.l)
+LDADD += ${LEXLIB}
+.endif
+
+.for i in ${EXPORT_VARNAMES}
+.if empty(NOEXPORT_VARNAMES:U:M${i})
+export_cmd += ${i}=${${i}:Q}; export ${i};
+.endif
+.endfor
+
+.if ${MKRELOBJDIR} == "yes" && defined(SRCTOP)
+export_cmd += MAKEOBJDIR=${.OBJDIR}/${.TARGET:C/^.*-//}; \
+ export MAKEOBJDIR; ${MKDIR} -p $${MAKEOBJDIR};
+.endif
+
+##########
+.if !commands(clean)
+clean: mkc_clean
+.endif
+
+mkc_clean:
+.if ${CLEANFILES:U} != ""
+ -${CLEANFILES_CMD} ${CLEANFILES}
+.endif
+.if ${CLEANDIRS:U} != ""
+ -${CLEANDIRS_CMD} ${CLEANDIRS}
+.endif
+
+#####
+distclean: cleandir
+.if !commands(cleandir)
+cleandir: mkc_cleandir
+.endif
+
+mkc_cleandir:
+.if ${CLEANFILES:U} != "" || ${DISTCLEANFILES:U} != ""
+ -${CLEANFILES_CMD} ${DISTCLEANFILES} ${CLEANFILES}
+.endif
+.if ${CLEANDIRS:U} != "" || ${DISTCLEANDIRS:U} != ""
+ -${CLEANDIRS_CMD} ${DISTCLEANDIRS} ${CLEANDIRS}
+.endif
+
+##########
+
+.endif # MKC_IMP.FINAL.MK
diff --git a/mk/mkc_imp.inc.mk b/mk/mkc_imp.inc.mk
new file mode 100644
index 0000000..0f0a8ba
--- /dev/null
+++ b/mk/mkc_imp.inc.mk
@@ -0,0 +1,37 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.PHONY: incinstall
+realinstall: incinstall
+incinstall: # ensure existence
+
+.if defined(INCS)
+INCSSRCDIR ?= .
+CPPFLAGS += -I${INCSSRCDIR}
+
+.if ${MKINSTALL:tl} == "yes"
+destination_incs = ${INCS:@I@${DESTDIR}${INCSDIR}/$I@}
+
+incinstall: ${destination_incs}
+.PRECIOUS: ${destination_incs}
+.PHONY: ${destination_incs}
+
+__incinstall: .USE
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ -o ${BINOWN} \
+ -g ${BINGRP} -m ${NONBINMODE} ${.ALLSRC} ${.TARGET}
+
+.for I in ${INCS:O:u}
+${DESTDIR}${INCSDIR}/$I: ${"${INCSSRCDIR}" != ".":?${INCSSRCDIR}/$I:$I} __incinstall
+.endfor
+
+UNINSTALLFILES += ${destination_incs}
+INSTALLDIRS += ${destination_incs:H}
+.endif # MKINSTALL
+.endif # INCS
diff --git a/mk/mkc_imp.info.mk b/mk/mkc_imp.info.mk
new file mode 100644
index 0000000..3a97ca5
--- /dev/null
+++ b/mk/mkc_imp.info.mk
@@ -0,0 +1,67 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_INFO_MK) && defined(TEXINFO)
+_MKC_IMP_INFO_MK := 1
+
+.include <mkc.init.mk>
+
+MAKEINFO ?= makeinfo
+INFOFLAGS ?=
+INSTALL_INFO ?= install-info
+
+.PHONY: infoinstall
+
+.SUFFIXES: .txi .texi .texinfo .info
+
+MESSAGE.texinfo ?= @${_MESSAGE} "TEXINFO: ${.TARGET}"
+
+.txi.info .texi.info .texinfo.info:
+ ${MESSAGE.texinfo}
+ ${_V}${MAKEINFO} ${INFOFLAGS} --no-split -o $@ $<
+
+.if defined(TEXINFO) && !empty(TEXINFO)
+realall: ${TEXINFO}
+INFOFILES = ${TEXINFO:S/.texinfo/.info/g:S/.texi/.info/g:S/.txi/.info/g}
+.NOPATH: ${INFOFILES}
+
+.if ${MKINFO:tl} != "no"
+realall: ${INFOFILES}
+
+CLEANFILES += ${INFOFILES}
+
+destination_infos = ${INFOFILES:@F@${DESTDIR}${INFODIR_${F}:U${INFODIR}}/${INFONAME_${F}:U${INFONAME:U${F:T}}}@}
+
+infoinstall:: ${destination_infos}
+.PRECIOUS: ${destination_infos}
+.PHONY: ${destination_infos}
+
+__infoinstall: .USE
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} \
+ -o ${INFOOWN_${.ALLSRC:T}:U${INFOOWN}} \
+ -g ${INFOGRP_${.ALLSRC:T}:U${INFOGRP}} \
+ -m ${INFOMODE_${.ALLSRC:T}:U${INFOMODE}} \
+ ${.ALLSRC} ${.TARGET}
+ @${INSTALL_INFO} --remove --info-dir=${DESTDIR}${INFODIR} ${.TARGET}
+ ${INSTALL_INFO} --info-dir=${DESTDIR}${INFODIR} ${.TARGET}
+
+.if ${MKINSTALL:tl} == "yes"
+realinstall: infoinstall
+.for F in ${INFOFILES:O:u}
+${DESTDIR}${INFODIR_${F}:U${INFODIR}}/${INFONAME_${F}:U${INFONAME:U${F:T}}}: ${F} __infoinstall
+.endfor # F
+
+UNINSTALLFILES += ${destination_infos}
+INSTALLDIRS += ${destination_infos:H}
+.endif # MKINSTALL
+.endif # MKINFO
+
+.endif # TEXINFO
+
+.endif # _MKC_IMP_INFO_MK
diff --git a/mk/mkc_imp.intexts.mk b/mk/mkc_imp.intexts.mk
new file mode 100644
index 0000000..cdfb2a4
--- /dev/null
+++ b/mk/mkc_imp.intexts.mk
@@ -0,0 +1,52 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+# Given a list of files in INFILES or INSCRIPTS mkc.intexts.mk
+# generates them from appropriate *.in files replacing @prefix@,
+# @sysconfdir@, @libdir@, @bindir@, @sbindir@, @datadir@ etc. with
+# real ${PREFIX}, ${SYSCONFDIR} etc. See examples/ projects.
+
+.ifndef _MKC_IMP_INTEXTS_MK
+_MKC_IMP_INTEXTS_MK := 1
+
+MESSAGE.gen ?= @${_MESSAGE} "GEN: ${.TARGET}"
+
+INTEXTS_SED += -e 's,@sysconfdir@,${SYSCONFDIR},g'
+INTEXTS_SED += -e 's,@libdir@,${LIBDIR},g'
+INTEXTS_SED += -e 's,@libexecdir@,${LIBEXECDIR},g'
+INTEXTS_SED += -e 's,@prefix@,${PREFIX},g'
+INTEXTS_SED += -e 's,@bindir@,${BINDIR},g'
+INTEXTS_SED += -e 's,@sbindir@,${SBINDIR},g'
+INTEXTS_SED += -e 's,@datadir@,${DATADIR},g'
+INTEXTS_SED += -e 's,@mandir@,${MANDIR},g'
+INTEXTS_SED += -e 's,@incsdir@,${INCSDIR},g'
+
+.if !make(clean) && !make(cleandir) && !make(distclean)
+.for _pattern _repl in ${INTEXTS_REPLS}
+INTEXTS_SED += -e 's,@${_pattern}@,${_repl},g'
+.endfor
+.endif
+
+.for i in ${INFILES}
+.NOPATH: ${i:T}
+${i:T} : ${i}.in
+ ${MESSAGE.gen}
+ ${_V} sed ${INTEXTS_SED} ${.ALLSRC} > ${.TARGET} && \
+ chmod 0644 ${.TARGET}
+.endfor
+
+.for i in ${INSCRIPTS}
+.NOPATH: ${i:T}
+${i:T} : ${i}.in
+ ${MESSAGE.gen}
+ ${_V} sed ${INTEXTS_SED} ${.ALLSRC} > ${.TARGET} && \
+ chmod 0755 ${.TARGET}
+.endfor
+
+CLEANFILES += ${INSCRIPTS:T} ${INFILES:T}
+realall: ${INSCRIPTS:T} ${INFILES:T}
+
+######################################################################
+.endif # _MKC_IMP_INTEXTS_MK
diff --git a/mk/mkc_imp.lib.mk b/mk/mkc_imp.lib.mk
new file mode 100644
index 0000000..b7977f6
--- /dev/null
+++ b/mk/mkc_imp.lib.mk
@@ -0,0 +1,179 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_LIB_MK)
+_MKC_IMP_LIB_MK := 1
+
+.PHONY: libinstall
+.if ${MKINSTALL:tl} == "yes"
+realinstall: libinstall
+INSTALLDIRS += ${DESTDIR}${LIBDIR}
+UNINSTALLFILES += ${UNINSTALLFILES.lib}
+.endif # MKINSTALL
+
+# Set PICFLAGS to cc flags for producing position-independent code,
+# if not already set. Includes -DPIC, if required.
+
+# Data-driven table using make variables to control how shared libraries
+# are built for different platforms and object formats.
+# OBJECT_FMT: currently either "ELF" or "a.out", from <bsd.own.mk>
+# LDFLAGS.soname: Flags to tell ${LD} to emit shared library.
+# with ELF, also set shared-lib version for ld.so.
+#
+# FFLAGS.pic: flags for ${FC} to compile .[fF] files to .os objects.
+# CPPICFLAGS: flags for ${CPP} to preprocess .[sS] files for ${AS}
+# CFLAGS.pic: flags for ${CC} to compile .[cC] files to .os objects.
+# CAFLAGS.pic flags for {$CC} to compiling .[Ss] files
+# (usually just ${CPPFLAGS.pic} ${CFLAGS.pic})
+# AFLAGS.pic: flags for ${AS} to assemble .[sS] to .os objects.
+
+CFLAGS += ${COPTS}
+FFLAGS += ${FOPTS}
+
+OBJS += ${SRCS:N*.h:N*.sh:T:R:S/$/.o/g}
+SOBJS = ${OBJS:.o=.os}
+POBJS = ${OBJS:.o=.op}
+
+.if ${MKSTATICLIB:tl} != "no"
+_LIBS += lib${LIB}.a
+.endif
+
+.if ${MKPROFILELIB:tl} != "no"
+_LIBS += lib${LIB}_p.a
+.endif
+
+.if ${MKPICLIB:tl} != "no"
+_LIBS += lib${LIB}_pic.a
+.endif # MKPICLIB
+
+.if ${MKSHLIB:tl} != "no"
+.if ${MKDLL:tl} == "no"
+SHLIBFN = lib${LIB}${SHLIB_EXTFULL}
+.else
+SHLIBFN = ${LIB}${DLL_EXT}
+.endif
+_LIBS += ${SHLIBFN}
+.endif
+
+.NOPATH: ${_LIBS}
+
+realall: ${SRCS} ${_LIBS}
+
+_SRCS_ALL = ${SRCS}
+
+__archivebuild: .USE
+ @${RM} -f ${.TARGET}
+ ${MESSAGE.ar}
+ ${_V} ${AR} cq ${.TARGET} ${.ALLSRC}; \
+ ${RANLIB} ${.TARGET}
+
+__archiveinstall: .USE
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} -o ${LIBOWN} \
+ -g ${LIBGRP} -m ${LIBMODE} ${.ALLSRC} ${.TARGET}
+
+DPSRCS += ${SRCS:M*.l:.l=.c} ${SRCS:M*.y:.y=.c}
+CLEANFILES += ${DPSRCS}
+.if defined(YHEADER)
+CLEANFILES += ${SRCS:M*.y:.y=.h}
+.endif
+
+lib${LIB}.a:: ${OBJS} __archivebuild
+ @${_MESSAGE_V} "building standard ${LIB} library"
+
+lib${LIB}_p.a:: ${POBJS} __archivebuild
+ @${_MESSAGE_V} "building profiled ${LIB} library"
+
+lib${LIB}_pic.a:: ${SOBJS} __archivebuild
+ @${_MESSAGE_V} "building shared object ${LIB} library"
+
+${SHLIBFN}: ${SOBJS} ${DPADD}
+.if !commands(${SHLIBFN})
+ @${_MESSAGE_V} building shared ${LIB} library \(version ${SHLIB_FULLVERSION}\)
+ @${RM} -f ${.TARGET}
+ @${_MESSAGE} "LD: ${.TARGET}"
+ ${_V} $(LDREAL) ${LDFLAGS.shlib} -o ${.TARGET} \
+ ${SOBJS} ${LDFLAGS} ${LDADD}
+.if ${OBJECT_FMT} == "ELF" && ${MKDLL:tl} == "no"
+ @${LN_S} -f ${SHLIBFN} lib${LIB}${SHLIB_EXT}
+ @${LN_S} -f ${SHLIBFN} lib${LIB}${SHLIB_EXT1}
+.endif # ELF
+.endif # !commands(...)
+
+CLEANFILES += \
+ ${OBJS} ${POBJS} ${SOBJS} \
+ lib${LIB}${SHLIB_EXT} lib${LIB}${SHLIB_EXT1} \
+ lib${LIB}${SHLIB_EXT2} lib${LIB}${SHLIB_EXT3} ${SHLIBFN}
+
+.if !target(libinstall)
+# Make sure it gets defined
+libinstall::
+
+ # MKSTATICLIB
+.if ${MKSTATICLIB:tl} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}.a
+UNINSTALLFILES.lib += ${DESTDIR}${LIBDIR}/lib${LIB}.a
+CLEANFILES += lib${LIB}.a
+
+${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall
+.endif
+
+ # MKPROFILELIB
+.if ${MKPROFILELIB:tl} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+UNINSTALLFILES.lib += ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
+CLEANFILES += lib${LIB}_p.a
+
+${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall
+.endif
+
+ # MKPICLIB
+.if ${MKPICLIB:tl} != "no"
+CLEANFILES += lib${LIB}_pic.a
+.endif
+
+.if ${MKPICLIB:tl} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+UNINSTALLFILES.lib += ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
+
+${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall
+.endif
+
+ # MKSHLIB
+.if ${MKSHLIB:tl} != "no"
+libinstall:: ${DESTDIR}${LIBDIR}/${SHLIBFN}
+.PRECIOUS: ${DESTDIR}${LIBDIR}/${SHLIBFN}
+.PHONY: ${DESTDIR}${LIBDIR}/${SHLIBFN}
+UNINSTALLFILES.lib += ${DESTDIR}${LIBDIR}/${SHLIBFN}
+.if ${MKDLL:tl} == "no"
+UNINSTALLFILES.lib += ${DESTDIR}${LIBDIR}/lib${LIB}${SHLIB_EXT} \
+ ${DESTDIR}${LIBDIR}/lib${LIB}${SHLIB_EXT1}
+.endif
+
+${DESTDIR}${LIBDIR}/${SHLIBFN}: ${SHLIBFN}
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} -o ${LIBOWN} \
+ -g ${LIBGRP} -m ${SHLIBMODE} ${.ALLSRC} ${.TARGET}
+.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) && ${MKDLL:tl} == "no"
+ /sbin/ldconfig -m ${LIBDIR}
+.endif
+.if ${OBJECT_FMT} == "ELF" && ${MKDLL:tl} == "no"
+ ${LN_S} -f ${SHLIBFN} \
+ ${DESTDIR}${LIBDIR}/lib${LIB}${SHLIB_EXT1}
+ ${LN_S} -f ${SHLIBFN} \
+ ${DESTDIR}${LIBDIR}/lib${LIB}${SHLIB_EXT}
+.endif
+.endif
+.endif
+
+.endif #_MKC_IMP_LIB_MK
diff --git a/mk/mkc_imp.links.mk b/mk/mkc_imp.links.mk
new file mode 100644
index 0000000..c9f6eb3
--- /dev/null
+++ b/mk/mkc_imp.links.mk
@@ -0,0 +1,35 @@
+# Copyright (c) 2009-2013 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_LINKS_MK)
+_MKC_IMP_LINKS_MK := 1
+
+.PHONY: linksinstall
+linksinstall:
+
+realinstall2: linksinstall
+
+.if ${MKINSTALL:tl} == "yes"
+
+linksinstall:
+.for l r in ${LINKS}
+ ${RM} -f ${DESTDIR}${r}; ${LN} ${DESTDIR}${l} ${DESTDIR}${r}
+.endfor
+.for l r in ${SYMLINKS}
+ ${RM} -f ${DESTDIR}${r}; ${LN_S} ${l} ${DESTDIR}${r}
+.endfor
+
+.for l r in ${LINKS}
+UNINSTALLFILES += ${DESTDIR}${r}
+INSTALLDIRS += ${DESTDIR}${r:H}
+.endfor
+
+.for l r in ${SYMLINKS}
+UNINSTALLFILES += ${DESTDIR}${r}
+INSTALLDIRS += ${DESTDIR}${r:H}
+.endfor
+
+.endif # MKINSTALL=yes
+.endif # _MKC_IMP_LINKS_MK
diff --git a/mk/mkc_imp.lua.mk b/mk/mkc_imp.lua.mk
new file mode 100644
index 0000000..0c8f6d8
--- /dev/null
+++ b/mk/mkc_imp.lua.mk
@@ -0,0 +1,61 @@
+# Copyright (c) 2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.for i in ${LUA_LMODULES}
+LUA_MODULES += ${i:T:R}
+LUA_SRCS.${i:T:R} = ${i}
+.endfor
+
+.if defined(LUA_MODULES) || defined(LUA_CMODULE)
+
+#### .lua modules
+.if defined(LUA_MODULES)
+.if !defined(LUA_LMODDIR)
+PKG_CONFIG_DEPS += lua
+PKG_CONFIG_VARS.lua += INSTALL_LMOD
+LUA_LMODDIR ?= ${PKG_CONFIG.var.lua.INSTALL_LMOD}
+.endif
+.for i in ${LUA_MODULES}
+LUA_SRCS.${i} ?= ${i:S/./_/g}.lua
+FILES += ${LUA_SRCS.${i}}
+FILESDIR_${LUA_SRCS.${i}} = ${LUA_LMODDIR}/${i:S|.|/|g:H}
+FILESNAME_${LUA_SRCS.${i}} = ${i:S|.|/|g:T}.lua
+.endfor # i
+.endif # defined(LUA_MODULES)
+
+### .c module
+.if defined(LUA_CMODULE)
+PKG_CONFIG_DEPS += lua
+
+.if !defined(LUA_CMODDIR)
+PKG_CONFIG_VARS.lua += INSTALL_CMOD
+LUA_CMODDIR ?= ${PKG_CONFIG.var.lua.INSTALL_CMOD}
+.endif
+LIB = ${LUA_CMODULE:S|.|/|:T}
+SRCS ?= ${LUA_CMODULE:S/./_/g}.c
+MKDLL = Only
+LDCOMPILER = Yes
+DLL_EXT = .so
+LIBDIR = ${LUA_CMODDIR}/${LUA_CMODULE:S|.|/|g:H}
+.endif # defined(LUA_CMODULES)
+
+######################
+.include <mkc_imp.pkg-config.mk>
+
+.if defined(LUA_MODULES) && empty(LUA_LMODDIR)
+MKC_ERR_MSG += "ERROR: pkg-config --variable=INSTALL_LMOD lua failed"
+.endif # LUA_MODULES
+
+.ifdef LUA_CMODULE
+.if empty(LUA_CMODDIR)
+MKC_ERR_MSG += "ERROR: pkg-config --variable=INSTALL_CMOD lua failed"
+.endif
+
+.if empty(MKC_ERR_MSG)
+MKC_REQUIRE_HEADERS += lua.h
+.endif # !empty(MKC_ERR_MSG)
+.endif # LUA_CMODULE
+
+.endif # LUA_MODULES) || LUA_CMODULE
diff --git a/mk/mkc_imp.man.mk b/mk/mkc_imp.man.mk
new file mode 100644
index 0000000..15203d4
--- /dev/null
+++ b/mk/mkc_imp.man.mk
@@ -0,0 +1,189 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_MAN_MK)
+_MKC_IMP_MAN_MK := 1
+
+MESSAGE.nroff ?= @${_MESSAGE} "NROFF: ${.TARGET}"
+
+.if ${MKSHARE:tl} == "no"
+MKCATPAGES = no
+MKDOC = no
+MKINFO = no
+MKMAN = no
+.endif
+
+.if ${MKMAN:tl} == "no"
+MKCATPAGES = no
+.endif
+
+.if defined(USETBL) && ${USETBL:U:tl} == "no"
+.undef USETBL
+.endif
+
+.if defined(MANZ) && ${MANZ:U:tl} == "no"
+.undef MANZ
+.endif
+
+.PHONY: catinstall maninstall catpages manpages catlinks \
+ manlinks html installhtml
+.if ${MKMAN:tl} != "no"
+realinstall: ${MANINSTALL}
+.endif
+
+MANTARGET ?= cat
+NROFF ?= nroff
+GROFF ?= groff
+TBL ?= tbl
+
+.SUFFIXES: .1 .2 .3 .4 .5 .6 .7 .8 .9 \
+ .cat1 .cat2 .cat3 .cat4 .cat5 .cat6 .cat7 .cat8 .cat9 \
+ .html1 .html2 .html3 .html4 .html5 .html6 .html7 .html8 .html9
+
+.9.cat9 .8.cat8 .7.cat7 .6.cat6 .5.cat5 .4.cat4 .3.cat3 .2.cat2 .1.cat1:
+ ${MESSAGE.nroff}
+.if !defined(USETBL)
+ ${_V} ${NROFF} ${NROFF_MAN2CAT} ${.IMPSRC} > ${.TARGET} || \
+ (${RM} -f ${.TARGET}; false)
+.else
+ ${_V} ${TBL} ${.IMPSRC} | ${NROFF} ${NROFF_MAN2CAT} > ${.TARGET} || \
+ (${RM} -f ${.TARGET}; false)
+.endif
+
+.9.html9 .8.html8 .7.html7 .6.html6 .5.html5 .4.html4 .3.html3 .2.html2 .1.html1:
+.if !defined(USETBL)
+ @echo "${GROFF} -Tascii -mdoc2html -P-b -P-u -P-o ${.IMPSRC} > ${.TARGET}"
+ @${GROFF} -Tascii -mdoc2html -P-b -P-u -P-o ${.IMPSRC} > ${.TARGET} || \
+ (${RM} -f ${.TARGET}; false)
+.else
+ @echo "${TBL} ${.IMPSRC} | ${GROFF} -mdoc2html -P-b -P-u -P-o > ${.TARGET}"
+ @cat ${.IMPSRC} | ${GROFF} -mdoc2html -P-b -P-u -P-o > ${.TARGET} || \
+ (${RM} -f ${.TARGET}; false)
+.endif
+
+.if defined(MAN) && !empty(MAN)
+realall: ${MAN}
+MANPAGES = ${MAN}
+CATPAGES = ${MANPAGES:C/(.*).([1-9])/\1.cat\2/}
+CLEANFILES += ${CATPAGES}
+.NOPATH: ${CATPAGES}
+HTMLPAGES = ${MANPAGES:C/(.*).([1-9])/\1.html\2/}
+.endif
+
+MINSTALL = ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ -o ${MANOWN} -g ${MANGRP} -m ${MANMODE}
+
+.if defined(MANZ)
+# chown and chmod are done afterward automatically
+MCOMPRESS = gzip -cf
+MCOMPRESSSUFFIX = .gz
+.endif
+
+catinstall: catlinks
+maninstall: manlinks
+
+__installpage: .USE
+.if defined(MCOMPRESS) && !empty(MCOMPRESS)
+ @${RM} -f ${.TARGET}
+ ${MCOMPRESS} ${.ALLSRC} > ${.TARGET}
+ @chown ${MANOWN}:${MANGRP} ${.TARGET}
+ @chmod ${MANMODE} ${.TARGET}
+.else
+ ${MINSTALL} ${.ALLSRC} ${.TARGET}
+.endif
+
+
+# Rules for cat'ed man page installation
+.if defined(CATPAGES) && !empty(CATPAGES) && ${MKCATPAGES:tl} != "no"
+realall: ${CATPAGES}
+
+.if ${MKINSTALL:tl} == "yes"
+destination_capages = ${CATPAGES:@P@${DESTDIR}${MANDIR}/${P:T:E}${MANSUBDIR}/${P:T:R}.0${MCOMPRESSSUFFIX}@}
+UNINSTALLFILES += ${destination_capages}
+INSTALLDIRS += ${destination_capages:H}
+.endif # MKINSTALL
+
+catpages:: ${destination_capages}
+.PRECIOUS: ${destination_capages}
+.PHONY: ${destination_capages}
+
+.for P in ${CATPAGES:O:u}
+${DESTDIR}${MANDIR}/${P:T:E}${MANSUBDIR}/${P:T:R}.0${MCOMPRESSSUFFIX}: ${P} __installpage
+.endfor
+
+.else
+catpages::
+.endif # CATPAGES
+
+# Rules for source page installation
+.if defined(MANPAGES) && !empty(MANPAGES)
+
+.if ${MKINSTALL:tl} == "yes"
+destination_manpages = ${MANPAGES:@P@${DESTDIR}${MANDIR}/man${P:T:E}${MANSUBDIR}/${P}${MCOMPRESSSUFFIX}@}
+UNINSTALLFILES += ${destination_manpages}
+INSTALLDIRS += ${destination_manpages:H}
+.endif # MKINSTALL
+
+manpages:: ${destination_manpages}
+.PRECIOUS: ${destination_manpages}
+.PHONY: ${destination_manpages}
+
+.for P in ${MANPAGES:O:u}
+${DESTDIR}${MANDIR}/man${P:T:E}${MANSUBDIR}/${P}${MCOMPRESSSUFFIX}: ${P} __installpage
+.endfor
+
+.else
+manpages::
+.endif # MANPAGES
+
+.if ${MKCATPAGES:tl} != "no"
+.for s d in ${MLINKS}
+LINKS += ${MANDIR}/cat${s:T:E}${MANSUBDIR}/${s:R}.0${MCOMPRESSSUFFIX} \
+ ${MANDIR}/cat${d:T:E}${MANSUBDIR}/${d:R}.0${MCOMPRESSSUFFIX}
+UNINSTALLFILES += ${DESTDIR}${MANDIR}/cat${d:T:E}${MANSUBDIR}/${d:R}.0${MCOMPRESSSUFFIX}
+.endfor
+catlinks: catpages
+.endif
+catlinks:
+
+.for s d in ${MLINKS}
+LINKS += ${MANDIR}/man${s:T:E}${MANSUBDIR}/${s}${MCOMPRESSSUFFIX} \
+ ${MANDIR}/man${d:T:E}${MANSUBDIR}/${d}${MCOMPRESSSUFFIX}
+UNINSTALLFILES += ${DESTDIR}${MANDIR}/man${d:T:E}${MANSUBDIR}/${d}${MCOMPRESSSUFFIX}
+.endfor
+manlinks: manpages
+
+# Html rules
+.PHONY: html
+html: ${HTMLPAGES}
+
+.if defined(HTMLPAGES) && !empty(HTMLPAGES)
+.for P in ${HTMLPAGES:O:u}
+${DESTDIR}${HTMLDIR}/${P:T:E}/${P:T:R}.html: ${P}
+ ${MINSTALL} ${.ALLSRC} ${.TARGET}
+.endfor
+
+.if ${MKINSTALL:tl} == "yes"
+destination_htmls = ${HTMLPAGES:@P@${DESTDIR}${HTMLDIR}/${P:T:E}/${P:T:R}.html@}
+.endif
+
+installhtml: ${destination_htmls}
+CLEANFILES += ${HTMLPAGES}
+
+.if ${MKHTML:tl} == "yes"
+realinstall: installhtml
+realall: ${HTMLPAGES}
+UNINSTALLFILES += ${destination_htmls}
+INSTALLDIRS += ${destination_htmls:H}
+.endif # MKHTML
+.endif # HTMLPAGES
+
+realall:
+
+.endif # _MKC_IMP_MAN_MK
diff --git a/mk/mkc_imp.mk b/mk/mkc_imp.mk
new file mode 100644
index 0000000..eee09fd
--- /dev/null
+++ b/mk/mkc_imp.mk
@@ -0,0 +1,68 @@
+# Copyright (c) 2009-2013 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+.include <mkc_imp.preinit.mk>
+
+.ifdef SUBDIR
+SUBPRJ = ${SUBDIR}
+.endif
+
+.ifdef SUBPRJS
+SUBPRJ += ${SUBPRJS} # for backward compatility only, use SUBPRJ!
+.endif # defined(SUBPRJS)
+
+.if !defined(LIB) && !defined(SUBPRJ)
+_use_prog := 1
+.endif
+
+.if defined(_use_prog) || defined(LIB)
+.include <mkc_imp.lua.mk>
+.include <mkc_imp.pod.mk>
+.endif # _use_prog || LIB
+
+.include <mkc.init.mk>
+
+.include <configure.mk>
+
+.if !defined(MKC_ERR_MSG) || make(clean) || make(cleandir) || make(distclean)
+
+.if defined(LIB)
+.include <mkc_imp.lib.mk>
+.elif defined(_use_prog)
+.include <mkc_imp.prog.mk>
+.endif
+
+.if defined(_use_prog) || defined(LIB)
+.include <mkc_imp.man.mk>
+.include <mkc_imp.info.mk>
+.include <mkc_imp.inc.mk>
+.include <mkc_imp.intexts.mk>
+.include <mkc_imp.pkg-config.mk>
+.include <mkc_imp.dep.mk>
+.include <mkc_imp.files.mk>
+.include <mkc_imp.scripts.mk>
+.include <mkc_imp.links.mk>
+.endif # _use_prog || LIB
+
+########################################
+.if defined(SUBPRJ)
+.include <mkc_imp.subprj.mk>
+
+#
+.PHONY: subprj-clean subprj-distclean
+clean: subprj-clean
+subprj-clean:
+ -${CLEANFILES_CMD} -f ${CLEANFILES}
+cleandir: subprj-distclean
+subprj-distclean:
+ -${CLEANFILES_CMD} ${DISTCLEANFILES}
+
+.endif # SUBPRJ
+########################################
+
+.include <mkc_imp.arch.mk>
+.include <mkc_imp.final.mk>
+#
+
+.endif # MKC_ERR_MSG
diff --git a/mk/mkc_imp.obj.mk b/mk/mkc_imp.obj.mk
new file mode 100644
index 0000000..77d6f44
--- /dev/null
+++ b/mk/mkc_imp.obj.mk
@@ -0,0 +1,34 @@
+# Copyright (c) 2013 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef _MKC_IMP_OBJ_MK
+_MKC_IMP_OBJ_MK := 1
+
+obj: # ensure existence
+
+.ifdef MAKEOBJDIRPREFIX
+__objdir := ${MAKEOBJDIRPREFIX}${.CURDIR}
+.elif defined(MAKEOBJDIR)
+__objdir := ${MAKEOBJDIR}
+.endif # defined(MAKEOBJDIRPREFIX)
+
+.if defined(__objdir)
+
+.if ${MKOBJDIRS:tl} == "yes"
+.if !defined(SUBPRJ)
+obj:
+ @${MKDIR} -p ${__objdir}
+.endif # !defined(SUBPRJ)
+.elif ${MKOBJDIRS:tl} == "auto" && !exists(${__objdir}/)
+__objdir_made != if ${MKDIR} -p ${__objdir}; then echo 1; else echo 0; fi
+
+.if !${__objdir_made}
+.error could not create ${__objdir}
+.endif # ${__objdir_made}
+
+.endif # MKOBJDIRS
+
+.endif # defined(__objdir)...
+.endif # _MKC_IMP_OBJ_MK
diff --git a/mk/mkc_imp.objdir.mk b/mk/mkc_imp.objdir.mk
new file mode 100644
index 0000000..98c8039
--- /dev/null
+++ b/mk/mkc_imp.objdir.mk
@@ -0,0 +1,43 @@
+# Copyright (c) 2012 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+
+.if !defined(_MKC_IMP_OBJDIR_MK)
+_MKC_IMP_OBJDIR_MK := 1
+
+
+.if ${:!if test -d ${.CURDIR}/obj.${MACHINE}; then echo 1; else echo 0; fi!}
+ _OBJ_MACHINE_DIR := 1
+.elif ${:!if test -d ${.CURDIR}/obj; then echo 1; else echo 0; fi!}
+ _OBJ_DIR := 1
+.endif
+
+.for i in ${__REALSUBPRJ}
+j:=${i:S,/,_,g}
+.if empty(j:U:M*[.]*)
+EXPORT_VARNAMES += OBJDIR_${i:S,/,_,g}
+. if ${MKRELOBJDIR:tl} == "yes"
+OBJDIR_${j} = ${.OBJDIR}/${i}
+. elif defined(MAKEOBJDIRPREFIX)
+OBJDIR_${j} = ${MAKEOBJDIRPREFIX}${.CURDIR}
+. elif defined(MAKEOBJDIR)
+OBJDIR_${j} = ${MAKEOBJDIR}
+. elif defined(_OBJ_MACHINE_DIR)
+OBJDIR_${j} = ${.CURDIR}/obj.${MACHINE}
+. elif defined(_OBJ_DIR)
+OBJDIR_${j} = ${.CURDIR}/obj
+. else
+OBJDIR_${j} = ${.CURDIR}/${i}
+. endif # MAKEOBJDIRPREFIX...
+. if ${SHORTPRJNAME:tl} == "yes" && ${i} != ${j}
+OBJDIR_${i:T} := ${OBJDIR_${j}}
+EXPORT_VARNAMES += OBJDIR_${i:T}
+. endif
+.endif
+
+.endfor # i
+
+.undef _OBJ_MACHINE_DIR
+.undef _OBJ_DIR
+
+.endif # _MKC_IMP_OBJDIR_MK
diff --git a/mk/mkc_imp.pkg-config.mk b/mk/mkc_imp.pkg-config.mk
new file mode 100644
index 0000000..60190b9
--- /dev/null
+++ b/mk/mkc_imp.pkg-config.mk
@@ -0,0 +1,80 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+#
+# Sample of Makefile:
+# PKG_CONFIG_DEPS = glib-2.0>=2.22
+#
+# PROG = main
+#
+# CFLAGS+= -DG_DISABLE_DEPRECATED=1
+# CFLAGS+= -DG_DISABLE_SINGLE_INCLUDES
+#
+# .include <mkc.prog.mk>
+#
+
+############################################################
+
+# .endif for the next line is in the end of file
+.if defined(PKG_CONFIG_DEPS) && !make(clean) && !make(cleandir) && !make(distclean)
+
+MKC_REQUIRE_PROGS+= pkg-config
+.include <configure.mk>
+
+.if ${HAVE_PROG.pkg-config}
+
+.for l in ${PKG_CONFIG_DEPS}
+_lpair = ${l:C/(>=|<=|=|>|<)/ & /g}
+_pcname = ${PCNAME.${_lpair:[1]:S/-/_/g:S/+/p/g:S/./_/g}:U${_lpair:[1]}}
+_lp := ${_pcname} ${_lpair:[2]} ${_lpair:[3]}
+_ln = ${l:S/>=/_ge_/:S/>/_gt_/:S/<=/_le_/:S/</_lt_/:S/=/_eq_/}
+
+PKG_CONFIG.exists.${_ln} != env ${mkc.environ} mkc_check_custom \
+ -p pkgconfig -s -n '${_ln}' -m '[pkg-config] ${_lp}' \
+ ${PROG.pkg-config} --print-errors --exists "${_lp}"
+
+.if !${PKG_CONFIG.exists.${_ln}}
+MKC_ERR_MSG := ${MKC_ERR_MSG} "%%%: ${MKC_CACHEDIR}/_mkc_pkgconfig_${_ln}.err"
+.else
+
+# --cflags and --libs
+.if defined(PROGS) || defined(LIB)
+.if !defined(CPPFLAGS.pkg-config.${_ln})
+CPPFLAGS.pkg-config.${_ln} != env ${mkc.environ} mkc_check_custom \
+ -p pkgconfig -n '${_ln}_cflags' -m '[pkg-config] ${_lp} --cflags' \
+ ${PROG.pkg-config} --cflags "${_lp}"
+.endif # CPPFLAGS.pkg-config.${l}
+
+.if !defined(LDADD.pkg-config.${_ln})
+LDADD.pkg-config.${_ln} != env ${mkc.environ} mkc_check_custom \
+ -p pkgconfig -n '${_ln}_libs' -m '[pkg-config] ${_lp} --libs' \
+ ${PROG.pkg-config} --libs "${_lp}"
+.endif # LDADD.pkg-config.${l}
+
+CPPFLAGS := ${CPPFLAGS} ${CPPFLAGS.pkg-config.${_ln}}
+LDADD := ${LDADD} ${LDADD.pkg-config.${_ln}}
+.endif # PROGS || LIB
+
+.for i in ${PKG_CONFIG_VARS.${_ln}}
+.if !defined(PKG_CONFIG.var.${_ln}.${i})
+PKG_CONFIG.var.${_ln}.${i} != env ${mkc.environ} mkc_check_custom \
+ -p pkgconfig -n '${_ln}_${i}' -m '[pkg-config] ${_lp} --variable=${i}' \
+ ${PROG.pkg-config} --variable=${i} "${_lp}"
+.endif # PKG_CONFIG.var.${_ln}.${i}
+.endfor # i
+
+.endif # PKG-CONFIG.exists
+
+.endfor # .for l in PKG_CONFIG_DEPS
+.undef PKG_CONFIG_DEPS
+
+.undef _ln
+.undef _lp
+.undef _pcname
+.undef _lpair
+
+.endif # HAVE_PROG.pkg-config
+
+.endif # !make(clean) && !make(cleandir) && !make(distclean)
diff --git a/mk/mkc_imp.platform.sys.mk b/mk/mkc_imp.platform.sys.mk
new file mode 100644
index 0000000..0fb511f
--- /dev/null
+++ b/mk/mkc_imp.platform.sys.mk
@@ -0,0 +1,503 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef _MKC_PLATFORM_MK
+_MKC_PLATFORM_MK := 1
+
+####################
+# cross tools
+.ifdef SYSROOT
+CFLAGS.sysroot ?= --sysroot=${SYSROOT}
+LDFLAGS.sysroot ?= --sysroot=${SYSROOT}
+CFLAGS += ${CFLAGS.sysroot}
+LDFLAGS += ${LDFLAGS.sysroot}
+
+TOOLCHAIN_PREFIX ?= ${MACHINE_GNU_PLATFORM}-
+TOOLCHAIN_DIR ?= ${TOOLDIR}/bin
+
+NM = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}nm
+#ADDR2LINE = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}addr2line
+AR = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}ar
+AS = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}as
+CXX = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}g++
+CPP = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}cpp
+CC = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}gcc
+INSTALL = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}install
+LD = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}ld
+OBJCOPY = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy
+OBJDUMP = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objdump
+RANLIB = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}ranlib
+#READELF = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}readelf
+SIZE = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size
+#STRINGS = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}strings
+STRIP = ${TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}strip
+.endif
+
+####################
+SHLIB_EXT.Darwin = .dylib
+SHLIB_EXT.HP-UX = .sl
+
+SHLIB_EXT ?= ${SHLIB_EXT.${TARGET_OPSYS}:U.so}
+
+DLL_EXT.Darwin = .bundle
+DLL_EXT ?= ${DLL_EXT.${TARGET_OPSYS}:U${SHLIB_EXT}}
+
+####################
+INSTALL.NetBSD = /usr/bin/install
+INSTALL.OpenBSD = /usr/bin/install
+INSTALL.FreeBSD = /usr/bin/install
+INSTALL.DragonFly = /usr/bin/install
+INSTALL.MirBSD = /usr/bin/install
+INSTALL.Haiku = /bin/install
+
+INSTALL ?= ${INSTALL.${TARGET_OPSYS}:Umkc_install}
+
+# The following line is for debugging only
+#INSTALL= mkc_install
+
+####################
+
+.if !defined(CC.SunOS)
+.if exists(/usr/ccs/bin/cc)
+CC.SunOS = /usr/ccs/bin/cc
+.elif exists(/opt/SUNWspro/bin/cc)
+CC.SunOS = /opt/SUNWspro/bin/cc
+.elif exists(/usr/sfw/bin/gcc)
+CC.SunOS = /usr/sfw/bin/gcc
+.else
+CC.SunOS = cc
+.endif # exists...
+.endif # defined(CC.SunOS)
+
+.if !defined(CXX.SunOS)
+.if exists(/usr/ccs/bin/CC)
+CXX.SunOS = /usr/ccs/bin/CC
+.elif exists(/opt/SUNWspro/bin/CC)
+CXX.SunOS = /opt/SUNWspro/bin/CC
+.elif exists(/usr/sfw/bin/g++)
+CXX.SunOS = /usr/sfw/bin/g++
+.else
+CXX.SunOS = c++
+.endif # exists...
+.endif # defined(CC.SunOS)
+
+CPP.SunOS = ${CC} -E
+
+CC.UnixWare = gcc
+CXX.UnixWare = g++
+CPP.UnixWare = ${CC} -E
+
+CC.OSF1 = gcc
+CXX.OSF1 = g++
+CPP.OSF1 = ${CC} -E
+
+CC.Interix = gcc
+CXX.Interix = g++
+CPP.Interix = cpp
+
+CC.IRIX64 = cc
+CXX.IRIX64 = CC
+CPP.IRIX64 = ${CC} -E
+
+CC.QNX = gcc
+CXX.QNX = g++
+CPP.QNX = ${CC} -E
+
+CPP.AIX = ${CC} -E
+
+CC ?= ${CC.${TARGET_OPSYS}:Ucc}
+CXX ?= ${CXX.${TARGET_OPSYS}:Uc++}
+CPP ?= ${CPP.${TARGET_OPSYS}:Ucpp}
+
+####################
+CPPFLAGS.Interix = -D_ALL_SOURCE
+CPPFLAGS.UnixWare = -DUNIXWARE
+
+CPPFLAGS += ${CPPFLAGS.${TARGET_OPSYS}:U}
+
+############################################################
+# CC compiler type
+.if make(cleandir) || make(distclean) || make(clean)
+.elif ${MKCHECKS:Uno:tl} == "yes" && !defined(CC_TYPE) && (defined(PROGS) || defined(LIB))
+mkc.cc_type.environ = CC='${CC}' CXX='${CXX}' CPPFLAGS='${CPPFLAGS}' CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}' LDADD='${LDADD}' MKC_CACHEDIR='${MKC_CACHEDIR}' MKC_DELETE_TMPFILES='${MKC_DELETE_TMPFILES}' MKC_SHOW_CACHED='${MKC_SHOW_CACHED}' MKC_NOCACHE='${MKC_NOCACHE}' MKC_VERBOSE=1
+.if !empty(src_type:Mc)
+CC_TYPE != env ${mkc.cc_type.environ} mkc_check_compiler
+.elif !empty(src_type:Mcxx)
+CXX_TYPE != env ${mkc.cc_type.environ} mkc_check_compiler -x
+.endif # src_type
+.endif # cleandir|distclean|...
+
+CC_TYPE ?= unknown
+CXX_TYPE ?= unknown
+
+####################
+# Default compiler-specific options
+
+# C
+CFLAGS.dflt.clang = -Qunused-arguments
+
+CFLAGS += ${CFLAGS.dflt.${CC_TYPE}}
+
+# C++
+CXXFLAGS.dflt.clang = ${CFLAGS.dflt.clang}
+
+CXXFLAGS += ${CXXFLAGS.dflt.${CXX_TYPE}}
+
+####################
+# Warnings as error
+CFLAGS.warnerr.gcc = -Werror
+CFLAGS.warnerr.icc = -Werror
+CFLAGS.warnerr.sunpro = -errwarn=%all
+CFLAGS.warnerr.clang = -Werror
+
+#WARNERR?= ${${WARNS:U0}==4:?yes:no} # Eh, buggy bmake :-(
+.if ${WARNS:U0} == 4
+WARNERR ?= yes
+.else
+WARNERR ?= no
+.endif
+
+.if ${WARNERR:tl} == "yes"
+CFLAGS.warnerr = ${CFLAGS.warnerr.${CC_TYPE}}
+CXXFLAGS.warnerr = ${CFLAGS.warnerr.${CXX_TYPE}}
+.endif
+
+####################
+# C warns for GCC
+CFLAGS.warns.gcc.1 = -Wall -Wstrict-prototypes -Wmissing-prototypes \
+ -Wpointer-arith
+CFLAGS.warns.gcc.2 = ${CFLAGS.warns.gcc.1} -Wreturn-type -Wswitch -Wshadow
+CFLAGS.warns.gcc.3 = ${CFLAGS.warns.gcc.2} -Wcast-qual -Wwrite-strings \
+ -Wno-unused-parameter
+CFLAGS.warns.gcc.4 = ${CFLAGS.warns.gcc.3}
+
+# C++ warns
+CXXFLAGS.warns.gcc.1 = -Wabi -Wold-style-cast -Wctor-dtor-privacy \
+ -Wnon-virtual-dtor -Wreorder -Wno-deprecated \
+ -Wno-non-template-friend -Woverloaded-virtual \
+ -Wno-pmf-conversions -Wsign-promo -Wsynth
+CXXFLAGS.warns.gcc.2 = ${CXXFLAGS.warns.gcc.1} -Wreturn-type -Wswitch -Wshadow
+CXXFLAGS.warns.gcc.3 = ${CXXFLAGS.warns.gcc.2} -Wcast-qual -Wwrite-strings \
+ -Wno-unused-parameter
+CXXFLAGS.warns.gcc.4 = ${CXXFLAGS.warns.gcc.3}
+
+####################
+# C warns for ICC
+CFLAGS.warns.icc.1 = -Wall -we1011
+CFLAGS.warns.icc.2 = ${CFLAGS.warns.icc.1}
+CFLAGS.warns.icc.3 = ${CFLAGS.warns.icc.2}
+CFLAGS.warns.icc.4 = ${CFLAGS.warns.icc.3}
+
+# C++ warns
+CXXFLAGS.warns.icc.1 = ${CFLAGS.warns.icc.1}
+CXXFLAGS.warns.icc.2 = ${CFLAGS.warns.icc.2}
+CXXFLAGS.warns.icc.3 = ${CFLAGS.warns.icc.3}
+CXXFLAGS.warns.icc.4 = ${CFLAGS.warns.icc.4}
+
+####################
+# C warns for clang
+CFLAGS.warns.clang.1 = -Wall
+CFLAGS.warns.clang.2 = ${CFLAGS.warns.clang.1}
+CFLAGS.warns.clang.3 = ${CFLAGS.warns.clang.2}
+CFLAGS.warns.clang.4 = ${CFLAGS.warns.clang.3}
+
+CXXFLAGS.warns.clang.1 = ${CFLAGS.warns.clang.1}
+CXXFLAGS.warns.clang.2 = ${CFLAGS.warns.clang.2}
+CXXFLAGS.warns.clang.3 = ${CFLAGS.warns.clang.3}
+CXXFLAGS.warns.clang.4 = ${CFLAGS.warns.clang.4}
+
+####################
+# C warns for HP-UX
+CFLAGS.warns.hpc.0 = -w3
+CFLAGS.warns.hpc.1 = -w2
+CFLAGS.warns.hpc.2 = -w2
+CFLAGS.warns.hpc.3 = -w2
+CFLAGS.warns.hpc.4 = -w2
+
+# C++ warns
+CXXFLAGS.warns.hpc.0 = ${CFLAGS.warns.hpc.0}
+CXXFLAGS.warns.hpc.1 = ${CFLAGS.warns.hpc.1}
+CXXFLAGS.warns.hpc.2 = ${CFLAGS.warns.hpc.2}
+CXXFLAGS.warns.hpc.3 = ${CFLAGS.warns.hpc.3}
+CXXFLAGS.warns.hpc.4 = ${CFLAGS.warns.hpc.4}
+
+####################
+
+CFLAGS += ${CFLAGS.warns.${CC_TYPE}.${WARNS}}
+CXXFLAGS += ${CXXFLAGS.warns.${CXX_TYPE}.${WARNS}}
+
+####################
+CFLAGS.pic.gcc.Interix =
+CFLAGS.pic.gcc = -fPIC -DPIC
+CFLAGS.pic.icc = -fPIC -DPIC
+CFLAGS.pic.clang = -fPIC -DPIC
+CFLAGS.pic.pcc = -k -DPIC
+CFLAGS.pic.mipspro = -KPIC
+CFLAGS.pic.sunpro = -xcode=pic32 # -KPIC
+CFLAGS.pic.hpc = +Z # +z
+CFLAGS.pic.ibmc = -qpic=large # -qpic=small
+CFLAGS.pic.decc = # ?
+
+CFLAGS.pic ?= ${CFLAGS.pic.${CC_TYPE}.${TARGET_OPSYS}:U${CFLAGS.pic.${CC_TYPE}:U}}
+CXXFLAGS.pic ?= ${CFLAGS.pic.${CXX_TYPE}.${TARGET_OPSYS}:U${CFLAGS.pic.${CXX_TYPE}:U}}
+
+####################
+CFLAGS.pie.gcc.Interix =
+CFLAGS.pie.gcc = -fPIE -DPIC
+CFLAGS.pie.icc = -fPIE -DPIC
+CFLAGS.pie.clang = -fPIE -DPIC
+
+CFLAGS.pie ?= ${CFLAGS.pie.${CC_TYPE}.${TARGET_OPSYS}:U${CFLAGS.pie.${CC_TYPE}}:U${CFLAGS.pic}}
+CXXFLAGS.pie ?= ${CFLAGS.pie.${CC_TYPE}.${TARGET_OPSYS}:U${CFLAGS.pie.${CC_TYPE}}:U${CXXFLAGS.pic}}
+
+####################
+CFLAGS.ssp.gcc = -fstack-protector -Wstack-protector --param ssp-buffer-size=1
+CFLAGS.ssp.icc = -fstack-security-check
+CFLAGS.ssp.ibmc = -qstackprotect
+CFLAGS.ssp.clang = ${CFLAGS.ssp.gcc}
+
+CFLAGS.ssp ?= ${CFLAGS.ssp.${CC_TYPE}.${TARGET_OPSYS}:U${CFLAGS.ssp.${CC_TYPE}:U}}
+CXXFLAGS.ssp ?= ${CFLAGS.ssp.${CXX_TYPE}.${TARGET_OPSYS}:U${CFLAGS.ssp.${CXX_TYPE}:U}}
+
+####################
+RANLIB.IRIX64 = true
+
+RANLIB ?= ${RANLIB.${TARGET_OPSYS}:Uranlib}
+
+####################
+NROFF_MAN2CAT.SunOS ?= -man
+NROFF_MAN2CAT.HP-UX ?= -man
+NROFF_MAN2CAT.OSF1 ?= -man
+
+NROFF_MAN2CAT ?= ${NROFF_MAN2CAT.${OPSYS}:U-mandoc -Tascii}
+
+####################
+LD_TYPE.UnixWare = scold
+LD_TYPE.AIX = aixld
+LD_TYPE.HP-UX = hpld
+LD_TYPE.SunOS = sunld
+LD_TYPE.Darwin = darwinld
+LD_TYPE.Interix = interixld
+LD_TYPE.OSF1 = osf1ld
+LD_TYPE.IRIX64 = irixld
+
+LD_TYPE ?= ${LD_TYPE.${TARGET_OPSYS}:Ugnuld}
+
+####################
+OBJECT_FMT ?= ELF
+
+####################
+LDFLAGS.shared.sunld = -G
+LDFLAGS.soname.sunld = -h lib${LIB}.so.${SHLIB_MAJOR}
+
+LDFLAGS.shared.darwinld = -dylib
+LDFLAGS.soname.darwinld = #
+
+LDFLAGS.shared.gnuld = -shared
+LDFLAGS.soname.gnuld = -soname lib${LIB}${SHLIB_EXT}.${SHLIB_MAJOR}
+
+LDFLAGS.shared.hpld = -b +b ${LIBDIR}
+LDFLAGS.soname.hpld = +h lib${LIB}.sl.${SHLIB_MAJOR}
+
+LDFLAGS.shared.aixld = -G
+LDFLAGS.soname.aixld = #
+
+LDFLAGS.shared.irixld = -shared
+LDFLAGS.soname.irixld = #
+
+LDFLAGS.shared.osf1ld = -shared -msym -expect_unresolved '*'
+LDFLAGS.soname.osf1ld = -soname lib${LIB}${SHLIB_EXT}.${SHLIB_MAJOR} \
+ -set_version ${SHLIB_MAJOR}.${SHLIB_MINOR} \
+ -update_registry ${.OBJDIR}/${LIB}_so_locations
+
+LDFLAGS.shared.irixld = -shared
+LDFLAGS.soname.irixld = -soname lib${LIB}${SHLIB_EXT}.${SHLIB_MAJOR}
+
+LDFLAGS.shared.interixld = -shared --image-base,`expr $${RANDOM-$$$$} % 4096 / 2 \* 262144 + 1342177280`
+LDFLAGS.soname.interixld = -h lib${LIB}${SHLIB_EXT}.${SHLIB_MAJOR}
+
+LDFLAGS.shared.gcc.Interix = -shared --image-base,`expr $${RANDOM-$$$$} % 4096 / 2 \* 262144 + 1342177280`
+LDFLAGS.shared.gcc = -shared
+LDFLAGS.shared.clang = -shared
+LDFLAGS.shared.pcc = -shared
+LDFLAGS.shared.icc = -shared
+LDFLAGS.shared.hpc = -b
+LDFLAGS.shared.imbc = -qmkshrobj
+LDFLAGS.shared.mipspro = -shared
+LDFLAGS.shared.sunpro = -G
+LDFLAGS.shared.decc = -shared
+
+LDFLAGS.soname.sunpro = ${LDFLAGS.soname.sunld}
+
+.if ${TARGET_OPSYS:Unone} == "Darwin"
+.if ${MKDLL:U} == "no"
+LDFLAGS.shared.gcc.Darwin = -dynamiclib -install_name ${LIBDIR}/lib${LIB}${SHLIB_EXTFULL}
+SHLIB_MAJORp1 != expr 1 + ${SHLIB_MAJOR:U0}
+LDFLAGS.soname.gcc = -current_version ${SHLIB_MAJORp1}${SHLIB_MINOR:D.${SHLIB_MINOR}}${SHLIB_TEENY:D.${SHLIB_TEENY}}
+LDFLAGS.soname.gcc += -compatibility_version ${SHLIB_MAJORp1}
+.else
+LDFLAGS.shared.gcc.Darwin = -flat_namespace -bundle -undefined suppress
+.endif
+.elif ${TARGET_OPSYS:Unone} == "OSF1" && defined(LIB)
+CLEANFILES += ${.OBJDIR}/${LIB}_so_locations
+.endif
+
+CFLAGS.cctold ?= ${CFLAGS.cctold.${CC_TYPE}:U-Wl,}
+CXXFLAGS.cctold ?= ${CFLAGS.cctold.${CXX_TYPE}:U-Wl,}
+
+LDFLAGS.soname.ld = ${LDFLAGS.soname.${LD_TYPE}:U}
+
+.if ${LDREAL:U0} == ${LD:U0}
+LDFLAGS.shared ?= ${LDFLAGS.shared.${LD_TYPE}:U-shared}
+LDFLAGS.soname ?= ${LDFLAGS.soname.ld}
+.elif ${LDREAL:U0} == ${CC:U0}
+LDFLAGS.shared ?= ${LDFLAGS.shared.${CC_TYPE}.${TARGET_OPSYS}:U${LDFLAGS.shared.${CC_TYPE}:U-shared}}
+LDFLAGS.soname ?= ${LDFLAGS.soname.${CC_TYPE}:U${LDFLAGS.soname.ld:@v@${CFLAGS.cctold}${v}@}}
+.elif ${LDREAL:U0} == ${CXX:U0}
+LDFLAGS.shared ?= ${LDFLAGS.shared.${CXX_TYPE}.${TARGET_OPSYS}:U${LDFLAGS.shared.${CXX_TYPE}:U-shared}}
+LDFLAGS.soname ?= ${LDFLAGS.soname.${CXX_TYPE}:U${LDFLAGS.soname.ld:@v@${CXXFLAGS.cctold}${v}@}}
+.endif
+
+####################
+LDFLAGS.pie.gcc = -pie
+
+.if ${LDREAL:U0} == ${CC:U0}
+LDFLAGS.pie ?= ${LDFLAGS.pie.${CC_TYPE}}
+.elif ${LDREAL:U0} == ${CXX:U0}
+LDFLAGS.pie ?= ${LDFLAGS.pie.${CXX_TYPE}}
+.endif
+####################
+LDFLAGS.relro.gnuld = -zrelro -znow
+
+LDFLAGS.relro ?= ${LDFLAGS.relro.${LD_TYPE}}
+
+####################
+.if ${LDREAL:U0} != ${LD:U0}
+.if !empty(LDFLAGS.relro)
+LDFLAGS.relro := ${LDFLAGS.relro:S/^/-Wl,/g}
+.endif
+.endif
+
+############################################################
+############################################################
+.if ${TARGET_OPSYS:Unone} == "Darwin"
+
+COMPILE.s ?= ${AS} ${AFLAGS}
+COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c
+
+.if ${MKDLL:U} != "no"
+
+SHLIB_EXTFULL ?= .bundle
+
+.else # MKDLL
+
+.if defined(SHLIB_MAJOR) && !empty(SHLIB_MAJOR)
+SHLIB_EXT1 ?= .${SHLIB_MAJOR}.dylib
+.if defined(SHLIB_MINOR) && !empty(SHLIB_MINOR)
+SHLIB_EXT2 ?= .${SHLIB_MAJOR}.${SHLIB_MINOR}.dylib
+.if defined(SHLIB_TEENY) && !empty(SHLIB_TEENY)
+SHLIB_EXT3 ?= .${SHLIB_FULLVERSION}.dylib
+SHLIB_FULLVERSION = ${SHLIB_MAJOR}.${SHLIB_MINOR}.${SHLIB_TEENY}
+.else
+SHLIB_FULLVERSION = ${SHLIB_MAJOR}.${SHLIB_MINOR}
+.endif # SHLIB_TEENY
+.else
+SHLIB_FULLVERSION = ${SHLIB_MAJOR}
+.endif # SHLIB_MINOR
+.endif # SHLIB_MAJOR
+
+SHLIB_EXTFULL ?= .${SHLIB_FULLVERSION}.dylib
+.endif
+
+.endif # Darwin!
+
+############################################################
+############################################################
+
+.if ${SHLIB_EXT:U} == ".so" || ${SHLIB_EXT:U} == ".sl"
+
+.if defined(SHLIB_MAJOR) && !empty(SHLIB_MAJOR)
+SHLIB_EXT1 = ${SHLIB_EXT}.${SHLIB_MAJOR}
+.if defined(SHLIB_MINOR) && !empty(SHLIB_MINOR)
+SHLIB_EXT2 = ${SHLIB_EXT}.${SHLIB_MAJOR}.${SHLIB_MINOR}
+.if defined(SHLIB_TEENY) && !empty(SHLIB_TEENY)
+SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}.${SHLIB_TEENY}
+SHLIB_EXT3 = ${SHLIB_EXT}.${SHLIB_FULLVERSION}
+.else
+SHLIB_FULLVERSION = ${SHLIB_MAJOR}.${SHLIB_MINOR}
+.endif # SHLIB_TEENY
+.else
+SHLIB_FULLVERSION = ${SHLIB_MAJOR}
+.endif # SHLIB_MINOR
+.endif # SHLIB_MAJOR
+
+SHLIB_EXTFULL = ${SHLIB_EXT}.${SHLIB_FULLVERSION}
+
+.endif # SHLIB_EXT
+
+############################################################
+############################################################
+
+.ifdef EXPORT_SYMBOLS
+.if ${LD_TYPE} == "sunld" || ${LD_TYPE} == "gnuld"
+CLEANFILES += ${EXPORT_SYMBOLS}.tmp
+lib${LIB}${SHLIB_EXTFULL}: ${EXPORT_SYMBOLS}.tmp
+${EXPORT_SYMBOLS}.tmp: ${EXPORT_SYMBOLS}
+ awk 'BEGIN {print "{ global:"} \
+ {print $$0 ";"} \
+ END {print "local: *; };"}' ${.ALLSRC} > ${.TARGET}
+.elif ${LD_TYPE} == "darwinld"
+CLEANFILES += ${EXPORT_SYMBOLS}.tmp
+lib${LIB}${SHLIB_EXTFULL}: ${EXPORT_SYMBOLS}.tmp
+${EXPORT_SYMBOLS}.tmp: ${EXPORT_SYMBOLS}
+ awk '{print "_" $$0}' ${.ALLSRC} > ${.TARGET}
+.endif # sunld or darwinld
+
+LDFLAGS.expsym.gnuld = --version-script ${EXPORT_SYMBOLS}.tmp
+LDFLAGS.expsym.sunld = -M ${EXPORT_SYMBOLS}.tmp
+LDFLAGS.expsym.darwinld = -exported_symbols_list ${EXPORT_SYMBOLS}.tmp
+.endif # EXPORT_SYMBOLS
+
+.if ${LDREAL:U0} == ${LD:U0}
+LDFLAGS.expsym ?= ${LDFLAGS.expsym.${LD_TYPE}}
+.elif defined(LDFLAGS.expsym.${LD_TYPE})
+LDFLAGS.expsym ?= ${LDFLAGS.expsym.${LD_TYPE}:S/^/-Wl,/}
+.endif # LDREAL == LD
+
+############################################################
+############################################################
+
+.if ${EXPORT_DYNAMIC:U:tl} == "yes"
+LDFLAGS.expdyn.gnuld ?= -Wl,-E
+LDFLAGS.expdyn.hpld ?= -Wl,-E
+LDFLAGS.expdyn.interixld ?= -Wl,-E
+LDFLAGS.expdyn.darwinld ?=
+LDFLAGS.expdyn.irixld ?=
+LDFLAGS.expdyn.gcc ?= -rdynamic
+LDFLAGS.expdyn.clang ?= -rdynamic
+.ifndef LDFLAGS.expdyn
+.if defined(LDFLAGS.expdyn.${LD_TYPE})
+LDFLAGS.expdyn = ${LDFLAGS.expdyn.${LD_TYPE}}
+.elif defined(LDFLAGS.expdyn.${CC_TYPE}) && ${LDREAL:U0} == ${CC:U0}
+LDFLAGS.expdyn = ${LDFLAGS.expdyn.${CC_TYPE}}
+.elif defined(LDFLAGS.expdyn.${CXX_TYPE}) && ${LDREAL:U0} == ${CXX:U0}
+LDFLAGS.expdyn = ${LDFLAGS.expdyn.${CXX_TYPE}}
+.endif # LDFLAGS.expdyn.xxx
+.endif # LDFLAGS.expdyn
+.endif # EXPORT_DYNAMIC
+
+############################################################
+############################################################
+
+LDFLAGS.shlib = ${LDFLAGS.shared} ${LDFLAGS.soname} ${LDFLAGS.expsym}
+LDFLAGS.prog = ${LDFLAGS.expdyn}
+############################################################
+############################################################
+
+.endif #_MKC_PLATFORM_MK
diff --git a/mk/mkc_imp.pod.mk b/mk/mkc_imp.pod.mk
new file mode 100644
index 0000000..5a4fb32
--- /dev/null
+++ b/mk/mkc_imp.pod.mk
@@ -0,0 +1,34 @@
+# Copyright (c) 2010-2013 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_POD_MK)
+_MKC_IMP_POD_MK := 1
+
+POD2MAN ?= pod2man
+POD2MAN_FLAGS := -r '' -n '${.TARGET:T:R}' -c ''
+MESSAGE.pod2man ?= @${_MESSAGE} "POD2MAN: ${.TARGET}"
+COMPILE.pod2man ?= ${_V} ${POD2MAN} ${POD2MAN_FLAGS}
+
+POD2HTML ?= pod2html
+POD2HTML_FLAGS ?=
+MESSAGE.pod2html ?= @${_MESSAGE} "POD2HTML: ${.TARGET}"
+COMPILE.pod2html ?= ${_V} ${POD2HTML} ${POD2HTML_FLAGS}
+
+.SUFFIXES: .pod
+.for i in 1 2 3 4 5 6 7 8 9
+.SUFFIXES: .${i}
+.pod.${i}:
+ ${MESSAGE.pod2man}
+ ${COMPILE.pod2man} -s ${i} ${.IMPSRC} > ${.TARGET}
+.endfor
+
+.SUFFIXES: .html
+.pod.html:
+ ${MESSAGE.pod2html}
+ ${COMPILE.pod2html} < ${.IMPSRC} > ${.TARGET}
+
+CLEANFILES += pod2htmd.tmp pod2htmi.tmp
+
+.endif # _MKC_IMP_POD_MK
diff --git a/mk/mkc_imp.preinit.mk b/mk/mkc_imp.preinit.mk
new file mode 100644
index 0000000..81cdc1f
--- /dev/null
+++ b/mk/mkc_imp.preinit.mk
@@ -0,0 +1,32 @@
+# Copyright (c) 2010 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+####################
+BMAKE_REQD ?= 20110606
+
+.ifdef MAKE_VERSION
+_bmake_ok != test ${MAKE_VERSION} -ge ${BMAKE_REQD} && echo 1 || echo 0
+.else
+_bmake_ok = 0
+.endif
+
+.if !${_bmake_ok}
+.error "bmake-${BMAKE_REQD} or newer is required"
+.endif
+
+.ifdef _top_mk
+.for i in SUBDIR SUBPRJ PROG LIB
+.if defined(${i}) && ${_top_mk} != "mkc.${i:tl}.mk"
+.error "${i} is not allowed for ${_top_mk}"
+.endif
+.endfor
+.endif
+
+####################
+.if !make(clean) && !make(cleandir) && !make(distclean) && !make(obj)
+MKCHECKS ?= yes
+.else
+MKCHECKS ?= no
+.endif # clean/cleandir/distclean
diff --git a/mk/mkc_imp.prog.mk b/mk/mkc_imp.prog.mk
new file mode 100644
index 0000000..65db125
--- /dev/null
+++ b/mk/mkc_imp.prog.mk
@@ -0,0 +1,73 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_PROG_MK)
+_MKC_IMP_PROG_MK := 1
+
+.PHONY: proginstall
+proginstall:
+
+CFLAGS += ${COPTS}
+
+__proginstall: .USE
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${STRIPFLAG} \
+ -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
+
+.for p in ${PROGS}
+realinstall: proginstall
+
+_SRCS_ALL += ${SRCS.${p}}
+
+DPSRCS.${p} = ${SRCS.${p}:M*.l:.l=.c} ${SRCS.${p}:M*.y:.y=.c}
+CLEANFILES += ${DPSRCS.${p}}
+.if defined(YHEADER)
+CLEANFILES += ${SRCS.${p}:M*.y:.y=.h}
+.endif # defined(YHEADER)
+
+OBJS.${p} = ${SRCS.${p}:N*.h:N*.sh:N*.fth:T:R:S/$/.o/g}
+
+.if defined(OBJS.${p}) && !empty(OBJS.${p})
+.NOPATH: ${OBJS.${p}}
+
+${p}: ${LIBCRT0} ${DPSRCS.${p}} ${OBJS.${p}} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
+.if !commands(${p})
+ ${MESSAGE.ld}
+ ${_V}${LDREAL} ${LDFLAGS} ${LDFLAGS.prog} ${LDSTATIC} \
+ -o ${.TARGET} ${OBJS.${p}} ${LDADD}
+.endif # !commands(...)
+
+.endif # defined(OBJS.${p}) && !empty(OBJS.${p})
+
+.if !defined(MAN) && exists(${p}.1)
+MAN += ${p}.1
+.endif # !defined(MAN)
+
+PROGNAME.${p} ?= ${PROGNAME:U${p}}
+
+.if ${MKINSTALL:tl} == "yes"
+dest_prog.${p} = ${DESTDIR}${BINDIR}/${PROGNAME.${p}}
+UNINSTALLFILES += ${dest_prog.${p}}
+INSTALLDIRS += ${dest_prog.${p}:H}
+
+proginstall: ${dest_prog.${p}}
+.PRECIOUS: ${dest_prog.${p}}
+.PHONY: ${dest_prog.${p}}
+.endif # ${MKINSTALL:tl} == "yes"
+
+${DESTDIR}${BINDIR}/${PROGNAME.${p}}: ${p} __proginstall
+
+CLEANFILES += ${OBJS.${p}}
+
+.endfor # ${PROGS}
+
+realall: ${PROGS}
+
+CLEANFILES += ${PROGS}
+
+.endif # _MKC_IMP_PROG_MK
diff --git a/mk/mkc_imp.scripts.mk b/mk/mkc_imp.scripts.mk
new file mode 100644
index 0000000..f066275
--- /dev/null
+++ b/mk/mkc_imp.scripts.mk
@@ -0,0 +1,44 @@
+# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_SCRIPTS_MK)
+_MKC_IMP_SCRIPTS_MK := 1
+
+.PHONY: scriptsinstall
+realinstall: scriptsinstall
+
+realall: ${SCRIPTS}
+
+.if defined(SCRIPTS)
+.if ${MKINSTALL:tl} == "yes"
+destination_scripts = ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S:S|/|_|g}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S:S|/|_|g}:U${SCRIPTSNAME:U${S:T}}}@}
+UNINSTALLFILES += ${destination_scripts}
+INSTALLDIRS += ${destination_scripts:H}
+.endif # MKINSTALL
+
+scriptsinstall:: ${destination_scripts}
+.PRECIOUS: ${destination_scripts}
+.PHONY: ${destination_scripts}
+
+__scriptinstall: .USE
+ ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
+ -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
+ -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
+ ${.ALLSRC} ${.TARGET}
+
+.for S in ${SCRIPTS:O:u}
+${DESTDIR}${SCRIPTSDIR_${S:S|/|_|g}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S:S|/|_|g}:U${SCRIPTSNAME:U${S:T}}}: ${S} __scriptinstall
+.endfor
+
+.else # defined(SCRIPTS)
+scriptsinstall:
+.endif # defined(SCRIPTS)
+
+.endif # _MKC_IMP_SCRIPTS_MK
diff --git a/mk/mkc_imp.subprj.mk b/mk/mkc_imp.subprj.mk
new file mode 100644
index 0000000..df94d6d
--- /dev/null
+++ b/mk/mkc_imp.subprj.mk
@@ -0,0 +1,92 @@
+# Copyright (c) 2010-2013 by Aleksey Cheusov
+# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+# Copyright (c) 1988, 1989, 1993 The Regents of the University of California
+# Copyright (c) 1988, 1989 by Adam de Boor
+# Copyright (c) 1989 by Berkeley Softworks
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.if !defined(_MKC_IMP_SUBPRJ_MK)
+_MKC_IMP_SUBPRJ_MK := 1
+
+.for dir in ${SUBPRJ:S/:/ /g}
+.if empty(NOSUBDIR:U:M${dir})
+__REALSUBPRJ += ${dir}
+.endif
+.endfor
+
+.ifndef SUBDIR
+__REALSUBPRJ := ${__REALSUBPRJ:O:u}
+.endif
+
+.if !empty(__REALSUBPRJ:M*-*)
+.error "Dash symbol is not allowed inside subdir (${__REALSUBPRJ:M*-*})"
+.endif
+
+SUBPRJ_DFLT ?= ${__REALSUBPRJ}
+
+.for targ in ${TARGETS}
+.for dir in ${__REALSUBPRJ:N.WAIT}
+.PHONY: nodeps-${targ}-${dir} subdir-${targ}-${dir} ${targ}-${dir}
+nodeps-${targ}-${dir}: .MAKE __recurse
+ ${targ}-${dir}: .MAKE __recurse
+subdir-${targ}-${dir}: .MAKE __recurse
+.if ${SHORTPRJNAME:tl} == "yes" && ${dir} != ${dir:T}
+.PHONY: nodeps-${targ}-${dir:T} subdir-${targ}-${dir:T} ${targ}-${dir:T}
+nodeps-${targ}-${dir:T}: nodeps-${targ}-${dir}
+ ${targ}-${dir:T}: ${targ}-${dir}
+subdir-${targ}-${dir:T}: subdir-${targ}-${dir}
+.endif
+.endfor # dir
+
+.if !commands(${targ})
+. for dir in ${SUBPRJ_DFLT}
+dir_ = ${dir}
+. if ${dir_} == ".WAIT"
+_SUBDIR_${targ} += .WAIT
+. else
+_SUBDIR_${targ} += ${targ}-${dir}:${targ}
+. endif # .WAIT
+. endfor # dir
+.for excl in ${NODEPS}
+_SUBDIR_${targ} := ${_SUBDIR_${targ}:N${excl}}
+.endfor # excl
+_ALLTARGDEPS2 += ${_SUBDIR_${targ}}
+${targ}: ${_SUBDIR_${targ}:S/:${targ}$//}
+.endif #!command(${targ})
+
+.for dep prj in ${SUBPRJ:M*\:*:S/:/ /}
+_ALLTARGDEPS += ${targ}-${dep}:${targ}-${prj}
+.endfor
+
+.endfor # targ
+
+.for dir in ${__REALSUBPRJ}
+.if ${SHORTPRJNAME:tl} == "yes" && ${dir:T} != ${dir}
+_ALLTARGDEPS += all-${dir}:${dir:T}
+.endif
+_ALLTARGDEPS += all-${dir}:${dir}
+.endfor # dir
+
+.for excl in ${NODEPS}
+_ALLTARGDEPS := ${_ALLTARGDEPS:N${excl}}
+.endfor # excl
+
+.for deptarg prjtarg in ${_ALLTARGDEPS:S/:/ /}
+.PHONY: ${prjtarg} ${deptarg}
+${prjtarg}: ${deptarg}
+.endfor
+
+# Make sure all of the standard targets are defined, even if they do nothing.
+${TARGETS}:
+
+.PHONY: output_deps
+output_deps:
+.for i in ${_ALLTARGDEPS} ${_ALLTARGDEPS2}
+ @echo ${i}
+.endfor
+
+.include <mkc_imp.objdir.mk>
+
+.endif # _MKC_IMP_SUBPRJ_MK
diff --git a/mk/mkc_imp.vars.mk.in b/mk/mkc_imp.vars.mk.in
new file mode 100644
index 0000000..2e642e3
--- /dev/null
+++ b/mk/mkc_imp.vars.mk.in
@@ -0,0 +1,7 @@
+MKC_VERSION = @version@
+BUILTINSDIR ?= @syscustomdir@
+MKC_LIBEXECDIR = @libexecdir@
+MKC_SYSCONFDIR = @sysconfdir@
+MKDEP = @mkdep_cmd@
+MKDEP_TYPE = @mkdep_type@
+MAKEDEPEND = @makedepend_cmd@
diff --git a/mk/sys.mk b/mk/sys.mk
new file mode 100644
index 0000000..0e6f63e
--- /dev/null
+++ b/mk/sys.mk
@@ -0,0 +1,22 @@
+#
+# mk-configure can not know everything about your platform.
+# This file is a system-wide default configuration file.
+# In addition, @sysconfdir@/etc/mk.conf and /etc/mk.conf
+# may be used by system administrator.
+#
+# Example is below:
+#
+# CC ?= /usr/bin/cc
+# CXX ?= /usr/bin/CC
+# YACC ?= /usr/sfw/bin/bison -y
+# LEX ?= /usr/sfw/bin/flex
+# INSTALL ?= /usr/ucb/install
+# STRIP ?= /usr/ccs/bin/strip
+# LD ?= /usr/ccs/bin/ld
+# AR ?= /usr/ccs/bin/ar
+# AS ?= /usr/ccs/bin/as
+# LORDER ?= /usr/ccs/bin/lorder
+# RANLIB ?= /usr/ccs/bin/ranlib
+# LUA_LMODDIR ?= /usr/share/lua/5.1
+# LUA_CMODDIR ?= /usr/lib/lua/5.1
+# ...