[Home | Contact | What's New? | Products | Services | Tips | Mike |
Living with Schizoaffective Disorder

Please to Forgive

This site totally sucks when viewed on a smartphone.
I'll fix this Real Soon Now.

Makefiles
as G-d and Nature
Intended Them

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 an 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.

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:

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.

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 licenses 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
Solving the Software Problem
Software of Elegance and Beauty
quixote@warplife.com

Tilting at Windmills for a Better Tomorrow.

Vote for Us at the Programming Pages
Voting for Solving the Software Problem at The Programming Pages will encourage more people to read these articles.

[Home | Contact | What's New? | Products | Services | Tips | Mike]