Update of /cvsroot/squeak/squeak/platforms/unix/doc/HowToBuildFromSource.html In directory sc8-pr-cvs1:/tmp/cvs-serv30143/doc/HowToBuildFromSource.html Added Files: HowToBuildFromSource-img1.png HowToBuildFromSource-node1.html HowToBuildFromSource-node2.html HowToBuildFromSource-node3.html HowToBuildFromSource-node4.html HowToBuildFromSource-node5.html HowToBuildFromSource-node6.html HowToBuildFromSource.css HowToBuildFromSource.html contents.png index.html index.png next.png next_g.png prev.png prev_g.png up.png up_g.png Log Message: Ian Piumarta's release 3.4.1 --- NEW FILE: HowToBuildFromSource-img1.png --- PNG Pä --- NEW FILE: HowToBuildFromSource-node1.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>Contents</TITLE> <META NAME="description" CONTENT="Contents"> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="next" HREF="HowToBuildFromSource-node2.html"> <LINK REL="previous" HREF="HowToBuildFromSource.html"> <LINK REL="up" HREF="HowToBuildFromSource.html"> <LINK REL="next" HREF="HowToBuildFromSource-node2.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html41" HREF="HowToBuildFromSource-node2.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html37" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html31" HREF="HowToBuildFromSource.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html39" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html42" HREF="HowToBuildFromSource-node2.html">1 configure - build</A> <B> Up:</B> <A NAME="tex2html38" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html32" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A>   <B> <A NAME="tex2html40" HREF="HowToBuildFromSource-node5.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <BR> <H2><A NAME="SECTION00010000000000000000"> Contents</A> </H2> <!--Table of Contents--> <UL> <LI><A NAME="tex2html43" HREF="HowToBuildFromSource-node2.html">1 configure - build - install</A> <LI><A NAME="tex2html44" HREF="HowToBuildFromSource-node3.html">2 Generating your own VM and plugin sources</A> <LI><A NAME="tex2html45" HREF="HowToBuildFromSource-node4.html">3 Adding your own plugins</A> <UL> <LI><A NAME="tex2html46" HREF="HowToBuildFromSource-node4.html#SECTION00041000000000000000">3.1 Plugin-specific configuration</A> <LI><A NAME="tex2html47" HREF="HowToBuildFromSource-node4.html#SECTION00042000000000000000">3.2 Plugin-specific Makefile declarations and rules</A> <LI><A NAME="tex2html48" HREF="HowToBuildFromSource-node4.html#SECTION00043000000000000000">3.3 Examples taken from existing plugins</A> <LI><A NAME="tex2html49" HREF="HowToBuildFromSource-node4.html#SECTION00044000000000000000">3.4 Coping with VMMaker quirks</A> <LI><A NAME="tex2html50" HREF="HowToBuildFromSource-node4.html#SECTION00045000000000000000">3.5 If all else fails</A> </UL> <BR> <LI><A NAME="tex2html51" HREF="HowToBuildFromSource-node5.html">Index</A> </UL> <!--End of Table of Contents--> <P> <BR><HR> <ADDRESS> Ian Piumarta 2002-06-05 </ADDRESS> </BODY> </HTML> --- NEW FILE: HowToBuildFromSource-node2.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>1 configure - build - install</TITLE> <META NAME="description" CONTENT="1 configure - build - install"> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="next" HREF="HowToBuildFromSource-node3.html"> <LINK REL="previous" HREF="HowToBuildFromSource-node1.html"> <LINK REL="up" HREF="HowToBuildFromSource.html"> <LINK REL="next" HREF="HowToBuildFromSource-node3.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html64" HREF="HowToBuildFromSource-node3.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html58" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html52" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html60" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html62" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html65" HREF="HowToBuildFromSource-node3.html">2 Generating your own</A> <B> Up:</B> <A NAME="tex2html59" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html53" HREF="HowToBuildFromSource-node1.html">Contents</A>   <B> <A NAME="tex2html61" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html63" HREF="HowToBuildFromSource-node5.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <H1><A NAME="SECTION00020000000000000000"> 1 <TT>configure</TT> - <TT>build</TT> - <TT>install</TT></A> </H1> <P> Unix Squeak is built using the (almost) universal ``<TT>configure; make; make install</TT>''. If you haven't come across this before, read on... <P> Create a build<A NAME="43"></A> directory (which we will call `<TT>blddir</TT>' from now on) and then `<TT>cd</TT>' to it: <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ mkdir blddir <BR> $ cd blddir <BR></FONT></TT> </DIV> </FONT> <P> A convenient place is just next to the <TT>platforms</TT> directory, like this: <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ cd squeak <BR> $ ls <BR> platforms src ... <BR> $ mkdir bld <BR> $ cd bld <BR></FONT></TT> </DIV> </FONT> <P> Create the build<A NAME="55"></A> environment by running the script <TT>configure</TT> which lives in the <TT>platforms/unix/config</TT> directory. <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: The <TT>configure</TT> script accepts lots of options. To see a list of them, run: `<code>configure --help</code>' </FONT></BLOCKQUOTE> <P> Assuming you've created the <TT>blddir</TT> next to <TT>platforms</TT>, this would be: <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ ../platforms/unix/config/configure <BR></FONT></TT> </DIV> </FONT> <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: This assumes that the VMMaker sources are in `<TT>../src</TT>'. However, since the Unix Squeak support code is independent of the image version from which VMMaker generated the interpreter/plugin sources, it is possible that your source distribution comes with more than one <TT>src</TT> directory (corresponding to more than one image version used to generate the sources). In such cases you will have to tell <TT>configure</TT> which source version to use, via the `-<TT>-with-src</TT>' option. For example, if there are two source directories called <TT>src-3.2gamma-4857</TT> and <TT>src-3.3.alpha-4881</TT> then you would use <I>one</I> of the following commands: <FONT COLOR="#ff0000"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#ff0000"> <BR> $ .../configure --with-src=src-3.2gamma-4857 <BR> <I>or</I> <BR> $ .../configure --with-src=src-3.3alpha-4881 <BR></FONT></TT> </DIV> </FONT> </FONT></BLOCKQUOTE> <P> Build the VM and plugins by running <TT>make</TT>: <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ make <BR></FONT></TT> </DIV> </FONT> <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: If you want to build just the VM (without external plugins) or just the external plugins (without the VM) then you can use: `<code>make squeak</code>' or `<code>make plugins</code>' respectively. </FONT></BLOCKQUOTE> <P> Finally install the VM, plugins and manual pages: <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ su root <BR> $ make install <BR></FONT></TT> </DIV> </FONT> <P> <HR> <!--Navigation Panel--> <A NAME="tex2html64" HREF="HowToBuildFromSource-node3.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html58" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html52" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html60" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html62" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html65" HREF="HowToBuildFromSource-node3.html">2 Generating your own</A> <B> Up:</B> <A NAME="tex2html59" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html53" HREF="HowToBuildFromSource-node1.html">Contents</A>   <B> <A NAME="tex2html61" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html63" HREF="HowToBuildFromSource-node5.html">Index</A></B> <!--End of Navigation Panel--> <ADDRESS> Ian Piumarta 2002-06-05 </ADDRESS> </BODY> </HTML> --- NEW FILE: HowToBuildFromSource-node3.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>2 Generating your own VM and plugin sources</TITLE> <META NAME="description" CONTENT="2 Generating your own VM and plugin sources"> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="next" HREF="HowToBuildFromSource-node4.html"> <LINK REL="previous" HREF="HowToBuildFromSource-node2.html"> <LINK REL="up" HREF="HowToBuildFromSource.html"> <LINK REL="next" HREF="HowToBuildFromSource-node4.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html78" HREF="HowToBuildFromSource-node4.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html72" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html66" HREF="HowToBuildFromSource-node2.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html74" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html76" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html79" HREF="HowToBuildFromSource-node4.html">3 Adding your own</A> <B> Up:</B> <A NAME="tex2html73" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html67" HREF="HowToBuildFromSource-node2.html">1 configure - build</A>   <B> <A NAME="tex2html75" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html77" HREF="HowToBuildFromSource-node5.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <H1><A NAME="SECTION00030000000000000000"> 2 Generating your own VM and plugin sources</A> </H1> <P> Generating your own VM/plugin sources might be necessary for various reasons: <UL> <LI>you want to change the mix of internal vs. external plugins </LI> <LI>you want to remove some plugins from the VM that you will never use </LI> <LI>you've pulled in some updates that modify the Interpreter or plugins </LI> <LI>you've filed-in (or written) a whole new plugin </LI> <LI>etc... </LI> </UL> <P> Version 3.2 (and later) of Unix Squeak use <A NAME="tex2html2" HREF="http://minnow.cc.gatech.edu/squeak/2105">VMMaker</A><A NAME="100"></A> to generate the core interpreter and plugin sources. <P> Start Squeak in the top-level directory (the one containing the <TT>platforms</TT> directory); for example: <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ ls <BR> src platforms ... <BR> $ squeak MyCoolPlugin.image <BR></FONT></TT> </DIV> </FONT> <P> Open a VMMakerTool and modify the setup to your liking. <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: The VMMaker configuration used to build the distributions of Unix Squeak is available in <TT>platforms/unix/config/VMMaker.config</TT>.<A NAME="108"></A> </FONT></BLOCKQUOTE> <P> Then click on the relevant ``<I>generate ...</I>'' button. You can now `<TT>configure; make; make install</TT>' in your <TT>blddir</TT> (as described above). <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: You only need to run <TT>configure</TT><A NAME="515"></A> <B><U>once</U></B> for a given <TT>blddir</TT> (on the same host). If you modify the choice of plugins (or change whether they're internal/external) then you can update the build environment by running the <TT>config.status</TT><A NAME="517"></A> script in the <TT>bldddir</TT>, like this: <FONT COLOR="#ff0000"> <DIV ALIGN="LEFT"> <TT> $ squeak MyCoolPlugin.image <BR> ... generate new sources ... <BR> $ cd blddir <BR> $ ./config.status <BR> $ make <BR></TT> </DIV> </FONT>This is <I>much</I> faster than running <TT>configure</TT> all over again. (In fact, <TT>make</TT> should detect any changes to the plugin configuration and re-run <TT>config.status</TT> for you automatically.) </FONT></BLOCKQUOTE> <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: `<TT>configure</TT>' doesn't actually create any files. The last thing it does is run `<TT>config.status</TT>' to create the configured <I>file</I>s in <TT>blddir</TT> from the corresponding <I>file.in</I>s in the <TT>unix/config</TT> directory. So in the remainder of this document the phrase `during configuration' means <I>either</I> when running `<TT>configure</TT>' for the first time <I>or</I> running `<TT>config.status</TT>' to update an already <TT>configure</TT>d build environment. </FONT></BLOCKQUOTE> <P> <HR> <!--Navigation Panel--> <A NAME="tex2html78" HREF="HowToBuildFromSource-node4.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html72" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html66" HREF="HowToBuildFromSource-node2.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html74" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html76" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html79" HREF="HowToBuildFromSource-node4.html">3 Adding your own</A> <B> Up:</B> <A NAME="tex2html73" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html67" HREF="HowToBuildFromSource-node2.html">1 configure - build</A>   <B> <A NAME="tex2html75" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html77" HREF="HowToBuildFromSource-node5.html">Index</A></B> <!--End of Navigation Panel--> <ADDRESS> Ian Piumarta 2002-06-05 </ADDRESS> </BODY> </HTML> --- NEW FILE: HowToBuildFromSource-node4.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>3 Adding your own plugins</TITLE> <META NAME="description" CONTENT="3 Adding your own plugins"> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="next" HREF="HowToBuildFromSource-node5.html"> <LINK REL="previous" HREF="HowToBuildFromSource-node3.html"> <LINK REL="up" HREF="HowToBuildFromSource.html"> <LINK REL="next" HREF="HowToBuildFromSource-node5.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html92" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html86" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html80" HREF="HowToBuildFromSource-node3.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html88" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html90" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html93" HREF="HowToBuildFromSource-node5.html">Index</A> <B> Up:</B> <A NAME="tex2html87" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html81" HREF="HowToBuildFromSource-node3.html">2 Generating your own</A>   <B> <A NAME="tex2html89" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html91" HREF="HowToBuildFromSource-node5.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <!--Table of Child-Links--> <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A> <UL> <LI><A NAME="tex2html94" HREF="HowToBuildFromSource-node4.html#SECTION00041000000000000000">3.1 Plugin-specific configuration</A> <UL> <LI><A NAME="tex2html95" HREF="HowToBuildFromSource-node4.html#SECTION00041100000000000000">3.1.1 <TT>AC_PLUGIN_CHECK_LIB(<I>lib</I>,<I>func</I>)</TT></A> <LI><A NAME="tex2html96" HREF="HowToBuildFromSource-node4.html#SECTION00041200000000000000">3.1.2 <TT>AC_PLUGIN_DEFINE_UNQUOTED(<I>keyword</I>,<I>text</I>)</TT></A> <LI><A NAME="tex2html97" HREF="HowToBuildFromSource-node4.html#SECTION00041300000000000000">3.1.3 Plugin-specific variables</A> </UL> <BR> <LI><A NAME="tex2html98" HREF="HowToBuildFromSource-node4.html#SECTION00042000000000000000">3.2 Plugin-specific <TT>Makefile</TT> declarations and rules</A> <UL> <LI><A NAME="tex2html99" HREF="HowToBuildFromSource-node4.html#SECTION00042100000000000000">3.2.1 The anatomy of a plugin's <TT>Makefile</TT></A> <LI><A NAME="tex2html100" HREF="HowToBuildFromSource-node4.html#SECTION00042200000000000000">3.2.2 A note about <TT>$(COMPILE)</TT> and <TT>$(LINK)</TT> commands</A> <LI><A NAME="tex2html101" HREF="HowToBuildFromSource-node4.html#SECTION00042300000000000000">3.2.3 Specifying additional source directories</A> <LI><A NAME="tex2html102" HREF="HowToBuildFromSource-node4.html#SECTION00042400000000000000">3.2.4 Including additional material in the default <TT>Makefile</TT></A> <LI><A NAME="tex2html103" HREF="HowToBuildFromSource-node4.html#SECTION00042500000000000000">3.2.5 Replacing the default <TT>Makefile</TT> entirely</A> </UL> <BR> <LI><A NAME="tex2html104" HREF="HowToBuildFromSource-node4.html#SECTION00043000000000000000">3.3 Examples taken from existing plugins</A> <UL> <LI><A NAME="tex2html105" HREF="HowToBuildFromSource-node4.html#SECTION00043100000000000000">3.3.1 Configuration</A> <LI><A NAME="tex2html106" HREF="HowToBuildFromSource-node4.html#SECTION00043200000000000000">3.3.2 Customising the <TT>Makefile</TT></A> </UL> <BR> <LI><A NAME="tex2html107" HREF="HowToBuildFromSource-node4.html#SECTION00044000000000000000">3.4 Coping with VMMaker quirks</A> <LI><A NAME="tex2html108" HREF="HowToBuildFromSource-node4.html#SECTION00045000000000000000">3.5 If all else fails</A> </UL> <!--End of Table of Child-Links--> <HR> <H1><A NAME="SECTION00040000000000000000"> 3 Adding your own plugins</A> </H1> <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: This section is intended primarily for plugin developers. </FONT></BLOCKQUOTE> <P> If your plugin<A NAME="146"></A> requires no platform-specific tweaks then there's nothing for you to do. <TT>configure</TT> (and <TT>config.status</TT>) will provide a default <TT>Makefile</TT> for it that should work. If your plugin requires only platform-independent tweaks (and/or additional hand-written code) then these go in <TT>platforms/Cross/plugins</TT>, and there's nothing for you to do (in Unixland). <P> On the other hand, if you require special <TT>configure</TT> tests or additional declarations/rules in your plugin's <TT>Makefile</TT> then you need to specify them explicitly. <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: Unix Squeak subscribes to the following philopsophy: </FONT></BLOCKQUOTE> <P> <BLOCKQUOTE><FONT COLOR="#ff0000"><I>Absolutely everything that is specific<A NAME="154"></A> to Unix (sources, headers, <TT>configure</TT> and <TT>Makefile</TT> extensions, etc.) lives under <TT>platforms/unix</TT>.</I> </FONT></BLOCKQUOTE> <P> <BLOCKQUOTE><FONT COLOR="#ff0000">In other words: there is not (nor aught there be) <I>any</I> Unix-related information under the <TT>platforms/Cross</TT> directory. (Unix Squeak is entirely encapsulated under <TT>platforms/unix</TT> and is utterly immune to ``random junk'' elsewhere in the <TT>platforms</TT> tree.) </FONT></BLOCKQUOTE> <P> First you must create a new directory<A NAME="163"></A> under <TT>platforms/unix/plugins</TT> named after your plugin. This directory will hold the files describing the additional configuration checks and/or <TT>Makefile</TT> contents. For example, if your plugin is called ``MyCoolPlugin'' then <FONT COLOR="#0000ff"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#0000ff"> <BR> $ mkdir platforms/unix/plugins/MyCoolPlugin <BR></FONT></TT> </DIV> </FONT> <P> would be the thing to do. (The following sections will refer to this directory as <TT>platdep</TT> since the full path is quite a mouthful of typing for my lazy fingers.) <P> <H2><A NAME="SECTION00041000000000000000"> 3.1 Plugin-specific configuration</A> </H2> <P> Your plugin can ask <TT>configure</TT><A NAME="173"></A> to run additional tests (and to set additional variables in its output files) simply by including a file called <TT>acinclude.m4</TT><A NAME="522"></A> in it's <TT>platdep</TT> directory. <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: The <TT>configure</TT><A NAME="523"></A> script is `compiled' from several other files. If you create a `<TT>platdep./acinclude.m4</TT>' file then you <I>must</I> `recompile'<A NAME="524"></A> <TT>configure</TT>. You can do this by `<TT>cd</TT>'ing to <TT>unix/config</TT> and running `<TT>make</TT>', or (if you have GNU <TT>make</TT>) from the <TT>blddir</TT> like this: <FONT COLOR="#ff0000"> <DIV ALIGN="LEFT"> <TT> <FONT COLOR="#ff0000"> <BR> $ make -C ../platforms/unix/config <BR></FONT></TT> </DIV> </FONT> </FONT></BLOCKQUOTE> <P> In addition to the usual <TT>autoconf</TT> macros, the following macros<A NAME="527"></A> are available specifically for Squeak plugins to use: <P> <H3><A NAME="SECTION00041100000000000000"> 3.1.1 <TT>AC_PLUGIN_CHECK_LIB(<I>lib</I>,<I>func</I>)</TT></A> </H3> <A NAME="529"></A> <P> This is similar to the <TT>autoconf</TT> `<TT>AC_CHECK_LIB</TT>' macro. <P> <I>func</I> is the name of a function required by the plugin, defined in the external (system) library <I>lib</I>. The macro checks that the library is available (via `<TT>-l<I>lib</I></TT>') and then adds it to the list of libraries required by the plugin (see the explanation of <TT>[plibs]</TT> in Section <A HREF="HowToBuildFromSource-node4.html#sec:plibs">3.2.1</A> for a description of how library dependencies for plugins are handled). <P> If <I>func</I> cannot be found in <I>lib</I> then the plugin will be disabled and a message to that effect printed during configuration. (The VM can still be built, <I>without</I> rerunning VMMaker or reconfiguring, and the plugin will simply be ommitted from it.) <P> <H3><A NAME="SECTION00041200000000000000"> 3.1.2 <TT>AC_PLUGIN_DEFINE_UNQUOTED(<I>keyword</I>,<I>text</I>)</TT></A> </H3> <P> This<A NAME="532"></A> is similar to the <TT>autoconf</TT> `<TT>AC_DEFINE_UNQUOTED</TT>' macro. <P> <I>keyword</I> is a <TT>Makefile</TT> keyword (usually of the form `[<I>name</I>]') and <I>text</I> is arbitrary text to be associated with it. Calling this macro causes <TT>mkmf</TT> to substitute <I>text</I> for all occurrences of <I>keyword</I> in the <TT>Makefile</TT> generated for the plugin. <P> <H3><A NAME="SECTION00041300000000000000"> 3.1.3 Plugin-specific variables</A> </H3> <P> The following variables are also set during the execution of a plugin-specific <TT>acinclude.m4</TT>: <P> <DL COMPACT> <DT></DT> <DD><TT>${plugin}</TT> is the name of the plugin; </DD> <DT></DT> <DD><TT>${topdir}</TT> is the path to the top-level directory (containing <TT>platforms</TT>); </DD> <DT></DT> <DD><TT>${vmmdir}</TT> is the path to the VMMaker `<TT>src</TT>' directory. </DD> </DL> <P> <H2><A NAME="SECTION00042000000000000000"> 3.2 Plugin-specific <TT>Makefile</TT> declarations and rules</A> </H2> <P> Three<A NAME="534"></A> mechanisms are avilable for this: <OL> <LI>scanning additional dirrectories for sources and headers; </LI> <LI>including a few additional lines into the default <TT>Makefile</TT>; and </LI> <LI>replacing entirely the default <TT>Makefile</TT> with a hand-written one. </LI> </OL> (The last option isn't as scary as it might sound: read on...) <P> <H3><A NAME="SECTION00042100000000000000"> 3.2.1 The anatomy of a plugin's <TT>Makefile</TT></A> </H3> <P> Before proceeding, let's take a minute to understand how Unix Squeak compiles and links files in its default <TT>Makefile</TT> for plugins. The default <TT>Makefile</TT><A NAME="536"></A><A NAME="537"></A> looks like this: <P> <BLOCKQUOTE> <BLOCKQUOTE> <FONT COLOR="#000000"> <DIV ALIGN="LEFT"> <TT> # default Makefile for Unix Squeak plugins <BR> <BR>[make_cfg] <BR>[make_plg] <BR> <BR> XINCLUDES = [includes] <BR> OBJS = [targets] <BR> TARGET = [target] <BR> PLIBS = [plibs] <BR> <BR>[make_inc] <BR> <BR>$(TARGET) : $(OBJS) Makefile <BR> $(LINK) $(TARGET) $(OBJS) $(PLIBS) <BR> <BR>[make_targets] <BR> <BR>.force : <BR></TT> </DIV> </FONT> </BLOCKQUOTE> </BLOCKQUOTE> <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: The keywords<A NAME="541"></A> appearing between `<TT>[</TT> square brackets <TT>]</TT>' are substituted during configuration by a preprocessor called `<TT>mkmf</TT>'<A NAME="542"></A> according to the kind of plugin (internal/external) being built. </FONT></BLOCKQUOTE> <P> <TT><B>[make_cfg]</B></TT><A NAME="544"></A> <A NAME="545"></A> is the configured variable section. It contains the platform-specific information gleaned by <TT>configure</TT> while it was figuring out which compiler you have, what flags your linker needs, where to install stuff, and so on. <P> <TT><B>[make_plg]</B></TT><A NAME="547"></A> <A NAME="548"></A> contains a handful of definitions which depend on whether the plugin is being compiled as internal or external: <BLOCKQUOTE> <TABLE CELLPADDING=3> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">o </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">the extension for object files</TD> </TR> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">a </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">the extension for plugins</TD> </TR> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">COMPILE </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">the command to compile a source file into an object file</TD> </TR> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">LINK </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">the command to link one or more object files into a plugin</TD> </TR> </TABLE> </BLOCKQUOTE> <P> For internal plugins: <TT>$o</TT> is `<TT>.o</TT>' and <TT>$a</TT> is `<TT>.a</TT>'. <TT>$(COMPILE)</TT> is the C compiler (`<TT>$(CC) ... -o</TT>', so the first thing after the command <I>must</I> be the output filename) and <TT>$(LINK)</TT> is archiver (`<TT>ar -rc</TT>', again requiring the output file to follow immediately). Note that internal plugins are built as `<TT>ar</TT>' archives before being linked into the final binary. <P> For external plugins: <TT>$o</TT> is `<TT>.lo</TT>', <TT>$a</TT> is `<TT>.la</TT>', and <TT>$(COMPILE)</TT> and <TT>$(LINK)</TT> are invocations of `<TT>libtool</TT>' to create position-independent objects and shared libraries (with a `<TT>-o</TT>' appearing right at the end, so the first thing after the command <I>must</I> be the output filename). <P> <TT><B>[includes]</B></TT><A NAME="551"></A> <A NAME="552"></A> is a list of `<TT>-I<I>dir</I></TT>' compiler flags, one for each of the directories<A NAME="554"></A> <FONT COLOR="#000000"> <DIV ALIGN="LEFT"> <TT> src/plugins/<I>name</I> <BR> src/vm/intplugins/<I>name</I> <BR> platforms/Cross/plugins/<I>name</I> <BR> platforms/unix/plugins/<I>name</I> <BR></TT> </DIV> </FONT>in which at least one header file is present. <P> <TT><B>[targets]</B></TT><A NAME="557"></A> <A NAME="558"></A> is a list of object files corresponding to the source (<TT>.c</TT>) files found in the directories:<A NAME="559"></A> <FONT COLOR="#000000"> <DIV ALIGN="LEFT"> <TT> src/plugins/<I>name</I>/*.c <BR> src/vm/intplugins/<I>name</I>/*.c <BR> platforms/Cross/plugins/<I>name</I>/*.c <BR> platforms/unix/plugins/<I>name</I>/*.c <BR></TT> </DIV> </FONT>where each source file has been stripped of the directory name and had the `<TT>.c</TT>' converted into `<TT>$o</TT>'. <P> <TT><B>[target]</B></TT><A NAME="562"></A> <A NAME="563"></A> is the name of the plugin, including the <TT>$a</TT> extension. <P> <TT><B>[plibs]</B></TT><A NAME="565"></A> <A NAME="566"></A> <A NAME="sec:plibs"></A>is a list of zero or more libraries on which the plugin depends (as detected using the macro <TT>AC_PLUGIN_CHECK_LIB</TT> in the plugin-specific <TT>acinclude.m4</TT>). If the plugin is being built internally then this list is empty and the required libraries are included in the final link command. If the plugin is being built externally then the plugin itself (a shared object) is linked against these libraries (via <TT>[plist]</TT>) rather than with the main VM binary. <P> (This is to ensure that a missing shared object needed by an external plugin will only affect the operation of that plugin and not prevent the rest of the VM from running, which would be the case if the entire VM were linked against it.) <P> <TT><B>[make_inc]</B></TT><A NAME="568"></A> <A NAME="569"></A> is the contents of the <TT>Makefile.inc</TT> file in your plugin's <TT>platdep</TT> directory (or empty if this file doesn't exist). <P> <TT><B>[make_targets]</B></TT><A NAME="571"></A> <A NAME="572"></A> is a list of rules<A NAME="573"></A> for building the files listed in <TT>[targets]</TT>. Each rule<A NAME="345"></A> looks like this: <P> <DIV ALIGN="LEFT"> <TT> name$o : <I>original/source/dir/</I>name.c <BR> $(COMPILE) name$o <I>original/source/dir/</I>name.c <BR></TT> </DIV> <P> <H3><A NAME="SECTION00042200000000000000"> 3.2.2 A note about <TT>$(COMPILE)</TT> and <TT>$(LINK)</TT> commands</A> </H3> <P> You should <I>never</I> pass additional flags to these commands<A NAME="575"></A><A NAME="576"></A><A NAME="577"></A> explicitly. This is because you cannot know how they are defined. (Their definitions depend on whether the plugin is being built internally or externally -- and might even change radically in future releases of Unix Squeak.) <P> Instead you should pass additional compiler/linker flags<A NAME="578"></A> to these commands by setting the following variables in `<TT>Makefile.inc</TT>' or `<TT>Makefile.in</TT>': <BLOCKQUOTE> <A NAME="579"></A> <A NAME="580"></A> <A NAME="581"></A> <A NAME="582"></A> <TABLE CELLPADDING=3> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">XCPPFLAGS </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">`<TT>-I</TT>' flags for <TT>cpp</TT></TD> </TR> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">XDEFS </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">`<TT>-D</TT>' flags for <TT>cpp</TT></TD> </TR> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">XCFLAGS </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">anything to be passed to the compiler</TD> </TR> <TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">XLDFLAGS </TT></TD> <TD ALIGN="LEFT"> </TD><TD ALIGN="LEFT">anything to be passed to the linker</TD> </TR> </TABLE> </BLOCKQUOTE> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: `<TT>mkmf</TT>' already uses `<TT>XINCLUDES</TT>'<A NAME="584"></A> <A NAME="585"></A> to pass the list of directories containing plugin header files to <TT>cpp</TT>. You can redefine it if you like, but make sure that `<TT>[includes]</TT>' appears in its definition (or in the definition of `<TT>XCPPFLAGS</TT>'). </FONT></BLOCKQUOTE> <P> <H3><A NAME="SECTION00042300000000000000"> 3.2.3 Specifying additional source directories</A> </H3> <P> <TT>mkmf</TT><A NAME="586"></A> looks for a file in your plugin's <TT>platdep</TT> directory called `<TT>mkmf.subdirs</TT>'.<A NAME="587"></A> If this file exists then it should contain a list of directory names relative to the top-level directory (the one containing the <TT>src</TT> and <TT>platform</TT> directories). These directories<A NAME="391"></A> will be added to the list of locations searched for `<TT>.c</TT>' and `<TT>.h</TT>' files while constructing the substitutions for `<TT>[includes]</TT>', `<TT>[targets]</TT>' and `<TT>[make_targets]</TT>'. <P> <H3><A NAME="SECTION00042400000000000000"> 3.2.4 Including additional material in the default <TT>Makefile</TT></A> </H3> <P> If the file <TT>platdep/Makefile.inc</TT><A NAME="589"></A> exists then <TT>mkmf</TT> will substitute its contents into the <TT>Makefile</TT> in place of the <TT>[make_inc]</TT> keyword. <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: <TT>Makefile.inc</TT><A NAME="590"></A> is read into the <TT>Makefile</TT> under construction <I>before</I> <TT>mkmf</TT> performs substitutions on the `<TT>[keyword]</TT>'s. In other words, your <TT>Makefile.inc</TT> can use the above keywords to include relevant declarations and rules without worrying about whether the plugin is internal or external. </FONT></BLOCKQUOTE> <P> <H3><A NAME="SECTION00042500000000000000"> 3.2.5 Replacing the default <TT>Makefile</TT> entirely</A> </H3> <P> If neither of the above are sufficient then you can create a complete <TT>Makefile</TT><A NAME="592"></A> template called <TT>platdep/Makefile.in</TT>.<A NAME="593"></A> <TT>mkmf</TT> will use this template instead of the default <TT>Makefile</TT> template shown earlier, and will perform keyword substitutions on it as described above to create the final <TT>Makefile</TT>. (In other words, simply copying the default template shown earlier will result in a <TT>Makefile</TT> identical to the one that <TT>mkmf</TT> would have produced by default. <P> <H2><A NAME="SECTION00043000000000000000"> 3.3 Examples taken from existing plugins</A> </H2> <P> By way of example we'll look at how two existing plugins specialise their configuration and <TT>Makefile</TT>s. <P> <H3><A NAME="SECTION00043100000000000000"> 3.3.1 Configuration</A> </H3> <P> The <TT>B3DAcceleratorPlugin</TT> requires OpenGL in order to compile. The file <TT>unix/plugins/B3DAcceleratorPlugin/acinclude.m4</TT><A NAME="594"></A> contains a single call to an <TT>autoconf</TT>-style macro: <P> <DIV ALIGN="LEFT"> <TT> AC_PLUGIN_SEARCH_LIBS(glIsEnabled, GL) <BR></TT> </DIV> <P> This works similarly to the <TT>autoconf</TT> `<TT>AC_SEARCH_LIBS</TT>' macro: If a library <TT>libGL.{a,so}</TT> (OpenGL) exists and exports the function <TT>glIsEnabled()</TT> then `<TT>-lGL</TT>' is added to the final VM link command. Otherwise the plugin is disabled (and a message warning of the fact is printed). <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: There's a bug here. This should also check for `<TT>GL_VERSION_1_1</TT>' in headers. </FONT></BLOCKQUOTE> <P> <H3><A NAME="SECTION00043200000000000000"> 3.3.2 Customising the <TT>Makefile</TT></A> </H3> <P> The <TT>Mpeg3Plugin</TT> requires a (modified) <TT>libmpeg</TT> to be compiled along with it. The sources for this library are in (several) subdirectories of <TT>Cross/Meg3Plugin</TT> and they require additional <TT>cpp</TT> definitions in order to compile correctly. <P> To cope with the additional directories, <TT>unix/plugins/Mpeg3Plugin/mkmf.subdirs</TT><A NAME="596"></A> simply lists them: <P> <DIV ALIGN="LEFT"> <TT> platforms/Cross/plugins/Mpeg3Plugin/libmpeg <BR> platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio <BR> platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video <BR></TT> </DIV> <P> To cope with the additional <TT>cpp</TT> definitions, we could have written a tiny <TT>Makefile.inc</TT><A NAME="597"></A> containing: <P> <DIV ALIGN="LEFT"> <TT> XDEFS = -DNOPTHREADS <BR></TT> </DIV> <P> Unfortunately the additional source directories contain various utility and test programs (which <I>must not</I> be built) so we cannot rely on <TT>mkmf</TT> generating the correct <TT>[targets]</TT> list. <P> Instead we just copy the default <TT>Makefile</TT> ``template'' (shown above) as <TT>Mpeg3Plugin/Makefile.in</TT> and insert the required list of targets (and <TT>cpp</TT> definition) manually. The end result<A NAME="598"></A> looks like this: <BLOCKQUOTE> <BLOCKQUOTE> <FONT COLOR="#000000"> <DIV ALIGN="LEFT"> <TT> # Makefile.in for Mpeg3Plugin in Unix Squeak <BR> <BR>[make_cfg] <BR>[make_plg] <BR> <BR> TARGET = Mpeg3Plugin$a <BR> <BR> PLUGIN = Mpeg3Plugin$o <BR> VIDEO = getpicture$o headers$o idct$o macroblocks$o <I>etc...</I> <BR> AUDIO = dct$o header$o layer1$o layer2$o layer3$o <I>etc...</I> <BR> LIBMPEG = bitstream$o changesForSqueak$o libmpeg3$o <I>etc...</I> <BR> <BR> OBJS = $(PLUGIN) $(VIDEO) $(AUDIO) $(LIBMPEG) <BR> <BR> XINCLUDES = [includes] <BR> XDEFS = -DNOPTHREADS <BR> <BR>$(TARGET) : $(OBJS) Makefile <BR> $(LINK) $(TARGET) $(OBJS) <BR> <BR>[make_targets] <BR> <BR>.force : <BR></TT> </DIV> </FONT> </BLOCKQUOTE> </BLOCKQUOTE> <P> <BLOCKQUOTE> <FONT COLOR="#ff0000"> Note: The default `<TT>[make_targets]</TT>' will contain additional rules for the objects that we're trying to avoid building (because it's built from an exhaustive list of `<TT>.c</TT>' files in the source directories). This does no harm since the offending rules can never be triggered (their targets are not listed in `<TT>OBJS</TT>'). </FONT></BLOCKQUOTE> <P> <H2><A NAME="SECTION00044000000000000000"> 3.4 Coping with VMMaker quirks</A> </H2> <P> VMMaker<A NAME="478"></A> will refuse to compile a plugin if it thinks the plugin requires platform support. This is ``all-or-nothing'': if platform support is required on <I>one</I> platform then it is required on <I>all</I> platforms (even if the plugin compiles quite happily without platform support in Unix). <P> The easiest way to add ``null'' platform support is to place an empty `<TT>Makefile.inc</TT>' in the plugin's <TT>platdep</TT> directory. (To see this in action, look in <TT>unix/plugins/JPEGReadWriter2Plugin</TT>.) <P> <H2><A NAME="SECTION00045000000000000000"> 3.5 If all else fails</A> </H2> <P> (Where<A NAME="485"></A> ``all else failing'' is defined as: ``after trying for 20 minutes and still getting nowhere''.) <P> If you're writing a plugin that needs platform support (beyond dumb inclusion of a few additional `<TT>.c</TT>' files) and this document has been of no help at all (or if you understood it but you're still suffering from ``all else failing'') then send me <A NAME="tex2html3" HREF="mailto:ian...@in...">mail</A> and I'll be happy to help you with the various platdep files. <P> <P> <HR> <!--Navigation Panel--> <A NAME="tex2html92" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html86" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html80" HREF="HowToBuildFromSource-node3.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html88" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html90" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html93" HREF="HowToBuildFromSource-node5.html">Index</A> <B> Up:</B> <A NAME="tex2html87" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html81" HREF="HowToBuildFromSource-node3.html">2 Generating your own</A>   <B> <A NAME="tex2html89" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html91" HREF="HowToBuildFromSource-node5.html">Index</A></B> <!--End of Navigation Panel--> <ADDRESS> Ian Piumarta 2002-06-05 </ADDRESS> </BODY> </HTML> --- NEW FILE: HowToBuildFromSource-node5.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>Index</TITLE> <META NAME="description" CONTENT="Index"> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="next" HREF="HowToBuildFromSource-node6.html"> <LINK REL="previous" HREF="HowToBuildFromSource-node4.html"> <LINK REL="up" HREF="HowToBuildFromSource.html"> <LINK REL="next" HREF="HowToBuildFromSource-node6.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html119" HREF="HowToBuildFromSource-node6.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html115" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html109" HREF="HowToBuildFromSource-node4.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html117" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <BR> <B> Next:</B> <A NAME="tex2html120" HREF="HowToBuildFromSource-node6.html">About this document ...</A> <B> Up:</B> <A NAME="tex2html116" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html110" HREF="HowToBuildFromSource-node4.html">3 Adding your own</A>   <B> <A NAME="tex2html118" HREF="HowToBuildFromSource-node1.html">Contents</A></B> <BR> <BR> <!--End of Navigation Panel--> <BR> <H2><A NAME="SECTION00050000000000000000"> Index</A> </H2><DL COMPACT> <DT><STRONG><TT>$(COMPILE)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#575">3.2.2</A> <DT><STRONG><TT>$(LINK)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#576">3.2.2</A> <DT><STRONG><TT>$(XCFLAGS)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#581">3.2.2</A> <DT><STRONG><TT>$(XCPPFLAGS)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#579">3.2.2</A> <DT><STRONG><TT>$(XDEFS)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#580">3.2.2</A> <DT><STRONG><TT>$(XINCLUDES)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#584">3.2.2</A> <DT><STRONG><TT>$(XLDFLAGS)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#582">3.2.2</A> <DT><STRONG><TT>[includes]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#551">3.2.1</A> <DT><STRONG><TT>[make_cfg]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#544">3.2.1</A> <DT><STRONG><TT>[make_inc]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#568">3.2.1</A> <DT><STRONG><TT>[make_plg]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#547">3.2.1</A> <DT><STRONG><TT>[make_targets]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#571">3.2.1</A> <DT><STRONG><TT>[plibs]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#565">3.2.1</A> <DT><STRONG><TT>[target]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#562">3.2.1</A> <DT><STRONG><TT>[targets]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#557">3.2.1</A> <DT><STRONG><TT>AC_PLUGIN_CHECK_LIB</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#529">3.1.1</A> <DT><STRONG><TT>AC_PLUGIN_DEFINE_UNQUOTED</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#532">3.1.2</A> <DT><STRONG><TT>acinclude.m4</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#522">3.1</A> <DL COMPACT> <DT><STRONG>example</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#594">3.3.1</A> </DL> <DT><STRONG>additional plugin source directories</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#391">3.2.3</A> <DT><STRONG>build directory</STRONG> <DD><DL COMPACT> <DT><STRONG>configuring</STRONG> <DD><A HREF="HowToBuildFromSource-node2.html#55">1</A> <DT><STRONG>creating</STRONG> <DD><A HREF="HowToBuildFromSource-node2.html#43">1</A> </DL> <DT><STRONG><TT>config.status</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node3.html#517">2</A> <DL COMPACT> <DT><STRONG>versus <TT>configure</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node3.html#515">2</A> </DL> <DT><STRONG><TT>configure</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#523">3.1</A> <DL COMPACT> <DT><STRONG>macros for plugins</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#527">3.1</A> <DT><STRONG>recreating</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#524">3.1</A> </DL> <DT><STRONG>emergency services</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#485">3.5</A> <DT><STRONG><TT>Makefile</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#536">3.2.1</A> <DL COMPACT> <DT><STRONG>avoiding <TT>$(XINCLUDES)</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#585">3.2.2</A> <DT><STRONG>compile/link commands</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#577">3.2.2</A> <DT><STRONG>keyword substitution</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#541">3.2.1</A> <DT><STRONG>passing extra flags</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#578">3.2.2</A> <DT><STRONG>replacing</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#592">3.2.5</A> <DT><STRONG>target rules</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#573">3.2.1</A> </DL> <DT><STRONG><TT>Makefile</TT> keywords</STRONG> <DD><DL COMPACT> <DT><STRONG><TT>[includes]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#552">3.2.1</A> <DT><STRONG><TT>[make_cfg]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#545">3.2.1</A> <DT><STRONG><TT>[make_inc]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#569">3.2.1</A> <DT><STRONG><TT>[make_plg]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#548">3.2.1</A> <DT><STRONG><TT>[make_targets]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#572">3.2.1</A> <DT><STRONG><TT>[plibs]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#566">3.2.1</A> <DT><STRONG><TT>[target]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#563">3.2.1</A> <DT><STRONG><TT>[targets]</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#558">3.2.1</A> </DL> <DT><STRONG><TT>Makefile.in</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#593">3.2.5</A> <DL COMPACT> <DT><STRONG>example</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#598">3.3.2</A> </DL> <DT><STRONG><TT>Makefile.inc</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#589">3.2.4</A> <DL COMPACT> <DT><STRONG>example</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#597">3.3.2</A> <DT><STRONG>keyword substitution</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#590">3.2.4</A> </DL> <DT><STRONG><TT>mkmf</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#542">3.2.1</A> <DL COMPACT> <DT><STRONG>additional source directories</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#586">3.2.3</A> <DT><STRONG>default header directories</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#554">3.2.1</A> <DT><STRONG>default source directories</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#559">3.2.1</A> </DL> <DT><STRONG><TT>mkmf.subdirs</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#587">3.2.3</A> <DL COMPACT> <DT><STRONG>example</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#596">3.3.2</A> </DL> <DT><STRONG>plugin</STRONG> <DD><DL COMPACT> <DT><STRONG><TT>Makefile</TT></STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#534">3.2</A> <DT><STRONG><TT>Makefile</TT> anatomy</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#537">3.2.1</A> <DT><STRONG>adding your own</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#146">3</A> <DT><STRONG>configuring</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#173">3.1</A> <DT><STRONG>target rules</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#345">3.2.1</A> <DT><STRONG>Unix-specific directory</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#163">3</A> </DL> <DT><STRONG>Unix-specific files</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#154">3</A> <DT><STRONG>VMMaker</STRONG> <DD><DL COMPACT> <DT><STRONG>configuration file</STRONG> <DD><A HREF="HowToBuildFromSource-node3.html#108">2</A> <DT><STRONG>missing platform support</STRONG> <DD><A HREF="HowToBuildFromSource-node4.html#478">3.4</A> <DT><STRONG>reference</STRONG> <DD><A HREF="HowToBuildFromSource-node3.html#100">2</A> </DL> </DL> <P> <BR><HR> <ADDRESS> Ian Piumarta 2002-06-05 </ADDRESS> </BODY> </HTML> --- NEW FILE: HowToBuildFromSource-node6.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>About this document ...</TITLE> <META NAME="description" CONTENT="About this document ..."> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="previous" HREF="HowToBuildFromSource-node5.html"> <LINK REL="up" HREF="HowToBuildFromSource.html"> </HEAD> <BODY > <!--Navigation Panel--> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png"> <A NAME="tex2html125" HREF="HowToBuildFromSource.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html121" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html127" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html129" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Up:</B> <A NAME="tex2html126" HREF="HowToBuildFromSource.html">Building Unix Squeak (</A> <B> Previous:</B> <A NAME="tex2html122" HREF="HowToBuildFromSource-node5.html">Index</A>   <B> <A NAME="tex2html128" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html130" HREF="HowToBuildFromSource-node5.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <H1><A NAME="SECTION00060000000000000000"> About this document ...</A> </H1> <STRONG>Building Unix Squeak (>= 3.2) from source</STRONG><P> This document was generated using the <A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002 (1.67) <P> Copyright © 1993, 1994, 1995, 1996, <A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>, Computer Based Learning Unit, University of Leeds. <BR> Copyright © 1997, 1998, 1999, <A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, Mathematics Department, Macquarie University, Sydney. <P> The command line arguments were: <BR> <STRONG>latex2html</STRONG> <TT>-dir tmp -local_icons -auto_prefix -show_section_numbers -split 4 HowToBuildFromSource.tex</TT> <P> The translation was initiated by Ian Piumarta on 2002-06-05 <BR><HR> <ADDRESS> Ian Piumarta 2002-06-05 </ADDRESS> </BODY> </HTML> --- NEW FILE: HowToBuildFromSource.css --- /* Century Schoolbook font is very similar to Computer Modern Math: cmmi */ .MATH { font-family: "Century Schoolbook", serif; } .MATH I { font-family: "Century Schoolbook", serif; font-style: italic } .BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold } /* implement both fixed-size and relative sizes */ SMALL.XTINY { font-size : xx-small } SMALL.TINY { font-size : x-small } SMALL.SCRIPTSIZE { font-size : smaller } SMALL.FOOTNOTESIZE { font-size : small } SMALL.SMALL { } BIG.LARGE { } BIG.XLARGE { font-size : large } BIG.XXLARGE { font-size : x-large } BIG.HUGE { font-size : larger } BIG.XHUGE { font-size : xx-large } /* heading styles */ H1 { } H2 { } H3 { } H4 { } H5 { } /* mathematics styles */ DIV.displaymath { } /* math displays */ TD.eqno { } /* equation-number cells */ /* document-specific styles come next */ --- NEW FILE: HowToBuildFromSource.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002 (1.67) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>Building Unix Squeak ( 3.2) from source</TITLE> <META NAME="description" CONTENT="Building Unix Squeak ( 3.2) from source"> <META NAME="keywords" CONTENT="HowToBuildFromSource"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="HowToBuildFromSource.css"> <LINK REL="next" HREF="HowToBuildFromSource-node1.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html8" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_g.png"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png"> <A NAME="tex2html4" HREF="HowToBuildFromSource-node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html6" HREF="HowToBuildFromSource-node5.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html9" HREF="HowToBuildFromSource-node1.html">Contents</A>   <B> <A NAME="tex2html5" HREF="HowToBuildFromSource-node1.html">Contents</A></B>   <B> <A NAME="tex2html7" HREF="HowToBuildFromSource-node5.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <H1 ALIGN="CENTER">Building Unix Squeak (>= 3.2) from source</H1> <P ALIGN="CENTER"><STRONG>Ian Piumarta <BR><A NAME="tex2html1" HREF="mailto:ian...@in..."><TT><ian...@in...></TT></A></STRONG></P> <P ALIGN="CENTER"><STRONG><FONT SIZE="-1">Last edited: 2002-06-05 05:22:02 by piumarta on emilia.inria.fr <BR> Translated to .ps/.pdf/.html/.txt: June 5, 2002</FONT></STRONG></P> <BR><HR> <!--Table of Child-Links--> <A NAME="CHILD_LINKS"></A> <UL> <LI><A NAME="tex2html10" HREF="HowToBuildFromSource-node1.html">Contents</A> <LI><A NAME="tex2html11" HREF="HowToBuildFromSource-node2.html">1 <TT>configure</TT> - <TT>build</TT> - <TT>install</TT></A> <LI><A NAME="tex2html12" HREF="HowToBuildFromSource-node3.html">2 Generating your own VM and plugin sources</A> <LI><A NAME="tex2html13" HREF="HowToBuildFromSource-node4.html">3 Adding your own plugins</A> <UL> <LI><A NAME="tex2html14" HREF="HowToBuildFromSource-node4.html#SECTION00041000000000000000">3.1 Plugin-specific configuration</A> <UL> <LI... [truncated message content] |