<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Autotool alternatives</title>
	<atom:link href="http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/feed/" rel="self" type="application/rss+xml" />
	<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/</link>
	<description>Technology is life</description>
	<lastBuildDate>Thu, 05 Jan 2012 19:21:59 +0100</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Jeff Koftinoff</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1349</link>
		<dc:creator>Jeff Koftinoff</dc:creator>
		<pubDate>Tue, 29 Sep 2009 16:23:10 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1349</guid>
		<description>What I found is that what is most important is to organize your project in such a clean way so that you could even compile and link it with a single gcc command line if you had to, for instance something like this:

   gcc -Iinclude src/*.cpp src/*.c tools/httpd.cpp -o httpd

The magicmakefile by definition only works for platforms that I care about.

I have yet to see autotools work for compiling a project in the following situations:

 * an application for the Cell processor with tasks running on the SPE as well as the SPU (different compiler required)

 * software compiled by various DSP compilers where you really do need to have different optimization options set on different source files in order to have a correct executable - and not just to avoid compiler bugs either.

* software that works on 64 bit windows compiling with the Microsoft SDK - which is required since GCC/G++ v4 is not yet compliant with the requirements of WIN32 and WIN64 and most importantly S.E.H.

* software running on iphone where the executable not only needs to be cross compiled but also needs to be cryptographically signed.

* software running on mac os x or debian linux or redhat linux or windows where you need to create a full featured pkg, deb, rpm, or msi installer file.

* software running on mac os x where you not only need to do cross compiling but the cross compiling for multiple platforms is done by the same gcc invocation, ie: &#039;-arch i386 -arch x86_64 -arch ppc -arch ppc64&#039; but in this case you must use different tools to manage static libraries.


In all these situations, the best practice is to either make your own hand built makefile, or xcode project, Wix project, or Visual Studio 2008 solution file - So it is best to organize your project so that it is very simple to do any of these things.  What I did with the magic makefile is to make the typical linux/mac os x command line tools and libraries automatic and any other special case platforms are easy to manage due to simple project layout.

Regards,
Jeff Koftinoff</description>
		<content:encoded><![CDATA[<p>What I found is that what is most important is to organize your project in such a clean way so that you could even compile and link it with a single gcc command line if you had to, for instance something like this:</p>
<p>   gcc -Iinclude src/*.cpp src/*.c tools/httpd.cpp -o httpd</p>
<p>The magicmakefile by definition only works for platforms that I care about.</p>
<p>I have yet to see autotools work for compiling a project in the following situations:</p>
<p> * an application for the Cell processor with tasks running on the SPE as well as the SPU (different compiler required)</p>
<p> * software compiled by various DSP compilers where you really do need to have different optimization options set on different source files in order to have a correct executable &#8211; and not just to avoid compiler bugs either.</p>
<p>* software that works on 64 bit windows compiling with the Microsoft SDK &#8211; which is required since GCC/G++ v4 is not yet compliant with the requirements of WIN32 and WIN64 and most importantly S.E.H.</p>
<p>* software running on iphone where the executable not only needs to be cross compiled but also needs to be cryptographically signed.</p>
<p>* software running on mac os x or debian linux or redhat linux or windows where you need to create a full featured pkg, deb, rpm, or msi installer file.</p>
<p>* software running on mac os x where you not only need to do cross compiling but the cross compiling for multiple platforms is done by the same gcc invocation, ie: &#8216;-arch i386 -arch x86_64 -arch ppc -arch ppc64&#8242; but in this case you must use different tools to manage static libraries.</p>
<p>In all these situations, the best practice is to either make your own hand built makefile, or xcode project, Wix project, or Visual Studio 2008 solution file &#8211; So it is best to organize your project so that it is very simple to do any of these things.  What I did with the magic makefile is to make the typical linux/mac os x command line tools and libraries automatic and any other special case platforms are easy to manage due to simple project layout.</p>
<p>Regards,<br />
Jeff Koftinoff</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: daniel</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1332</link>
		<dc:creator>daniel</dc:creator>
		<pubDate>Mon, 28 Sep 2009 11:17:07 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1332</guid>
		<description>No, I haven&#039;t started on this yet. I&#039;ve mostly been thinking about it so far.

Ideally, it would be nice to list a long list of requirements and properties of various build/config systems and then basically figure out how all competitors do in all the listed aspects. I mean, I think we must accept that there will be no obvious winnner for everyone, but done right a comparison document would still help everyone interested in this.</description>
		<content:encoded><![CDATA[<p>No, I haven&#8217;t started on this yet. I&#8217;ve mostly been thinking about it so far.</p>
<p>Ideally, it would be nice to list a long list of requirements and properties of various build/config systems and then basically figure out how all competitors do in all the listed aspects. I mean, I think we must accept that there will be no obvious winnner for everyone, but done right a comparison document would still help everyone interested in this.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Henrik Sandklef</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1331</link>
		<dc:creator>Henrik Sandklef</dc:creator>
		<pubDate>Mon, 28 Sep 2009 09:20:59 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1331</guid>
		<description>The system I&#039;ve had the best results with is autotools. As in Daniel&#039;s case I am biased, since I know atuotools better than the others.

Getting to your idea about writing a comparative text on the various build systems. It&#039;s a great idea and a needed one. 

I think a good starting point would be to start listing the requirements on such a build system. 
 
 * easy to use for end user 
 * cross compiling possible
 * easy to split configuration files and programs into separate dirs
   in the resulting installable file


 stuff like that, perhaps a bit more specific ;)   Have you started such a list?

/hesa 

... it doesn&#039;t take long before one comes to the insight that different programs (or rather languages) and target platforms may have different requirements. But we can twist that around again and think about the quick increase in speed/mem of new devices so I think that we have to think about all programs to at some time execute in a &quot;small device&quot;.</description>
		<content:encoded><![CDATA[<p>The system I&#8217;ve had the best results with is autotools. As in Daniel&#8217;s case I am biased, since I know atuotools better than the others.</p>
<p>Getting to your idea about writing a comparative text on the various build systems. It&#8217;s a great idea and a needed one. </p>
<p>I think a good starting point would be to start listing the requirements on such a build system. </p>
<p> * easy to use for end user<br />
 * cross compiling possible<br />
 * easy to split configuration files and programs into separate dirs<br />
   in the resulting installable file</p>
<p> stuff like that, perhaps a bit more specific <img src='http://daniel.haxx.se/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />    Have you started such a list?</p>
<p>/hesa </p>
<p>&#8230; it doesn&#8217;t take long before one comes to the insight that different programs (or rather languages) and target platforms may have different requirements. But we can twist that around again and think about the quick increase in speed/mem of new devices so I think that we have to think about all programs to at some time execute in a &#8220;small device&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: daniel</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1328</link>
		<dc:creator>daniel</dc:creator>
		<pubDate>Sun, 27 Sep 2009 17:47:47 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1328</guid>
		<description>A magic makefile is really hard to get to work with 35 different unixes (where each installation can have a myriad of different installation subtleties etc), some of them pre-POSIX. I&#039;ve managed to get my autoconf solutions to do it. (in the cURL project)

I&#039;d say that autoconf&#039;s weakest points are its arcane syntax and the fact that it requires a POSIX shell etc.

But of course, each project has its own set of needs and requirements and what suits one project perfectly might not at all suit the next...</description>
		<content:encoded><![CDATA[<p>A magic makefile is really hard to get to work with 35 different unixes (where each installation can have a myriad of different installation subtleties etc), some of them pre-POSIX. I&#8217;ve managed to get my autoconf solutions to do it. (in the cURL project)</p>
<p>I&#8217;d say that autoconf&#8217;s weakest points are its arcane syntax and the fact that it requires a POSIX shell etc.</p>
<p>But of course, each project has its own set of needs and requirements and what suits one project perfectly might not at all suit the next&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Koftinoff</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1327</link>
		<dc:creator>Jeff Koftinoff</dc:creator>
		<pubDate>Sun, 27 Sep 2009 13:25:36 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1327</guid>
		<description>I think I _really_ got turned off of autotools when I really wanted to learn it and actually purchased the original book, and the simplest examples did not work!  Plus it created configure scripts that had syntax errors on Mac OS X! Perhaps now it has settled down.  For my own projects I decided to depend on GNU Make and BASH only, and created a &quot;magic makefile&quot; which does everything I need: 

the latest version is at http://opensource.jdkoftinoff.com/project/projects/magicmake/wiki 

and the previous version with more info is at:
http://opensource.jdkoftinoff.com/jdks/trac/wiki/MagicMakefileV5

By the way, recently I had to do some java work and ended up using Maven2 - A big departure from normal build systems.  Unfortunately is very integrated with Java - but the kinds of things it does is very worthwhile like managing both direct and transitive dependencies, source code layout by convention, no need to modify any files when you add source files, etc.  Plus it integrates amazingly well with continuous integration tools like hudson. There is nothing like it for C and C++ projects.

jeffk</description>
		<content:encoded><![CDATA[<p>I think I _really_ got turned off of autotools when I really wanted to learn it and actually purchased the original book, and the simplest examples did not work!  Plus it created configure scripts that had syntax errors on Mac OS X! Perhaps now it has settled down.  For my own projects I decided to depend on GNU Make and BASH only, and created a &#8220;magic makefile&#8221; which does everything I need: </p>
<p>the latest version is at <a href="http://opensource.jdkoftinoff.com/project/projects/magicmake/wiki" rel="nofollow">http://opensource.jdkoftinoff.com/project/projects/magicmake/wiki</a> </p>
<p>and the previous version with more info is at:<br />
<a href="http://opensource.jdkoftinoff.com/jdks/trac/wiki/MagicMakefileV5" rel="nofollow">http://opensource.jdkoftinoff.com/jdks/trac/wiki/MagicMakefileV5</a></p>
<p>By the way, recently I had to do some java work and ended up using Maven2 &#8211; A big departure from normal build systems.  Unfortunately is very integrated with Java &#8211; but the kinds of things it does is very worthwhile like managing both direct and transitive dependencies, source code layout by convention, no need to modify any files when you add source files, etc.  Plus it integrates amazingly well with continuous integration tools like hudson. There is nothing like it for C and C++ projects.</p>
<p>jeffk</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: daniel</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1326</link>
		<dc:creator>daniel</dc:creator>
		<pubDate>Sun, 27 Sep 2009 12:52:36 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1326</guid>
		<description>Wise words Jeff,

My experience is actually rather that autoconf is the best of the available options for making build systems that are cross-compile friendly. But admittedly that&#039;s biased by my own skillset.</description>
		<content:encoded><![CDATA[<p>Wise words Jeff,</p>
<p>My experience is actually rather that autoconf is the best of the available options for making build systems that are cross-compile friendly. But admittedly that&#8217;s biased by my own skillset.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Koftinoff</title>
		<link>http://daniel.haxx.se/blog/2009/09/23/autotool-alternatives/comment-page-1/#comment-1322</link>
		<dc:creator>Jeff Koftinoff</dc:creator>
		<pubDate>Sun, 27 Sep 2009 04:12:02 +0000</pubDate>
		<guid isPermaLink="false">http://daniel.haxx.se/blog/?p=1220#comment-1322</guid>
		<description>I personally dislike autoconf and friends, typically they create configure scripts that are broken for cross compiling which I do a lot.

My solution is to organize my projects extensively.  Every project creates one library. The headers go in an &#039;include&#039; directory.  The sources for the library go in the &#039;src&#039; directory.  Tool programs and test programs and single source files and are linked with the library and live in a directory called &#039;tools&#039; or &#039;tests&#039; respectively.

Once you do this, it is easy to hand create a Makefile for any unix like platform.  It is easy to create an xcode project. it is easy to create a visual c++ project.  A 4 line qmake pro file can be used with wildcards for qmake. 

Once you lay out your project&#039;s files in a logical way it is always easy to regenerate your project&#039;s build script.

The reality is that a single tool can not support all the platforms at once - The typical architectures needed are too diverse like Mac OS X universal binaries, iphone, Windows7, and various forms of Embedded Linux.  

I have seen autoconf/configure scripts break so often in these different configurations that I do not trust it anymore.  Portability is hard and there is no silver bullet except to have a continuous integration tool performing compiles on all supported platforms.


--jeffk++</description>
		<content:encoded><![CDATA[<p>I personally dislike autoconf and friends, typically they create configure scripts that are broken for cross compiling which I do a lot.</p>
<p>My solution is to organize my projects extensively.  Every project creates one library. The headers go in an &#8216;include&#8217; directory.  The sources for the library go in the &#8217;src&#8217; directory.  Tool programs and test programs and single source files and are linked with the library and live in a directory called &#8216;tools&#8217; or &#8216;tests&#8217; respectively.</p>
<p>Once you do this, it is easy to hand create a Makefile for any unix like platform.  It is easy to create an xcode project. it is easy to create a visual c++ project.  A 4 line qmake pro file can be used with wildcards for qmake. </p>
<p>Once you lay out your project&#8217;s files in a logical way it is always easy to regenerate your project&#8217;s build script.</p>
<p>The reality is that a single tool can not support all the platforms at once &#8211; The typical architectures needed are too diverse like Mac OS X universal binaries, iphone, Windows7, and various forms of Embedded Linux.  </p>
<p>I have seen autoconf/configure scripts break so often in these different configurations that I do not trust it anymore.  Portability is hard and there is no silver bullet except to have a continuous integration tool performing compiles on all supported platforms.</p>
<p>&#8211;jeffk++</p>
]]></content:encoded>
	</item>
</channel>
</rss>

