Subversion Repositories Vertical

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
<html>
2
<head>
3
<title>Using Autoconf With Mktclapp</title>
4
</head>
5
<body bgcolor="white">
6
<h1 align=center>Using Autoconf With Mktclapp</h1>
7
 
8
<p>This article describes one approach for using
9
<a href="http://www.gnu.ai.mit.edu/software/autoconf/autoconf.html">autoconf</a>
10
to generate configure scripts for projects that use
11
mktclapp.  The configure scripts that are generated using this
12
approach have been tested to compile natively
13
on Linux, Windows95 (Cygwin20), SunOS,
14
and HPUX and to cross-compile from Linux to Windows95.  The
15
configure script also supports using a build directory that
16
is completely independent of the source directory.  The source
17
code can even be on a read-only filesystem, such as a CD-ROM.</p>
18
 
19
<p>This information is provided as a public service, with the hope
20
that it might be useful to someone.  There is no warranty as to
21
how well this system works.  Nor is there any promise of support.</p>
22
 
23
<h2>Overview</h2>
24
 
25
<img src="config.jpg" align=right>
26
 
27
<p>The image to the right gives an overview of how the scheme described
28
in this article works.
29
The developer must come up with two input files:
30
<b>configure.in</b> and <b>makemake.tcl.in</b>.  The
31
first file, <b>configure.in</b> is the M4 script that autoconf
32
uses to generate its <b>configure</b> shell script.  There
33
is a template <b>configure.in</b> file included with this
34
article that should work in most applications with
35
little or no modification.  The <b>makemake.tcl.in</b>
36
is a TCL script that will be used to generate a
37
Makefile for the project.  The <b>configure</b> script
38
will make a few modifications to this TCL script before
39
it runs, in order to customize it for the target platform.
40
A template <b>makemake.tcl.in</b> is also included with
41
this article.</p>
42
 
43
<p>After generating the <b>configure.in</b> file, the developer
44
then runs GNU Autoconf version 1.13 to generate a
45
<b>configure</b> shell script.  The <b>configure</b> shell
46
script becomes part of the source tree.  The <b>configure</b>
47
shell script is not considered a build product.  It is placed
48
under configuration management just like any other source
49
file.</p>
50
 
51
<p>To build the project, the developer creates a new
52
directory that is separate from the source tree.
53
Suppose the source tree is rooted in a directory named
54
<b>src</b> which is a peer of the build directory which
55
is named <b>bld</b>.  To build the project, the developer
56
changes to the <b>bld</b> directory and types:</p>
57
 
58
<blockquote><pre>
59
../src/configure
60
</pre></blockquote>
61
 
62
<p>This command runs the configure script that autoconf
63
generated.  The configure script examines the system on
64
which it is running, discovers an appropriate C compiler,
65
compiler options,
66
Tcl/Tk libraries, and BLT libraries, then generates
67
a <b>Makefile</b> and a file named <b>makemake.tcl</b>
68
based on <b>makemake.tcl.in</b>.  All of these generated
69
files are in the build directory.  (Notice that the
70
<b>Makefile</b> is built without a template <b>Makefile.in</b>.
71
This is a bit unusual for autoconf, but it is part of
72
the design.  Read on...)<p>
73
 
74
<p>After the configure script is run, the developer
75
types:</p>
76
 
77
<blockquote><pre>
78
make
79
</pre></blockquote>
80
 
81
<p>This command launches the make utility on the <b>Makefile</b>
82
that the <b>configure</b> script generated.  This <b>Makefile</b>
83
is very simple.  About all it does is run <b>makemake.tcl</b>
84
to generate a new makefile called <b>all.mk</b>.  The make
85
program then calls itself recursively on the newly generated
86
<b>all.mk</b> in order to build the project.  Note that the
87
project is build in the local directory, not the source directory.
88
Note also that
89
any old version of the make utility will do.  GNU make is
90
not required.</p>
91
 
92
<br clear=both>
93
<h2>Advantages To This Approach</h2>
94
 
95
<p>There are, of course, many ways to make use of autoconf.
96
And most other ways are more conventional that the scheme
97
described above.  But this approach does have certain
98
advantages.</p>
99
 
100
<ul>
101
<li>
102
   <p><b>The same source directory can be used to build for multiple
103
   targets.</b></p>
104
 
105
   <p>By putting the source tree on an NFS- or SMB-mounted filesystem,
106
   lots of different computers can read the sources at the same time.
107
   And they can all compile off of the same source tree, putting there
108
   build products in separate directories.  The separate builds can
109
   even take place at the same time.</p></li>
110
 
111
<li>
112
   <p><b>The source tree can be on a read-only filesystem.</b></p>
113
 
114
   <p>This allows you to compile directly from a source tree
115
   located on a CD-ROM, for example.  There is no need to copy
116
   the source tree onto read-write media prior to the build.</p></li>
117
 
118
<li>
119
   <p><b>The use of "tclsh" in the build process gives much more
120
   control to the developer.</b></p>
121
 
122
   <p>A makefile is not a program.  There are a lot of interesting
123
   things that a makefile will not do.  For example, standard makefiles
124
   have no provisions for conditional compilation.  (GNU make has
125
   this capability, but GNU make is not standard and is not
126
   installed on every system.)  Running tclsh to generate the makefile
127
   allows the developer to radically change the build process depending
128
   on the characteristics of the target machine.</p></li>
129
</ul>
130
</p>
131
 
132
<h2>How To Adapt This Approach To Your Own Project</h2>
133
 
134
<p>If you want to try using the build scheme described here,
135
first get a copy of the <b>configure.in</b> template.  You
136
can find the template at:</p>
137
 
138
<blockquote>
139
<a href="http://www.hwaci.com/sw/mktclapp/configure.in">
140
http://www.hwaci.com/sw/mktclapp/configure.in
141
</a>
142
</blockquote>
143
 
144
<p>You will need to modify this file to suit your application.
145
But the modifications are normally modest.  First change the
146
argument of the AC_INIT() macro to be the name of a file
147
in your project's source tree.  If your project does not
148
use the BLT extension, then disable the tests for
149
BLT by commenting them out.
150
If your project uses some extensions other
151
than BLT, you may have to add new test to the <b>configure.in</b>.
152
Use the existing code as your guide.</p>
153
 
154
<p>The <b>configure.in</b> contains comments to help you understand
155
how it works.  You may also want to refer to the Autoconf
156
manual for information on the Autoconf macros.</p>
157
 
158
<p>The next step is to generate a suitable <b>makemake.tcl.in</b>.
159
You can begin with the template at:</p>
160
 
161
<blockquote>
162
<a href="http://www.hwaci.com/sw/mktclapp/makemake.tcl.in">
163
http://www.hwaci.com/sw/mktclapp/makemake.tcl.in
164
</a>
165
</blockquote>
166
 
167
<p>The template is really a working <b>makemake.tcl.in</b> file for
168
a specific project.  The project is not Open-Source and so the
169
source code is not available.  But that is not important.  The
170
comments in the template file should give you plenty of guidance
171
on how to adapt the template to your particular project.  Remember,
172
you are working with plain ordinary TCL code.  The output of
173
the script will become a makefile.  Be creative.</p>
174
 
175
<p>The final step is to run autoconf version 1.13 or later
176
to generate the <b>configure</b> script.  You can obtain a
177
copy of autoconf from lots of places on the net.  Use a
178
search engine to find one near you if you don't already have
179
autoconf installed on your machine.</p>
180
 
181
<h2>Parting Words</h2>
182
 
183
<p>For additional information, read the template files.</p>
184
 
185
<p>It is important to emphasize that there are many different
186
ways of building a project, and many different ways of using
187
autoconf.  You are welcomed to use the approach outlined here
188
if it suits your needs.  Hopefully you will find this information
189
helpful.  But the techniques described here will not work in
190
every circumstance.  You may have to change things.  You may
191
have to use a completely different build scheme.</p>
192
 
193
<p>If you fix bugs or make extensions to the template files described above,
194
then patches sent to the author at
195
<a href="mailto:drh@hwaci.com">drh@hwaci.com</a> will be
196
welcomed.  Your patches will be gratefully acknowledged and
197
added to the distribution.   Reports of bugs without fixes,
198
or requests for new features, may or may not be acknowledged.
199
 
200
</body>
201
</html>