diff options
author | Andrej Shadura <andrewsh@debian.org> | 2020-11-27 12:21:46 +0100 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2020-11-27 12:21:46 +0100 |
commit | 2948077f55958203ddf8aae1d844d86e97e5beba (patch) | |
tree | c2f71d37e811ef37f78f27cb59c00d991655026e /mk | |
parent | b2cb3f0763ea0f96008b0c5a289a7d2cdc7f80c3 (diff) |
New upstream version 0.35.0
Diffstat (limited to 'mk')
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 @@ -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 @@ -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. |