summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README160
1 files changed, 78 insertions, 82 deletions
diff --git a/README b/README
index 1b137fd..11ea316 100644
--- a/README
+++ b/README
@@ -6,9 +6,9 @@ in and for bmake (portable version of NetBSD make) and UNIX tools
(shell, awk etc.). FreeBSD and OpenBSD make are not good. They are
incompatible with NetBSD bmake. GNU make is not good too.
-mk-configure provides a number of include files written in and for
-bmake and a number of standalone programs that should be installed to
-user's host for building a software.
+mk-configure provides a number of include files written in bmake and a
+number of standalone programs that should be installed to user's host
+for building a software.
mk-configure features:
@@ -54,43 +54,46 @@ GOALS OF THE PROJECT
files (bmake's libraries) and external executables to make its job.
Developers should distribute source code only, not blobs.
- - Single top level command for building a software, bmake in our
- case. Instead of running and learning
+ - Single top level command for building a program ("mkcmake").
+ Instead of running and learning
autoconf/automake/aclocal/autoreconf/config.status/autoheader and
- many other tools and the way they interact with each other you
- should learn only ONE tool, bmake.
+ many other tools, and the way they interact with each other, you
+ should learn only ONE tool, bmake (mkcmake is a trivial wrapper
+ over bmake).
- No bloat. At this time mk-configure consists of far less than 10000
lines of code (excluding examples and regression tests). Compare
this number with autotools sources and you'll see a difference.
- - Simplicity for both developers and users. The only file developer
+ - Simplicity for both developers and users. The only file developers
should be aware of during development is 'Makefile'. Users just
- run 'env <options> bmake all <options>' to build a software. The
- same for developers -- for building a software, just run 'bmake'.
+ run 'env <options> mkcmake all <options>' to build a software. The
+ same for developers -- for building a software, just run 'mkcmake'.
- Portability. At the moment the following systems and compilers are
supported:
- - NetBSD. Tested on NetBSD-5.0/x86 and NetBSD-2.0/alpha with
- gcc, pcc and clang.
+ - NetBSD. Tested on NetBSD-5.0/x86 and NetBSD-2.0/alpha and later
+ versions with gcc, pcc and clang.
- - FreeBSD. Tested on FreeBSD-6.2/x86, 7.1/spark64 and 7.1/x86
- with gcc.
+ - FreeBSD. Tested on FreeBSD-6.2/x86, 7.1/spark64, 7.1/x86 and
+ later versions with gcc.
- - OpenBSD. Tested on OpenBSD-3.8/x86 and 4.5/x86 with gcc.
+ - OpenBSD. Tested on OpenBSD-3.8/x86, 4.5/x86 and later versions
+ with gcc.
- - DragonFlyBSD. Tested on DragonFly-2.4.1-RELEASE/x86 with gcc.
+ - DragonFlyBSD. Tested on DragonFly-2.4.1-RELEASE/x86 and later
+ versions with gcc.
- - MirOS BSD. Tested on MirBSD-10/x86 with gcc.
+ - MirOS BSD. Tested on MirBSD-10/x86 and later versions with gcc.
- - Linux. Tested on Linux/{x86,x86-64} with gcc, icc, sunstudio-12.
+ - Linux. Tested on Linux/{x86,x86-64} with gcc, icc and SunStudio.
- - Solaris. Tested on Solaris-10/x86 and Solaris-10/spark64
- with sunstudio-11, sunstudio-12 and gcc.
+ - Solaris. Tested on Solaris-{10,11}/x86 and Solaris-10/spark64
+ with SunStudio-11, SunStudio-12 and gcc.
- Darwin (MacOS-X). Tested on Darwin-8.11.0/ppc (MacOS-X Tiger)
- with native gcc.
+ and later version with native gcc and clang.
- Interix. Tested on Interix-3.5/x86 with gcc.
@@ -105,8 +108,8 @@ GOALS OF THE PROJECT
"big iron" :-( .
If you don't see your favorite system/compiler here and want to
- help me to improve mk-configure, feel free to contact
- me. mk-configure needs your help! ;-)
+ help me to improve mk-configure, feel free to contact me.
+ mk-configure needs your help! ;-)
- Declarative approach in writing Makefiles. Instead of specifying
_HOW_ to build your software, you should specify source files,
@@ -116,7 +119,7 @@ GOALS OF THE PROJECT
Makefiles at all. Most useful things are already implemented in
mk-configure include files including implementation for targets
all, install, uninstall as well as support for building the shared
- libraries, installation to ${DESTDIR} etc. Usually Makefile contain
+ libraries, installation to ${DESTDIR} etc. Usually, Makefile contain
only variable assignments, .include-s and .if/.for directives.
- No heavy dependencies like Python or Perl.
@@ -129,9 +132,9 @@ HOW TO USE MK-CONFIGURE?
- Install mk-configure to your system.
- Develop your software using bmake and mkc.*.mk include files
provided by mk-configure.
- - Run 'mkcmake' or 'mkcmake all' for building your software.
+ - Run 'mkcmake' or 'mkcmake all' for building your program.
(mkcmake is a trivial wrapper over bmake).
- You need not autoconf/autoheader/automake/aclocal/config.guess/
+ You don't need autoconf/autoheader/automake/aclocal/config.guess/
/autoreconf/config.status/config.sub and blah-blah-blah
BMAKE is magic enough ;-)
@@ -139,15 +142,13 @@ HOW TO USE MK-CONFIGURE?
Users and software packagers:
- Install bmake (and optionally sys.mk) to your system.
- Install mk-configure to your system.
- - Run bmake for building a software and pass to it
+ - Run mkcmake for building a software and pass to it
the building options, e.g.
env CC=pcc CFLAGS='-O0 -g' PREFIX=/opt/software \
mkcmake all install
- (mkcmake is a wrapper for bmake)
-
- There is no need for configure script and analogs.
+ There is no need for "configure" script and analogs.
BMAKE is magic enough ;-)
@@ -166,8 +167,9 @@ WHAT'S WRONG WITH GNU AUTOTOOLS (IN SHORT)?
this goal makes development painful. Autotools is a hell for
development/developers. Too much of top-level commands: automake,
autoconf, aclocal, autoheader... All its functionality can be
- implemented using one top-level command -- bmake. Autotools is also
- a well known source of headaches for users and software packagers.
+ implemented using one top-level command -- mkcmake. Autotools is
+ also a well known source of headaches for users and software
+ packagers.
4) In theory, configure script generated by autoconf is portable
because it is written in portable shell. In practice this is not
@@ -179,17 +181,17 @@ WHAT'S WRONG WITH GNU AUTOTOOLS (IN SHORT)?
projects. In theory this can make building thousands of projects
(e.g. software packages in OS distributions) dramatically faster.
- 6) configures script generated by autoconf are too slow even on
+ 6) "configure" script generated by autoconf are too slow even on
modern hardware and systems having fast fork(2) system call
(notably *BSD and Linux).
7) Many (most?) real-life configure.ac break the cross-compiling.
- 8) In my view autotools (automake and autoconf) is BADLY designed. I
- personally dislike code generation idea because it is ... extreamly
- ugly :-/ approach even if the generated code is claimed to be
- "portable". Today it is not a problem to install any kind of
- software building tools and to them more efficiently.
+ 8) In my view autotools (automake and autoconf) are BADLY designed.
+ Personally, I dislike code generation for software build because it
+ is extremely ugly approach even if the generated code is claimed to
+ be "portable". Nowadays it is not a problem to install any kind of
+ software building tools and use them more efficiently.
-------------------------------------------------------------------------
WHAT MK-CONFIGURE CONSISTS OF?
@@ -198,14 +200,15 @@ WHAT MK-CONFIGURE CONSISTS OF?
These include files are responsible for building, installing and
uninstalling applications, static and shared libraries, scripts,
- plain files, man and info pages, hard and soft links etc...
+ text files, man and info pages, hard and soft links etc...
+
NOTE FOR *BSD USERS: unlike well known Mk files from *BSD
systems mkc.*.mk files provide the following features (this list
is not complete, see mk-configure.7 for details).
- PREFIX, BINDIR, MANDIR etc. variables default to directories
under /usr/local. By default the same variables in bsd.*.mk
- files are set to directories under /usr. This is because they
+ files are set to directories under /usr. The reason is that they
are used mainly for maintaining *BSD's own code while
mk-configure is targeted to all UNIX-like systems, not only *BSD.
@@ -236,7 +239,7 @@ WHAT MK-CONFIGURE CONSISTS OF?
set, LDFLAGS is modified accordingly. See examples/ projects.
- "cleandir" and "distclean" targets that remove all temporary
- files and mk.configure.mk's cache files.
+ files and mk-configure.mk's cache files.
- support for texinfo/info files. There is no need to .include
a special include files such as <bsd.info.mk> file.
@@ -254,7 +257,7 @@ WHAT MK-CONFIGURE CONSISTS OF?
real ${PREFIX}, ${SYSCONFDIR} etc. See examples/ subdirectory for
the samples.
-- mkc.configure.mk script which is a replacement for GNU autoconf. Its
+- mkc.configure.mk is a replacement for GNU autoconf. Its
functionality is large enough to describe here. It short, it allows
to check for presence of header files, function or variable
declarations, presence of function in a particular library, defines,
@@ -264,7 +267,7 @@ WHAT MK-CONFIGURE CONSISTS OF?
- Standalone full-functional
mkc_check_{funclib,header,sizeof,decl,prog,custom,compiler} and
- other programs that can be used without bmake and without mkc.*.mk
+ other programs that can be used without mkcmake and without mkc.*.mk
files. Read appropriate man pages.
-------------------------------------------------------------------------
@@ -273,10 +276,10 @@ DOCUMENTATION:
- Presentation about mk-configure (basic ideas and simple samples of use).
See INSTALLATION section for build instructions.
- - Instead of screenshots :-) I've prepared lots of samples under
+ - Instead of screenshots :-) I've prepared a lot of examples under
examples/ subdirectory.
- - Documentation for include files is in mk-configure(7).
+ - Documentation for mk include files is in mk-configure(7).
- Most programs (mkc_check_{decl,header,funclib,sizeof,prog,custom})
have -h option and manual pages.
@@ -284,30 +287,24 @@ DOCUMENTATION:
- Read the FAQ document. It may be helpful.
- Real life projects based on mk-configure:
- - Lightweight Modular malloc(3) debugger.
- http://sourceforge.net/projects/lmdbg/
+ - Most of my projects use mk-configure.
+ https://github.com/cheusov
- AWK interpreter from NetBSD cvs tree,
ported to Darwin, Solaris, Linux and other BSD.
http://mova.org/~cheusov/pub/mk-configure/nbawk/
- getopt_long(3) like module for Lua programming language (>=0.8.0)
- http://luaforge.net/projects/alt-getopt/
+ http://sourceforge.net/projects/lua-alt-getopt/
-------------------------------------------------------------------------
IS MK-CONFIGURE STABLE?
-"mk-configure" is currently in alpha stage of development.
-
-!!! API IS NOT STABLE YET AND MAY BE CHANGED IN THE NEXT RELEASE !!!
-
-IF YOU WANT TO HELP ME STABILIZE IT,
-SEND YOUR SUGGESTIONS AND IDEAS TO ME AS SOON AS POSSIBLE ;-)
-
-Also mk-configure is not feature-complete yet, see TODO file for details.
+Basic functionality of "mk-configure" is stable
+but it is not feature-complete yet, see TODO file for details.
-------------------------------------------------------------------------
INSTALLATION:
- 1) Install bmake to your system.
+ 1) Install bmake(1).
Sources are available here.
ftp://ftp.NetBSD.org/pub/NetBSD/misc/sjg/
@@ -318,7 +315,14 @@ INSTALLATION:
Please make sure you install stable version of bmake and
'bmake test' succeeds (see section 3 below).
- 2)
+ 2) Install NetBSD version of mkdep(1).
+ Sources are available here.
+
+ https://code.google.com/p/bmkdep/
+
+ Traditional BSD mkdep(1) is also good but NetBSD version is just better.
+
+ 3)
# cd mk-configure-X.Y.Z/
# export PREFIX=/usr/local (the default)
@@ -332,7 +336,7 @@ INSTALLATION:
Of course, you can change PREFIX, SYSCONFDIR, BINDIR etc.
to whatever you want. PREFIX defaults to /usr/local.
- 3)
+ 4)
# bmake test # For testing mk-configure, this step is optional.
# Note that testing requires lex(1), yacc(1),
# pkg-config(1), glib2 library and other things
@@ -345,17 +349,15 @@ INSTALLATION:
# e.g.
# NOSUBDIR='hello_glib2 hello_lua lua_dirs' bmake test
- 4)
+ 5)
# bmake install
or
# env DESTDIR=/tmp/temproot bmake install
- 5) You can also build a simple presentation by running either of the
+ 6) You can also build a simple presentation by running either of the
following commands:
- bmake doc
- bmake -C doc presentation.pdf
- bmake -C doc presentation.ps
+ bmake all-presentation
NOTE: I'd recommend to use the latest stable version of bmake. Old
bmake may not work, e.g., /usr/bin/make shipped with NetBSD-2.0 is
@@ -364,7 +366,7 @@ INSTALLATION:
NOTE: In order to work properly bmake needs sys.mk file that defines
default variable values and suffix rules. mk-configure doesn't
- need them, but bmake always tries to load this file. The problem
+ need it, but bmake always tries to load this file. The problem
is that different Mk-files libraries may conflict due to common
sys.mk. This is why mk-c's own mk files are installed to its own
directory (${PREFIX}/share/mkc-mk by default) and the same for
@@ -380,22 +382,14 @@ INSTALLATION:
need awk, sed, grep and some other POSIX tools too.
-------------------------------------------------------------------------
-PACKAGES
+MK-CONFIGURE BINARY PACKAGE
- If you use pkgsrc (cross platforms packaging system developped by
- NetBSD team), you may find package for latest mk-configure in
- devel/mk-configure.
-
- Debian/Ubuntu Linux users may install mk-configure by adding
- the following lines
-
- deb http://mova.org/~cheusov/pub/debian lenny main
- deb-src http://mova.org/~cheusov/pub/debian lenny main
-
- to /etc/apt/sources.list and then using apt or aptitude commands.
- Binary packages are available only for Debian/Lenny/i386.
-
- mk-configure is also packaged in FreeBSD ports (devel/mk-configure).
+ Binary packages for mk-configure are available in the following systems:
+ - NetBSD pkgsrc (devel/mk-configure).
+ - FreeBSD ports (devel/mk-configure)
+ - Debian/Ubuntu Linux (mk-configure)
+ - AltLinux (mk-configure)
+ - RHEL (mk-configure in repoforge repository)
-------------------------------------------------------------------------
FEEDBACK
@@ -408,8 +402,10 @@ For free e-mail subscription for mk-configure releases, visit
http://freshmeat.net/projects/mk-configure/
page.
+For pull requests, use github
+http://github.com/cheusov/mk-configure/
+
Feel free to notify me about spelling errors in the documentation.
-English is not my first language. If you want to participate the
-project, let me know.
+English is not my first language.
-------------------------------------------------------------------------