[haiku-development] Makefiles as G-d and Nature Intended Them.

  • From: Don Quixote de la Mancha <quixote@xxxxxxxxxxxxxxxx>
  • To: clang-dev Developers <cfe-dev@xxxxxxxxxxx>, LLVM Developers Mailing List <llvmdev@xxxxxxxxxxx>, xcode-Users List <xcode-users@xxxxxxxxxxxxxxx>, bs@xxxxxxxxxxxx, balsamic.viniga@xxxxxxxxx, morris.slutsky@xxxxxxxxx, astropulp@xxxxxxxxx, ag@xxxxxx, support@xxxxxxxxxxxxx, support@xxxxxxxxxxxxxxxxxxx, support@xxxxxxxxx, lsc@xxxxxxxxx, help@xxxxxxxxxxxx, rms@xxxxxxx, network@xxxxxxx, haiku-3rdparty-dev@xxxxxxxxxxxxx, haiku-development@xxxxxxxxxxxxx, kleinbottle@xxxxxxxxxxxxxxx, support@xxxxxxxxxxxxx, Robert Nilsson <network-contact_ww@xxxxxxxxxx>, binkstress@xxxxxxxxx, murphyoleary@xxxxxxxxx, esr@xxxxxxxxxxx, sgully@xxxxxxxxx, herb.sutter@xxxxxxxxx, hzamir@xxxxxxxxx, bocrep@xxxxxxxxxxxxxxxxxxxx, secretary@xxxxxxxxxxxxxxxxxxxx, andrei@xxxxxxxxxx, smeyers@xxxxxxxxxxxx, president@xxxxxxxxxxxxxxxxxxxx, customercare@xxxxxxx, Bob B <bobbarker11776@xxxxxxxxx>, devans@xxxxxxxxxxxx, andrewm@xxxxxxxxxxxxxxxxxx, Hugh.Maguire@xxxxxxxxxxxxxxxxx, bostonterrier_97@xxxxxxxxx, billyr@xxxxxxxxxx, tycho@xxxxxxxxxxxxxxxx, siva.mupparaju@xxxxxxxxxxxxxxxx, Mohammed.Ansari@xxxxxxxxxxxxxxxx, oggfrog.net@xxxxxxxxxxxxxxxxxx, sye@xxxxxxxxxxxxx, selinux-team@xxxxxxxxxxxxx, malda@xxxxxxxxxxxx, davej@xxxxxxxxxxxxxxxxxxx, richard@xxxxxxxxx, frances@xxxxxxxxxxx, isaanne@xxxxxxxx, anne@xxxxxxxxxxx, grear@xxxxxxxxxxxx, stanevans@xxxxxxxxxxxxxxx, bjcraw@xxxxxxxxxx, webmaster@xxxxxxxxxxxxxxxx
  • Date: Fri, 22 Jun 2012 22:15:10 -0700

Dear Friends,

Please pay rapt attention and listen carefully.  I had to go to Hell
and Back to learn this Valuable Lesson.  I don't want to have to say
it twice:

   GNU auotoconf is a Tool of the Devil.

Here is a *incredibly* effective strategy to get your box rooted by
The Russian Mob, the Defense Ministry of the People's Republic of
China or the occasional Nigerian Sole Proprietor:

   $ ./configure; make; sudo make install

Even if that doesn't plant intentional MalWare on your computer there
are _all_kinds_ of ways the abovementioned command line can result in
an inadvertent Denial of Service.

autoconf *only* works if your platform support GNU Make as well as a
POSIX-compliant shell, with the host operating system also being
reasonably POSIX compliant.  What that means is that it is completely
useless for embedded devices, the Classic Mac OS, or any manner of
platform that Pope Richard didn't envision as one day Ascending Bodily
Into Heaven.

I haven't actually tried for a while, but recall that when I first
joined the Clang and LLVM Developers lists, I struggled for *weeks* to
build our entire toolchain from an anonymous Subversion checkout, on
32-Bit Ubuntu 11.04, *without* previously installing the prebuilt
Clang or LLVM binaries.  My objective for going to all that trouble
was to determine whether it was even *possible* to bootstrap LLVM from
GCC; I determined that, on my particular box anyway, it was utterly
*impossible*.

It wasn't because our C++ source would compile, but there was some
manner of really *bizarre* and so completely intractable bug in some
of the configure scripts used to bootstrap GCC, before even attempting
to build LLVM with that GCC that I tried, yet strictly speaking failed
to bootstrap.

A far, far more effective way to achieve Cross-Platform as well as
Damn-Near Trouble Free builds is to employ the methods designed by
Andy Green of The Electric Magic Company with his ZooLib C++
Cross-Platform Application Framework:

   http://www.zoolib.org/

ZooLib enables one to build quite complex GUI applications, databases
as well as network clients and servers for a whole bunch of different
platforms just by rebuilding for each platform, all with little or no
change to the client source base.

It will work all the way from a 1992 Apple MacPlus running System 7
through a 64-Bit Lion OS Box, Windows 95 on an 80386 through Windows 8
Ultimate on a Core Quad Xeon, and on to an iOS 5 iPad as well a
BlackBerry - all with just *one* set of client source.

The older bindings of ZooLib for the Mac were Carbon and so C based,
but when Apple deprecated Carbon and so announced that one could not
hope to run a 64-Bit Carbon executable on Mac OS X, it took Andy less
than a month to write a Cocoa binding for ZooLib that does 64-Bit just
fine.  But once he had done that port, it was not hard at all to port
ZooLib to iOS as well.

I myself learned how to write Cross-Platform code in large part by
working with ZooLib.  That had the eventual result that I learned how
to write Makefiles as G-d and Nature Intended Makefiles to be Written:

   libmdc: Mike Crawford's C++ Memory Management and Testing Library
   http://www.dulcineatech.com/source-code/libmdc/

   http://www.dulcineatech.com/source-code/libmdc/current/README.txt

   http://www.dulcineatech.com/source-code/libmdc/current/Makefile

   http://www.dulcineatech.com/source-code/libmdc/current/CPPUnit.mk

   http://www.dulcineatech.com/source-code/libmdc/current/CPPUnit.t.mk

   http://www.dulcineatech.com/source-code/libmdc/current/HeaderCheck.cpp

I used HeaderCheck.cpp to debug some syntax errors in my headers that
led to fatal compile errors.

libmdc is distributed under the terms of the Boost Software License -
Version 1.0:

   http://www.dulcineatech.com/source-code/libmdc/current/LICENSE_1_0.txt

One might at first regard the Boost License as the same as the MIT or
X Consortium License.  While broadly similar in intent and effect, the
two license are in reality *significantly* different.  For example,
the MIT License only grants rights to individual people, while the
Boost License grants rights to both people and organizations.

Thus, strictly speaking Apple, Sun, Oracle, Google and the like are
infringing Copyright by distributing commercially-backed builds of
X11, because only *individuals* may do that, *not* corporations.

It is because The Law is chock-full of full of twisty little pedantic
passages all alike just like these two licenses that one does well not
to write one's own source license without the advice of counsel as
well as lots of time for extensive discussion among the developer
community.

The last release of libmdc was on November 12, 2005.  That version
built with some ancient version of 32-Bit GCC on Fedora Core 4 as well
as PowerPC Mac OS X 3.9.

I've been wantings for aeons to bring libmdc completely Up-To-Date, to
support lots more toolchains and platforms, as well as what occured to
me only just last night, which is to enable the user to explicitly
specify which ISO Standard Revision Level to support for both C++ and
C:

   STD_CXX=CXX_2011
   STD_C=C_1989

Defining the above two lines in the Makefile, or on the make command
line, would enable C++11's move symantics, while at the same time
preprocessing completely away any mention of the C99 "restrict"
keyword in libmdc's sources.

Strictly speaking, C++ 2011 *requires* C 1999, but one's client source
code need not use any features of C99; that's where I got the idea to
permit one to choose the Standard Revision Levels of the two languages
completely independently.

Other than updating the contact info in the README.txt and the
top-level Makefile, as well is moving its homepage from my previous
company's domain to that of my present company, I have not yet altered
the 2005 source in any way.

Doing just that is the main focus of my work today.  Just for now,
I'll put off trying to get Clang or LLVM to bootstrap all by my
lonesome, but will instead use the packages provided by Apple Xcode,
Ubuntu, Cygwin, and for MingW on Windows.  I also have plans to
support Visual Studio 2005 as well as the current - 2010 I think -
edition of Visual C++ Express.

More or less, I expect I will support every compiler and platform I
can lay may greedy hands on.  Even very, very expensive tools such as
Freescale CodeWarrior or Texas Instruments Code Composer Studio are
provided as free as in beer downloads for evaluation purposes.  The
limits imposed by such demo versions wouldn't give me any trouble with
libmdc.

I'm not sure yet when I'll be issuing my next release of libmdc, but
it will be Real Soon Now.  I'll post a more widespread announcement to
the community once it's Cooked.


Your Servant,

Don Quixote de la Mancha
Dulcinea Technologies Corporation
Software of Elegance and Beauty
http://www.dulcineatech.com/don-quixote/
quixote@xxxxxxxxxxxxxxxx

Other related posts: