summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/FAQ247
-rw-r--r--doc/LICENSE129
-rw-r--r--doc/Makefile47
-rw-r--r--doc/NEWS1023
-rw-r--r--doc/TODO229
-rw-r--r--doc/dep_graph.dot16
-rw-r--r--doc/my_prjs.dot51
-rw-r--r--doc/presentation.tex1307
8 files changed, 1631 insertions, 1418 deletions
diff --git a/doc/FAQ b/doc/FAQ
new file mode 100644
index 0000000..5d6b6d5
--- /dev/null
+++ b/doc/FAQ
@@ -0,0 +1,247 @@
+----------------------------------------------------------------------
+Q: It looks like you are reimplenting the wheel. There are lots of
+ alternatives to GNU autoconf, e.g. CMake, scons, waf,
+ PMK (pre make kit) and others.
+
+A: mk-configure has different design and goals. Just to note a few:
+ simplicity for developers, Keep It Small and Simple, STOP CODE
+ GENERATION!, bmake is magic enough, using POSIX shell and POSIX for
+ implementing basic checks, and some others. If you like these
+ principles maybe you'll find mk-configure interesting. In this case
+ try to use it and help me to improve it. Any kind of feedback is
+ welcome, I don't ask you to send me patches ;-)
+ Otherwise just ignore it, why bother.
+
+----------------------------------------------------------------------
+Q: Using POSIX shell and POSIX utils for implementing a build system
+ sounds terrible to me. Why not to use more powerful languages like
+ Perl, Python, Ruby and others?
+
+A: Python, Ruby and Perl are very big. I don't want to depend on such
+ a big tools. I also don't like when backward compatibility is
+ broken with new releases of program language. Finally I dislike
+ Perl and Python for their stupid syntax. Ruby is much better but it
+ is also very big and the language is not very stable.
+
+----------------------------------------------------------------------
+Q: Perl/Python/Ruby are available on almost every OS that ever existed
+ even on Windows and Symbian. Why you limit mk-configure to POSIX
+ compatible operating systems?
+
+A: First, I don't use Windows and don't care about it. Second, if you
+ want to write software both for UNIX-like OSes and Windows there
+ are no problems. You can use Interix, Cygwin or any other POSIX
+ subsystem for Windows to build your software. By the way,
+ cross-compilation is one of my priorities. So, there is no problem
+ in cross-compiling your software for embedded platforms, Windows or
+ any other OS your software supports.
+
+----------------------------------------------------------------------
+Q: You say that portability is one of the main goal of your
+ mk-configure (build automation software MUST be portable. Right?).
+ At the same time you say you use POSIX shell and POSIX tools.
+ My experience says me that it is just not possible to write
+ something REALLY portable in shell/awk/sed etc.
+
+A: I know very well how broken POSIX tools may be on some OSes and
+ hardware platforms. At the moment mk-configure supports the
+ following platforms: NetBSD, Linux, FreeBSD, DragonFlyBSD, Darwin,
+ HP-UX, Tru64, QNX, OpenBSD, Interix, Cygwin, MirOS BSD and Solaris.
+ If you find a bug please let me know. Also note that
+ mk-configure has lots of regression tests.
+ I don't make releases without testing on all platforms
+ available to me.
+
+----------------------------------------------------------------------
+Q: You just didn't read autobook and don't know how to use GNU
+ autotools properly. Your criticism is inadequate. First, read the
+ documentation!
+
+A: The question is not about me personally. Try to maintain software
+ packages in BSD/Linux/... distributions and you'll understand that
+ LOTS of FOSS developers actually do not understand how to use GNU
+ autotools properly. I believe this is because autotools's
+ complexity has grown beyond all reasonable levels.
+
+----------------------------------------------------------------------
+Q: bmake? What is it? Is it for NetBSD only?
+
+A: bmake is a portable version of NetBSD make that supports at least
+ the following operating systems and POSIX environments (besides
+ NetBSD of course): FreeBSD, DragonFlyBSD, OpenBSD, Linux, Solaris,
+ AIX, HP-UX, QNX, A/UX, OSF/1, Darwin, Interix, UnixWare and IRIX.
+
+----------------------------------------------------------------------
+Q: NetBSD make? Then why not to support FreeBSD/OpenBSD makes?
+
+A: OpenBSD and FreeBSD make(1)s are different and NetBSD make
+ is more powerful. More over, NetBSD and Free/OpenBSD make(1)s are
+ incompatible in some aspects.
+
+----------------------------------------------------------------------
+Q: Learning yet another make doesn't look like a good idea to me.
+ Nobody will use your mk-configure because it requires learning
+ bmake.
+
+A: First, bmake is easy. Learning it doesn't require too much time.
+ bmake is MUCH simplier than e.g. Python (see scons). I also
+ assume that every UNIX programmer knows the basic make
+ concepts. Second, software building rules are usually rather simple
+ and therefore you need not be an expert in bmake for writing Makefiles.
+ If building rules for your project are extremely complex, maybe the
+ problem is with your project, try to simplify it ;-)
+ Moreover, mk-configure provides several examples in
+ examples/ subdirectory. I hope they simplify learning mk-configure
+ significantly.
+
+----------------------------------------------------------------------
+Q: Yet another build automation software makes a packager's life
+ harder.
+
+A: Not a big problem. First, packagers are specialists. They should
+ learn new things every time ;-) . Adding support for
+ mk-configure into your packaging system should not be a problem.
+ Have a look at pkgsrc (www.pkgsrc.org) for examples. Makefiles
+ for projects based on GNU autotools require the line
+
+ GNU_CONFIGURE = yes
+
+ Projects based on CMake need the following line
+
+ USE_CMAKE = yes
+
+ Projects using mk-files require
+
+ USE_BSD_MAKEFILE = yes
+
+ I think this is easy. If your packaging system doesn't allow the
+ similar functionality, improve it ;-)
+
+----------------------------------------------------------------------
+Q: Why NetBSD bmake was chosen? Why not "standard" GNU make? Today
+ Linux has MUCH more developers than FreeBSD/OpenBSD/Solaris and of
+ course NetBSD. Most programmers using Linux use GNU make. Without
+ support of Linux developers your project is dead.
+
+A: NetBSD make was chosen for the following reasons: 1) when I started
+ mk-configure I could not find good analogs for mk-files written for
+ GNU make; 2) in my view bmake is simpler and more convenient for use
+ than GNU make; 3) I hate gmake's foreach/eval/call construct, bmake's
+ .for/.endfor is MUCH more convenient and easier to use; 4) gmake
+ starts finding includes starting from CWD, this is terrible, bmake
+ starts searching for "includes" starting from the including
+ makefile's directory. Note that mk-configure and mk-files widely use
+ the .for/.endfor construct.
+
+ Theoretically it is possible to implement a full analog for
+ mk-configure based on GNU make instead of bmake but I have no
+ time to do that. If you want to, let me know.
+
+----------------------------------------------------------------------
+Q: It's time to bury ALL make-like programs.
+ Use modern make replacements, Luke.
+
+A: It's true that make-like programs have some limitations.
+ But none of them seem critical to me.
+ I'm quite happy with traditional makes (NetBSD make and GNU make).
+
+----------------------------------------------------------------------
+Q: You propose setting build options through environment and
+ bmake's options instead of ./configure --option=xxx.
+ Are you serious?
+
+A: Yes, I don't see significant difference between setting paths and
+ build options via --options and command line arguments and
+ environment. The only thing lost is that autoconf's ./configure
+ checks for correctness of the given options but I don't think this
+ is a significant advantage. On the other hand using environment
+ variables for setting build options has its own advantages for
+ the development. You can set them ONCE in a shell session and
+ that's enough. Alternatively (and even better) you can add
+
+ .sinclude "my_local_settings.mk"
+
+ to Makefile and write your settings down to that file. Then
+ your local build options will take effect every time you run
+ mkcmake. Easy?
+
+ If you don't like .sinclude you can use
+
+ bmake -f my_local_settings.mk -f Makefile
+
+ command. Interactive shell's aliases and functions might help to make
+ things even easier.
+
+----------------------------------------------------------------------
+Q: It's known that libxxx has different places in different Linux
+ distributions. Can mk-configure find it automatically?
+
+A: No. Software build tools MUST NOT have an artificial
+ intelligence inside. If you need libxxx tell mk-configure correct
+ CPPFLAGS (-I/headers/here) and LDFLAGS (-L/libraries/here).
+ This is how it works. mk-configure will not search for includes
+ in /usr/local, /opt/sfw or anywhere unless you ask it to do so
+ explicitely.
+
+----------------------------------------------------------------------
+Q: As far as I can see your mk-configure doesn't support ALL features
+ supported by GNU autotools and some other competitors.
+
+A: If you see this tell me what type of functionality you are talking
+ about. If I find it helpful I'll implement it in future
+ releases of mk-configure.
+
+----------------------------------------------------------------------
+Q: How about GUI for "configuration" stage?
+
+A: Most often today's users use software from their system in a
+ prebuilt form. I don't think software packagers need a GUI. On the
+ other hand, if you need a GUI, nothing prevents you from creating it.
+
+----------------------------------------------------------------------
+Q: GNU autotools provides two-phase project builds and this is a good
+ idea. mk-configure lacks support for it.
+
+A: I personally don't like two-phase ideology. I see one phase
+ "build the software taking into account my platform's features".
+ If you want to check for errors first, run
+
+ bmake errorcheck
+
+----------------------------------------------------------------------
+Q: Does mk-configure support caching?
+
+A: If you mean caching of the platform features, my answer is YES.
+ Look at _mkc_* files and documentation for MKC_CACHEDIR variable.
+ If you mean caching of object files, then NO. This is not
+ mk-configure's task. For this use distcc(1) or similar tools.
+
+----------------------------------------------------------------------
+Q: mk-configure lacks support for Qt/KDE etc.
+
+A: Software is developed step-by-step. If you need something, let me
+ know. I'll implement missing features in future releases of
+ mk-configure.
+
+----------------------------------------------------------------------
+Q: mk-configure lacks support for my favourite
+ programming language XXX.
+
+A: First, let me know about it. Second, nobody prevents you from
+ creating rules for your language directly in Makefile or in your
+ own (local to your project) include files.
+
+----------------------------------------------------------------------
+Q: How about integration of mk-configure to Eclipse or...
+
+A: I don't use such IDEs but I agree it whould be nice to have such
+ support.
+
+----------------------------------------------------------------------
+Q: It looks like mk-configure is suitable for small-sized projects
+ but is not ready for huge ones.
+
+A: Suppose you are right. How about the fact that 99% of all FOSS
+ projects are small or medium in size? ;-)
+
+----------------------------------------------------------------------
diff --git a/doc/LICENSE b/doc/LICENSE
new file mode 100644
index 0000000..1a914f1
--- /dev/null
+++ b/doc/LICENSE
@@ -0,0 +1,129 @@
+Different parts of mk-configure have different copyright holders.
+All used licences are listed here.
+See individual files for details.
+
+######################################################################
+
+Copyright (c) 2009-2013 by Aleksey Cheusov
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the
+ distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+######################################################################
+
+Copyright (c) 1988, 1989, 1993
+ The Regents of the University of California. All rights reserved.
+Copyright (c) 1988, 1989 by Adam de Boor
+Copyright (c) 1989 by Berkeley Softworks
+
+
+This code is derived from software contributed to Berkeley
+by Adam de Boor.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+######################################################################
+
+Copyright (c) 1994-2009 The NetBSD Foundation, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+######################################################################
+
+Copyright 1991 by the Massachusetts Institute of Technology
+Copyright 2013 by Aleksey Cheusov <vle@gmx.net>
+
+Permission to use, copy, modify, distribute, and sell this software
+and its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of M.I.T. not be used in
+advertising or publicity pertaining to distribution of the software
+without specific, written prior permission. M.I.T. makes no
+representations about the suitability of this software for any
+purpose. It is provided "as is" without express or implied warranty.
+
+######################################################################
+
+File examples/hello_strlcpy/strlcpy.c is licensed as follows:
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
+FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/doc/Makefile b/doc/Makefile
index 5f8efb0..2295297 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,45 +1,4 @@
-##################################################
+FILES = ../README NEWS TODO LICENSE FAQ
+FILESDIR = ${DOCDIR}
-all : presentation.pdf myprojects.pdf
-
-.PHONY : pdf dvi rtf
-pdf : presentation.pdf
-ps : presentation.ps
-dvi : presentation.dvi
-
-.SUFFIXES: .ps .eps .pdf .dvi .tex .dot
-
-presentation.ps presentation.pdf presentation.dvi: my_prjs.eps dep_graph.eps
-
-.ps.pdf:
- ps2pdf "$<" "$@"
-
-#.tex.pdf:
-# pdflatex "$<" && pdflatex "$<"
-
-.dot.eps:
- dot -Tps ${.IMPSRC} > ${.TARGET}
-
-.dvi.ps:
- dvips $<
-
-.tex.dvi:
- latex "${.IMPSRC}" && latex "${.IMPSRC}"
-
-.gz:
- gzip ${.IMPSRC}
-
-GARBAGE= *.dvi *.aux *.vrb *.toc *.snm *.log *.nav *.out *.eps *.ps
-CLEANFILES+= ${GARBAGE} *.pdf *.ps myprojects.tex
-
-.PHONY: clean-garbage
-clean-garbage:
- rm -f ${GARBAGE}
-
-##################################################
-myprojects.tex : presentation.tex
- awk '/^%%%begin-myprojects/, /^%%%end-myprojects/' \
- ${.ALLSRC} > ${.TARGET}
-myprojects.ps myprojects.pdf myprojects.dvi: my_prjs.eps
-
-.include <mkc.files.mk>
+.include <mkc.mk>
diff --git a/doc/NEWS b/doc/NEWS
new file mode 100644
index 0000000..43a0f4a
--- /dev/null
+++ b/doc/NEWS
@@ -0,0 +1,1023 @@
+======================================================================
+Version 0.25.0, by Aleksey Cheusov, Wed, 1 Jan 2014 19:28:55 +0300
+
+ 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.
+
+======================================================================
+Version 0.24.0, by Aleksey Cheusov, Fri, 8 Mar 2013 13:18:00 +0300
+
+ 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.
+
+======================================================================
+Version 0.23.0, by Aleksey Cheusov, Sun, 22 Jul 2012 14:06:06 +0300
+
+ 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
+
+======================================================================
+Version 0.22.0, by Aleksey Cheusov, Fri, 9 Mar 2012 20:26:34 +0300
+
+ 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).
+
+======================================================================
+Version 0.21.2, by Aleksey Cheusov, Sat, 22 Oct 2011 01:50:05 +0300
+
+ 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.
+
+======================================================================
+Version 0.21.1, by Aleksey Cheusov, Tue, 13 Sep 2011 11:28:26 +0300
+
+ 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
+
+======================================================================
+Version 0.21.0, by Aleksey Cheusov, Sun, 24 Oct 2010 17:47:19 +0300
+
+ Support for clang compiler was implemented.
+
+ Documentation and presentation were updated. There are new projects
+ using mk-configure.
+
+ mkc_install is always used for installing mk-configure.
+ This simplifies an installation process on non-BSD platforms.
+
+ WARNS variable: support for icc was added.
+
+ New variable LEXLIB library responsible for -ll/-lfl was introduced.
+ See examples/hello_calc2.
+
+ mkc_check_compiler: in order to differentiate icc from gcc, a check
+ for Intel C/C++ compiler is run first.
+
+ New target "filelist" that outputs a list of files for the whole
+ project was introduced.
+
+ Makefile: mk-configure's mk files are unconditionally installed to
+ its own directory in order to avoid potential conflicts with
+ system-wide sys.mk on BSD platforms.
+
+ mkc.configure.mk: HAVE_FUNCLIB.main is always set to 1.
+ mkc_check_funclibs is not run for checking presense of function
+ "main" in libc.
+
+ New variable MKCHECKS was introduced.
+
+ Useless rule ".sh:" was removed.
+
+======================================================================
+Version 0.20.0, by Aleksey Cheusov, Sun, 19 Sep 2010 21:46:25 +0300
+
+ New variable PROJECTNAME, see the manual page.
+
+ New variable EXPORT_DYNAMIC for making all symbols in executable
+ visible to linked or dlopen'ed libraries. It is supported on *BSD,
+ Linux, SunOS, QNX, Interix, OSF1, HP-UX.
+
+ New variable CFLAGS.pic. See the manual page.
+
+ EXPORT_SYMBOLS: On systems using GNU ld, i.e. *BSD, Linux, QNX
+ etc. 'ld --version-script' is used in order to specify a list of
+ exported symbols instead of --retain-symbols-file
+
+ Lua support:
+ - Lua support didn't work properly if only one of LUA_LMODULES or
+ LUA_CMODULE were specified. Now it is fixed.
+ - New regression test examples/hello_lua2.
+ - Force building Lua modules with .so extension.
+
+ Darwin:
+ - support for EXPORT_SYMBOLS was added
+ - DLLs (MKDLL=yes) are built as bundles and have .bundle extension
+
+ /usr/bin/install is used as INSTALL only on *BSD platforms. On all
+ others mkc_install is used.
+
+ Interix:
+ - 775:664 permissions are used only for +Administrator user.
+ - "installdirs" target creates directories with 775 permission if
+ needed.
+
+ OSF1:
+ - better handling the so_location files.
+
+ mkc_imp.arch.mk:
+ - PROJECTNAME variable is used for creating archives and .deb
+ package.
+
+======================================================================
+Version 0.19.0, by Aleksey Cheusov, Fri, 3 Sep 2010 23:19:44 +0300
+
+ FIX: LPREFIX, YPREFIX and YHEADER now works as
+ documented. Regression test for them is added.
+
+ As of this release target "install" creates target directories by
+ default, i.e. it envokes target "installdirs" before installing
+ files. For disabling this behaviour, you may set MKINSTALLDIRS
+ variable to "no".
+
+ mkc.lib.mk:
+ - New variable EXPORT_SYMBOLS for exporting (in shared object
+ library) only specified symbols. At the moment the following
+ platforms support this: Solaris and those using GNU ld,
+ that is *BSD and Linux.
+ - "ld -h" is enabled on Solaris.
+
+ mkc.subdir.mk and mkc.subprj.mk:
+ - Two new variables: EXPORT_VARNAMES and NOEXPORT_VARNAMES for
+ exporting variables before building subprojects. By default
+ MKC_CACHEDIR is exported. As a result _mkc_* cache files will
+ be placed in one directory for all subprojects.
+ - New variable NOSUBDIR for excluding specified subprojects from
+ build. Useful side effect: by using this variable you may
+ disable some regression tests while running "bmake test".
+ - Makefile.rec file if present is included by ALL subprojects
+ recursively. See tests/rec_makefiles.
+
+ mkc.subprj.mk:
+ - New target subdir-<trg>-<subdir>, synonym for
+ nodeps-<trg>-<subdir>.
+
+ mkc.configure.mk:
+ - MKC_CHECK_PROGS: mkc_check_progs is not called if path to
+ program is absolute.
+
+ mk-configure.7 shows in <> typical place where variables shall be used.
+
+ On Solaris LD=/usr/ccs/bin/ld by default.
+ On OSF1 LD=/usr/bin/ld by default.
+ On QNX mkc_install is used as install program by default.
+
+ mkc_check_custom:
+ - FIXED: ambiguous arguments of command "test" (seen on QNX)
+
+ regression tests:
+ - New test examples/hello_plugins replacing
+ examples/hello_dlopen and examples/hello_dll
+ - New test examples/hello_calc
+
+======================================================================
+Version 0.18.0, by Aleksey Cheusov, Tue, 27 Jul 2010 21:06:56 +0300
+
+ Several new variables are introduced:
+ - LUA_LMODDIR and LUA_CMODDIR - installation directories
+ for Lua modules written in Lua and C.
+ - MKC_VERSION is now documented.
+ - MLINKS now works just like in NetBSD.
+ - CFLAGS.warns.<cctype>.<warn-level> and
+ CXXFLAGS.warns.<cctype>.<warn-level> are now documented.
+ Feel free to set them in sys.mk before installation.
+ - WARNERR for forcing warnings to be reported as errors.
+
+ New targets are introduced: bin_tar, bin_targz, bin_tarbz2,
+ bin_zip and bin_deb for creating archive files or .deb
+ package containing an installation image (Ex:
+ examples/hello_files). This also introduces new variables: TAR,
+ GZIP, BZIP2 and ZIP.
+
+ Documentation:
+ - Just a few notes about cross-compilation in mk-configure.7
+ - New slides, fixes and improvements in doc/presentation.pdf
+ - README: feel free to edit sys.mk before installation
+ - README: a few notes about tools used for development.
+
+ Support for POD (Plain Old Documentation) is added
+ (.pod.1, ..., .pod.9 and .pod.html suffix rules).
+ New variables for this: POD2MAN, POD2MAN_FLAGS, POD2HTML
+ and POD2HTML_FLAGS. Ex: examples/hello_xxzip
+
+ ../Makefile.inc is included automatically if exists just like
+ in NetBSD. Ex: hello_superfs.
+
+ .ORDER: installdirs install. This should fix -j<N> problem.
+ Thanks to FreeBSD buys,
+ swell.k at gmail.com and Mikolaj Golub
+
+ WARNS: add support for HP-UX C/C++
+
+ all:${FILES} ${MAN} etc. for the case when FILES are generated.
+ Thanks to Jan Smydke.
+
+ New examples (regression tests): hello_superfs, hello_xxzip.
+
+======================================================================
+Version 0.17.0, by Aleksey Cheusov, Tue, 22 Jun 2010 23:44:08 +0300
+
+ mkc_imp.pkg-config.mk:
+ - FIXED: double applying -L, -l and -I options got from pkg-config.
+ Solution: .unset PKG_CONFIG_DEPS
+ - Additional checks for INSTALL_{C,L}MOD pkg-config variables,
+ they must be defined.
+
+ CC_TYPE, CXX_TYPE and LD_TYPE variables are a part of mk-c's API,
+ now they are documented.
+
+ mkcmake:
+ - MKC_BMAKE environment variable is introduced. See mkcmake.1
+
+ Documentation for /etc/mk.conf, @sysconfdir@/mk.conf and MAKECONF.
+
+ doc/presentation.pdf: New slides and updates
+
+ FAQ: updates
+
+ mkc_imp.lua.mk:
+ - Check for lua.h header if other checks succeeded.
+
+ mkc_imp.lib.mk:
+ - MKDLL is also case-insensitive.
+
+ Makefile:
+ - make shipped with NetBSD-5 does not have option -C,
+ so I remove it.
+
+======================================================================
+Version 0.16.0, by Aleksey Cheusov, Sat, 12 Jun 2010 15:06:10 +0300
+
+ Support for Lua programming language. See documentation for
+ mkc_imp.lua.mk in mk-configure(7).
+
+ mkc.pkg-config.mk:
+ - Significant improvements! For details see
+ mk-configure(7) manual page and examples/hello_glib2 example.
+ New supported variables: PKG_CONFIG.exists.<lib>, PKG_CONFIG_VARS.<lib>
+ and PKG_CONFIG.var.<lib>.<var>.
+ - becomes internal include file and therefore
+ renamed to mkc_imp.pkg-config.mk. Symlink mkc.pkg-config.mk is
+ provided for backward compatibility. mkc_imp.pkg-config.mk is
+ included by mkc.prog.mk and mkc.lib.mk.
+
+ mkc.intexts.mk:
+ - becomes internal include file and therefore
+ renamed to mkc_imp.intexts.mk.
+ Symlink mkc.intexts.mk is provided for backward compatibility.
+ It is included from mkc.prog.mk, mkc.lib.mk and mkc.files.mk.
+ - New variable INTEXTS_REPLS. See mk-configure(7).
+
+ mkc.lib.mk:
+ - includes mkc_imp.intexts.mk
+ - supports SCRIPTS* variables (includes newly created mkc_imp.scripts.mk)
+ - New variable MKDLL for creating dinamically loaded libraries (<lib>.so).
+
+ mkc_imp.subprj.mk:
+ - New variable SUBPRJ_DFLT. See mk-configure(7).
+
+ mkc.*.mk try to open ${MAKECONF}, @sysconfdir@/mk.conf and /etc/mk.conf.
+ This is now documented.
+
+ mk-configure.7 is reorganized. Several internal include files
+ document their own variables. Further improvements of man page are
+ needed.
+
+ All boolean variables becomes case-insensitive.
+ That is "no", "No", "NO" and "nO" are equal.
+ The same for "yes", "Yes"...
+
+ mkc_check_custom(1):
+ - New options: -p, -n, -m and -s.
+
+ Minor fixes and clean-ups in .mk files, tools and regression tests.
+
+ New regression tests and examples.
+
+======================================================================
+Version 0.15.1, by Aleksey Cheusov, Fri, 28 May 2010 22:39:36 +0300
+
+ FIX: in version 0.15.0 mkc.subprjs.mk was added, but it was not
+ installed because I forgot to add it to Makefile. Now it is
+ installed just like all other *.mk files.
+
+ FIX: 'all : errorcheck' is not for bsd.subdir.mk and bsd.subprj.mk
+
+ mkc.subprjs.mk has been renamed to mkc.subprj.mk.
+ mkc.subprjs.mk is installed as a symlink.
+
+======================================================================
+Version 0.15.0, by Aleksey Cheusov, Tue, 25 May 2010 22:52:28 +0300
+
+ New presentation for mk-configure is in doc/ subdirectory.
+
+ New top-level include file "mkc.subprjs.mk", more powerful
+ replacement for mkc.subdir.mk. It handles subprojects organized as a
+ dependency graph.
+
+ New variables are added: MKPICLIB, MKSHLIB, MKSTATICLIB and
+ MKPROFILELIB for building PIC, shared, static and profile libraries.
+ See mk-configure.7 for details.
+
+ MKPIC, MKPROFILE and MKPICINSTALL variables are removed. Use
+ MKPICLIB, MKSHLIB, MKPROFILELIB and MKINSTALL variables instead.
+
+ Implementation for variable "WARNS" (currently only for gcc).
+
+ New variable "SHRTOUT". If it is not "no", shortened formatted
+ messages are output about compiling, linking etc.
+
+ Manual page for mkcmake(1).
+
+ Target "depend" is added for generating .depend file.
+
+ Minor fixes in mkc_check_funclib.
+
+ Support for Cygwin is added (no support for shared libraries yet).
+
+ Clean-ups in target "clean".
+
+ More regression tests and examples.
+
+ Minor fix in mkc_imp.subdir.mk: do not run "installdirs" if MKINSTALL=no.
+
+ Internal target "error-check" is renamed to "errorcheck".
+
+======================================================================
+Version 0.14.0, by Aleksey Cheusov, Sun, 31 Jan 2010 16:37:21 +0200
+
+ Support for OSF1. Tested on Tru64-5.1/alpha with gcc and DEC C
+ compiler.
+
+ Support for HP-UX. Tested on HP-UX-11.0/hppa with gcc.
+
+ Support for DragonFlyBSD. Tested on DragonFlyBSD-2.4.1/x86 with gcc.
+
+ Support for MirOS BSD. Tested on MirBSD-10/x86 with gcc.
+
+ SHLIBMODE variable is introduced which sets a shared library mode.
+
+ FIX: mkc.subdir.mk now takes into account MKINSTALL variable.
+ Thanks to Mikolaj Golub for pointing out.
+
+ FIX: targets "installdirs" and "uninstall" now takes into account
+ MKINSTALL variable.
+
+ fix in mkc.minitest.mk: HP-UX's diff doesn't have -u flag, so I
+ remove it.
+
+ fix in mkc_imp.platform.sys.mk: CC/CXX type should be detected AFTER
+ setting CC/CXX variables.
+
+ mkc_check_compiler:
+ - support for DEC C compiler (OSF1/Tru64)
+ - minor fixes.
+
+ More regression tests.
+
+======================================================================
+Version 0.13.0, by Aleksey Cheusov, Sun, 27 Dec 2009 17:06:06 +0200
+
+ CC, CXX and LD types are automatically detected and options passed
+ to them (e.g. options for generating a position independent code or
+ options for building a shared library) depend on this type.
+ At the moment the following systems and compilers are supported:
+
+ - NetBSD. Tested under NetBSD-5.0/x86 and NetBSD-2.0/alpha with
+ gcc and pcc (Portable C compiler).
+
+ - FreeBSD. Tested under FreeBSD-6.2/x86, 7.1/spark64 and 7.1/x86
+ with gcc.
+
+ - OpenBSD. Tested under OpenBSD-3.8/x86 and 4.5/x86 with gcc.
+
+ - Solaris. Tested under Solaris-10/x86 and Solaris-10/spark64
+ with sunpro-11, sunpro-12 and gcc.
+
+ - Darwin (MacOS-X). Tested under Darwin-8.11.0/ppc (MacOS-X
+ Tiger) with native gcc.
+
+ - Interix. Tested under Interix-3.5/x86 with gcc.
+
+ - QNX. Tested under QNX-6.3/x86 with gcc.
+
+ - Partial support for AIX, HP-UX and Tru64 and their native
+ compilers and linkers. Support is not complete because I have
+ no access to "big iron". Any help? ;-)
+
+ If you don't see your favourite system/compiler here and want to
+ help me to improve mk-configure, feel free to contact
+ me. mk-configure needs your help! ;-)
+
+ The default directory for mk-files is ${PREFIX}/share/mkc-mk, where
+ an empty sys.mk is installed unless NOSYSMK is defined while
+ installation. See an explanation about this in README.
+
+ So called built-in checks are implemented. See MKC_CHECK_BUILTINS
+ variable. Built-in checks are checks provided by mk-configure. At
+ the moment the following checks are implemented: endianess,
+ prog_flex, prog_bison, prog_gawk, prog_gm4. See mk-configure.7 for
+ the documentation.
+
+ mkc.configure.mk:
+ - At the end of this file MKC_{REQUIRE,CHECK}_XXX variables as
+ well as MKC_{CFLAGS,LDADD,SRCS} are .undef-ed. This allows one
+ to .include mkc.configure.mk several times.
+ - This include file is activated automatically from mkc.prog.mk
+ and mkc.lib.mk. You need to .include mkc.configure.mk
+ explicitely only if postcheck actions are needed.
+
+ SCRIPTS variable can contain subdir/<script>s, they are installed
+ just as <script>s, i.e. subdir/ is silently stripped.
+ SCRIPTSDIR_subdir_<script> and SCRIPTSNAME_subdir_<script> can be
+ used for specifying an alternative destination path and filename.
+
+ If .l or .y source files are listed in SRCS variable, mk-configure
+ automatically checks weather ${LEX} and ${YACC} are available or
+ not. The same for .c/${CC}, .cpp|.cc|.cxx|.C/${CXX}, .f/${FC} and
+ .p/${PC}. In case of absense of appropriate tool bmake exits with
+ error on early stage.
+
+ MKC_CHECK_CUSTOM, MKC_REQUIRE_CUSTOM:
+ - HAVE_CUSTOM.xxx bmake's variables and HAVE_CUSTOM_xxx #defines
+ have been renamed to CUSTOM.xxx and CUSTOM_xxx respectively.
+ Formally speaking this breaks backward compatibility with
+ earlier mk-c releases.
+ - Support for checks written in C++ (.cc, .cxx, .C and .cpp) and
+ Fortran (.f) is added.
+ - Support for checks implemented as an executable program/script is added.
+
+ FIXES:
+ - mkc_imp.man.mk: useless TMACDIR and dependencies on tmac files
+ under /usr/share are removed
+ - mkc_check_decl:
+ void function() cannot 'return 0' (thanks to SunPro compiler!)
+ - If C++ source files are listed in SRCS, ${CXX} is used as a
+ linker both for executables and shared libraries.
+ - Linux, SunOS and lots of others have no "wheel" group. They use
+ "root".
+ - "make installdirs" should not create man/htmlN directories
+ unless MKHTML is set to "yes"
+ - mkc_imp.lib.mk: .so build rule must use ${LDFLAGS}
+
+ ADDED: mkcmake utility (trivial wrapper over bmake) which should be
+ used for building a software instead of bmake.
+
+ .c:, .f:, .l: and similar useless rules are removed. It is enough to
+ have .c.o:, .f.o:, .l.c etc.
+
+ Improvements for cross-compilation.
+
+ Lots of new regression tests:
+
+ mkc_check_common.sh:
+ if MKC_NOCACHE=1, tmp.c, tmp.o, tmp.exe and tmp.err are
+ removed.
+
+ Support for lex:
+ -ll is added to linker if needed.
+
+ mkc_check_compiler:
+ - Added support for the following compilers: IBM Visual Age, HP
+ cc/aCC, SunPro C/C++, Watcom, Borland, DEC C/C++ and Comeau C/C++
+ - New option '-x' for checking C++ compiler type.
+
+ mkc_which:
+ Accepts full paths. /path/to/program -> /path/to/program
+
+ In order to avoid confusion, position independent object files (.so)
+ have been renamed to .os. Also, .po has been renamed to .op.
+
+ mkc_imp.lib.mk:
+ - suffix rules for .cpp, widely used extension for C++ sources, are
+ added.
+ - LDCOMPILER variable is introduced, if "yes", compiler is used
+ for linking a shared library.
+
+ INCSSRCDIR variable is introduced, see the documentation.
+
+ mkc_install: New utility for platforms having no BSD compatible
+ install(1). INSTALL variable is set to mkc_install if needed.
+
+ mkc.intexts.mk is included from mkc.prog.mk and mkc.lib.mk
+ automatically just like mkc_imp.*.mk includes.
+
+======================================================================
+Version 0.12.0, by Aleksey Cheusov, Thu, 12 Nov 2009 17:58:09 +0200
+
+ mk-configure doesn't depend on external pkgsrc-mk-files anymore!
+ The only required thing is bmake itself. Everything else is inside
+ mk-configure tarball now (yes, I've forked mk-files. Lots of fixes,
+ clean-ups, reorganizations, additions, improvements, removals of
+ useless code...). Some interesting things were stolen from NetBSD
+ base system's mk-files. Do not rely on things you found in
+ NetBSD/pkgsrc/sjg mk-files or even mk-c sources! Only features
+ documented in mk-configure.7 will be supported.
+
+ A target "install-dirs" has been renamed to "installdirs".
+ Ask mkc.subdir.mk why ;-)
+
+ mkc.lib.mk:
+ - Commands for building a .so/.dylib shared library
+ is overridable by user (using bmake's "commands").
+
+ Shared libraries
+ - support for Darwin (.dylib and Apple's ld)
+ - support for Solaris (gcc + Solaris' ld)
+ - support for shared libraries is still terrible, more flexibility
+ is needed.
+
+ Variables:
+ - New variables CLEANDIRS and DISTCLEANDIRS.
+ - As of this release MKC_SHOW_CACHED defaults to 0.
+ - New variable MKINSTALL. You can use it for internal static libraries.
+ - New variable MKC_REQD. Minimal mk-configure version required. If
+ this check fails, an entire build fails.
+ - New variable USETBL. NOTE: It is "yes"/"no" variable.
+ - New variable MANZ. NOTE: It is "yes"/"no" variable.
+ - New variable SCRIPTSBIN that defaults to ${BINDIR}.
+ - HTMLDIR is introduced containing directry for .html pages
+ generated from manual pages. html pages are automatically
+ installed if MKHTML=yes.
+ - LDLIBS is not used anymore. Use LDADD for libraries.
+ - DISTCLEANFILES modifyable by user contains a list of files
+ removed by targets "cleandir" and "distdir"
+ - New variable NROFF_MAN2DOC.
+
+ Fixes:
+ - A target "uninstall" now works correctly with .cat files.
+ - configure.mk
+ Workaround for buggy 20081111 < bmake < 20090909.
+ See NetBSD BTS bin/41998:
+ /usr/bin/make: .for loop + ":" inside iter_var = bug
+
+ mk-configure:
+ - "make distclean" run at the root mk-c's directory really removes
+ all garbage.
+ - TONS OF NEW REGRESSION TESTS. If you are running an exotic platform,
+ run "bmake test" and send me results ;-)
+
+ mkc_check_prog (MKC_CHECK_PROG):
+ - Path to a found program is output instead of just "found" message.
+
+ mkc_check_compiler - new utility, not used in mkc.*.mk yet.
+
+======================================================================
+Version 0.11.1, by Aleksey Cheusov, Sat, 5 Sep 2009 17:25:18 +0300
+
+ fixed: path to awk in mkc_check_version script
+
+======================================================================
+Version 0.11.0, by Aleksey Cheusov, Sat, 5 Sep 2009 15:26:01 +0300
+
+ mk-configure(7)
+
+ Simon Gerrary's mk-files is not supported anymore.
+ Use pkgsrc mk-files!
+
+ Regression tests have been reorganized and significantly improved.
+ All examples become regression tests. Lots of new tests.
+ Run 'bmake test' to run them.
+
+ mk-configure uses its own mkc.*.mk scripts to build and install
+ itself. As a result Free/OpenBSD make cannot be used anymore for
+ building and installations. Use bmake!
+
+ ADDED: FAQ document to answer frequently asked questions.
+ Thanks to Michael Shigorin for corrections.
+
+ New simple module for regression tests: mkc.minitest.mk. Besides
+ its simplicity it is quite useful. mk-configure uses it for testing
+ itself.
+
+ Initial version of mkc.pkg-config.mk module
+ See examples/hello_glib2 for the sample of use.
+ Note that it is not complete yet.
+
+ mkc.configure.mk and configure.mk:
+
+ - checks are not run if appropriate HAVE_xxx.yyy variable is
+ already defined. This makes possible to effectively build
+ software in a well defined stable environment.
+ Ex: bmake -f predefined_settings.mk -f Makefile all
+
+ - ADDED: MKC_CHECK_TYPES for checking for types.
+ See the documentation in configure.mk.in and examples/.
+
+ - ADDED: MKC_CHECK_CUSTOM for custom user's checks.
+ Custom check is a user's code.
+ Check itself -- is this code compilable or not.
+ See the documentation in configure.mk.in and examples/.
+
+ - Behaviour of MKC_CHECK_MEMBERS changed: Now "struct " prefix
+ is not hardcoded. This gives an ability to check members in
+ struct-s, enum-s and typedef-s.
+
+ - NEW: MKC_REQUIRE_HEADERS, MKC_REQUIRE_FUNCLIBS,
+ MKC_REQUIRE_DEFINES, MKC_REQUIRE_TYPES, MKC_REQUIRE_VARS,
+ MKC_REQUIRE_MEMBERS, MKC_REQUIRE_CUSTOM and
+ MKC_REQUIRE_FUNCS<N>. If these checks failure, bmake exits
+ with error and prints an error message. See configure.mk.in
+ for the documentation and examples/ for the samples of use.
+
+ - NEW: MKC_CHECK_PROGS and MKC_REQUIRE_PROGS.
+ See configure.mk.in for the documentation and
+ examples/ for the samples of use.
+
+ - NEW: targets "distclean" and "cleandir" removes _mkc_* cache files.
+
+ - NEW: target "configure" runs all checks
+ and creates _mkc_ cache files.
+
+ - all checks are disabled for targets "clean", "cleandir" and
+ "distclean".
+
+ - Cache file names changed. Now they are:
+ _mkc_type_<type>, _mkc_sizeof_<type>, _mkc_header_<header>,
+ _mkc_funclib_<funclib>, _mkc_funcN_<func>,
+ _mkc_variable_<variable>, _mkc_custom_<custom-check>,
+ _mkc_prog_<progname>, _mkc_define_<define>, _mkc_member_<member>
+
+ mkc.info.mk and mkc.man.mk are removed. They are included automatically
+ from mkc.prog.mk, mkc.lib.mk and mkc.files.mk if needed.
+
+ mkc.prog.mk, mkc.lib.mk, mkc.files.mk and mkc.subdir.mk:
+
+ - NEW: target "uninstall" is supported.
+
+ - performance improvements. "Hard" sections of mkc.common.mk are
+ activated if and only if appropriate target is in action.
+
+ - FIX: target "install-dirs" now works correctly with MAN
+ containing .N pages where N is not 1.
+
+ - FIX: target "install-dirs" now takes into account LINKS and
+ SYMLINKS.
+
+ - Better support for TEXINFO:
+ - "uninstall" target takes TEXINFO into account.
+ - "clean" target removes generated .info files.
+
+ - mkc.{prog,lib,files}.mk supports a target "test". By default
+ it does nothing. The target "test" of mkc.subdir.mk runs
+ 'bmake test' for each SUBDIR. If you want to define your own
+ "test" target overriding the default one, define it in your
+ project's Makefile before any .include <mkc.*.mk> directive.
+
+ - MKC_REQD variable
+
+ Makefile of mk-configure: README, NEWS, TODO, FAQ and LICENSE
+ files are also installed unless EXTRAFILES is set to an empty string.
+
+ "mkc_check_sizeof" and "mkc_check_decl type" don't create cache
+ files with spaces in its name anymore. Space inside a filename is
+ replaced with symbol ~ (tilde).
+
+ FIXED: mkc_check_custom, mkc_check_decl, mkc_check_funclib,
+ mkc_check_header and mkc_check_sizeof failed if CC contains space.
+ Thanks to Vitaly Lipatov for the report.
+
+ mkc_check_sizeof now works drammatically faster.
+
+ MKHTML defaults to "no".
+
+ mkc_check_sizeof, mkc_check_custom:
+ - fixes for problems with Solaris' /bin/sh
+
+ Other fixes and improvements.
+
+======================================================================
+Version 0.10.0, by Aleksey Cheusov, Sun, 31 May 2009 14:54:10 +0300
+
+ mkc.configure.mk:
+
+ New: MKC_CHECK_MEMBERS, mechanism for checking for structure
+ members. Regression tests for this new feature. Man page update
+ for mkc_check_decl. See the documentation for MKC_CHECK_MEMBERS
+ in configure.mk file.
+
+ Fix: HAVE_FUNCN.funcname.dir.header_h ->
+ HAVE_FUNCN.funcname.dir_header_h
+ New: Support for HAVE_VAR.varname.dir_header_h (dir/header.h!)
+ New: Support for HAVE_DEFINE.defname.dir_header.h (dir/header.h!)
+ New: MKC_COMMON_DEFINES.`uname -s`, e.g. MKC_COMMON_DEFINES.NetBSD,
+ MKC_COMMON_DEFINES.Linux etc.
+
+ "install-dirs" now work fully correctly, i.e. creates
+ all required directories.
+
+ New variable DPLIBS for listing -llibs for linking. Use DPLIBS
+ instead of LDADD for linking with local libraries.
+ See examples/8/hello/Makefile.
+
+ mkc_check_decl:
+ workaround for buggy ksh and FreeBSD /bin/sh.
+
+======================================================================
+Version 0.9.0, by Aleksey Cheusov, Sun, 29 Mar 2009 16:53:57 +0300
+
+ Huge amount of changes were made since previous release. Now
+ mk-configure provides a number of mkc.*.mk scripts working on top of
+ pkgsrc's mk files or Simon Gerraty's mk-files and therefore provides
+ a replacement not only for GNU autoconf but for GNU automake too.
+ It makes sense to reread README file.
+ Lots of new information is there.
+
+ Lots of examples (yes, hello_worlds applications :-) ) were created
+ in examples/ subdirectory.
+
+ Lots of new mkc.*.mk files were added. They work on top of bsd.*.mk
+ files and provide new functions. See README.
+
+ Regression tests were added. Thanks to them a number of bugs were
+ detected and fixed.
+
+ Fixes in configure.mk:
+ - s/return/exit/ in ${.OBJDIR}/.error-check section.
+ This bug is seen under Linux/bash.
+
+ - bmake's variable SIZEOF.long_long was not set correctly
+ (long-long din't work)
+
+ - MKC_CHECK_SIZEOF+=type:header.h
+ bmake's variable SIZEOF.<type>.<header_h> is set
+ instead of plain SIZEOF.<type>
+
+ - MKC_CHECK_HEADERS += dir/hdr.h
+ bmake's variable: s/HAVE_HEADER.dir.hdr_h/HAVE_HEADER.dir_hdr_h/
+ (`.' vs. `_')
+ I hope this is a last change in configure.mk's API.
+
+ My own mkc.intexts.mk bmake module (mk file).
+
+ configure.mk:
+ If CHECK_SIZEOF_xxx check fails, MKC_CFLAGS is not changed. Only
+ sucessful data type sizes are registered in MKC_CFLAGS and CFLAGS.
+
+ mkc_check_decl, mkc_check_sizeof: they don't use MKC_COMMON_DEFINES
+ environment enymore, everything should be passed through CFLAGS and
+ CPPFLAGS.
+
+ MKC_SHELL is currently disabled
+
+======================================================================
+Version 0.7.0, by Aleksey Cheusov, Sun, 15 Mar 2009 11:02:29 +0200
+
+ No CFLAGS+=-DHAVE_XXXX=0 anymore, if XXX is not found
+ it is not defined at all. autoconf works the same way.
+
+ mkc_check_xxx scripts:
+ - installed to bin/ directory just like normal scripts.
+
+ - if MKC_VERBOSE variable is equal to '1', verbose messages
+ are output to stderr.
+
+ - -h|--help options printing usage information.
+
+ - manual pages are created.
+
+ new variable MKC_NOCACHE, if it is set to not empty string,
+ caching is disabled.
+
+ fix in mkc_check_decl: long-long is treated as 'long long'.
+
+ MKC_SHOW_CACHED, MKC_VERBOSE, MKC_DELETE_TMPFILES, MKC_NOCACHE
+ variables: 1 - true, other values - false.
+
+ minor clean-ups in Makefile
+
+======================================================================
+Version 0.6.0, by Aleksey Cheusov, Sun, 8 Mar 2009 19:35:13 +0200
+
+ MKC_FUNCLIBS_NOAUTO.ftime.compat is replaced
+ with MKC_NOAUTO_FUNCLIBS list.
+
+ Ex.:
+ MKC_NOAUTO_FUNCLIBS += ftime:compat crypt:crypt
+ MKC_NOAUTO_FUNCLIBS = 1 # for disabling
+ # all potential LDADD += ...
+
+ fix: "checking for..." messages is now sent to stderr
+ before result is calculated, not after.
+
+ Support for heirloom-sh and ancient Solaris-10 /bin/sh
+
+ added: MKC_SHELL variable defaulting to /bin/sh, mkc_check_XXX
+ scripts are run with with this shell. This is variable is mainly for
+ testing purposes but who knows.
+
+======================================================================
+Version 0.5.0, by Aleksey Cheusov, Tue, 3 Mar 2009 00:04:52 +0200
+
+ Huge amount of changes. 0.5.0 is completely incompatible with 0.4.0
+ because 0.4.0 was proof-of-concept only ;-) Everything was
+ inspired by discussion in fido7.ru.unix.prog.
+
+ Changing in API is also possible in the future until
+ I stabilize it.
+
+======================================================================
+Version 0.4.0, by Aleksey Cheusov, Sat, 21 Feb 2009 22:47:20 +0200
+
+ First publicly available release. Happy birth day! :-)
diff --git a/doc/TODO b/doc/TODO
new file mode 100644
index 0000000..bcfa7de
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,229 @@
+============================================================
+Plan 0.25.0
+
+Some thoughts inspired by talks with Michael Crogan
+
+- During development of huge projects it may make sense to always keep
+ "installed" version of the software somewhere (FAKEPREFIX?)
+ and always keep it synced.
+ mk-configure needs a mechanism to always "install"
+ after "all" and "uninstall" before "clean". Options: develop this in
+ mk-c and make it optional feature; provide a mechanism for
+ auto-depend one target from TARGETS from another one. In the latter
+ case users will be able to implement this kind of things themself.
+ (myall -> "myall-* : all-* .WAIT install-*)
+ (myclean -> "myclean-* : uninstall-* .WAIT clean-*)
+
+- VARIANTS for libraries.
+
+- project "roundup" for testing
+
+- Better explain how "test" target works, maybe as a couple of slides
+ in the PDF presentation. With and without mkc.minitest.mk.
+- One more example/ for TARGETS, demonstrating such things as
+ "mkcmake release/debug/profile" or "mkcmake all_clang/all_gcc"
+ or "valgrind_test"/"gcov_test" etc.
+- Additional slides in PDF for virtual subprojects.
+ Notes about "virtual subproject" in examples/.
+- Notes in examples/hello_dictd and other examples based on
+ mkc.subprj.mk about what mkc.subprj.mk really does. Reference (man page)
+ is not enough for newcomers. Notes about clean-SUBPRJ, all-SUBPRJ etc.
+- Better explain ../Makefile.inc included automatically. For those who
+ are not familiar with *BSD it is not obvious how to use it.
+- "errorcheck/configure" tests should be run in parallel. Something
+ like shlock(1) or flock(1) is needed for this.
+- Example is needed for how to embed autoconf-based subproject into a
+ project based on mk-configure. The sad fact is autoconf/automake is
+ everywhere. So, it would be nice integrate mk-c into reality.
+ mkc_imp.autotools.mk is needed for this.
+- Alternative .depend generation, e.g. like it is described in GNU
+ make info files
+- Higher priority for fixing handling of dependencies between
+ libraries and programs. In addition examples/ is needed for
+ triggering rebuild of subproject if "something" was rebuild in
+ another subproject (build script for example).
+- For better extensibility it makes sense to implement user-implementable
+ pre_all, post_all, pre_install, post_install etc. targets.
+- Interdependencies between targetX-subprjA and targetY-subprjB (for
+ example all-prject1 and install-prject2). Maybe this is cool idea
+ for examples/ and slides. I need some good example for this.
+ <<<depend-project1:errorcheck-autotools_based_project2>>>!!!
+- Steal cool features from Simon Gerraty's mk files and analyse
+ "meta mode" he invented.
+- Better support for working without installation to /. -rpath, additional
+ directories for objects, binaries and libs.
+
+Some "targets" from TARGETS should set MKCHECKS to "no"
+
+ronn(1) : markdown to man pages
+
+-----------------------------------------
+gcc -L/usr/pkg/lib -R/usr/pkg/lib -o hello_lex hello_lex.o -ll
+yacc calc.y
+mv y.tab.c calc.c
+gcc -I/usr/pkg/include -c -o calc.o calc.c
+gcc -L/usr/pkg/lib -R/usr/pkg/lib -o hello_calc calc.o
+ERROR: cannot find program -y
+Cannot find bison, good bye!
+------------------------------------------
+
+ custom test failed -> exit status of mkcmake should not be zero
+ MKC_CUSTOM_ERR.qqqq -> error message before exiting just like
+
+ mkcmake configure doesn't work
+ New variable MKC_CUSTOM_ENV.xxx
+
+ Add script_check to MKC_CHECK_CUSTOM
+ Ex. MKC_CHECK_CUSTOM+= nested_funcs
+ MKC_CUSTOM_FN.nested_funcs= nested_funcs.c
+ MKC_CUSTOM_FN.script_check= checks/script_check
+
+ - BINSUBDIR, LIBSUBDIR, LIBEXECSUBDIR etc...
+ - Fix USE_SSP support for clang (-mllvm -stack-protector-buffer-size=1)
+ - @sysconfdir@/mkc.conf
+ - LDFLAGS vs. LDFLAGS in link.me (global paths before project's)
+ - Reimplement linkme.mk. It is not flexible enough.
+ - USE_RPATH
+ - OBJCOPTS_<proj>
+ - Regression tests:
+ * optional .f tests
+ * optional .p tests
+ * optional .m tests
+ * optional(!) glib2 tests
+
+============================================================
+Plan 1)
+
+ - Support for MKDEBUG like in NetBSD mk files
+ - .lua.luac:
+ - Implement mkc_imp.libtool.mk to build
+ the shared libraries using GNU libtool(1).
+ - MKSTRIP, STRIP, mkc_install: use STRIP, not STRIPPROG
+
+ Slides for:
+ - Slide "extensibility" about Lua module.
+ - code specific to GNU ld(1) (.def?)
+
+============================================================
+Plan 2)
+
+ - ./configure written in shell?
+ - EXPORT_DYNAMIC_SYMBOLS - add the specified symbols to
+ dynamic symbol table (GNU ld)
+ - EXPORT_SYMBOLS_REGEXP
+
+ - recheck documentation for Makefile.rec
+ - Syllable, Haiku, OpenServer/UnixWare and HURD
+ - lcc and tcc compilers
+ - epm -> rpm, SVR4 pkg etc.
+ - mkc_imp.filelist.mk
+ - FL_NOPREFIX
+ - FL_PERSUBPRJ
+ - IRIX: "endianess" and EXPORT_SYMBOLS
+
+============================================================
+Plan 3)
+
+ = sample for home-made .mk file (Ocaml? Pike?)
+ = marker for user's custom tests that
+ run generated executables, i.e. not ready
+ for cross-compilation
+
+ = symlinks to executables and libraries in ${OBJDIR}/{bin,lib}
+
+ = support for gettext
+
+ = xxxDIR variable for /var
+
+ = mkclint?
+
+ = Command line may be limited in size.
+ Save defines to config.h and set HAVE_CONFIG_H to 1
+ for compiling.
+
+ = MKC_NEED_FUNCLIBS - the same as MKC_SOURCE_FUNCLIBS but
+ implementation is taken from mk-c.
+ Ex: MKC_NEED_FUNCLIBS += strlcat strlcpy getline
+
+ = MKC_CUSTOM_premk, MKC_CUSTOM_postmk
+
+ = Online tutorial
+
+ = shared libraries support for AIX, UnixWare, Hurd, Haiku.
+ = shared libraries support for nwcc and other compilers.
+
+ = Comparison with quagmire, kBuild, CMake, scons, waf, framewerk, pmk,
+ MagicMakefiles, bjam, pymake etc.
+
+ = Often compilers need special options to compile pthread code.
+ Support for MKPTHREAD=yes|no is needed.
+
+ = implement MANBZ2?
+
+ = man page for mkc_check_compiler
+
+============================================================
+Plan 4)
+
+ = EXPORT_SYMBOLS for HP-UX, AIX, SCO etc.
+
+ = Single cache file as an automatically loaded (if exists)
+ bmake makefile.
+
+ = Targets bin_rpm, bin_epm
+ = Targets src_tar, src_targz, src_tarbz2
+
+ = mkc.subdir.mk:
+ - continue bulding even if some subprojects failed
+
+ = MKC_CHECK_CUSTOM:
+ - MKC_CUSTOM_FN=xxx.f
+ - MKC_CUSTOM_FN=xxx.objc
+
+ = Implement mkc.qt.mk
+
+ = Implement mkc.doxygen.mk?
+
+============================================================
+Plan 5)
+
+ = mkc.configure.mk functionality but for bourne shell, e.g.
+
+ Upstream creates ./configure shell script:
+ MKC_CONFIG_MK=mkc_config.mk
+ MKC_CONFIG_H=mkc_config.h
+
+ MKC_CHECK_HEADERS='
+ header1.h
+ header2.h
+ header3.h'
+ MKC_CHECK_FUNCLIBS='
+ func1:lib1
+ func2
+ func3:lib3'
+ #<...>
+ . mkc_configure
+ mkc_run # generating mkc_config.h and mkc_config.mk
+
+ User runs
+ ./configure ...
+ <any>make all
+
+ = MKC_CHECK_DECL_TYPE (define, function|variable)
+
+ = MKC_DEFINE_01 - -DHAVE_XXX=0 or -DHAVE_XXX=1
+
+============================================================
+Plan 6)
+ = MKC_BUILTINS (from autoconf):
+ broken_free_NULL,
+ exit_ret_int,
+ isinf, isnan, malloc_0, putenv_xxx, realloc, signal,
+ snprintf, sprintf, sscanf, strerror_r, strnlen,
+ sysconf, unlink, unsetenv, va_copy, va_list,
+ signed_shr, int_div, chown_minus_1,...
+ (autoconf.info/Particular Function Checks)
+
+ AC_FUNC_ALLOCA
+ = autoconf (Portability of headers)
+ = autoconf (Particular Header Checks)
diff --git a/doc/dep_graph.dot b/doc/dep_graph.dot
deleted file mode 100644
index 73ad03f..0000000
--- a/doc/dep_graph.dot
+++ /dev/null
@@ -1,16 +0,0 @@
-digraph FSA {
- graph [ ratio=compress layout=dot rankdir=UB ratio=0.4 ];
-
- node [ shape = oval style=filled fontsize=18 ];
-
- "libmaa" -> "dict";
- "libmaa" -> "dictd";
- "libmaa" -> "dictfmt";
- "libmaa" -> "dictzip";
- "libcommon" -> "dict";
- "libcommon" -> "dictd";
- "libcommon" -> "dictfmt";
- "libcommon" -> "dictzip";
- "libdz" -> "dictzip";
- "doc";
-}
diff --git a/doc/my_prjs.dot b/doc/my_prjs.dot
deleted file mode 100644
index 863e2ee..0000000
--- a/doc/my_prjs.dot
+++ /dev/null
@@ -1,51 +0,0 @@
-digraph FSA {
- graph [ ratio=compress layout=dot rankdir=UB ratio=0.4 ];
-
- node [ shape = hexagon style=filled fontsize=20 ];
-
- "mk-configure" [ fillcolor = grey60, fontcolor = white ];
- "lmdbg";
- "paexec";
- "distbb";
- "pkg_online";
- "runawk";
- "pkg_summary-utils";
- "nih";
-
- node [ shape = oval style=solid ];
-
- "dictd";
- "dictem";
-
- node [ shape = box ];
-
- "runawk" -> "pkg_summary-utils";
- "runawk" -> "lmdbg";
- "runawk" -> "paexec";
- "runawk" -> "distbb";
- "runawk" -> "nih";
- "pkg_summary-utils" -> "distbb";
- "paexec" -> "distbb";
- "dictd" -> "dictem";
- "pkg_summary-utils" -> "pkg_online";
- "pkg_summary-utils" -> "pkg_conflicts";
- "pkg_summary-utils" -> "nih";
- "pkg_online" -> "nih";
-
- "pkg_summary-utils";
- "pkg_conflicts";
-
- node [ shape = oval style=solid ];
-
- "dictd" -> "pkg_online";
- "pipestatus" -> "pkg_summary-utils";
-
-}
-
-digraph FSA {
- graph [ ratio=compress layout=dot rankdir=UB ratio=0.4 ];
-
- node [ shape = hexagon style=filled fontsize=20 ];
- "lua-alt-getopt";
- "judyhash";
-}
diff --git a/doc/presentation.tex b/doc/presentation.tex
deleted file mode 100644
index f28356b..0000000
--- a/doc/presentation.tex
+++ /dev/null
@@ -1,1307 +0,0 @@
-%%%begin-myprojects
-\documentclass[hyperref={colorlinks=true}]{beamer}
-
-\usepackage{fancyvrb,relsize}
-\usepackage{graphicx}
-
-\setbeamertemplate{navigation symbols}{}
-
-%\usetheme{Boadilla}
-%\usetheme{CambridgeUS}
-%\usetheme{Malmoe}
-%\usetheme{Singapore}
-%\usetheme{boxes}
-
-%\usecolortheme{crane}
-%\usecolortheme{dove}
-\usecolortheme{seagull} % very cool with \usetheme{default}
-%\usefonttheme{professionalfonts}
-%\useinnertheme{rectangles}
-
-\mode<presentation>
-\title{MK-CONFIGURE (MK-C) -- lightweight,
- easy to use alternative for GNU Autotools}
-\author{Aleksey Cheusov \\ \texttt{vle@gmx.net}}
-\date{Minsk, Belarus, 2012}
-
-\begin{document}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\newenvironment{Code}[1]%
- {\Verbatim[label=\bf{#1},frame=single,%
- fontsize=\small,%
- commandchars=\\\{\}]}%
- {\endVerbatim}
-
-%\newenvironment{Code}[1]%
-% {\semiverbatim[]}%
-% {\endsemiverbatim}
-
-\newenvironment{CodeNoLabel}%
- {\Verbatim[frame=single,%
- fontsize=\small,%
- commandchars=\\\{\}]}%
- {\endVerbatim}
-
-\newenvironment{CodeNoLabelSmallest}%
- {\Verbatim[frame=single,%
- fontsize=\footnotesize,%
- commandchars=\\\{\}]}%
- {\endVerbatim}
-\newenvironment{CodeLarge}%
- {\Verbatim[frame=single,%
- fontsize=\large,%
- commandchars=\\\{\}]}%
- {\endVerbatim}
-
-%\newcommand{\prompt}[1]{\textcolor{blue}{#1}}
-%\newcommand{\prompt}[1]{\textbf{#1}\textnormal{}}
-\newcommand{\prompt}[1]{{\bf{#1}}}
-%\newcommand{\h}[1]{\textbf{#1}}
-%\newcommand{\h}[1]{\bf{#1}\textnormal{}}
-\newcommand{\h}[1]{{\bf{#1}}}
-\newcommand{\URL}[1]{\textbf{#1}}
-\newcommand{\AutohellFile}[1]{\textcolor{red}{#1}}
-\newcommand{\MKCfile}[1]{\textcolor{green}{#1}}
-\newcommand{\ModuleName}[1]{\textbf{#1}\textnormal{}}
-\newcommand{\ProgName}[1]{\textbf{#1}\textnormal{}}
-\newcommand{\ProjectName}[1]{\textbf{#1}\textnormal{}}
-\newcommand{\PackageName}[1]{\textbf{#1}\textnormal{}}
-\newcommand{\MKC}[1]{\large\textsf{#1}\textnormal{}\normalsize}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% \begin{frame}
-%% \frametitle{qqq}
-%% \begin{code}{files in the directory}
-%% bla bla bla
-%% \end{code}
-%% \end{frame}
-
-%%%end-myprojects
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}
- \titlepage
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}
- \frametitle{About this presentation}
- \begin{block}{}
- \begin{itemize}
- \item It is a part of official documentation.
- Latest version is available for download from here\\
- \URL{http://mova.org/\~{}cheusov/pub/mk-c/mk-c.pdf}
-% \item
-% \URL{http://sourceforge.net/projects/mk-configure} \\
-% \URL{http://freshmeat.net/projects/mk-configure}
- \item part 1: Introduction
- \item part 2: A number of samples of use
- \item part 3: More complete list of features, TODO and more.
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}
- \frametitle{Concepts behind mk-configure}
- \begin{block}{Design principles and goals}
- \begin{itemize}
- \item \h{I detest code generation} as in Autotools and CMake!\\
- \h{Library approach} is used instead.
- \item Written in \h{bmake}, portable version of \h{NetBSD make(1)},
- and UNIX tools. \h{No heavy dependencies} like python, ruby and perl.
- As a programming language
- bmake is not as powerful as RuPyPe, but\\
- \h{\mbox{bmake+sh} is good enough} for this task.
- \item Basic principles are \h{similar to
- traditional \mbox{bsd.*.mk} files}.
- Actually mk-c contains heavily reworked Mk files from NetBSD.
- \item \h{Portability} to all UNIX-like systems.
- \item KISS. Only about 4000 lines of code.
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}
- \frametitle{Concepts behind mk-configure}
- \begin{block}{Design principles and goals}
- \begin{itemize}
- \item mk-configure is not only for end-users and packagers
- but for developers too.
- So, one of the main goals is to provide a convenient \h{tool for
- development}.
- \item Declarative approach of writing Makefile(s). Build and
- installation process is controlled with a help of special
- variables and bmake's include files.
- \item \h{Cross-compilation}.
- \item \h{Extensibility}. Extensions to mk-configure are implemented
- using bmake include files and standard UNIX tools, i.e. shell,
- awk, sed, grep etc. when needed.
- \item MK-C is \h{Easy to use}. Only one command is needed to build
- a project --- \h{mkcmake}. \h{Only Makefile(s)} are needed for
- specifying build instructions.
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}
- \frametitle{Concepts behind mk-configure}
- \begin{block}{Negative side-effects}
- \begin{itemize}
- \item End-users/packagers have to install bmake and
- mk-configure to build applications based on mk-configure.
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 1: Hello world application}
-
- \begin{block}{Source code}
- \begin{Code}{Makefile}
-PROG = hello
-
-.include <\h{mkc.prog.mk}>
- \end{Code}
- \begin{Code}{hello.c}
-#include <stdio.h>
-
-int main (int, char **)
-\{
- puts ("Hello World!");
- return 0;
-\}
- \end{Code}
-% \end{columns}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 1: Hello world application}
-
-% \begin{block}
-\begin{block}{How it works}
-\begin{CodeNoLabel}
-\prompt{\$ export PREFIX=/usr SYSCONFDIR=/etc}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for program cc... /usr/bin/cc
-cc -c hello.c
-cc -o hello hello.o
-\prompt{\$ ./hello}
-Hello World!
-\prompt{\$ DESTDIR=/tmp/fakeroot mkcmake install}
-for d in \_ /tmp/fakeroot/usr/bin; do test "\$d" = \_ ||
- install -d "\$d"; done
-install -c -s -o cheusov -g users -m 755
- hello /tmp/fakeroot/usr/bin/hello
-\prompt{\$}
-\end{CodeNoLabel}
-\end{block}
-Supported targets: all, clean, cleandir (distclean), install,
-uninstall, installdirs, depend etc.
-% \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 2: Application using non-standard strlcpy(3)}
-
-\begin{block}{Source code}
- % files
- \begin{Code}{files in the directory}
-\prompt{\$ ls -l}
-total 12
--rw-r--r-- 1 cheusov users 158 May 2 15:04 Makefile
--rw-r--r-- 1 cheusov users 187 May 2 15:05 main.c
--rw-r--r-- 1 cheusov users 332 May 2 15:09 \h{strlcpy.c}
-\prompt{\$}
- \end{Code}
-
-% Makefile
- \begin{Code}{Makefile}
-PROG = strlcpy_test
-SRCS = main.c
-
-\h{MKC\_SOURCE\_FUNCLIBS} = strlcpy
-\h{MKC\_CHECK\_FUNCS3} = strlcpy:string.h
-
-.include <mkc.prog.mk>
- \end{Code}
-\end{block}
-
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 2: Application using non-standard strlcpy(3)}
-
-\begin{block}{Source code}
-\begin{Code}{main.c}
-#include <string.h>
-
-#ifndef \h{HAVE\_FUNC3\_STRLCPY\_STRING\_H}
-size_t strlcpy(char *dst, const char *src, size_t siz);
-#endif
-
-int main (int argc, char** argv)
-\{
- /* Use strlcpy(3) here */
- return 0;
-\}
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 2: Application using non-standard strlcpy(3)}
-
- \begin{block}{How it works on Linux}
-\begin{CodeNoLabel}
-\prompt{\$ CC=icc mkcmake}
-checking for compiler type... \h{icc}
-checking for function strlcpy... \h{no}
-checking for func strlcpy ( string.h )... \h{no}
-checking for program icc... /opt/intel/cc/10.1.008/bin/icc
-icc -c main.c
-icc -c strlcpy.c
-icc -o strlcpy_test main.o \h{strlcpy.o}
-\prompt{\$ echo \_mkc\_*}
-_mkc_compiler_type.err _mkc_compiler_type.res
-_mkc_func3_strlcpy_string_h.c
-_mkc_func3_strlcpy_string_h.err
-_mkc_func3_strlcpy_string_h.res
-_mkc_funclib_strlcpy.c _mkc_funclib_strlcpy.err
-_mkc_funclib_strlcpy.res _mkc_prog_cc.err _mkc_prog_cc.res
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 2: Application using non-standard strlcpy(3)}
-
- \begin{block}{How it works on NetBSD}
-\begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for function strlcpy... \h{yes}
-checking for func strlcpy ( string.h )... \h{yes}
-checking for program cc... /usr/bin/cc
-cc -D\h{HAVE\_FUNC3\_STRLCPY\_STRING\_H}=1 -c main.c
-cc -o strlcpy_test main.o
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 3: Application using plugins}
-
- \begin{block}{Source code}
- \begin{Code}{Makefile}
-PROG = myapp
-
-\h{MKC\_CHECK\_FUNCLIBS} = dlopen:dl
-
-.include <\h{mkc.configure.mk}>
-
-.if $\{\h{HAVE\_FUNCLIB.dlopen}:U0\} || \ {}
- $\{\h{HAVE\_FUNCLIB.dlopen.dl}:U0\}
-CFLAGS += -DPLUGINS_ENABLED=1
-.endif
-
-.include <mkc.prog.mk>
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 3: Application using plugins}
-
- \begin{block}{How it works on QNX}
-\begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for function dlopen ( \h{-ldl} )... \h{yes}
-checking for function dlopen... \h{no}
-checking for program gcc...
- /usr/qnx650/host/qnx6/x86/usr/bin/gcc
-gcc \h{-DPLUGINS\_ENABLED=1} -c myapp.c
-gcc -o myapp myapp.o \h{-ldl}
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 3: Application using plugins}
-
- \begin{block}{How it works on OpenBSD}
-\begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for function dlopen ( \h{-ldl} )... \h{no}
-checking for function dlopen... \h{yes}
-checking for program cc... /usr/bin/cc
-cc \h{-DPLUGINS\_ENABLED=1} -c myapp.c
-cc -o myapp myapp.o
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 4: Support for shared libraries and C++}
-
- \begin{block}{Source code}
- \begin{Code}{Makefile}
-LIB = foobar
-SRCS = foo.\h{cc} bar.\h{cc} baz.\h{cc}
-
-MKPICLIB ?= no
-MKSTATICLIB ?= no
-
-\h{SHLIB\_MAJOR} = 1
-\h{SHLIB\_MINOR} = 0
-
-.include <\h{mkc.lib.mk}>
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 4: Support for shared libraries}
-
- \begin{block}{How it works on Solaris with SunStudio compiler}
-\begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... \h{sunpro}
-checking for program CC... /opt/SUNWspro/bin
-CC -c \h{-KPIC} foo.cc -o foo.os
-CC -c \h{-KPIC} bar.cc -o bar.os
-CC -c \h{-KPIC} baz.cc -o baz.os
-building shared foobar library (version \h{1.0})
-CC \h{-G} \h{-h libfoobar.so.1}
- -o libfoobar.so.1.0 foo.os bar.os baz.os
-ln -sf libfoobar.so.1.0 libfoobar.so
-ln -sf libfoobar.so.1.0 libfoobar.so.1
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 4: Support for shared libraries}
-
- \begin{block}{How it works on Darwin}
-\begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for program c++... /usr/bin/c++
-c++ -c \h{-fPIC -DPIC} foo.cc -o foo.os
-c++ -c \h{-fPIC -DPIC} bar.cc -o bar.os
-c++ -c \h{-fPIC -DPIC} baz.cc -o baz.os
-building shared foobar library (version 1.0)
-c++ \h{-dynamiclib -install\_name}
- /usr/local/lib/libfoobar.1.0.\h{dylib}
- \h{-current\_version 2.0 -compatibility\_version 2}
- -o libfoobar.1.0.dylib foo.os bar.os baz.os
-ln -sf libfoobar.1.0.dylib libfoobar.dylib
-ln -sf libfoobar.1.0.dylib libfoobar.1.dylib
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 4: Support for shared libraries (Exported symbols)}
-
- \begin{block}{}
-\begin{CodeNoLabel}
-\prompt{\$ cat Makefile}
-LIB = foo
-INCS = foo.h
-\h{EXPORT\_SYMBOLS} = foo.sym
-SHLIB_MAJOR = 1
-MKSTATICLIB = no
-.include <mkc.lib.mk>
-\prompt{\$ mkcmake}
-awk 'BEGIN \{print "\{ global:"\} \{print \$0 ";"\}
- END \{print "local: *; \};"\}' foo.sym
- > foo.sym.tmp1 && mv foo.sym.tmp1 foo.sym.tmp
-cc -I. -c -fPIC -DPIC foo.c -o foo.os
-building shared foo library (version 1)
-ld -shared -soname libfoo.so.1
- \h{--version-script foo.sym.tmp} -o libfoo.so.1 foo.os
-\prompt{\$}
-\end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Dependency graph for all subprojects}
-This project consists of several subprojects: dict, dictd, dictfmt,
-dictzip, libdz, libmaa and libcommon. libcommon contains common code
-for executables and should not be installed.
- \begin{figure}
- \includegraphics[width=\textwidth, height=0.50\textheight, keepaspectratio=false]{dep_graph.eps}
- \end{figure}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Files and directories}
- \begin{CodeNoLabel}
-\prompt{\$ ls -l}
-total 4
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 dict
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 dictd
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 dictfmt
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 dictzip
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:03 doc
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 libcommon
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 libdz
-drwxr-xr-x 2 cheusov users 1 Jan 26 12:01 libmaa
--rw-r--r-- 1 cheusov users 306 Jan 26 12:03 \h{Makefile}
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Source code}
- \begin{Code}{Makefile}
-SUBPRJ = libcommon:dict # dict depends on libcommon
-SUBPRJ += libcommon:dictd
-SUBPRJ += libcommon:dictzip
-SUBPRJ += libcommon:dictfmt
-SUBPRJ += libmaa:dict
-SUBPRJ += libmaa:dictd
-SUBPRJ += libmaa:dictfmt
-SUBPRJ += libmaa:dictzip
-SUBPRJ += libdz:dictzip
-SUBPRJ += doc
-
-.include <\h{mkc.subprj.mk}>
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Source code}
- \begin{Code}{libcommon/Makefile}
-# Internal static library that implements functions
-# common for dict, dictd, dictfmt and dictzip applications
-
-LIB = common
-SRCS = str.c iswalnum.c # and others
-
-\h{MKINSTALL} = no # Do not install internal library!
-
-.include <mkc.lib.mk>
- \end{Code}
- \begin{Code}{libcommon/linkme.mk}
-PATH.common := \$\{.PARSEDIR\}
-
-CPPFLAGS += -I\$\{PATH.common\}\h{/include}
-DPLIBDIRS += \$\{PATH.common\}
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Source code}
- \begin{Code}{libmaa/Makefile}
-LIB = maa
-SRCS = set.c prime.c log.c # etc.
-
-\h{INCS} = maa.h
-
-SHLIB_MAJOR = 1
-SHLIB_MINOR = 2
-SHLIB_TEENY = 0
-
-# list of exported symbols
-\h{EXPORT\_SYMBOLS} = maa.sym
-
-.include <mkc.lib.mk>
- \end{Code}
- \begin{Code}{libmaa/linkme.mk}
-PATH.maa := \$\{.PARSEDIR\}
-CPPFLAGS += -I\$\{PATH.maa\}
-DPLIBDIRS += \$\{PATH.maa\}
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Source code}
- \begin{Code}{libmaa/maa.sym}
-hsh_create
-hsh_destroy
-hsh_insert
-hsh_delete
-hsh_retrieve
-...
-lst_create
-lst_destroy
-lst_insert
-...
-set_create
-set_destroy
-set_add
-set_union
-...
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Source code}
- \begin{Code}{libdz/Makefile}
-LIB = dz
-SRCS = dz.c
-
-INCS = dz.h
-
-\h{MKC\_REQUIRE\_HEADERS} = zlib.h
-\h{MKC\_REQUIRE\_FUNCLIBS} = deflate:z
-EXPORT_SYMBOLS = dz.sym
-SHLIB_MAJOR = 1
-SHLIB_MINOR = 0
-LDADD = -lz
-
-.include <mkc.lib.mk>
- \end{Code}
- \begin{Code}{libdz/linkme.mk}
-PATH.dz := \$\{.PARSEDIR\}
-CPPFLAGS += -I\$\{PATH.dz\}
-DPLIBDIRS += \$\{PATH.dz\}
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{Source code}
- \begin{Code}{dictzip/Makefile}
-PROG = dictzip
-MAN = dictzip.1
-
-\h{.include} "../libcommon/linkme.mk"
-\h{.include} "../libdz/linkme.mk"
-\h{.include} "../libmaa/linkme.mk"
-
-DPLIBS += -lcommon -ldz -lmaa
-
-.include <mkc.prog.mk>
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{How it fails ;-)}
- \begin{CodeNoLabel}
-\prompt{\$ mkcmake errorcheck-dictzip}
-==================================================
-errorcheck ===> \h{libcommon}
-...
-errorcheck ===> \h{libmaa}
-...
-==================================================
-errorcheck ===> \h{libdz}
-checking for header zlib.h... \h{no}
-checking for function deflate ( -lz )... \h{no}
-checking for function deflate... \h{no}
-\h{ERROR: cannot find header zlib.h}
-\h{ERROR: cannot find function deflate:z}
-...
-\prompt{\$ echo \$?}
-1
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 5: Big project consisting of several subprojects}
-
- \begin{block}{How it works}
- \begin{CodeNoLabel}
-\prompt{\$ mkcmake dictzip}
-...
-==================================================
-all ===> \h{libdz}
-...
-checking for header zlib.h... \h{yes}
-checking for function deflate ( -lz )... \h{yes}
-...
-==================================================
-all ===> \h{dictzip}
-...
-cc \h{-I../libcommon -I../libdz -I../libmaa} -c dictzip.c
-cc \h{-L/tmp/hello\_dictd/libcommon -L/tmp/hello\_dictd/libdz}
- \h{-L/tmp/hello\_dictd/libmaa} -o dictzip
- dictzip.o -lcommon -lmaa -ldz
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 6: Support for Lua programming language}
-
- \begin{block}{Source code}
- \begin{Code}{Makefile}
-SCRIPTS = foobar # scripts written in Lua
-LUA\_LMODULES = foo bar # modules written in Lua
-LUA\_CMODULE = baz # Lua module written in C
-
-.include <mkc.lib.mk>
- \end{Code}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 6: Support for Lua programming language}
-
- \begin{block}{How it works}
- \begin{CodeNoLabel}
-\prompt{\$ mkcmake errorcheck}
-checking for program pkg-config...
- /usr/pkg/bin/pkg-config
-checking for [pkg-config] lua... 1 (yes)
-checking for [pkg-config] lua --cflags...
- -I/usr/pkg/include
-checking for [pkg-config] lua --libs...
- -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -llua -lm
-checking for [pkg-config] lua --variable=INSTALL_LMOD...
- /usr/pkg/share/lua/5.1
-checking for [pkg-config] lua --variable=INSTALL_CMOD...
- /usr/pkg/lib/lua/5.1
-checking for compiler type... gcc
-checking for header lua.h... yes
-checking for program cc... /usr/bin/cc
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 6: Support for Lua programming language}
-
- \begin{block}{How it works}
- \begin{CodeNoLabel}
-\prompt{\$ export PREFIX=/usr/pkg}
-\prompt{\$ mkcmake all}
-cc -DHAVE_HEADER_LUA_H=1 -I/usr/pkg/include
- -c -fPIC -DPIC baz.c -o baz.os
-building shared baz library (version 1.0)
-cc -shared -Wl,-soname -Wl,libbaz.so.1 -o baz.so baz.os
- -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -llua -lm
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 6: Support for Lua programming language}
-
- \begin{block}{How it works}
- \begin{CodeNoLabel}
-\prompt{\$ mkcmake install DESTDIR=/tmp/fakeroot}
- ...
-\prompt{\$ find /tmp/fakeroot -type f}
-/tmp/fakeroot/usr/pkg/bin/foobar
-/tmp/fakeroot/usr/pkg/lib/lua/5.1/baz.so
-/tmp/fakeroot/usr/pkg/share/lua/5.1/foo.lua
-/tmp/fakeroot/usr/pkg/share/lua/5.1/bar.lua
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 7: Custom tests and sizeof of system types}
-
-\begin{block}{Source code}
-\begin{Code}{Makefile}
-MKC\_CUSTOM\_DIR = \h{\$\{.CURDIR\}/checks}
-
-# m4 supports -P flag (GNU, NetBSD)
-M4 ?= m4 # overridable (\h{gm4})
-MKC\_REQUIRE\_CUSTOM += m4P
-MKC\_CUSTOM\_FN.m4P = \h{m4P.sh}
-.export: M4
-
-# \_\_attribute ((\{con,de\}structor))
-MKC\_REQUIRE\_CUSTOM += \h{constructor destructor}
-
-# sizeof
-MKC\_CHECK\_SIZEOF = char short int long void* long-long
-
-LIB = mylib
-CFLAGS += -DM4\_CMD='"\$\{M4\}"'
-.include <mkc.lib.mk>
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 7: Custom tests and sizeof of system types}
-
-\begin{block}{Source code}
-\begin{Code}{Files in checks/ subdirectory}
-\prompt{\$ ls checks/}
-constructor.c
-destructor.c
-m4P.sh
-\prompt{\$}
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 7: Custom tests and sizeof of system types}
-
-\begin{block}{Source code}
-\begin{Code}{checks/m4P.sh}
-#!/bin/sh
-
-input ()\{
- cat <<'EOF'
-m4\_define(fruit, apple)
-fruit
-EOF
-\}
-
-M4=\$\{M4-m4\}
-
-if input | \$\{M4\} -P | grep \^{}apple > /dev/null; then
- echo 1
-else
- echo 0
-fi
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 7: Custom tests and sizeof of system types}
-\begin{block}{Source code}
-\begin{Code}{checks/constructor.c}
-void __attribute ((constructor))
- dummy (void)
-\{
-\}
-\end{Code}
-\begin{Code}{checks/destructor.c}
-void __attribute ((destructor))
- dummy (void)
-\{
-\}
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 7: Custom tests and sizeof of system types}
-
- \begin{block}{How it works on FreeBSD}
- \begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for sizeof char... \h{1}
-checking for sizeof short... \h{2}
-checking for sizeof int... \h{4}
-checking for sizeof long... \h{4}
-checking for sizeof void*... \h{4}
-checking for sizeof long long... \h{8}
-checking for custom test \h{m4P... 0 (no)}
-checking for custom test \h{constructor}... \h{1 (yes)}
-checking for custom test \h{destructor}... \h{1 (yes)}
-checking for program cc... /usr/bin/cc
-\h{ERROR: custom test m4P failed}
-*** Error code 1
-...
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 7: Custom tests and sizeof of system types}
-
- \begin{block}{How it works on FreeBSD with GNU m4}
- \begin{CodeNoLabel}
-\prompt{\$ M4=gm4 mkcmake}
-checking for compiler type... gcc
-checking for sizeof char... 1
-checking for sizeof short... 2
-checking for sizeof int... 4
-checking for sizeof long... 4
-checking for sizeof void*... 4
-checking for sizeof long long... 8
-checking for custom test \h{m4P... 1 (yes)}
-checking for custom test constructor... 1 (yes)
-checking for custom test destructor... 1 (yes)
-checking for program cc... /usr/bin/cc
-...
-\prompt{\$}
- \end{CodeNoLabel}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 8: Portable version of AWK from NetBSD}
-
-\begin{block}{http://mova.org/\~{}cheusov/pub/mk-configure/nbawk/}
-\begin{Code}{Makefile (part 1)}
-PROG = awk
-SRCS = awkgram.y b.c lex.c lib.c main.c parse.c
- proctab.c run.c tran.c
-YHEADER = yes
-
-MKC\_COMMON\_DEFINES.Linux = -D\_GNU\_SOURCE
-MKC\_COMMON\_HEADERS = ctype.h stdio.h string.h
-MKC\_CHECK\_FUNCS1 = \_\_fpurge:stdio\_ext.h fpurge isblank
-MKC\_CHECK\_FUNCS3 = strlcat
-MKC\_SOURCE\_FUNCLIBS = fpurge strlcat
-
-WARNS= 4
-WARNERR= no # do not treat warnings as errors
-
-MKC\_REQD= 0.19.0 # mk-configure>=0.19.0 is required
-... # to be continued on the next slide
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 8: Portable version of AWK from NetBSD}
-
-\begin{block}{http://mova.org/\~{}cheusov/pub/mk-configure/nbawk/}
-\begin{Code}{Makefile (part 2)}
-... # beginning is on the previous slide
-\h{.include} <mkc.configure.mk>
-
-\h{.if} \$\{HAVE\_FUNC1.isblank:U0\}
-CPPFLAGS += -DHAS\_ISBLANK
-\h{.endif}
-
-\h{.if} !\$\{HAVE\_FUNC1.fpurge:U1\} &&
- !\$\{HAVE_FUNC1.\_\_fpurge.stdio\_ext\_h:U1\}
-MKC\_ERR\_MSG+= "fpurge(3) cannot be found"
-\h{.endif}
-
-CPPFLAGS += -I.
-LDADD += -lm
-
-\h{.include} <mkc.prog.mk>
-\end{Code}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 8: Portable version of AWK from NetBSD}
-
-\begin{block}{run.c}
-\begin{CodeNoLabelSmallest}
---- nbawk-20100903/run.c.orig
-+++ nbawk-20100903/run.c
-@@ -40,6 +40,14 @@
- #include "awk.h"
- #include "awkgram.h"
-
-+#ifndef HAVE_FUNC1_FPURGE
-+int fpurge (FILE *stream);
-+#endif
-+
-+#ifndef HAVE\_FUNC3\_STRLCAT
-+size\_t strlcat(char *dst, const char *src, size_t size);
-+#endif
-+
- #define tempfree(x) if (istemp(x)) tfree(x); else
-
- void stdinit(void);
-\end{CodeNoLabelSmallest}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 8: Portable version of AWK from NetBSD}
-
-\begin{block}{fpurge.c}
-\begin{CodeNoLabelSmallest}
-#include <stdio.h>
-
-#if HAVE\_FUNC1\_\_\_FPURGE\_STDIO\_EXT\_H
-#include <stdio\_ext.h>
-#endif
-
-int fpurge(FILE *stream);
-
-int fpurge(FILE *stream)
-\{
-#if HAVE\_FUNC1\_\_\_FPURGE\_STDIO\_EXT\_H
- \_\_fpurge (stream);
- return 0;
-#else
-#error "cannot find fpurge(3), sorry"
-#endif
-\}
-\end{CodeNoLabelSmallest}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 8: Portable version of AWK from NetBSD}
-
-\begin{block}{strlcpy.c}
-\begin{CodeNoLabel}
-If you need this code, you know where to get it from! ;-)
-\end{CodeNoLabel}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 8: Portable version of AWK from NetBSD}
-
-% \begin{block}
-\begin{block}{How it works on Linux}
-\begin{CodeNoLabel}
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-checking for function fpurge... \h{no}
-checking for function strlcat... \h{no}
-checking for func __fpurge ( stdio_ext.h )... \h{yes}
-checking for func fpurge... \h{no}
-checking for func isblank... \h{yes}
-checking for func strlcat... \h{no}
-checking for program yacc... \h{/usr/bin/yacc}
-...
-cc \h{-Wall -Wstrict-prototypes ...}
- -I. \h{-D\_GNU\_SOURCE} -c awkgram.c
-...
-cc -o awk awkgram.o ... \h{fpurge.o strlcat.o} -lm
-\prompt{\$ ./awk}
-usage: ./awk [-F fs] [-v var=value] [-f progfile
- | 'prog'] [file ...]
-\prompt{\$}
-\end{CodeNoLabel}
-\end{block}
-Supported targets: all, clean, cleandir (distclean), install,
-uninstall, installdirs, depend etc.
-% \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Example 9: Cross-compilation}
-
-\begin{block}{How it works}
-\begin{CodeNoLabel}
-\prompt{\$ export SYSROOT=/tmp/destdir.sparc64}
-\prompt{\$ export TOOLCHAIN\_PREFIX=sparc64--netbsd-}
-\prompt{\$ export TOOLCHAIN\_DIR=/tmp/tooldir.sparc64/bin}
-\prompt{\$ uname -srm}
-NetBSD 5.99.56 amd64
-\prompt{\$ mkcmake}
-checking for compiler type... gcc
-/tmp/tooldir.sparc64/bin/sparc64--netbsd-gcc
- --sysroot=/tmp/destdir.sparc64 -c hello.c -o hello.o
-/tmp/tooldir.sparc64/bin/sparc64--netbsd-gcc
- --sysroot=/tmp/destdir.sparc64 -o hello hello.o
-\prompt{\$ file hello}
-hello: ELF 64-bit MSB executable, SPARC V9, relaxed
- memory ordering, (SYSV), dynamically linked (uses
- shared libs), for NetBSD 5.99.56, not stripped
-\prompt{\$ }
-\end{CodeNoLabel}
-\end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile]
- \frametitle{Features}
- \begin{block}{}
- \begin{enumerate}
- \item Automatic detection of OS features
- (\ModuleName{mkc.configure.mk})
- \begin{itemize}
- \item \h{header presence} (MKC\_\{CHECK,REQUIRE\}\_HEADERS)
- \item \h{function declaration} (MKC\_\{CHECK,REQUIRE\}\_FUNCS[n])
- \item \h{type declaration} (MKC\_\{CHECK,REQUIRE\}\_TYPES)
- \item \h{structure member} (MKC\_\{CHECK,REQUIRE\}\_MEMBERS)
- \item \h{variable declaration} (MKC\_\{CHECK,REQUIRE\}\_VARS)
- \item \h{define declaration} (MKC\_\{CHECK,REQUIRE\}\_DEFINES)
- \item \h{type size} (MKC\_CHECK\_SIZEOF)
- \item \h{function} implementation \h{in the library}
- (MKC\_\{CHECK,REQUIRE\}\_FUNCLIBS and MKC\_SOURCE\_FUNCLIBS)
- \item \h{checks for programs} (MKC\_\{CHECK,REQUIRE\}\_PROGS)
- \item \h{user's custom checks} (MKC\_\{CHECK,REQUIRE\}\_CUSTOM)
- \item \h{built-in checks} (MKC\_CHECK\_BUILTINS), e.g. endianess,
- prog\_flex, prog\_bison, prog\_gawk or prog\_gm4)
- \end{itemize}
- \end{enumerate}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile,t]
- \frametitle{Features}
- \begin{block}{}
- \begin{enumerate}
- \setcounter{enumi}{1}
- \item Building, installing, uninstalling, cleaning
- etc. Supported targets: \h{all}, \h{install},
- \h{uninstall},
- \h{clean}, \h{cleandir} (\h{distclean}), \h{installdirs}, \h{depend}
- and others.
- \item Building \h{standalone programs} (\ModuleName{mkc.prog.mk}),
- \h{static, shared and dynamically loaded libraries}
- (\ModuleName{mkc.lib.mk}) using \h{C},
- \h{C++}, \h{Objective C}, \h{Pascal} and \h{Fortran} compilers.
- Shared libraries
- support is provided for numerous OSes: \h{NetBSD}, \h{FreeBSD},
- \h{OpenBSD},
- \h{DragonFlyBSD}, \h{MirOS BSD}, \h{Linux}, \h{Solaris}, \h{Darwin}
- (MacOS-X), \h{Interix}, \h{Tru64},
- \h{QNX}, \h{HP-UX}, \h{Cygwin} (no support for shared libraries
- and DLLs yet) and
- compilers: \h{GCC}, \h{Intel C/C++} compilers, \h{Portable C compiler} AKA
- \h{pcc}, \h{DEC C/C++ compiler}, \h{HP C/C++ compiler},
- \h{Oracle SunStudio} and others.
- \end{enumerate}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile,t]
- \frametitle{Features}
- \begin{block}{}
- \begin{enumerate}
- \setcounter{enumi}{3}
- \item Handling \h{man} pages, \h{info} manuals and \h{POD} documents.
- \item Handling \h{scripts} as well as \h{plain text files},
- i.e. installing, uninstalling and handling \h{.in files}
- (replacing, for example, \h{@bindir@}, \h{@sysconfdir@}, \h{@version@}
- fragments with real values).
- \item \h{Cross-compilation}. mk-configure itself doesn't run
- target system
- executables, so you can freely use cross-tools (compiler, linker
- etc.). You can also override/set any variable initialized by mk-configure.
- \item Support for \h{pkg-config}.
- \item Support for \h{Lua} programming language.
- \item Support for \h{yacc} and \h{lex}.
- \end{enumerate}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile,t]
- \frametitle{Features}
- \begin{block}{}
- \begin{enumerate}
- \setcounter{enumi}{10}
- \item Support for projects with multiple subprojects
- (\ModuleName{mkc.subprj.mk} and \ModuleName{mkc.subdir.mk}).
- \item Special targets bin\_tar, bin\_targz, bin\_tarbz2, bin\_zip,
- bin\_deb creates .tar, .tar.gz, .tar.bz2, .zip archives and .deb
- package (on Debian Linux).
- \item Parts of mk-configure functionality is
- accesible via individual programs, e.g. \ProgName{mkc\_install},
- \ProgName{mkc\_check\_compiler},
- \ProgName{mkc\_check\_header}, \ProgName{mkc\_check\_funclib},
- \ProgName{mkc\_check\_decl},
- \ProgName{mkc\_check\_prog}, \ProgName{mkc\_check\_sizeof} and
- \ProgName{mkc\_check\_custom}.
- \end{enumerate}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile,t]
- \frametitle{MK-CONFIGURE in real world}
- \begin{block}{Packagers are welcome! ;-)}
- \small
- NetBSD make (bmake) is packaged in the following OSes:
- \begin{itemize}
- \item FreeBSD, pkgsrc (NetBSD, DragonFlyBSD...) (\h{devel/bmake})
- \item Gentoo Linux, Fedora Linux, AltLinux
- \item Debian/Ubuntu\\
- deb http://mova.org/\~{}cheusov/pub/debian lenny main\\
- deb-src http://mova.org/\~{}cheusov/pub/debian lenny main
- \end{itemize}
- mk-configure is packaged in the following OSes
- \begin{itemize}
- \item FreeBSD, pkgsrc (NetBSD, DragonFlyBSD...) (\h{devel/mk-configure})
- \item Debian/Ubuntu\\
- deb http://mova.org/\~{}cheusov/pub/debian lenny main\\
- deb-src http://mova.org/\~{}cheusov/pub/debian lenny main
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile,t]
- \frametitle{MK-CONFIGURE in real world}
- \begin{block}{Real life samples of use}
- \begin{itemize}
- \item Lightweight modular malloc Debugger.\\
- \URL{http://sourceforge.net/projects/lmdbg/}
- \URL{http://pkgsrc.se/wip/lmdbg/}\\
- \item NetBSD version of AWK programming language, ported
- to other Operating Systems.\\
- \URL{http://mova.org/\~{}cheusov/pub/mk-configure/nbawk/}
- \item Modules support for AWK programming language\\
- \URL{http://sourceforge.net/projects/runawk/}
- \URL{http://pkgsrc.se/lang/runawk/}\\
- \item Tool for distributing tasks over network or CPUs\\
- \URL{http://sourceforge.net/projects/paexec/}
- \URL{http://pkgsrc.se/wip/paexec/}\\
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile,t]
- \frametitle{MK-CONFIGURE in real world}
- \begin{block}{Real life samples of use}
- \begin{itemize}
- \item Distributed fault tolerant bulk build tool for pkgsrc\\
- \URL{http://mova.org/\~{}cheusov/pub/distbb/}\\
- \URL{http://pkgsrc.se/wip/distbb/}\\
- \item Client/server package search system for pkgsrc\\
- \URL{http://mova.org/\~{}cheusov/pub/pkg\_online/}
- \URL{http://pkgsrc.se/wip/pkg\_online-client/}\\
- \URL{http://pkgsrc.se/wip/pkg\_online-server/}\\
- \item Any project based on traditional
- \ModuleName{bsd.\{prog,lib,subdir\}.mk} can easily be converted
- to \MKC{mk-configure}.
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%begin-myprojects
-
-\begin{frame}[fragile,t]
- \frametitle{MK-CONFIGURE in real world}
- \begin{block}{My opensource projects using
- mk-configure (filled hexagon), Mk files (box) and others (oval)}
- \begin{figure}
- \includegraphics[width=\textwidth, height=0.60\textheight, keepaspectratio=false]{my_prjs.eps}
- \end{figure}
-% \begin{figure}
-% \includegraphics[width=0.7\textwidth, height=0.10\textwidth, keepaspectratio=false]{my_prjs2.eps}
-% \end{figure}
- \end{block}
-\end{frame}
-
-%%%end-myprojects
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile,t]
- \frametitle{MK-C needs your help ;-)}
- \begin{block}{}
- \begin{itemize}
- \item Packagers are welcome (Linux distros, OpenBSD etc.)
- \item MK-C distribution contains \h{a lot of regression tests and
- samples of use} (samples are used for testing too).\\
- \h{Shell accounts} on
- "exotic" UNIX-like platforms are needed (AIX, HP-UX, non-ELF BSDs,
- IRIX, Solaris, Hurd etc.) for testing and development.
- \item Review of the documentation. At the moment only mk-configure(7),
- samples/ and this presentation are available.
- \item sf.net provides two mailing lists:\\
- \h{mk-configure-help} and \h{mk-configure-discuss}.
- \item TODO file in the distribution is full of tasks.
- \end{itemize}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile]
- \frametitle{}
- \begin{block}{}
- \begin{center}
- \Huge{The END.}
- \end{center}
- \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%begin-myprojects
-
-\end{document}
-
-%%%end-myprojects