1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
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? ;-)
----------------------------------------------------------------------
|