summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorAndrej Shadura <andrewsh@debian.org>2020-11-27 12:21:46 +0100
committerAndrej Shadura <andrewsh@debian.org>2020-11-27 12:21:46 +0100
commit2948077f55958203ddf8aae1d844d86e97e5beba (patch)
treec2f71d37e811ef37f78f27cb59c00d991655026e /mk
parentb2cb3f0763ea0f96008b0c5a289a7d2cdc7f80c3 (diff)
New upstream version 0.35.0
Diffstat (limited to 'mk')
-rw-r--r--mk/Makefile65
-rw-r--r--mk/mkc.compiler_settings.mk5
-rw-r--r--mk/mkc.conf.mk138
-rw-r--r--mk/mkc.configure.mk5
-rw-r--r--mk/mkc.init.mk152
-rw-r--r--mk/mkc.minitest.mk4
-rw-r--r--mk/mkc.mk3
-rw-r--r--mk/mkc_imp.arch.mk12
-rw-r--r--mk/mkc_imp.checkprogs.mk10
-rw-r--r--mk/mkc_imp.compiler_settings.mk186
-rw-r--r--mk/mkc_imp.compiler_type.mk50
-rw-r--r--mk/mkc_imp.conf-cleanup.mk2
-rw-r--r--mk/mkc_imp.dep.mk25
-rw-r--r--mk/mkc_imp.files.mk2
-rw-r--r--mk/mkc_imp.final.mk25
-rw-r--r--mk/mkc_imp.foreign_autotools.mk20
-rw-r--r--mk/mkc_imp.help.mk85
-rw-r--r--mk/mkc_imp.inc.mk2
-rw-r--r--mk/mkc_imp.info.mk2
-rw-r--r--mk/mkc_imp.intexts.mk2
-rw-r--r--mk/mkc_imp.lib.mk10
-rw-r--r--mk/mkc_imp.man.mk2
-rw-r--r--mk/mkc_imp.mk22
-rw-r--r--mk/mkc_imp.pkg-config.mk16
-rw-r--r--mk/mkc_imp.platform.sys.mk202
-rw-r--r--mk/mkc_imp.preinit.mk27
-rw-r--r--mk/mkc_imp.prog.mk8
-rw-r--r--mk/mkc_imp.rules.mk45
-rw-r--r--mk/mkc_imp.scripts.mk2
-rw-r--r--mk/mkc_imp.subprj.mk10
-rw-r--r--mk/mkc_imp.vars.mk.in9
-rw-r--r--mk/newsys.mk.in96
-rw-r--r--mk/sys.mk24
33 files changed, 759 insertions, 509 deletions
diff --git a/mk/Makefile b/mk/Makefile
index 4fdc857..f2884f5 100644
--- a/mk/Makefile
+++ b/mk/Makefile
@@ -1,4 +1,4 @@
-FILES = sys.mk mkc.configure.mk mkc.conf.mk mkc_imp.conf-cleanup.mk \
+FILES = mkc.configure.mk mkc.conf.mk mkc_imp.conf-cleanup.mk \
mkc.mk mkc.init.mk mkc_imp.intexts.mk mkc_imp.mk \
mkc.minitest.mk mkc_imp.pkg-config.mk mkc_imp.dpvars.mk \
mkc_imp.files.mk mkc_imp.inc.mk mkc_imp.info.mk mkc_imp.lib.mk \
@@ -8,11 +8,34 @@ FILES = sys.mk mkc.configure.mk mkc.conf.mk mkc_imp.conf-cleanup.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}
+ mkc_imp.objdir.mk mkc_imp.obj.mk mkc_imp.help.mk \
+ mkc_imp.compiler_settings.mk mkc.compiler_settings.mk \
+ mkc_imp.compiler_type.mk mkc_imp.foreign_autotools.mk ${INFILES}
FILESDIR = ${MKFILESDIR}
-INFILES += mkc_imp.vars.mk
+INFILES += newsys.mk
+
+FILESNAME_newsys.mk = sys.mk
+
+CLEANFILES += mkc_imp.cc_*.mk mkc_imp.cxx_*.mk
+
+#################################################
+# the following three variables are necessary for detecting CC_TYPE and CXX_TYPE
+#src_type = cc cxx
+
+.include <mkc.init.mk>
+
+MKC_NOCACHE=1
+
+.include "mkc_imp.compiler_settings.mk"
+
+post_install:
+ for f in ${.OBJDIR}/mkc_imp.cc_*.mk ${.OBJDIR}/mkc_imp.cxx_*.mk; do \
+ test -f "$$f" && \
+ ${INSTALL} -o ${FILESOWN} -g ${FILESGRP} -m ${FILESMODE} \
+ ${INSTALL_FLAGS} $$f ${DESTDIR}${MKFILESDIR}; \
+ done
#################################################
.for i in prog_mkdep prog_nbmkdep
@@ -38,10 +61,38 @@ mkdep_type = makedepend
MKC_ERR_MSG += "mkdep(1) cannot be found"
.endif
-.if exists(/usr/xpg4/bin/nm)
-PROG.nm ?= /usr/xpg4/bin/nm
+.if empty(USE_NM) || ${USE_NM} == "auto"
+. if exists(/usr/xpg4/bin/nm)
+PROG.nm ?= /usr/xpg4/bin/nm
+. else
+MKC_REQUIRE_PROGS += nm
+. endif
+.else
+PROG.nm = ${USE_NM}
+.endif
+
+.if empty(USE_ID) || ${USE_ID} == "auto"
+. if exists(/usr/xpg4/bin/id)
+PROG.id ?= /usr/xpg4/bin/id
+. else
+MKC_REQUIRE_PROGS += id
+. endif
+.else
+PROG.id = ${USE_ID}
+.endif
+
+.if empty(USE_INSTALL) || ${USE_INSTALL} == "auto"
+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}
+.elif ${USE_INSTALL} == "mkc_install"
+install = mkc_install
.else
-MKC_REQUIRE_PROGS += nm
+install = ${USE_INSTALL}
.endif
makedepend_cmd ?= makedepend
@@ -51,6 +102,8 @@ INTEXTS_REPLS += makedepend_cmd ${makedepend_cmd}
INTEXTS_REPLS += mkdep_type ${mkdep_type}
INTEXTS_REPLS += featuresdir ${FEATURESDIR}
INTEXTS_REPLS += NM ${PROG.nm}
+INTEXTS_REPLS += ID ${PROG.id}
+INTEXTS_REPLS += install ${install}
#################################################
.include <mkc.mk>
diff --git a/mk/mkc.compiler_settings.mk b/mk/mkc.compiler_settings.mk
new file mode 100644
index 0000000..f8ade4b
--- /dev/null
+++ b/mk/mkc.compiler_settings.mk
@@ -0,0 +1,5 @@
+all: post_all
+
+.include <mkc.init.mk>
+.include <mkc_imp.compiler_settings.mk>
+.include <mkc.mk>
diff --git a/mk/mkc.conf.mk b/mk/mkc.conf.mk
index 6dcc568..7c6e171 100644
--- a/mk/mkc.conf.mk
+++ b/mk/mkc.conf.mk
@@ -26,6 +26,8 @@
# See mk-configure(7) for documentation
#
+.include "mkc_imp.compiler_type.mk"
+
# 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
@@ -44,32 +46,30 @@ MKC_NOSRCSAUTO ?= 0
MKC_SOURCE_FUNCLIBS ?=
_MKC_SOURCE_FUNCS = ${MKC_SOURCE_FUNCLIBS:C/:.*//}
+# the following variable is for mkc-configure testing only
+_BUILTINSDIR ?= ${BUILTINSDIR}
+
# .endif for the next .if is in the end of file
.if ${MKCHECKS:Uno:tl} == "yes"
HAVE_FUNCLIB.main ?= 1
-.if defined(MKC_COMMON_DEFINES.${TARGET_OPSYS})
-CPPFLAGS += ${MKC_COMMON_DEFINES.${TARGET_OPSYS}}
-.endif
-.if defined(MKC_COMMON_DEFINES)
-CPPFLAGS += ${MKC_COMMON_DEFINES}
-.endif
+.for i in ${MKC_COMMON_DEFINES.${TARGET_OPSYS}}
+CPPFLAGS += ${i}
+.endfor
+.undef MKC_COMMON_DEFINES.${TARGET_OPSYS}
+.for i in ${MKC_COMMON_DEFINES}
+CPPFLAGS += ${i}
+.endfor
+.undef MKC_COMMON_DEFINES
#
-_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
+mkc.environ=CC=${CC:Q} CXX=${CXX:Q} CPPFLAGS=${CPPFLAGS:Q}\ ${_cppflags:Q} CFLAGS=${CFLAGS:Q}\ ${_cflags:Q} CXXFLAGS=${CXXFLAGS:Q}\ ${_cxxflags:Q} LDFLAGS=${LDFLAGS:Q}\ ${_ldflags:Q} LDADD=${LDADD:Q}\ ${_ldadd:Q} LEX=${LEX:Q} YACC=${YACC:Q} MKC_CACHEDIR=${MKC_CACHEDIR:Q} MKC_COMMON_HEADERS=${MKC_COMMON_HEADERS:Q} MKC_DELETE_TMPFILES=${MKC_DELETE_TMPFILES:Q} MKC_SHOW_CACHED=${MKC_SHOW_CACHED:Q} MKC_NOCACHE=${MKC_NOCACHE:Q} MKC_VERBOSE=1
######################################################
# checking for builtin checks
.for i in ${MKC_CHECK_BUILTINS} ${MKC_REQUIRE_BUILTINS}
-MKC_CUSTOM_FN.${i} ?= ${BUILTINSDIR}/${i}
+MKC_CUSTOM_FN.${i} ?= ${_BUILTINSDIR}/${i}
MKC_CHECK_CUSTOM += ${i}
MKC_REQUIRE_CUSTOM += ${MKC_REQUIRE_BUILTINS:M${i}}
.endfor
@@ -82,7 +82,7 @@ HAVE_HEADER_FILE.${h:C/.*,//:S|.|_|g:S|/|_|g} != env ${mkc.environ} mkc_chec
.endif
.if ${HAVE_HEADER_FILE.${h:C/.*,//:S|.|_|g:S|/|_|g}}
.if empty(MKC_REQUIRE_HEADER_FILES:U:M${h})
-MKC_CFLAGS += -DHAVE_HEADER_FILE_${h:tu:C/.*,//:S|.|_|g:S|/|_|g}=${HAVE_HEADER_FILE.${h:C/.*,//:S|.|_|g:S|/|_|g}}
+MKC_CPPFLAGS += -DHAVE_HEADER_FILE_${h:tu:C/.*,//:S|.|_|g:S|/|_|g}=${HAVE_HEADER_FILE.${h:C/.*,//:S|.|_|g:S|/|_|g}}
.endif
.elif !empty(MKC_REQUIRE_HEADER_FILES:U:M${h})
_fake != env ${mkc.environ} mkc_check_header -e -d ${h} && echo
@@ -101,7 +101,7 @@ HAVE_HEADER.${h:C/.*,//:S|.|_|g:S|/|_|g} != env ${mkc.environ} mkc_check_hea
.endif
.if ${HAVE_HEADER.${h:C/.*,//:S|.|_|g:S|/|_|g}}
.if empty(MKC_REQUIRE_HEADERS:U:M${h})
-MKC_CFLAGS += -DHAVE_HEADER_${h:tu:C/.*,//:S|.|_|g:S|/|_|g}=${HAVE_HEADER.${h:C/.*,//:S|.|_|g:S|/|_|g}}
+MKC_CPPFLAGS += -DHAVE_HEADER_${h:tu:C/.*,//:S|.|_|g:S|/|_|g}=${HAVE_HEADER.${h:C/.*,//:S|.|_|g:S|/|_|g}}
.endif
.elif !empty(MKC_REQUIRE_HEADERS:U:M${h})
_fake != env ${mkc.environ} mkc_check_header -d ${h} && echo
@@ -149,7 +149,7 @@ MKC_ERR_MSG += "ERROR: cannot find function ${f}"
SIZEOF.${t:C/:.*,/:/:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g} != env ${mkc.environ} mkc_check_sizeof ${t:S/:/ /g}
.endif
.if ${SIZEOF.${t:C/:.*,/:/:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g}} != failed
-MKC_CFLAGS += -DSIZEOF_${t:C/:.*,/:/:S/-/_/g:S| |_|g:S|*|P|g:S|:|_|g:S|.|_|g:S|/|_|g:tu}=${SIZEOF.${t:C/:.*,/:/:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g}}
+MKC_CPPFLAGS += -DSIZEOF_${t:C/:.*,/:/:S/-/_/g:S| |_|g:S|*|P|g:S|:|_|g:S|.|_|g:S|/|_|g:tu}=${SIZEOF.${t:C/:.*,/:/:S|.|_|g:S|-|_|g:S|*|P|g:S|/|_|g:S|:|.|g}}
.endif
.endfor
@@ -163,7 +163,7 @@ HAVE_DEFINE.${d:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc
.endif
.if ${HAVE_DEFINE.${d:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g}}
.if empty(MKC_REQUIRE_DEFINES:U:M${d})
-MKC_CFLAGS += -DHAVE_DEFINE_${d:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+MKC_CPPFLAGS += -DHAVE_DEFINE_${d:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
.endif
.endif
.endfor
@@ -186,7 +186,7 @@ HAVE_TYPE.${t:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc_c
.endif
.if ${HAVE_TYPE.${t:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g}}
.if empty(MKC_REQUIRE_TYPES:U:M${t})
-MKC_CFLAGS += -DHAVE_TYPE_${t:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+MKC_CPPFLAGS += -DHAVE_TYPE_${t:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
.endif
.endif
.endfor
@@ -209,7 +209,7 @@ HAVE_VAR.${d:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} mkc_ch
.endif
.if ${HAVE_VAR.${d:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g}}
.if empty(MKC_REQUIRE_VARS:U:M${d})
-MKC_CFLAGS += -DHAVE_VAR_${d:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+MKC_CPPFLAGS += -DHAVE_VAR_${d:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
.endif
.endif
.endfor
@@ -232,7 +232,7 @@ HAVE_MEMBER.${m:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g:S/-/_/g} != env ${mkc.envi
.endif
.if ${HAVE_MEMBER.${m:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g:S/-/_/g}}
.if empty(MKC_REQUIRE_MEMBERS:U:M${m})
-MKC_CFLAGS += -DHAVE_MEMBER_${m:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g:S/-/_/g}=1
+MKC_CPPFLAGS += -DHAVE_MEMBER_${m:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g:S/-/_/g}=1
.endif
.endif
.endfor
@@ -258,7 +258,7 @@ HAVE_FUNC${n}.${d:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g} != env ${mkc.environ} m
.endif
.if ${HAVE_FUNC${n}.${d:C/:.*,/:/:S/./_/g:S/:/./g:S|/|_|g}}
.if empty(MKC_REQUIRE_FUNCS${n}:U:M${d})
-MKC_CFLAGS += -DHAVE_FUNC${n}_${d:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
+MKC_CPPFLAGS += -DHAVE_FUNC${n}_${d:C/:.*,/:/:tu:S/:/_/g:S/./_/g:S|/|_|g}=1
.endif
.endif
.endfor # d
@@ -288,26 +288,43 @@ MKC_CUSTOM_FN.${c} = ${c}.c
.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
+_opts = ${"${MKC_CUSTOM_LINK.${c}:tl}" == "yes":?-l:}
+_cppflags = ${MKC_CUSTOM_CPPFLAGS.${c}:U}
+_cflags = ${MKC_CUSTOM_CFLAGS.${c}:U}
+_cxxflags = ${MKC_CUSTOM_CXXFLAGS.${c}:U}
+_ldflags = ${MKC_CUSTOM_LDFLAGS.${c}:U}
+_ldadd = ${MKC_CUSTOM_LDADD.${c}:U}
+_cachename = ${MKC_CUSTOM_CACHE.${c}:Ucustom_${c}}
+CUSTOM.${c} != env ${mkc.environ} mkc_check_custom -t ${_cachename:Q} ${_opts} ${MKC_CUSTOM_FN.${c}}
+.endif
+.undef _cachename
+.undef _opts
+.undef _cppflags
+.undef _cflags
+.undef _cxxflags
+.undef _ldflags
+.undef _ldadd
.if !empty(CUSTOM.${c}) && ${CUSTOM.${c}} != 0
-.if empty(MKC_REQUIRE_CUSTOM:U:M${c})
-MKC_CFLAGS += -DCUSTOM_${c:tu}=${CUSTOM.${c}}
+.if empty(MKC_REQUIRE_CUSTOM:U:M${c}) && ${MKC_CUSTOM_NOAUTO.${c}:U:tl} != "yes"
+MKC_CPPFLAGS += -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
+_fake != env ${mkc.environ} mkc_check_custom -t custom_${c:Q} -d ${MKC_CUSTOM_FN.${c}} && echo
MKC_ERR_MSG += "ERROR: custom test ${c} failed"
.endif
.endfor
-.for c in ${MKC_CHECK_BUILTINS}
+.for c in ${MKC_CHECK_BUILTINS} ${MKC_REQUIRE_BUILTINS}
BUILTIN.${c} = ${CUSTOM.${c}}
.endfor
+.undef MKC_CHECK_CUSTOM
+.undef MKC_REQUIRE_CUSTOM
+
######################################################
# checking for programs
.for p in ${MKC_CHECK_PROGS} ${MKC_REQUIRE_PROGS}
@@ -336,23 +353,72 @@ MKC_ERR_MSG += "ERROR: cannot find program ${p}"
.undef MKC_CHECK_PROGS
.undef MKC_REQUIRE_PROGS
-.undef MKC_CHECK_CUSTOM
-.undef MKC_REQUIRE_CUSTOM
+######################################################
+# <begin CFLAGS.check and CXXFLAGS.check>
+.for c in ${CFLAGS.check}
+MKC_CHECK_CC_OPTS += ${c}
+.endfor
+.for c in ${CXXFLAGS.check}
+MKC_CHECK_CXX_OPTS += ${c}
+.endfor
######################################################
# checks whether $CC accepts some arguments
.for a in ${MKC_CHECK_CC_OPTS}
.if !defined(HAVE_CC_OPT.${a:S/=/_/g})
-HAVE_CC_OPT.${a:S/=/_/g} != env ${mkc.environ} CARGS=${a:Q} mkc_check_custom -b -e -p cc_option -n ${a:Q} -m 'whether ${CC} supports option '${a:Q} ${BUILTINSDIR}/easy.c
+_cflags = ${a:S/__/ /g}
+HAVE_CC_OPT.${a:S/=/_/g} != env ${mkc.environ} mkc_check_custom -t cc_option_${a:Q} -b -e -m 'if ${CC} -c accepts '${a:S/__/ /g:Q} ${_BUILTINSDIR}/easy.c
+.undef _cflags
.endif # !defined(HAVE_CC_OPT.${a})
.endfor # a
+.undef MKC_CHECK_CC_OPTS
# checks whether $CXX accepts some arguments
.for a in ${MKC_CHECK_CXX_OPTS}
.if !defined(HAVE_CXX_OPT.${a:S/=/_/g})
-HAVE_CXX_OPT.${a:S/=/_/g} != env ${mkc.environ} CARGS=${a:Q} mkc_check_custom -b -e -p cxx_option -n ${a:Q} -m 'whether ${CXX} supports option '${a:Q} ${BUILTINSDIR}/easy.cc
+_cxxflags = ${a:S/__/ /g}
+HAVE_CXX_OPT.${a:S/=/_/g} != env ${mkc.environ} mkc_check_custom -t cxx_option_${a:Q} -b -e -m 'if ${CXX} -c accepts '${a:S/__/ /g:Q} ${_BUILTINSDIR}/easy.cc
+.undef _cxxflags
.endif # !defined(HAVE_CXX_OPT.${a})
.endfor # a
+.undef MKC_CHECK_CXX_OPTS
+
+######################################################
+# checks whether $CC accepts some arguments
+.for a in ${MKC_CHECK_CCLD_OPTS}
+.if !defined(HAVE_CCLD_OPT.${a:S/=/_/g})
+_cflags = ${a:S/__/ /g}
+HAVE_CCLD_OPT.${a:S/=/_/g} != env ${mkc.environ} mkc_check_custom -l -t ccld_option_${a:Q} -b -e -m 'if ${CC} accepts '${a:S/__/ /g:Q} ${_BUILTINSDIR}/easy.c
+.undef _cflags
+.endif # !defined(HAVE_CCLD_OPT.${a})
+.endfor # a
+.undef MKC_CHECK_CCLD_OPTS
+
+# checks whether $CXX accepts some arguments
+.for a in ${MKC_CHECK_CXXLD_OPTS}
+.if !defined(HAVE_CXXLD_OPT.${a:S/=/_/g})
+_cxxflags = ${a:S/__/ /g}
+HAVE_CXXLD_OPT.${a:S/=/_/g} != env ${mkc.environ} mkc_check_custom -l -t cxxld_option_${a:Q} -b -e -m 'if ${CXX} accepts '${a:S/__/ /g:Q} ${_BUILTINSDIR}/easy.cc
+.undef _cxxflags
+.endif # !defined(HAVE_CXXLD_OPT.${a})
+.endfor # a
+.undef MKC_CHECK_CXXLD_OPTS
+
+######################################################
+# <end CFLAGS.check and CXXFLAGS.check>
+.for c in ${CFLAGS.check}
+. if ${HAVE_CC_OPT.${c:S/=/_/g}:U0} == 1
+MKC_CFLAGS += ${c:S/__/ /g}
+. endif
+.endfor
+.undef CFLAGS.check
+
+.for c in ${CXXFLAGS.check}
+. if ${HAVE_CXX_OPT.${c:S/=/_/g}:U0} == 1
+MKC_CXXFLAGS += ${c:S/__/ /g}
+. endif
+.endfor
+.undef CXXFLAGS.check
######################################################
# prototype checks
@@ -362,7 +428,7 @@ HAVE_PROTOTYPE.${p} != env ${mkc.environ} mkc_check_decl prototype \
${MKC_PROTOTYPE_FUNC.${p}:Q} ${MKC_PROTOTYPE_HEADERS.${p}}
.endif # !defined(HAVE_PROTOTYPE.${p})
.if ${HAVE_PROTOTYPE.${p}}
-MKC_CFLAGS += -DHAVE_PROTOTYPE_${p:tu}=1
+MKC_CPPFLAGS += -DHAVE_PROTOTYPE_${p:tu}=1
.elif !empty(MKC_REQUIRE_PROTOTYPES:U:M${p})
_fake != env ${mkc.environ} mkc_check_decl -d prototype \
${MKC_PROTOTYPE_FUNC.${p}:Q} ${MKC_PROTOTYPE_HEADERS.${p}}; echo
@@ -376,10 +442,6 @@ MKC_ERR_MSG += "ERROR: prototype test ${p} failed"
######################################################
.else # MKCHECKS == yes
-.for i in ${_MKC_SOURCE_FUNCS}
-MKC_SRCS += ${i} # for changing CLEANFILES
-.endfor
-
.endif # MKCHECKS?
######################################################
diff --git a/mk/mkc.configure.mk b/mk/mkc.configure.mk
index 6afc7a6..5526f27 100644
--- a/mk/mkc.configure.mk
+++ b/mk/mkc.configure.mk
@@ -1,4 +1,4 @@
-# Copyright (c) 2009-2010 by Aleksey Cheusov
+# Copyright (c) 2009-2020 by Aleksey Cheusov
#
# See LICENSE file in the distribution.
############################################################
@@ -6,6 +6,3 @@
.include <mkc.init.mk>
.include <mkc.conf.mk>
.include <mkc_imp.conf-final.mk>
-
-.PHONY: configure
-configure: errorcheck
diff --git a/mk/mkc.init.mk b/mk/mkc.init.mk
index 4d25853..fa7f53f 100644
--- a/mk/mkc.init.mk
+++ b/mk/mkc.init.mk
@@ -3,7 +3,7 @@
# 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-2014 by Aleksey Cheusov
+# Copyright (c) 2009-2020 by Aleksey Cheusov
#
# See LICENSE file in the distribution.
############################################################
@@ -26,15 +26,6 @@ __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
@@ -55,38 +46,14 @@ 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
-LDREAL ?= ${CXX}
-.elif !empty(_srcsall:U:M*.pas) || !empty(_srcsall:U:M*.p)
-src_type += pas
-LDREAL ?= ${PC}
-.endif
+.include "mkc_imp.compiler_type.mk"
-.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
-
-LDREAL ?= ${CC}
+src_type ?=
-.if defined(PROGS)
LDREAL ?= ${CC}
-.else
-LDREAL ?= ${LD}
-.endif
MKC_CACHEDIR ?= ${.OBJDIR} # directory for cache and intermediate files
-init_make_level ?= 0 # for mkc.conf.mk
-
-.if ${.MAKE.LEVEL} == ${init_make_level}
-SRCTOP ?= ${.CURDIR}
-OBJTOP ?= ${.OBJDIR}
-.export SRCTOP OBJTOP
-.endif
-
###########
PROJECTNAME ?= ${!empty(PROG):?${PROG}:${!empty(LIB):?${LIB}:${.CURDIR:T}}}
@@ -99,12 +66,12 @@ PROJECTNAME ?= ${!empty(PROG):?${PROG}:${!empty(LIB):?${LIB}:${.CURDIR:T}}}
.include "${MKC_SYSCONFDIR}/mk.conf"
.endif
-.if ${OPSYS:Ux} == "SunOS"
-_MKC_USER != /usr/xpg4/bin/id -un
-_MKC_GROUP != /usr/xpg4/bin/id -gn
+.if ${ID} != "@ID@" #empty(MK_C_PROJECT)
+_MKC_USER != ${ID:Uid} -un
+_MKC_GROUP != ${ID:Uid} -gn
.else
-_MKC_USER != id -un
-_MKC_GROUP != id -gn
+_MKC_USER = fake
+_MKC_GROUP = fake
.endif
.if ${_MKC_USER} != root && ${OPSYS}${_MKC_USER} != "InterixAdministrator"
@@ -171,10 +138,6 @@ SCRIPTSOWN ?= ${BINOWN}
SCRIPTSGRP ?= ${BINGRP}
SCRIPTSMODE ?= ${BINMODE}
-COPY ?= -c
-PRESERVE ?=
-STRIPFLAG ?= -s
-
MKINSTALL ?= yes
MKCATPAGES ?= no
@@ -192,7 +155,7 @@ MKRELOBJDIR ?= no
MKINSTALLDIRS ?= yes
-DISTCLEANFILES += ${MKC_CACHEDIR}/_mkc_*
+CLEANDIRFILES += ${MKC_CACHEDIR}/_mkc_*
MKDLL ?= no
.if ${MKDLL:tl} == "only"
@@ -223,56 +186,21 @@ MKSHLIB ?= no
.include <mkc_imp.platform.sys.mk>
-AR ?= ar
-ARFLAGS ?= rl
-RANLIB ?= ranlib
MESSAGE.ar ?= @${_MESSAGE} "AR: ${.TARGET}"
-AS ?= as
-AFLAGS ?=
COMPILE.s ?= ${_V} ${CC_PREFIX} ${CC} ${AFLAGS} -c
MESSAGE.s ?= @${_MESSAGE} "AS: ${.IMPSRC}"
-CC ?= cc
-CFLAGS ?=
-COMPILE.c ?= ${_V} ${CC_PREFIX} ${CC} ${_CPPFLAGS} ${CPPFLAGS_${_PN}} ${CFLAGS} ${_CFLAGS.ssp} ${_CFLAGS.pie} ${CFLAGS.warns} ${CFLAGS_${_PN}} -c
+COMPILE.c ?= ${_V} ${CC_PREFIX} ${CC} ${_CPPFLAGS} ${CPPFLAGS_${_PN}} ${CFLAGS.ssp} ${CFLAGS.pie} ${CFLAGS.warns} ${CFLAGS} ${CFLAGS_${_PN}} -c
MESSAGE.c ?= @${_MESSAGE} "CC: ${.IMPSRC}"
-CXX ?= c++
-CXXFLAGS += ${CFLAGS}
-COMPILE.cc ?= ${_V} ${CXX_PREFIX} ${CXX} ${_CPPFLAGS} ${CPPFLAGS_${_PN}} ${CXXFLAGS} ${_CXXFLAGS.ssp} ${_CXXFLAGS.pie} ${CXXFLAGS.warns} ${CXXFLAGS_${_PN}} -c
+COMPILE.cc ?= ${_V} ${CXX_PREFIX} ${CXX} ${_CPPFLAGS} ${CPPFLAGS_${_PN}} ${CXXFLAGS.ssp} ${CXXFLAGS.pie} ${CXXFLAGS.warns} ${CXXFLAGS} ${CXXFLAGS_${_PN}} -c
MESSAGE.cc ?= @${_MESSAGE} "CXX: ${.IMPSRC}"
-OBJC ?= ${CC}
-OBJCFLAGS ?= ${CFLAGS}
-COMPILE.m ?= ${_V} ${OBJC} ${OBJCFLAGS} ${_CPPFLAGS} -c
-MESSAGE.m ?= @${_MESSAGE} "OBJC: ${.IMPSRC}"
-
-CPP ?= cpp
-CPPFLAGS ?=
-
_CPPFLAGS = ${CPPFLAGS0} ${CPPFLAGS}
-FC ?= f77
-FFLAGS ?= -O
-RFLAGS ?=
-COMPILE.f ?= ${_V} ${FC} ${FFLAGS} -c
-MESSAGE.f ?= @${_MESSAGE} "FC: ${.IMPSRC}"
-COMPILE.F ?= ${_V} ${FC} ${FFLAGS} ${_CPPFLAGS} -c
-MESSAGE.F ?= ${MESSAGE.f}
-COMPILE.r ?= ${_V} ${FC} ${FFLAGS} ${RFLAGS} -c
-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}"
@@ -289,59 +217,25 @@ LN ?= ln
LN_S ?= ${LN} -s
.endif
-LORDER ?= lorder
-
-NM ?= nm
-
-MKDIR ?= mkdir
-
-PC ?= pc
-PFLAGS ?=
-COMPILE.p ?= ${_V} ${PC} ${PFLAGS} ${_CPPFLAGS} -c
-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}"
MESSAGE.mkgen ?= @${_MESSAGE} "MKGEN:"
-TAR ?= tar
-GZIP ?= gzip
-BZIP2 ?= bzip2
-ZIP ?= zip
-
-OBJCOPY ?= objcopy
-
-OBJDUMP ?= objdump
-
-STRIP ?= strip
-
-RM ?= rm
-
TARGETS += all install clean cleandir depend test \
- installdirs uninstall errorcheck filelist obj mkgen
+ installdirs uninstall configure filelist obj mkgen
TARGETS := ${TARGETS:O:u}
-ALLTARGETS += errorcheck all install clean cleandir depend uninstall installdirs \
- mkgen bin_tar bin_targz bin_tarbz2 bin_zip bin_deb
+ALLTARGETS += configure all install clean cleandir depend uninstall installdirs \
+ mkgen bin_tar bin_targz bin_tarbz2 bin_zip bin_deb help help_use help_subprj
VERBOSE_ECHO ?= echo
_PN = ${PROJECTNAME} # short synonym
# Lex
-LPREFIX ?= yy
.if ${LPREFIX} != "yy"
LFLAGS += -P${LPREFIX}
.endif
-LEXLIB ?= -ll
# Yacc
YFLAGS += ${YPREFIX:D-p${YPREFIX}} ${YHEADER:D-d}
@@ -358,7 +252,7 @@ STATICLIBS += ${INTERNALLIBS}
.include "${SRCTOP}/Makefile.common"
.endif
-.if ${SRCTOP:U} != ${.CURDIR} && exists(${.CURDIR}/../Makefile.inc)
+.if ${.MAKE.LEVEL} != ${init_make_level} && exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif
@@ -392,13 +286,13 @@ USE_FORT ?= no
######
.if ${MKPIE:U:tl} == "yes"
LDFLAGS.prog += ${LDFLAGS.pie}
-_CFLAGS.pie += ${CFLAGS.pie}
-_CXXFLAGS.pie += ${CXXFLAGS.pie}
+CFLAGS.pie ?= ${CFLAGS.pie.${CC_TYPE}:U${CFLAGS.pic}}
+CXXFLAGS.pie ?= ${CXXFLAGS.pie.${CXX_TYPE}:U${CXXFLAGS.pic}}
.endif
.if ${USE_SSP:U:tl} == "yes"
-_CFLAGS.ssp = ${CFLAGS.ssp}
-_CXXFLAGS.ssp = ${CXXFLAGS.ssp}
+CFLAGS.ssp ?= ${CFLAGS.ssp.${CC_TYPE}:U}
+CXXFLAGS.ssp ?= ${CXXFLAGS.ssp.${CXX_TYPE}:U}
.endif
.if ${USE_RELRO:U:tl} == "yes"
@@ -424,14 +318,6 @@ _V ?=
###########
-.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
-
###########
.endif # __initialized__
diff --git a/mk/mkc.minitest.mk b/mk/mkc.minitest.mk
index 0d82e26..c4b9c8c 100644
--- a/mk/mkc.minitest.mk
+++ b/mk/mkc.minitest.mk
@@ -24,5 +24,5 @@ test: ${TEST_PREREQS}
echo ' succeeded' 1>&2 || \
{ echo ' FAILED' 1>&2; false; }
-CLEANFILES += ${.OBJDIR}/${.CURDIR:T}.test.out
-#DISTCLEANFILES+= ${.OBJDIR}/${.CURDIR:T}.test.out.tmp
+CLEANFILES += ${_tmp_out}
+#CLEANDIRFILES+= ${.OBJDIR}/${.CURDIR:T}.test.out.tmp
diff --git a/mk/mkc.mk b/mk/mkc.mk
index 3528e5a..f20726d 100644
--- a/mk/mkc.mk
+++ b/mk/mkc.mk
@@ -6,11 +6,10 @@
.ifndef _MKC_MK
_MKC_MK := 1
-init_make_level ?= 0
+.include <mkc_imp.preinit.mk>
.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}/,,}
diff --git a/mk/mkc_imp.arch.mk b/mk/mkc_imp.arch.mk
index 30554ad..cf15616 100644
--- a/mk/mkc_imp.arch.mk
+++ b/mk/mkc_imp.arch.mk
@@ -11,25 +11,25 @@ destdir = ${TMPDIR:U/tmp}/mkc.${rnd}
basefile = ${.CURDIR}/${PROJECTNAME}
bin_cleanup: .PHONY
- set -e; ${RM} -rf ${destdir}; ${MKDIR} -m 0700 ${destdir}; \
+ @set -e; ${RM} -rf ${destdir}; ${MKDIR} -m 0700 ${destdir}; \
${MAKE} ${MAKEFLAGS} all install DESTDIR=${destdir}
realdo_bin_tar: bin_cleanup
- set -e; ${RM} -f ${basefile}.tar; cd ${destdir}; \
+ @set -e; ${RM} -f ${basefile}.tar; cd ${destdir}; \
${TAR} -cf ${basefile}.tar .; cd /; ${RM} -rf ${destdir}
realdo_bin_targz: bin_tar
- ${GZIP} ${basefile}.tar
+ @${GZIP} ${basefile}.tar
realdo_bin_tarbz2: bin_tar
- ${BZIP2} ${basefile}.tar
+ @${BZIP2} ${basefile}.tar
realdo_bin_zip: bin_cleanup
- set -e; ${RM} -f ${basefile}.zip; cd ${destdir}; \
+ @set -e; ${RM} -f ${basefile}.zip; cd ${destdir}; \
${ZIP} -r ${basefile}.zip .; ${RM} -rf ${destdir}
realdo_bin_deb: DEBIAN/control bin_cleanup
- set -e; cp -rp DEBIAN ${destdir}; ${RM} -rf ${destdir}/DEBIAN/CVS; \
+ @set -e; cp -rp DEBIAN ${destdir}; ${RM} -rf ${destdir}/DEBIAN/CVS; \
dpkg-deb -b ${destdir} ${.CURDIR:T:S/_/-/g}.deb; \
${RM} -rf ${destdir}
diff --git a/mk/mkc_imp.checkprogs.mk b/mk/mkc_imp.checkprogs.mk
index da5c168..f1f37ff 100644
--- a/mk/mkc_imp.checkprogs.mk
+++ b/mk/mkc_imp.checkprogs.mk
@@ -17,13 +17,3 @@ MKC_PROG.id.${CC:[1]:S|+|x|g} = cc
MKC_REQUIRE_PROGS += ${CXX:[1]}
MKC_PROG.id.${CXX:[1]:S/+/x/g} = cxx
.endif
-
-.if !empty(_srcsall:U:M*.f) && !empty(FC)
-MKC_REQUIRE_PROGS += ${FC:[1]}
-MKC_PROG.id.${FC:[1]:S/+/x/g} = fc
-.endif
-
-.if !empty(_srcsall:U:M*.p) && !empty(PC)
-MKC_REQUIRE_PROGS += ${PC:[1]}
-MKC_PROG.id.${PC:[1]:S/+/x/g} = pc
-.endif
diff --git a/mk/mkc_imp.compiler_settings.mk b/mk/mkc_imp.compiler_settings.mk
new file mode 100644
index 0000000..9dd7455
--- /dev/null
+++ b/mk/mkc_imp.compiler_settings.mk
@@ -0,0 +1,186 @@
+#################################################
+### C variables
+CFLAGS.dflt.clang = -Qunused-arguments -Werror=implicit-function-declaration
+CFLAGS.dflt.icc = -we147 -we10006 # 147 is required for MKC_CHECK_PROTOTYPES
+CFLAGS.dflt.sunpro = -errtags
+
+CFLAGS.warnerr.gcc = -Werror
+CFLAGS.warnerr.clang = -Werror
+CFLAGS.warnerr.icc = -Werror
+CFLAGS.warnerr.sunpro = -errwarn=%all
+
+CFLAGS.warns.gcc.1 = -Wall -Wstrict-prototypes -Wmissing-prototypes \
+ -Wpointer-arith -Wreturn-type
+CFLAGS.warns.gcc.2 = ${CFLAGS.warns.gcc.1} -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}
+
+CFLAGS.warns.clang.1 = ${CFLAGS.warns.gcc.1}
+CFLAGS.warns.clang.2 = ${CFLAGS.warns.gcc.2}
+CFLAGS.warns.clang.3 = ${CFLAGS.warns.gcc.3}
+CFLAGS.warns.clang.4 = ${CFLAGS.warns.gcc.4}
+
+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}
+
+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
+
+CFLAGS.ssp.gcc = -fstack-protector -Wstack-protector --param__ssp-buffer-size=1
+CFLAGS.ssp.clang = ${CFLAGS.ssp.gcc}
+CFLAGS.ssp.icc = -fstack-security-check
+CFLAGS.ssp.ibmc = -qstackprotect
+
+CFLAGS.pic.gcc = -fPIC__-DPIC
+CFLAGS.pic.clang = -fPIC__-DPIC
+CFLAGS.pic.icc = -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.pie.gcc = -fPIE__-DPIC
+CFLAGS.pie.clang = ${CFLAGS.pie.gcc}
+CFLAGS.pie.icc = -fPIE__-DPIC
+
+LDFLAGS.relro = -Wl,-zrelro__-Wl,-znow
+
+_cc_vars = CFLAGS.dflt.${CC_TYPE} CFLAGS.warnerr.${CC_TYPE} CFLAGS.warns.${CC_TYPE}.1 \
+ CFLAGS.warns.${CC_TYPE}.2 CFLAGS.warns.${CC_TYPE}.3 CFLAGS.warns.${CC_TYPE}.4 \
+ CFLAGS.ssp.${CC_TYPE} CFLAGS.pic.${CC_TYPE} CFLAGS.pie.${CC_TYPE}
+
+LDFLAGS.pie.gcc = -fPIE__-DPIC__-pie
+LDFLAGS.pie.clang = -fPIE__-DPIC__-pie
+
+_ccld_vars = LDFLAGS.pie.${CC_TYPE} LDFLAGS.relro
+
+### C++ variables
+CXXFLAGS.dflt.clang = ${CFLAGS.dflt.clang}
+CXXFLAGS.dflt.icc = ${CFLAGS.dflt.icc}
+
+CXXFLAGS.warnerr.gcc = ${CFLAGS.warnerr.gcc}
+CXXFLAGS.warnerr.clang = ${CXXFLAGS.warnerr.gcc}
+
+CXXFLAGS.warns.gcc.1 = -Wold-style-cast -Wctor-dtor-privacy -Wreturn-type \
+ -Wnon-virtual-dtor -Wreorder -Wno-deprecated \
+ -Wno-non-template-friend -Woverloaded-virtual \
+ -Wno-pmf-conversions -Wsign-promo -Wsynth \
+ -Werror=return-type
+CXXFLAGS.warns.gcc.2 = ${CXXFLAGS.warns.gcc.1} -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}
+
+CXXFLAGS.warns.clang.1 = ${CXXFLAGS.warns.gcc.1}
+CXXFLAGS.warns.clang.2 = ${CXXFLAGS.warns.gcc.2}
+CXXFLAGS.warns.clang.3 = ${CXXFLAGS.warns.gcc.3}
+CXXFLAGS.warns.clang.4 = ${CXXFLAGS.warns.gcc.4}
+
+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}
+
+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}
+
+CXXFLAGS.ssp.gcc = ${CFLAGS.ssp.gcc}
+CXXFLAGS.ssp.clang = ${CFLAGS.ssp.clang}
+CXXFLAGS.ssp.icc = ${CFLAGS.ssp.icc}
+CXXFLAGS.ssp.ibmc = ${CFLAGS.ssp.ibmc}
+
+CXXFLAGS.pic.gcc = ${CFLAGS.pic.gcc}
+CXXFLAGS.pic.clang = ${CFLAGS.pic.clang}
+CXXFLAGS.pic.icc = ${CFLAGS.pic.icc}
+CXXFLAGS.pic.pcc = ${CFLAGS.pic.pcc}
+CXXFLAGS.pic.mipspro = ${CFLAGS.pic.mipspro}
+CXXFLAGS.pic.sunpro = ${CFLAGS.pic.sunpro}
+CXXFLAGS.pic.hpc = ${CFLAGS.pic.hpc}
+CXXFLAGS.pic.ibmc = ${CFLAGS.pic.ibmc}
+CXXFLAGS.pic.decc = ${CFLAGS.pic.decc}
+
+CXXFLAGS.pie.gcc = ${CFLAGS.pie.gcc}
+CXXFLAGS.pie.clang = ${CFLAGS.pie.clang}
+CXXFLAGS.pie.icc = ${CFLAGS.pie.icc}
+
+_cxx_vars = CXXFLAGS.dflt.${CXX_TYPE} CXXFLAGS.warnerr.${CXX_TYPE} \
+ CXXFLAGS.warns.${CXX_TYPE}.1 CXXFLAGS.warns.${CXX_TYPE}.2 \
+ CXXFLAGS.warns.${CXX_TYPE}.3 CXXFLAGS.warns.${CXX_TYPE}.4 \
+ CXXFLAGS.ssp.${CXX_TYPE} CXXFLAGS.pic.${CXX_TYPE} CXXFLAGS.pie.${CXX_TYPE}
+
+_cxxld_vars = LDFLAGS.pie.${CXX_TYPE} LDFLAGS.relro
+
+#################################################
+.for c in cc cxx
+.if !empty(${c:tu})
+. for v in ${_${c}_vars}
+MKC_CHECK_${c:tu}_OPTS += ${${v}}
+. endfor
+. for v in ${_${c}ld_vars}
+MKC_CHECK_${c:tu}LD_OPTS += ${${v}}
+. endfor
+. include <mkc.conf.mk>
+
+. for v in ${_${c}_vars}
+. for _opt in ${${v}}
+. if ${HAVE_${c:tu}_OPT.${_opt:S/=/_/}:U} == 1
+${v}.new += ${_opt:S/__/ /g}
+. endif
+. endfor
+. endfor
+. for v in ${_${c}ld_vars}
+. for _opt in ${${v}}
+. if ${HAVE_${c:tu}LD_OPT.${_opt:S/=/_/}:U} == 1
+${v}.new += ${_opt:S/__/ /g}
+. endif
+. endfor
+. endfor
+
+LDFLAGS.pie.gcc.new := ${LDFLAGS.pie.gcc.new:U:tW:S/-fPIE -DPIC //}
+LDFLAGS.pie.clang.new := ${LDFLAGS.pie.clang.new:U:tW:S/-fPIE -DPIC //}
+
+######
+.ifdef RECURS
+all: post_all
+post_all: mkc_imp.${c}_${${c:tu}_TYPE}-${${c:tu}_VERSION}.mk
+mkc_imp.${c}_${${c:tu}_TYPE}-${${c:tu}_VERSION}.mk: .PHONY # always regenerate!
+ @printf '' > $@.tmp;
+. for v in ${_${c}_vars}
+ @echo ${v} = ${${v}.new} >> $@.tmp;
+. endfor
+ @printf '' >> $@.tmp;
+. for v in ${_${c}ld_vars}
+ @echo ${v} = ${${v}.new} >> $@.tmp;
+. endfor
+ @mv $@.tmp $@
+
+.endif # RECURS
+.endif # !empty(${c:tu}
+.endfor # .for c in cc cxx
+
+#################################################
+USE_CC_COMPILERS ?= ${CC}
+USE_CXX_COMPILERS ?= ${CXX}
+
+.ifndef RECURS
+post_all:
+.for CC in ${USE_CC_COMPILERS:U}
+ @env ${MAKE} ${MAKE_FLAGS} ${COMPILER_SETTINGS_MK:U} all USE_CXX_COMPILERS= \
+ MKCHECKS=yes MKC_NOCACHE=1 RECURS=1 CC=${CC} CXX= src_type=cc
+.endfor # CC
+.for CXX in ${USE_CXX_COMPILERS:U}
+ @env ${MAKE} ${MAKE_FLAGS} ${COMPILER_SETTINGS_MK:U} all USE_CC_COMPILERS= \
+ MKCHECKS=yes MKC_NOCACHE=1 RECURS=1 CC= CXX=${CXX} src_type=cxx
+.endfor # CXX
+.endif # RECURS
diff --git a/mk/mkc_imp.compiler_type.mk b/mk/mkc_imp.compiler_type.mk
new file mode 100644
index 0000000..eb53461
--- /dev/null
+++ b/mk/mkc_imp.compiler_type.mk
@@ -0,0 +1,50 @@
+# Copyright (c) 2020 by Aleksey Cheusov
+
+.if empty(src_type:Mcxx)
+.if !empty(_srcsall:U:M*.cxx) || !empty(_srcsall:U:M*.cpp) || \
+ !empty(_srcsall:U:M*.C) || !empty(_srcsall:U:M*.cc) || \
+ !empty(MKC_CHECK_CXX_OPTS:U) || !empty(MKC_CHECK_CXXLD_OPTS:U)
+src_type += cxx
+LDREAL ?= ${CXX}
+.endif
+.endif
+
+.if empty(src_type:Mcc)
+.if !empty(_srcsall:U:M*.c) || !empty(_srcsall:U:M*.l) || \
+ !empty(_srcsall:U:M*.y) || \
+ !empty(MKC_CHECK_HEADERS:U) || !empty(MKC_REQUIRE_HEADERS:U) || \
+ !empty(MKC_CHECK_HEADER_FILES:U) || !empty(MKC_REQUIRE_HEADER_FILES:U) || \
+ !empty(MKC_CHECK_FUNCLIBS:U) || !empty(MKC_SOURCE_FUNCLIBS:U) || \
+ !empty(MKC_REQUIRE_FUNCLIBS:U) || \
+ !empty(MKC_CHECK_DEFINES:U) || !empty(MKC_REQUIRE_DEFINES:U) || \
+ !empty(MKC_CHECK_TYPES:U) || !empty(MKC_REQUIRE_TYPES:U) || \
+ !empty(MKC_CHECK_VARS:U) || !empty(MKC_REQUIRE_VARS:U) || \
+ !empty(MKC_CHECK_MEMBERS:U) || !empty(MKC_REQUIRE_MEMBERS:U) || \
+ !empty(MKC_CHECK_SIZEOF:U) || \
+ !empty(MKC_CHECK_PROTOTYPES:U) || !empty(MKC_REQUIRE_PROTOTYPES:U) || \
+ !empty(MKC_CHECK_CC_OPTS:U) || !empty(MKC_CHECK_CCLD_OPTS:U) || \
+ !empty(MKC_CHECK_FUNCS1:U) || !empty(MKC_CHECK_FUNCS2:U) || \
+ !empty(MKC_CHECK_FUNCS3:U) || !empty(MKC_CHECK_FUNCS4:U) || \
+ !empty(MKC_CHECK_FUNCS5:U) || !empty(MKC_CHECK_FUNCS6:U) || \
+ !empty(MKC_CHECK_FUNCS7:U) || !empty(MKC_CHECK_FUNCS8:U) || \
+ !empty(MKC_CHECK_FUNCS9:U)
+src_type += cc
+.endif
+.endif
+
+.if empty(src_type:Mcc)
+. for c in ${MKC_CHECK_CUSTOM:U} ${MKC_REQUIRE_CUSTOM:U}
+. if empty(MKC_CUSTOM_FN.${c}) || !empty(MKC_CUSTOM_FN.${c}:M*.c)
+src_type += cc
+. endif
+. endfor
+.endif
+
+.if empty(src_type:Mcxx)
+. for c in ${MKC_CHECK_CUSTOM:U} ${MKC_REQUIRE_CUSTOM:U}
+. if !empty(MKC_CUSTOM_FN.${c}:U:M*.cxx) || !empty(MKC_CUSTOM_FN.${c}:U:M*.cpp) || \
+ !empty(MKC_CUSTOM_FN.${c}:U:M*.C) || !empty(MKC_CUSTOM_FN.${c}:U:M*.cc)
+src_type += cxx
+. endif
+. endfor
+.endif
diff --git a/mk/mkc_imp.conf-cleanup.mk b/mk/mkc_imp.conf-cleanup.mk
index d64e869..aa99c37 100644
--- a/mk/mkc_imp.conf-cleanup.mk
+++ b/mk/mkc_imp.conf-cleanup.mk
@@ -3,7 +3,7 @@
# See LICENSE file in the distribution.
############################################################
-.info "Deprecated single 30 Mar 2019"
+.info "Deprecated since 30 Mar 2019"
.include <mkc.conf.mk>
diff --git a/mk/mkc_imp.dep.mk b/mk/mkc_imp.dep.mk
index 2a37767..d7260e1 100644
--- a/mk/mkc_imp.dep.mk
+++ b/mk/mkc_imp.dep.mk
@@ -1,11 +1,12 @@
-# Copyright (c) 2010-1013 by Aleksey Cheusov
+# Copyright (c) 2010-2013,2020 by Aleksey Cheusov
# Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
######################################################################
.if !defined(_MKC_IMP_DEP_MK) && !empty(_SRCS_ALL)
_MKC_IMP_DEP_MK := 1
-DISTCLEANFILES += .depend ${__DPSRCS.d} ${CLEANDEPEND}
+.MAKE.DEPENDFILE=.depend_${.CURDIR:T}
+CLEANDIRFILES += ${.MAKE.DEPENDFILE} *.d ${CLEANDEPEND}
##### Basic targets
do_depend1 do_depend2: .PHONY # ensure existence
@@ -20,17 +21,17 @@ MKDEP_CC ?= ${CC}
# 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.all = ${_SRCS_ALL:T:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/} \
+ ${DPSRCS:T: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}
do_depend1: ${DPSRCS}
-do_depend2: .depend
+do_depend2: ${.MAKE.DEPENDFILE}
MESSAGE.dep ?= @${_MESSAGE} "DEP: ${.TARGET}"
-.NOPATH: .depend ${__DPSRCS.d}
+.NOPATH: ${.MAKE.DEPENDFILE} ${__DPSRCS.d}
.if !empty(__DPSRCS.d)
${__DPSRCS.d}: ${__DPSRCS.notd} ${DPSRCS}
@@ -45,8 +46,6 @@ ddash=
.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} \
@@ -54,15 +53,13 @@ MKDEP.s = ${MKDEP} -f- ${ddash} ${MKDEPFLAGS} \
.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}
+${.MAKE.DEPENDFILE}: ${__DPSRCS.d}
${MESSAGE.dep}
@${RM} -f ${.TARGET}
.if ${MKDEP_TYPE:U} == "nbmkdep"
@@ -71,16 +68,12 @@ MKDEP.s = ${MKDEP} -f ${.TARGET} ${ddash} ${MKDEPFLAGS} \
@sed 's/^\([^ ]*\)[.]o\(.*\)$$/${MKDEP_SUFFIXES:C,^,\\\\1,}\2/' ${__DPSRCS.d} > ${.TARGET}
.endif
-.SUFFIXES: .d .s .S .c .C .cc .cpp .cxx .m
+.SUFFIXES: .d .s .S .c .C .cc .cpp .cxx
.c.d:
${MESSAGE.dep}
@env CC=${MKDEP_CC:Q} ${MKDEP.c} ${.IMPSRC}
-.m.d:
- ${MESSAGE.dep}
- @${MKDEP.m} ${.IMPSRC}
-
.s.d .S.d:
${MESSAGE.dep}
@env CC=${MKDEP_CC:Q} ${MKDEP.s} ${.IMPSRC}
diff --git a/mk/mkc_imp.files.mk b/mk/mkc_imp.files.mk
index 40c9f53..0088482 100644
--- a/mk/mkc_imp.files.mk
+++ b/mk/mkc_imp.files.mk
@@ -28,7 +28,7 @@ filesinstall: ${destination_files}
.PHONY: ${destination_files}
__fileinstall: .USE
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ ${INSTALL} ${INSTALL_FLAGS} \
-o ${FILESOWN_${.ALLSRC:T}:U${FILESOWN}:Q} \
-g ${FILESGRP_${.ALLSRC:T}:U${FILESGRP}:Q} \
-m ${FILESMODE_${.ALLSRC:T}:U${FILESMODE}} \
diff --git a/mk/mkc_imp.final.mk b/mk/mkc_imp.final.mk
index bdf5872..e63e596 100644
--- a/mk/mkc_imp.final.mk
+++ b/mk/mkc_imp.final.mk
@@ -8,14 +8,17 @@ MKC_IMP.FINAL.MK = 1
.PATH: ${SRC_PATHADD}
+.if !empty(DISTCLEANFILES)
+.warning "DISTCLEANFILES variable is deprecated since 2020-11-19, please use CLEANDIRFILES"
+.endif
+.if !empty(DISTCLEANDIRS)
+.warning "DISTCLEANDIRS variable is deprecated since 2020-11-19, please use CLEANDIRDIRS"
+.endif
+
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};
@@ -40,15 +43,17 @@ mkc_clean: .PHONY
#####
distclean: cleandir
+.PHONY: errorcheck
+errorcheck: configure
realdo_cleandir: mkc_cleandir
mkc_cleandir:
-.if ${CLEANFILES:U} != "" || ${DISTCLEANFILES:U} != ""
- -${CLEANFILES_CMD} ${DISTCLEANFILES} ${CLEANFILES}
+.if ${CLEANFILES:U} != "" || ${CLEANDIRFILES:U} != ""
+ -${CLEANFILES_CMD} ${CLEANDIRFILES} ${CLEANFILES}
.endif
-.if ${CLEANDIRS:U} != "" || ${DISTCLEANDIRS:U} != ""
- -${CLEANDIRS_CMD} ${DISTCLEANDIRS} ${CLEANDIRS}
+.if ${CLEANDIRS:U} != "" || ${CLEANDIRDIRS:U} != ""
+ -${CLEANDIRS_CMD} ${CLEANDIRDIRS} ${CLEANDIRS}
.endif
##########
@@ -58,8 +63,8 @@ ${t}: pre_${t} .WAIT do_${t} .WAIT post_${t}
pre_${t} do_${t} realdo_${t} post_${t}: .PHONY # ensure existence
.if !commands(do_${t})
do_${t}: realdo_${t}
-.endif
-.endfor
+.endif # !command
+.endfor # t
${TARGETS}: .PHONY
diff --git a/mk/mkc_imp.foreign_autotools.mk b/mk/mkc_imp.foreign_autotools.mk
index 052f879..d4d460e 100644
--- a/mk/mkc_imp.foreign_autotools.mk
+++ b/mk/mkc_imp.foreign_autotools.mk
@@ -23,10 +23,11 @@ _FSRCDIR = ${.CURDIR}/${FSRCDIR}
_FSRCDIR = ${FSRCDIR}
.endif
-.if ${.OBJDIR} == ${.CURDIR}
-.OBJDIR = ${_FSRCDIR}
-.endif
+.if defined(MAKEOBJDIR) || defined(MAKEOBJDIRPREFIX)
_FOBJDIR = ${.OBJDIR}
+.else
+_FOBJDIR = ${_FSRCDIR}
+.endif
_CONFIGURE_ARGS = --prefix ${PREFIX:Q} --bindir=${BINDIR:Q} \
--sbindir=${SBINDIR:Q} --libexecdir=${LIBEXECDIR} \
@@ -48,9 +49,9 @@ realdo_mkgen:
${MESSAGE.mkgen}
${_V} ${PROG.autoreconf} ${AT_AUTORECONF_ARGS} ${_FSRCDIR}
-realdo_errorcheck: check_mkc_err_msg .WAIT at_do_errorcheck
+realdo_configure: check_mkc_err_msg .WAIT at_do_configure
-at_do_errorcheck: .PHONY
+at_do_configure: .PHONY
${MESSAGE.atconf}
${_V} cd ${_FOBJDIR}; env ${_CONFIGURE_ENV} ${_FSRCDIR}/configure ${_CONFIGURE_ARGS}
@@ -61,18 +62,19 @@ at_do_${i}: .PHONY
${_V} set -e; \
cd ${_FOBJDIR}; \
if test -f Makefile; then \
- env ${_AT_MAKE_ENV} ${AT_MAKE:S/^$$/false/} ${AT_MAKEFLAGS} ${.TARGET:S/^at_do_//:S/cleandir/distclean/}; \
+ env ${_AT_MAKE_ENV} ${AT_MAKE:S/^$$/false/} ${AT_MAKEFLAGS} \
+ MAKE=${AT_MAKE} ${.TARGET:S/^at_do_//:S/cleandir/distclean/}; \
fi
.endfor
-DISTCLEANDIRS += ${_FSRCDIR}/autom4te.cache
-DISTCLEANFILES += ${_FSRCDIR}/aclocal.m4 ${_FOBJDIR}/config.log \
+CLEANDIRDIRS += ${_FSRCDIR}/autom4te.cache
+CLEANDIRFILES += ${_FSRCDIR}/aclocal.m4 ${_FOBJDIR}/config.log \
${_FOBJDIR}/config.status ${_FSRCDIR}/configure ${_FSRCDIR}/depcomp \
${_FSRCDIR}/INSTALL ${_FSRCDIR}/install-sh ${_FOBJDIR}/Makefile \
${_FSRCDIR}/missing ${_FSRCDIR}/compile ${_FOBJDIR}/stamp-h1
.if ${AT_USE_AUTOMAKE:tl:U} == yes
-DISTCLEANFILES += ${_FSRCDIR}/Makefile.in
+CLEANDIRFILES += ${_FSRCDIR}/Makefile.in
MKC_REQUIRE_PROGS += automake
.endif
diff --git a/mk/mkc_imp.help.mk b/mk/mkc_imp.help.mk
new file mode 100644
index 0000000..f25cb23
--- /dev/null
+++ b/mk/mkc_imp.help.mk
@@ -0,0 +1,85 @@
+# Copyright (c) 2020 by Aleksey Cheusov
+#
+# See LICENSE file in the distribution.
+############################################################
+
+.ifndef _MKC_IMP_HELP_MK
+_MKC_IMP_HELP_MK := 1
+
+.if !commands(do_help)
+.PHONY: do_help
+do_help: help_use .WAIT help_subprj
+.endif # !commands(do_help)
+
+.for p in ${SUBPRJ:S/:/ /Wg:O:u}
+. if empty(SUBPRJ_DFLT:M${p}) && empty(HELP_MSG.${p})
+_projects_to_list += ${p}
+. endif
+.endfor
+
+do_help_subprj: .PHONY
+.ifdef SUBPRJ
+ @echo "${PROJECTNAME} provides the following subprojects."
+ @echo " Enabled by default:"
+. for p in ${SUBPRJ_DFLT:S/:/ /Wg:O:u}
+. if ${p} != "$COMPATLIB"
+. if exists(${p}/Makefile)
+ @printf ' - '
+. else
+ @printf ' + '
+. endif
+ @printf "%-20s: %s\n" ${p} ${HELP_MSG.${p}:U}
+. endif
+. endfor
+ @echo " Others:"
+. for p in ${SUBPRJ:S/:/ /Wg:O:u}
+. if empty(SUBPRJ_DFLT:M${p}) && !empty(HELP_MSG.${p})
+. if exists(${p}/Makefile)
+ @printf ' - '
+. else
+ @printf ' + '
+. endif
+ @printf "%-20s: %s\n" ${p} ${HELP_MSG.${p}:U}
+. endif
+. endfor
+.if !empty(_projects_to_list)
+ @printf " "
+. for p in ${_projects_to_list}
+ @printf " %s" ${p:Q}
+. endfor
+ @printf "\n"
+.endif
+ @printf "\n"
+.endif # SUBPRJS
+
+do_help_use: .PHONY
+.if empty(USE_VARIABLES)
+ @echo "${PROJECTNAME} does not provide any special USE_* variables."
+ @echo "So, there is nothing to configure in a special way."
+ @echo ""
+.else
+ @echo "There are the following variables you may use to configure ${PROJECTNAME}:"
+. for v in ${USE_VARIABLES}
+. if !empty(${v}.descr)
+ @echo " * "${v:Q}" ("${${v}.descr}")"
+. else
+ @echo " * "${v:Q}
+. endif
+. if !empty(${v}.0)
+ @echo " - "${${v}.0}" (the default)"
+. endif
+. for n in 1 2 3 4 5 6 7 8 9 10
+. if !empty(${v}.${n})
+ @echo " - "${${v}.${n}}
+. endif
+. endfor # n
+. endfor # USE_VARIABLES
+ @printf "\n"
+.endif # USE_VARIABLES
+
+do_help_nl: .PHONY
+ @echo ''
+
+.undef _projects_to_list
+
+.endif # _MKC_IMP_HELP_MK
diff --git a/mk/mkc_imp.inc.mk b/mk/mkc_imp.inc.mk
index d6f46ff..c05d443 100644
--- a/mk/mkc_imp.inc.mk
+++ b/mk/mkc_imp.inc.mk
@@ -22,7 +22,7 @@ incinstall: ${destination_incs}
.PHONY: ${destination_incs}
__incinstall: .USE
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ ${INSTALL} ${INSTALL_FLAGS} \
-o ${BINOWN:Q} \
-g ${BINGRP:Q} -m ${NONBINMODE} ${.ALLSRC} ${.TARGET}
diff --git a/mk/mkc_imp.info.mk b/mk/mkc_imp.info.mk
index 7d3976d..e93cb5c 100644
--- a/mk/mkc_imp.info.mk
+++ b/mk/mkc_imp.info.mk
@@ -44,7 +44,7 @@ infoinstall: ${destination_infos}
.PHONY: ${destination_infos}
__infoinstall: .USE
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${INSTPRIV} \
+ ${INSTALL} ${INSTALL_FLAGS} \
-o ${INFOOWN_${.ALLSRC:T}:U${INFOOWN}:Q} \
-g ${INFOGRP_${.ALLSRC:T}:U${INFOGRP}:Q} \
-m ${INFOMODE_${.ALLSRC:T}:U${INFOMODE}} \
diff --git a/mk/mkc_imp.intexts.mk b/mk/mkc_imp.intexts.mk
index f733874..d88b4ec 100644
--- a/mk/mkc_imp.intexts.mk
+++ b/mk/mkc_imp.intexts.mk
@@ -25,7 +25,7 @@ INTEXTS_SED += -e 's,@incsdir@,${INCSDIR},g'
INTEXTS_SED += -e 's,@vardir@,${VARDIR},g'
INTEXTS_SED += -e 's,@sharedstatedir@,${SHAREDSTATEDIR},g'
-.if !make(clean) && !make(cleandir) && !make(distclean) #&& empty(MKC_ERR_MSG)
+.if ${MKCHECKS} == "yes"
. if !empty(INTEXTS_REPLS) && ${INTEXTS_REPLS:[\#]:M*[13579]} != ""
MKC_ERR_MSG += "ERROR: odd number of tokens in INTEXTS_REPLS"
. else
diff --git a/mk/mkc_imp.lib.mk b/mk/mkc_imp.lib.mk
index 3ffc240..b7ef973 100644
--- a/mk/mkc_imp.lib.mk
+++ b/mk/mkc_imp.lib.mk
@@ -26,15 +26,12 @@ UNINSTALLFILES += ${UNINSTALLFILES.lib}
# 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.
-FFLAGS += ${FOPTS}
-
OBJS += ${SRCS:N*.h:N*.sh:T:R:S/$/.o/g}
SOBJS = ${OBJS:.o=.os}
POBJS = ${OBJS:.o=.op}
@@ -77,7 +74,7 @@ __archivebuild: .USE
${RANLIB} ${.TARGET}
__archiveinstall: .USE
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} -o ${LIBOWN:Q} \
+ ${INSTALL} ${INSTALL_FLAGS} -o ${LIBOWN:Q} \
-g ${LIBGRP:Q} -m ${LIBMODE} ${.ALLSRC} ${.TARGET}
DPSRCS += ${SRCS:M*.l:.l=.c} ${SRCS:M*.y:.y=.c}
@@ -108,8 +105,7 @@ ${SHLIBFN}: ${SOBJS} ${DPADD}
.endif # ELF
.endif # !commands(...)
-CLEANFILES += \
- ${OBJS} ${POBJS} ${SOBJS}
+CLEANFILES += *.o *.os *.op
.if !target(libinstall)
# Make sure it gets defined
@@ -164,7 +160,7 @@ CLEANFILES += ${SHLIBFN}
.endif
${DESTDIR}${LIBDIR}/${SHLIBFN}: ${SHLIBFN}
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} -o ${LIBOWN:Q} \
+ ${INSTALL} ${INSTALL_FLAGS} -o ${LIBOWN:Q} \
-g ${LIBGRP:Q} -m ${SHLIBMODE} ${.ALLSRC} ${.TARGET}
.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) && ${MKDLL:tl} == "no"
/sbin/ldconfig -m ${LIBDIR}
diff --git a/mk/mkc_imp.man.mk b/mk/mkc_imp.man.mk
index c66f056..9bc45c6 100644
--- a/mk/mkc_imp.man.mk
+++ b/mk/mkc_imp.man.mk
@@ -76,7 +76,7 @@ CLEANFILES += ${CATPAGES}
HTMLPAGES = ${MANPAGES:C/(.*).([1-9])/\1.html\2/}
.endif
-MINSTALL = ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+MINSTALL = ${INSTALL} ${INSTALL_FLAGS} \
-o ${MANOWN:Q} -g ${MANGRP:Q} -m ${MANMODE}
.if defined(MANZ)
diff --git a/mk/mkc_imp.mk b/mk/mkc_imp.mk
index dfe89bd..4a59d25 100644
--- a/mk/mkc_imp.mk
+++ b/mk/mkc_imp.mk
@@ -4,6 +4,10 @@
############################################################
.include <mkc_imp.preinit.mk>
+.if make(distclean)
+.warning "Target 'distclean' is deprecated, please use 'cleandir'"
+.endif
+
.ifdef SUBDIR
SUBPRJ = ${SUBDIR}
.endif
@@ -12,8 +16,10 @@
.include <mkc_imp.pod.mk>
.include <mkc.init.mk>
+.if ${MKCHECKS:tl} == "yes"
.ifdef AXCIENT_LIBDEPS # This feature was proposed by axcient.com developers
-all_deps != mkc_get_deps ${.CURDIR:S,^${SUBPRJSRCTOP}/,,}
+CHECK_COMMON_SH_DIR ?= ${MKC_LIBEXECDIR}
+all_deps != ${CHECK_COMMON_SH_DIR}/mkc_get_deps ${.CURDIR:S,^${SUBPRJSRCTOP}/,,}
. for p in ${all_deps}
_mkfile = ${SUBPRJSRCTOP}/${p}/linkme.mk
. if exists(${_mkfile})
@@ -25,6 +31,7 @@ all_deps != mkc_get_deps ${.CURDIR:S,^${SUBPRJSRCTOP}/,,}
. include <mkc_imp.dpvars.mk>
. endfor
.endif
+.endif
.if defined(LIBDEPS)
SUBPRJ += ${LIBDEPS} # library dependencies
@@ -61,9 +68,7 @@ realdo_uninstall:
-${UNINSTALL} ${UNINSTALLFILES}
realdo_installdirs:
- for d in _ ${INSTALLDIRS:O:u:S|/.$||}; do \
- test "$$d" = _ || ${INSTALL} -d -m ${DIRMODE} "$$d"; \
- done
+ ${INSTALLDIRS:@D@${INSTALL} ${INSTALL_FLAGS} -d -m ${DIRMODE} ${D}; @}
filelist:
@for d in ${UNINSTALLFILES:O:u}; do \
@@ -100,8 +105,8 @@ check_mkc_err_msg:
exit $$ex; \
fi
-all: pre_errorcheck .WAIT do_errorcheck .WAIT post_errorcheck .WAIT pre_all .WAIT do_all .WAIT post_all
-realdo_errorcheck: check_mkc_err_msg
+all: pre_configure .WAIT do_configure .WAIT post_configure .WAIT pre_all .WAIT do_all .WAIT post_all
+realdo_configure: check_mkc_err_msg
.include <mkc_imp.checkprogs.mk>
.include <mkc.conf.mk>
@@ -112,9 +117,9 @@ realdo_errorcheck: check_mkc_err_msg
.endfor
.include <mkc.conf.mk>
.include <mkc_imp.conf-final.mk>
-CFLAGS += ${MKC_FEATURES:D-I${FEATURESDIR}}
+CPPFLAGS += ${MKC_FEATURES:D-I${FEATURESDIR}}
-.if !defined(MKC_ERR_MSG) || make(clean) || make(cleandir) || make(distclean)
+.if !defined(MKC_ERR_MSG) || ${MKCHECKS} == "no"
. if defined(LIB)
. include <mkc_imp.lib.mk>
@@ -141,6 +146,7 @@ CFLAGS += ${MKC_FEATURES:D-I${FEATURESDIR}}
########################################
. include <mkc_imp.arch.mk>
+. include <mkc_imp.help.mk>
.endif # MKC_ERR_MSG
diff --git a/mk/mkc_imp.pkg-config.mk b/mk/mkc_imp.pkg-config.mk
index 1c94bf0..abcc5da 100644
--- a/mk/mkc_imp.pkg-config.mk
+++ b/mk/mkc_imp.pkg-config.mk
@@ -7,7 +7,7 @@
MKC_CHECK_PKGCONFIG += ${MKC_REQUIRE_PKGCONFIG}
.endif
-.if defined(MKC_CHECK_PKGCONFIG) && !make(clean) && !make(cleandir) && !make(distclean)
+.if defined(MKC_CHECK_PKGCONFIG) && ${MKCHECKS} == "yes"
MKC_REQUIRE_PROGS+= pkg-config
.include <mkc.conf.mk>
@@ -21,21 +21,21 @@ _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}"
+ -s -t pkgconfig_${_ln:Q} -m '[pkg-config] '${_lp:Q} \
+ ${PROG.pkg-config} --print-errors --exists ${_lp:Q}
.if ${PKG_CONFIG.exists.${_ln}}
# --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' \
+ -t pkgconfig_${_ln:Q}_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' \
+ -t pkgconfig_${_ln:Q}_libs -m '[pkg-config] ${_lp} --libs' \
${PROG.pkg-config} --libs "${_lp}"
.endif # LDADD.pkg-config.${l}
@@ -46,12 +46,12 @@ MKC_LDADD := ${MKC_LDADD} ${LDADD.pkg-config.${_ln}}
.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}' \
+ -t pkgconfig_${_ln:Q}_${i:Q} -m '[pkg-config] ${_lp} --variable=${i}' \
${PROG.pkg-config} --variable=${i} "${_lp}"
.endif # PKG_CONFIG.var.${_ln}.${i}
.endfor # i
-MKC_CFLAGS := ${MKC_CFLAGS} -DHAVE_PKGCONFIG_${_id:S/-/_/g:S/+/P/g:S/./_/g}=1
+MKC_CPPFLAGS := ${MKC_CPPFLAGS} -DHAVE_PKGCONFIG_${_id:S/-/_/g:S/+/P/g:S/./_/g}=1
.elif !empty(MKC_REQUIRE_PKGCONFIG:M${l})
MKC_ERR_MSG := ${MKC_ERR_MSG} "%%%: ${MKC_CACHEDIR}/_mkc_pkgconfig_${_ln}.err"
@@ -73,4 +73,4 @@ MKC_ERR_MSG := ${MKC_ERR_MSG} "%%%: ${MKC_CACHEDIR}/_mkc_pkgconfig_${_ln}.err"
.endif # HAVE_PROG.pkg-config
-.endif # !make(clean) && !make(cleandir) && !make(distclean)
+.endif # ${MKCHECKS} == "yes" && ...
diff --git a/mk/mkc_imp.platform.sys.mk b/mk/mkc_imp.platform.sys.mk
index a22a46b..642c49d 100644
--- a/mk/mkc_imp.platform.sys.mk
+++ b/mk/mkc_imp.platform.sys.mk
@@ -10,6 +10,12 @@
.ifndef _MKC_PLATFORM_MK
_MKC_PLATFORM_MK := 1
+.ifdef MK_C_PROJECT
+_MKFILESDIR = ${MK_C_PROJECT}/mk
+.else
+_MKFILESDIR = ${MKFILESDIR}
+.endif
+
####################
# cross tools
.ifdef SYSROOT
@@ -49,20 +55,7 @@ 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
-
####################
-
CC.SunOS = cc
CXX.SunOS = CC
@@ -102,143 +95,49 @@ 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) || defined(MKC_CHECK_PROTOTYPES))
-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
-.endif
-.if !empty(src_type:Mcxx)
-CXX_TYPE != env ${mkc.cc_type.environ} mkc_check_compiler -x
-.endif # src_type
+.if ${MKCHECKS} == "no"
+.elif ${MKCHECKS:Uno:tl} == "yes"
+mkc.cc_type.environ = CC=${CC:Q} CXX=${CXX:Q} CPPFLAGS=${CPPFLAGS:Q} CFLAGS=${CFLAGS:Q} LDFLAGS=${LDFLAGS:Q} LDADD=${LDADD:Q} MKC_CACHEDIR=${MKC_CACHEDIR:Q} MKC_DELETE_TMPFILES=${MKC_DELETE_TMPFILES:Q} MKC_SHOW_CACHED=${MKC_SHOW_CACHED:Q} MKC_NOCACHE=${MKC_NOCACHE:Q} MKC_VERBOSE=1
+. for c in ${src_type}
+_full_type != env ${mkc.cc_type.environ} mkc_check_compiler ${"${c}" == "cxx":?-x:}
+${c:tu}_TYPE := ${_full_type:[1]}
+${c:tu}_VERSION := ${_full_type:[2]}
+. undef _full_type
+_mkfile=mkc_imp.${c}_${${c:tu}_TYPE}-${${c:tu}_VERSION}.mk
+. if exists(${HOME}/.mk-c/${_mkfile})
+. include <${HOME}/.mk-c/${_mkfile}>
+. elif exists(${_MKFILESDIR}/${_mkfile})
+. include <${_MKFILESDIR}/${_mkfile}>
+. elif !defined(MK_C_PROJECT) && empty(compiler_settings)
+. error 'Settings for ${${c:tu}_TYPE}-${${c:tu}_VERSION} is not available, run "mkc_compiler_settings" utility'
+. endif # exists(...)
+. undef _mkfile
+. endfor # .for c in ${src_type}
.endif # cleandir|distclean|...
CC_TYPE ?= unknown
CXX_TYPE ?= unknown
-####################
-# Default compiler-specific options
-
-# C
-CFLAGS.dflt.clang = -Qunused-arguments -Werror=implicit-function-declaration
-CFLAGS.dflt.icc = -we147 # 147 is required for MKC_CHECK_PROTOTYPES
-
-CFLAGS += ${CFLAGS.dflt.${CC_TYPE}}
+CC_VERSION ?= 0
+CXX_VERSION ?= 0
-# C++
-CXXFLAGS.dflt.clang = ${CFLAGS.dflt.clang}
-CXXFLAGS.dflt.icc = ${CFLAGS.dflt.icc}
-
-CXXFLAGS += ${CXXFLAGS.dflt.${CXX_TYPE}}
+# C/C++ default flags
+CFLAGS += ${CFLAGS.dflt.${CC_TYPE}}
+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:S/4/yes/}
+WARNERR ?= ${WARNS:U0:S/4/yes/}
CFLAGS.warnerr = ${${WARNERR:tl} == "yes":?${CFLAGS.warnerr.${CC_TYPE}}:}
-CXXFLAGS.warnerr = ${${WARNERR:tl} == "yes":?${CFLAGS.warnerr.${CXX_TYPE}}:}
-
-####################
-# 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.warns = ${CFLAGS.warns.${CC_TYPE}.${WARNS}} ${CFLAGS.warnerr}
-CXXFLAGS.warns = ${CXXFLAGS.warns.${CXX_TYPE}.${WARNS}} ${CXXFLAGS.warnerr}
-
-####################
-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}}
+CXXFLAGS.warnerr = ${${WARNERR:tl} == "yes":?${CXXFLAGS.warnerr.${CXX_TYPE}}:}
-####################
-CFLAGS.pie.gcc.Interix =
-CFLAGS.pie.gcc = -fPIE -DPIC
-CFLAGS.pie.icc = -fPIE -DPIC
-CFLAGS.pie.clang = -fPIE -DPIC
+CFLAGS.warns = ${CFLAGS.warns.${CC_TYPE}.${WARNS}} ${CFLAGS.warnerr}
+CXXFLAGS.warns = ${CXXFLAGS.warns.${CXX_TYPE}.${WARNS}} ${CXXFLAGS.warnerr}
-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.${CXX_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}}
+CFLAGS.pic ?= ${CFLAGS.pic.${CC_TYPE}:U}
+CXXFLAGS.pic ?= ${CXXFLAGS.pic.${CXX_TYPE}:U}
####################
RANLIB.IRIX64 = true
@@ -330,10 +229,7 @@ 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}
+.if ${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}
@@ -341,26 +237,6 @@ LDFLAGS.shared ?= ${LDFLAGS.shared.${CXX_TYPE}.${TARGET_OPSYS}:U${LDFLAGS.share
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"
@@ -441,11 +317,9 @@ 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})
+.if defined(LDFLAGS.expsym.${LD_TYPE})
LDFLAGS.expsym ?= ${LDFLAGS.expsym.${LD_TYPE}:S/^/-Wl,/}
-.endif # LDREAL == LD
+.endif
############################################################
############################################################
diff --git a/mk/mkc_imp.preinit.mk b/mk/mkc_imp.preinit.mk
index 4b0cc8c..ff5e3c3 100644
--- a/mk/mkc_imp.preinit.mk
+++ b/mk/mkc_imp.preinit.mk
@@ -9,14 +9,29 @@
####################
BMAKE_REQD ?= 20110606
+CLEANDIRFILES += ${DISTCLEANFILES}
+CLEANDIRDIRS += ${DISTCLEANDIRS}
+
.if !empty(MAKE_VERSION:U)
_bmake_ok != test ${MAKE_VERSION:Q} -ge ${BMAKE_REQD:Q} && echo 1 || echo 0
.else
-_bmake_ok = 0
+.error "ERROR: bmake does not provide MAKE_VERSION variable"
.endif
.if !${_bmake_ok}
-.error "bmake-${BMAKE_REQD} or newer is required"
+.error "ERROR: bmake-${BMAKE_REQD} or newer is required, but bmake-${MAKE_VERSION} is provided"
+.endif
+
+.if !empty(MK_C_PROJECT)
+.sinclude <newsys.mk> # .sinclude for bootstrapping
+.sinclude <newsys.mk.in> # .sinclude for bootstrapping
+.endif
+
+.if defined(MKC_REQD) && defined(MKC_VERSION)
+_mkc_version_ok != mkc_check_version ${MKC_REQD} ${MKC_VERSION}
+.if !${_mkc_version_ok}
+.error "ERROR: mk-configure-${MKC_REQD} is required but ${MKC_VERSION} is provided"
+.endif
.endif
.ifdef _top_mk
@@ -28,10 +43,16 @@ _bmake_ok = 0
.endif
####################
-.if !make(clean) && !make(cleandir) && !make(distclean) && !make(obj)
+.if !make(clean) && !make(cleandir) && !make(distclean) && !make(obj) && !make(help)
MKCHECKS ?= yes
.else
MKCHECKS ?= no
.endif # clean/cleandir/distclean
+init_make_level ?= 0
+.if ${.MAKE.LEVEL} == ${init_make_level}
+SRCTOP ?= ${.CURDIR}
+OBJTOP ?= ${.OBJDIR}
+.endif
+
.endif # _MKC_IMP.PREINIT.MK
diff --git a/mk/mkc_imp.prog.mk b/mk/mkc_imp.prog.mk
index 8982d11..c282026 100644
--- a/mk/mkc_imp.prog.mk
+++ b/mk/mkc_imp.prog.mk
@@ -13,7 +13,7 @@ _MKC_IMP_PROG_MK := 1
proginstall: .PHONY # ensure existence
__proginstall: .USE
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${STRIPFLAG} \
+ ${INSTALL} ${INSTALL_FLAGS} ${STRIPFLAG} \
-o ${BINOWN:Q} -g ${BINGRP:Q} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
.for p in ${PROGS}
@@ -64,10 +64,12 @@ proginstall: ${dest_prog.${p}}
${DESTDIR}${BINDIR}/${PROGNAME.${p}}: ${p} __proginstall
-CLEANFILES += ${OBJS.${p}}
-
.endfor # ${PROGS}
+.if !empty(PROGS)
+CLEANFILES += *.o
+.endif
+
realdo_all: ${PROGS}
CLEANFILES += ${PROGS}
diff --git a/mk/mkc_imp.rules.mk b/mk/mkc_imp.rules.mk
index 53543b0..aff7930 100644
--- a/mk/mkc_imp.rules.mk
+++ b/mk/mkc_imp.rules.mk
@@ -2,7 +2,7 @@
#
# See LICENSE file in the distribution.
############################################################
-.SUFFIXES: .a .o .op .os .s .S .c .cc .cpp .cxx .C .F .f .r .m .y .l .cl .p .h
+.SUFFIXES: .a .o .op .os .s .S .c .cc .cpp .cxx .C .y .l .cl .p .h
.LIBS: .a
@@ -21,39 +21,13 @@
# C++
.cc.o .cpp.o .cxx.o .C.o:
${MESSAGE.cc}
- ${COMPILE.cc} -o ${.TARGET} ${COPTS} ${COPTS_${_PN}} ${.IMPSRC}
+ ${COMPILE.cc} -o ${.TARGET} ${CXXOPTS} ${CXXOPTS_${_PN}} ${.IMPSRC}
.cc.op .cpp.op .cxx.op .C.op:
${MESSAGE.cc}
- ${COMPILE.cc} -o ${.TARGET} ${COPTS} ${COPTS_${_PN}} -pg ${.IMPSRC}
+ ${COMPILE.cc} -o ${.TARGET} ${CXXOPTS} ${CXXOPTS_${_PN}} -pg ${.IMPSRC}
.cc.os .cpp.os .cxx.os .C.os:
${MESSAGE.cc}
- ${COMPILE.cc} ${CXXFLAGS.pic} -o ${.TARGET} ${COPTS} ${COPTS_${_PN}} ${.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}
+ ${COMPILE.cc} ${CXXFLAGS.pic} -o ${.TARGET} ${CXXOPTS} ${CXXOPTS_${_PN}} ${.IMPSRC}
# Assembly
.S.o .s.o:
@@ -66,17 +40,6 @@
${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
.l.c:
${MESSAGE.l}
diff --git a/mk/mkc_imp.scripts.mk b/mk/mkc_imp.scripts.mk
index 1d53b48..edd8c64 100644
--- a/mk/mkc_imp.scripts.mk
+++ b/mk/mkc_imp.scripts.mk
@@ -27,7 +27,7 @@ scriptsinstall: ${destination_scripts}
.PHONY: ${destination_scripts}
__scriptinstall: .USE
- ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} \
+ ${INSTALL} ${INSTALL_FLAGS} \
-o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}:Q} \
-g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}:Q} \
-m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
diff --git a/mk/mkc_imp.subprj.mk b/mk/mkc_imp.subprj.mk
index 73c5649..f5da1f4 100644
--- a/mk/mkc_imp.subprj.mk
+++ b/mk/mkc_imp.subprj.mk
@@ -10,7 +10,7 @@
.if !defined(_MKC_IMP_SUBPRJ_MK)
_MKC_IMP_SUBPRJ_MK := 1
-EXPORT_VARNAMES += STATICLIBS COMPATLIB
+EXPORT_VARNAMES += STATICLIBS COMPATLIB SRCTOP OBJTOP
.for dir in ${SUBPRJ:S/:/ /g}
.if empty(NOSUBDIR:U:M${dir})
@@ -91,6 +91,14 @@ EXPORT_VARNAMES += SRCDIR_${dir:S,/,_,g}
_ALLTARGDEPS += all-${dir}:${dir}
.endfor # dir
+.for dir in ${__REALSUBPRJ}
+errorcheck-${dir}: configure-${dir}
+do_errorcheck-${dir}: do_configure-${dir}
+pre_errorcheck-${dir}: pre_configure-${dir}
+post_errorcheck-${dir}: post_configure-${dir}
+nodeps-errorcheck-${dir}: nodeps-configure-${dir}
+.endfor
+
.for excl in ${NODEPS}
_ALLTARGDEPS := ${_ALLTARGDEPS:N${excl}}
.endfor # excl
diff --git a/mk/mkc_imp.vars.mk.in b/mk/mkc_imp.vars.mk.in
deleted file mode 100644
index 6bfdcc1..0000000
--- a/mk/mkc_imp.vars.mk.in
+++ /dev/null
@@ -1,9 +0,0 @@
-MKC_VERSION = @version@
-BUILTINSDIR ?= @syscustomdir@
-FEATURESDIR ?= @featuresdir@
-MKC_LIBEXECDIR = @mkc_libexecdir@
-MKC_SYSCONFDIR = @sysconfdir@
-MKDEP = @mkdep_cmd@
-MKDEP_TYPE = @mkdep_type@
-MAKEDEPEND = @makedepend_cmd@
-NM = @NM@
diff --git a/mk/newsys.mk.in b/mk/newsys.mk.in
new file mode 100644
index 0000000..08101eb
--- /dev/null
+++ b/mk/newsys.mk.in
@@ -0,0 +1,96 @@
+# This file is a system-wide default configuration file for mk-configure.
+#
+# 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
+# ...
+
+#.SHELL: name=sh path=@SH@
+
+MKC_VERSION ?= @version@
+
+BUILTINSDIR ?= @syscustomdir@
+
+.ifdef MK_C_PROJECT
+# for mk-configure testing only
+CHECK_COMMON_SH_DIR = ${MK_C_PROJECT}/scripts
+EXPORT_VARNAMES += CHECK_COMMON_SH_DIR
+_BUILTINSDIR = ${MK_C_PROJECT}/builtins
+.endif
+FEATURESDIR ?= @featuresdir@
+MKFILESDIR = @mkfilesdir@
+MKC_LIBEXECDIR ?= @mkc_libexecdir@
+MKC_SYSCONFDIR ?= @sysconfdir@
+
+MKDEP ?= @mkdep_cmd@
+MKDEP_TYPE ?= @mkdep_type@
+MAKEDEPEND ?= @makedepend_cmd@
+
+NM ?= @NM@
+ID ?= @ID@
+LORDER ?= lorder
+
+MKDIR ?= mkdir
+
+INSTALL ?= @install@
+INSTALL_FLAGS ?= -c
+
+SHELL ?= sh
+
+SIZE ?= size
+
+TSORT ?= tsort -q
+
+TAR ?= tar
+GZIP ?= gzip
+BZIP2 ?= bzip2
+ZIP ?= zip
+
+OBJCOPY ?= objcopy
+
+OBJDUMP ?= objdump
+
+STRIP ?= strip
+STRIPFLAG ?= -s
+
+RM ?= rm
+
+YACC ?= yacc
+YFLAGS ?=
+
+LEX ?= lex
+LFLAGS ?=
+LPREFIX ?= yy
+LEXLIB ?= -ll
+
+AR ?= ar
+ARFLAGS ?= rl
+RANLIB ?= ranlib
+
+AS ?= as
+AFLAGS ?=
+
+CC ?= cc
+CFLAGS ?=
+
+CXX ?= c++
+
+CPP ?= cpp
+CPPFLAGS ?=
+
+CLEANFILES_CMD ?= ${RM} -f
+CLEANDIRS_CMD ?= ${RM} -rf
+
+UNINSTALL ?= ${RM} -f
diff --git a/mk/sys.mk b/mk/sys.mk
index 0e6f63e..56b363e 100644
--- a/mk/sys.mk
+++ b/mk/sys.mk
@@ -1,22 +1,2 @@
-#
-# 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
-# ...
+# This file is only for bmake, and is not a part of mk-configure.
+# So, do not edit it.