Build infrastructure for mk-c itself was completely reimplemented.
Now it looks much better and is more flexible for further extensions.
NetBSD version of mkdep(1), traditional BSD mkdep(1) or
makedepend(1) is needed at build time.
LDCOMPILER defaults to "yes".
Variable TARGETS is now visible to users and is documented. It
contains all recursive targets and may be used for adding user's
functionality to mk-c.
FIX: Parallel installation ("mkcmake install -jN") now works
correctly. "installdirs" is activated before "install". Report by
Michael Crogan.
During build object directories are created automatically by default
when MAKEOBJDIR or MAKEOBJDIRPREFIX are set. New recursive target
"obj" and variable MKOBJDIRS were introduced.
Report by Michael Crogan.
New variable MKRELOBJDIR was introduced. With its help one can
create object directories relative to top-level object directory
(like MAKEOBJDIRPREFIX but without top-level ${.CURDIR} in paths).
Thanks to Michael Crogan.
target "depend":
- FIX. Original implementation relied on NetBSD version of
mkdep(1). So, it didn't work on Linux, FreeBSD and others with
original BSD mkdep(1). Type of mkdep(1) is detected at
mk-configure build time. Report by Michael Crogan.
New variables LN, LN_S, MKDIR, RM, CLEANFILES_CMD, CLEANDIRS_CMD,
UNINSTALL, MAKEDEPEND, OBJTOP, CC_PREFIX, CXX_PREFIX were
introduced.
New variable NODEPS was introduced. With its help one can cut off
the dependency graph for particular targets.
New variable BMAKE_REQD was introduced.
New variable SRCTOP was introduced. With its help
"mkcmake -C subdir target" may work just like "mkcmake target-subdir".
New variables CFLAGS.dflt.${CC_TYPE} and CXXFLAGS.dflt.${CXX_TYPE}
were introduced. They default to -Qunused-arguments
for clang and clang++.
mkc.init.mk can be invoked by users directly for setting all
required variables and further checks (CC_TYPE, LD_TYPE, OPSYS etc.).
mkc_imp.links.mk:
- This module was reimplemented from scratch.
Bug with parallel installation (LINKS and MLINKS) was fixed.
mkc.minitest.mk:
- new variable TEST_PREREQS was introduced.
mkc_imp.inc.mk: fix for ${INCS} installation problem happened when
headers are built in ${.OBJDIR}. Report by Jan Smydke.
mkc_imp.info.mk:
- fix for MKINSTALL=no. "installdirs" unexpectedly created target
directories.
mkc.configure.mk:
- fix issue with MKC_CHECK_CUSTOM when ${.OBJDIR} != ${.CURDIR}
- MKC_CHECK_PROGS: PROG.<prog> is set even if full path was
specified. In addition existence and executability of the
specified file is always checked.
- fix for MKC_SOURCE_FUNCLIBS. Not all objects were cleaned
correctly by target "clean". Now objects are added to CLEANFILES
unconditionally.
- negative results for MKC_REQUIRE_* are not cached. This gives
users ability to fix the problem by changing the environment
and try again.
- MKC_CHECK_BUILTINS. Additional builtin checks were added:
"prog_mkdep" and "prog_nbmkdep" for original BSD mkdep(1) and
NetBSD version of mkdep(1) respectively.
mkc_imp.intexts.mk fixes:
- Targets "clean" and "cleandir" do not fail anymore if INTEXTS_REPLS
contains empty variables.
- Target "all" works correctly if INFILES or INSCRIPTS contain
files with directories.
mkc.sub{dir,prj}.mk:
- ${MAKEFLAGS} is passed to recursive ${MAKE}s.
- {nodeps-,subdir-,}dir:T are also targets, that is, one can also
use the last component of subdirectory as_a_part_of/as_a_whole
target. If you want to disable this, set SHORTPRJNAME to "no".
mkc_imp.subdir.mk was reimplemented using mkc_imp.subprj.mk
mkc_imp.dep.mk:
- documentation for this module was added.
- support for SHRTOUT=yes
- new variable DPSRCS was introduced
- MKDEP_SUFFIXES also contains .os and .op. Report by Michael Crogan.
- Target "clean" does not remove .depend and .d files.
Target "cleandir" does. NetBSD mk files work the same way.
Report by Michael Crogan.
MKPIE/SHLIB_*:
- s/-KPIC/-xcode=pic32/ for SunStudio compilers
MKSSP=yes:
- Support for IBM XL Compiler was added (not tested due to lack of such
- iron)
- Support for Intel C/C++ Compiler was added
Documentation fixes, updates and improvements. A lot of new
examples/. A lot of new regression tests.
Tools:
Long option --help was removed from all utilities
- mkc_install:
- fix for problem with parallel "installdirs" (race condition).
- Options -t and -b were removed.
- mkc_check_prog: option -i is documented in man page
- mkc_check_compiler: workarounds for buggy SunStudio C++
compiler ("CC -E -" exits with error).
All test are run with MKCATPAGES=no by default.
myprojects.pdf: pipestatus also uses mk-configure.
mkc.sub{dir,prj}.mk:
- support for subprojects containing / symbol was added. In
OBJDIR_<dir> variable slashes are replaced with underlines.
In addition OBJDIR_<dir:T> variable is set.
- now also run the target "errorcheck"
- now work correctly with non-empty MAKEOBJDIR
and MAKEOBJDIRPREFIX.
Minor improvements in examples/*/linkme.mk
DPLIBS is deprecated, use LDADD instead.
${MKC_SOURCE_FUNCLIBS}.o is added to CLEANFILES if it is set.
Minor fixes in mkc_imp.lua.mk (LUA_MODULES vs. LUA_LMODULES).
Some improvements and fixes in man page and FAQ.
Thanks to Jeremy Reed, Min Sik Kim and Jan Smydke.
mkc.subprj.mk:
- Support for "virtual" subproject was added. Subprojects listed
in SUBPRJ and SUBPRJS_DFLT are not necessarily associated with
a subdirectory. See examples/hello_superfs for example.
Virtual subproject is a way to group several subprojects into
new one.
New variables were introduced: COPTS_<proj> OBJCOPTS_<proj>
LDADD_<proj> LDFLAGS_<proj> CPPFLAGS_<proj> CXXFLAGS_<proj>.
See the manual page for details.
Fix: OBJDIR_<subdir> variables now always contain full paths.
Fix in mkc_which(1). Now it differs directories and regular files.
Minor fixes in regression tests for EXPORT_SYMBOLS.
mkc.lib.mk:
- SHLIB_MINOR unconditionally defaults to 0
More slides in .pdf presentation:
- cross-compilation
- EXPORT_SYMBOLS
Fixes for Pascal support
Minor fixes in the man page
Improvements in cross-compilation. The following variables were
introduced: TOOLDIR, SYSROOT, TOOLCHAIN_PREFIX and
MACHINE_GNU_PLATFORM.
PROGS variable was introduced (sf.net bug #3445658).
Support for Lua submodules was added (e.g. net.socket.lua ->
net/socket.lua). New variable LUA_MODULES was introduced for this
purpose.
MKPIE (Position Independent Executables), USE_SSP (Stack Smashing
Protection), USE_FORT and USE_RELRO variables were introduced for
security reasons.
Variable OBJDIR_<dir> was introduced.
mkc.subdir.mk and mkc.subprj.mk: Commands associated with targets
"all", "install", "clean", "cleandir", "depend", "test",
"installdirs", "uninstall", "errorcheck" and "filelist" in Makefile
override the standard behaviour.
MKC_REQUIRE_HEADERS, MKC_REQUIRE_DEFINES, MKC_REQUIRE_TYPES,
MKC_REQUIRE_VARS, MKC_REQUIRE_MEMBERS, MKC_REQUIRE_FUNCS<n> and
MKC_REQUIRE_CUSTOM do not change CFLAGS.
mkc.subdir.mk and mkc.subprj.mk: "cleandir" target takes into
account CLEANFILES, CLEANDIRS, DISTCLEANFILES and DISTCLEANDIRS
variables (removes files).
PCNAME.<lib> variable was introduced in mkc_imp.pkg-config.mk, this
is a map from library name to pcname (.pc).
Improvements for SHRTOUT.
New variable OBJCOPY was introduced.
Update of the presentation.
Fix in manual page (sf.net bug #3441610).
New regression tests (examples).
mkc_check_compiler has been reimplemented. This fixes problems
on system with /bin/sh == bash (affected versions: 0.21.1)
and makes it drammatically faster.
Target "errorcheck" ("configure") cannot work in parallel.
Fix bug appeared in parallel builds (make -j).
Thanks to Alexander Nasonov.
Support for IRIX64 and Haiku was implemented.
PDF presentation update
Minor clean-ups