diff options
author | Andrew Shadura <andrewsh@debian.org> | 2014-01-05 22:42:41 +0100 |
---|---|---|
committer | Andrew Shadura <andrew@shadura.me> | 2015-07-25 14:44:33 +0200 |
commit | c8659b636be5e763c5dc028a5db7294b1af2648c (patch) | |
tree | 7dacf7580ff8c7d8c64682eaa28350bc47fbd56e /presentation/presentation.tex | |
parent | 004c4cd3db1d9ad252eccbc1e9e6c54ec61a2927 (diff) | |
parent | aba913436a8521abe405a04ed71388989e1d646f (diff) |
Imported Debian patch 0.25.0-1
Diffstat (limited to 'presentation/presentation.tex')
-rw-r--r-- | presentation/presentation.tex | 1307 |
1 files changed, 1307 insertions, 0 deletions
diff --git a/presentation/presentation.tex b/presentation/presentation.tex new file mode 100644 index 0000000..f28356b --- /dev/null +++ b/presentation/presentation.tex @@ -0,0 +1,1307 @@ +%%%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 |