Slashdot Mirror


Why Switch a Big Software Project to autoconf?

woggo queries: "I'm a CS grad student working on a large research project (over 1 million lines of code, supported on many platforms). The project has been under development for several years, and the build system is nontrivial for end-users. We'd like to make it easier to build our software, and I'm investigating the feasibility of migrating to GNU autoconf. I need to demonstrate that the benefits of autoconf outweigh the costs of migrating a large system of makefiles with a lot of ad-hoc kludge-enabling logic. Has anyone made a similar case to their advisor/manager? Does anyone have some good 'autoconfiscation' war stories to share? (I've already seen the Berkeley amd story and the obvious links from a google search....)" Depending on the intricacies of the build process, such a conversion might take an awful lot of work. It might be easier to put a nicer face on the "nontrivial build process", although there is something to be said for the ease of "./configure; make; make install"

219 comments

  1. Low costs by tal197 · · Score: 4, Informative
    I need to demonstrate that the benefits of autoconf outweigh the costs

    You don't have to migrate the whole thing at once. Just start with a nice simple configure.in that copies Makefile.in to Makefile and config.h.in to config.h and add #includes for config.h everywhere.

    Make sure new tests go in configure.in and you can slowly move across with little trouble. It should therefore be pretty easy to show that the costs are very low...

    1. Re:Low costs by Anonymous Coward · · Score: 0

      But doing that insures there will always be little broken aspects of the config system. Migrating the whole thing at once provides a clean break over point at which any problems found are 'bugs' and not just TBDs.

      This is important to the crediblity of autoconf. If it's seen as a half broken crisis, it'll be resisted.

  2. Even more by Russ+Nelson · · Score: 5, Insightful

    There's even more to be said for running short test programs which discern the same things that configure does, and then writing the correct .h file to disk. That way, you can write a makefile which ALWAYS works. The trouble that I have with configure is that it creates a makefile which differs from machine to machine, so that debugging it is quite difficult. Plus, if configure gets something wrong, you can make and make and make all day long, and you'll never fix it. So even though configure, in theory, saves you from having to maintain a makefile, in reality it means that everyone who runs configure may have to debug the makefile.

    In other words, it's better to have one makefile, and fix the problems in the makefile, than to have to fix problems in configure or your configure specification.

    If you want an example of how this can work, look at Dan Bernstein's djbdns, or qmail. On both of these, "make" Just Works(tm).
    -russ

    --
    Don't piss off The Angry Economist
    1. Re:Even more by #!/bin/allen · · Score: 1

      In general, (controled, scheduled) work on makefiles pays off in developer time. Sell it as an improvement right after a release as that is when a kludge is most obvious.

      We are using includes in our makefiles to set up for different environments ( not just different OSs ). They are tremendously complex and it takes a while to get a project set up, but it provides a good deal of relief for the average developer on day to day builds.

      We also have a dedicated build and release group who maintain the includes. They are a good resource when we have questions either in general or specific to our system.

      Using autoconfig adds another set of software to an already complex build system. Invest the time to standardize and fix your Makefiles. It will pay off as you add more systems.

      Good luck,
      Allen

      --
      sed 's/commun/terror/g' mccarthy > bush; sed 's/terror/saddam/g' bush > bush_wacked
    2. Re:Even more by Ian+Lance+Taylor · · Score: 2, Informative

      When you use the AC_CONFIG_HEADER macro, as almost everybody does, autoconf does pretty much what you suggest: the main difference is that it writes a single header file to disk, rather than many small header files.

      autoconf normally only changes the Makefile to handle things like compiler options and library options. DJB handles those by creating little files which the Makefile uses. It is entirely possible to use autoconf in this fashion, and it requires no work beyond what DJB's system requires.

      The autoconf system is certainly more complex than DJB's system. I think it is also more powerful and more consistent. It's far from perfect, but I don't think you've clearly identified the problems it has.

    3. Re:Even more by horster · · Score: 1

      why does it seem like djb always comes up when it comes to the subject of how software _should_ be written?

      he seems to me like one of the few people who really understands how userland unix programs _should_ look. everything broken into small peices, little utilities written for specific problems. you'll never see djb writing a giant catch all program that uses a mini language and a thousand features (read fetchmail), instead everything is very minimal and has a very simple and difficult to break interface.

      it's too bad more people don't do things in the true spirit of unix rather than constantly trying to fight it.

    4. Re:Even more by Anonymous Coward · · Score: 0

      I think it's basically because djb is an asshole.

    5. Re:Even more by Anonymous Coward · · Score: 0

      Close... he's an anal asshole.

    6. Re:Even more by Anonymous Coward · · Score: 0

      Uhh... What other kind of asshole is there?
      Every one I've seen has been in an anus....

    7. Re:Even more by Anonymous Coward · · Score: 0

      "Anal" as in "anal-retentive".

  3. As Pro Linux as I am.... by ras_b · · Score: 1, Offtopic

    ...there is also something to be said for double clicking 'setup.exe', then clicking 'Next' through an installer. One of the places I have always thought linux was way behind windows (especially for the new user) is with software installation. rpm -ivh?? ./configure, make, make install?? come on, you think a beginner home user will figure those out?

    1. Re:As Pro Linux as I am.... by StormCrow · · Score: 2, Insightful

      Users had to be taught about setup.exe (or install.exe or whatever) once. And these days, autorunning CDs are removing the need to do that again. Remember, most things that you claim are easier in Windows are only easier because you've already been taught to do them. Teach someone how to use rpm/dpkg/apt and installing software with them will become just as easy.

    2. Re:As Pro Linux as I am.... by tal197 · · Score: 2, Informative
      there is also something to be said for double clicking 'setup.exe'

      Well first, this isn't the issue here. We're talking about compiling from source which isn't the same as deciding how to install a binary once compiled.

      As for rpm, etc you just want a graphical front-end, I think.

      That said, Window's setup.exe is actually unnecessary complicated for users. With ROX, we're using application directories. There is no setup program because the program can just run in-place. See the example at the bottom of this page for an example. As a bonus, running a source package is done in exactly the same way as running a binary (it just takes a bit longer).

      The whole business of installing is terribly arcane if you think about it (hint: the computer already has everything it needs to run the application... why the extra steps?)

    3. Re:As Pro Linux as I am.... by zCyl · · Score: 4, Funny

      So you're tired of ./configure, etc... and you want an easy installer script for Linux that you can double click on to install programs? Here, I'll write you a general purpose installer program. Put this with any program you distribute as source and it will automatically install it by simply double clicking. You don't even have to click Next!:

      #!/bin/sh
      ./configure
      make
      make install

    4. Re:As Pro Linux as I am.... by Anthy · · Score: 2, Insightful

      As a fairly newbie Linux user it is not doing rpm or make that is the problem. I mean telling someone that rpm is the Linux version of setup is not the problem. The problem is: 1. Dependecies. 2. When the make doesn't work. My suggestion for (1) is to just include all the files you need in the one download. Sure it'll make the rpm much bigger (which is why you include alternative rpms for power users) but I'm telling you, confront a newbie Linux user (even one who isn't totally computer illiterate) with a list of 20 dependencies and you'll lose them. I mean just putting all the rpms in .tar.gz with a warning that you need certain minimum requirements eg. Red Hat 6.2 with a readme of which order to install the rpms would make life much easier. Give them all the files needed and step-by-step instructions (as in they can cut and paste the command line instructions) and they'll manage. I mean Windows install programs don't ask you to download 20 or so .dlls. And yes, sure Debian has a wonderful system around this but hey try to get newbie Linux users to actually work out how to install and run Debian in the first place...

    5. Re:As Pro Linux as I am.... by budr · · Score: 2, Informative

      How about this instead?

      apt-get --compile source packagename

      and go have a cup of coffee...

    6. Re:As Pro Linux as I am.... by Lumpy · · Score: 2

      actually yes. the beginning home user does figure it out nicely.

      they type rpm -i supercoolprogram.rpm
      or better yet, I tell KDE for them to do that when they double click on an RPM file.

      It works great, until you get to developers apps that have to have installed 60-70 bleeding edge libs that dont come with that super old redhat 7.2 (gawd, running a production release? what are you in the stone ages?)

      and they refuse to staticall link the program so it will install anyways for the newbies.

      basically most productivity software out there is specifically packaged to discourage newbies from running it. who wants people other than glibc and GTK experts running their software.

      --
      Do not look at laser with remaining good eye.
    7. Re:As Pro Linux as I am.... by Stochi · · Score: 1

      but i think there is something to be said for intuitiveness. let's say that there isn't someone there to teach about either setup.exe or rpm/dpkg/apt/etc. i think you find that most people (yes, even the not-so-smart ones) could eventually figure out that you need to double-click on setup.exe and then hit "Next" a whole bunch of times. conversely, giving a user a .rpm, .deb, or .tgz package doesn't necessarily mean that they will ever be able to figure out what to do with it. in this case you'd be assuming that user would 1) find the binary responsible for package management, and 2) figure out how to use all of the command-line flags to install the package. quite a far cry from double-click... clicky, clicky, clicky.

      however, i have to agree that if people are taught how to do things, this becomes a non-issue. i guess everyone just gets caught up in the "easy-as-possible" way of thinking and the teaching part of things goes to the wayside.

    8. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      Well, part of the problem with Windows has become the incredibly complexity of the installation. A typical simple program can copy a dozen libraries into various places (usually under the windows directory somewhere), make a Program Files directory hierarchy, create shortcuts, add crap into the registry, etc. It all comes down to the point that to take this program and move it to a new machine becomes a waste of time. To move a Windows system it is easier to just reinstall everything and copy over your data. I miss the old DOS days of just zipping up a couple of directories and having my programs, copying the zip files to a floppy and moving them to another machine, unzipping them and running them without worrying about bullshit shared libraries and registry entries missing.

    9. Re:As Pro Linux as I am.... by ras_b · · Score: 1

      that wasn't my point. i am very comfortable with rpm, and compiling and installing, because i am at least intermediately tech savvy. i was referring to a much wider audience that doesn't want to type commands or write shell scripts.

    10. Re:As Pro Linux as I am.... by ras_b · · Score: 1

      actually, you're totally wrong. my mom is a beginning home user. initially, she had problems learning how to double click without the mouse moving and messing it up. i said 'close the window' and she looked at me like i was speaking greek, so i backed up and said 'these are all windows, click here to close them'. there is no way she would ever figure out to type 'rpm -ivh program.rpm'. she, and thousands of other home users, will never type a command at a terminal ever, nor will they want to. i know this poster has a different audience in mind, but my point was different.

    11. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      You'd better hope the people at the server providing the stuff the apt-get command fetches have the same political agenda as you do and that they can be trusted.

    12. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      where do i click?

    13. Re:As Pro Linux as I am.... by SnarfQuest · · Score: 1

      You mean, like when you install Internet Explorer 5.5 on a Windows95 system, and then discover that you can no longer run most of your applications, including Explorer, because it has "upgraded" several DLL's to versions incompatible with Windows95?
      I've seen several people with this problem, and their only option is to completely wipe their disk and reinstal, or to "upgrade" to 98.
      The Windows setup program has the bad habit of "upgrading" DLL's to older versions, without any confirmation. In many cases two different versions of the same DLL are incompatible with each other, forcing you to decide which set of programs you want to be able to run.
      If you've ever had to fight through the problems that the easy "setup" program can cause, you would no longer consider it to be so easy.

      --
      Who would win this election: Andrew Weiner vs Andrew Weiner's weiner.
    14. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      Your an idiot, please don't speak anymore unless you know what your talking about.

    15. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      Why the extra steps?

      Umm...gee...let's see.

      How about because I don't want to have to put my MS Office CD in the drive every time I want to run Word? Files need to be copied to an appropriate directory on the HD.

      How about to create shortcuts?

      How about to decompress data on the CD that takes a non-trivial amount of time? Do you really want to wait 5 minutes every time you run Flight Simulator 2002 while it decompresses texture data from CD?

      How about to install device drivers? Fonts?

      Now, you might say "But the program can do those things itself the first time it starts up." Certainly it can, but whether these tasks are placed in a separate EXE or in the main application is irrelevant. They are still "setup" or "install" tasks, and they still require some interaction with the user (dir selection, etc.).

      Assuming the SETUP.EXE or FOOBAR.EXE is run automatically when the CD is inserted, the user doesn't care if the installer is a separate install app or if it is "built-in" to the app itself.

      Certainly some programs don't need to be "installed", and they can just run by copying them into the desired directory. To claim that this is the case for all applications proves that you have not actually written any non-trivial applications.

    16. Re:As Pro Linux as I am.... by cduffy · · Score: 2

      You'd better hope the people at the server providing the stuff the apt-get command fetches have the same political agenda as you do and that they can be trusted.

      By default, apt-get only grabs/compiles sources from sites which host only sources signed by Debian-trusted developers. Someone blatantly abuses their power? Their key gets yanked from the trusted ring, and apt-get will no longer fetch their packages -- done. apt-get can also verify signatures on the client machine.

      Unless you add extra package sources by hand, in which case you've made a conscious decision to trust someone else, apt-get will indeed only fetch packages from trustworthy folks w/ valid agendas.

    17. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      wrong problem stage. were in compiling here not installing.

    18. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      its called red carpet, all the dependency solving and a pretty face. Plus you can run it on easy to install distros like redhat or mandrake

    19. Re:As Pro Linux as I am.... by rhavyn · · Score: 2

      The people you are talking about don't know what a command line is nor will they care if they use it. My mother (who when I went home for Thanksgiving told me about how she discovered how the arrow keys work) has no problem using the linux box I set up for her. She is perfectly cable of using the 10 or 15 command line commands I taught her to do things like install or uninstall a program. She has yet to complain once about needing to type things into a window instead of clicking. I even asked her if she'd mind and she asked how it was different from putting the command in an email to tell it who to go to (aka email addresses).

      The only people who have a hard time with a command line are the people who have been trained on nothing but Windows and have no desire to learn anything new. Any brand spanking new computer user who has no experience will be happy learning how to use a computer. Last time I checked, most people are not afraid to type.

    20. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      Your mom secretly hates you.

    21. Re:As Pro Linux as I am.... by scrytch · · Score: 2

      No, I expect them to double click the RPM file in their file manager. As for configure/make ... when I get sources on Windows, I get a project file that may or may not have all the dependencies it needs, and may or may not detect them. Linux isn't easy to use ... and from watching my mother struggle with her computer, neither is windows.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    22. Re:As Pro Linux as I am.... by Bat_Masterson · · Score: 1

      It's also a bit of culture. Windows users are "used to" doing it one way (like inserting a CD in the drive) and Linux/Unix users are "used to" doing it another way ("configure; make; make install"). There's probably no reason that you couldn't have an autorunning CD do a call to a program that does "copy; configure; make; make install" (or some safer variation).

    23. Re:As Pro Linux as I am.... by Bat_Masterson · · Score: 1

      Now if you could only get this to work such that, when I insert a CD on my Linux machine, the programs source code will automatically build and install.

    24. Re:As Pro Linux as I am.... by spitzak · · Score: 2
      Correct. The equivalent on Windows to this is VC++ project files. On the software I am working on, these have been a pain to maintain and debug and they will fail mysteriously on other people's machines (though the pain is probably less than the pain of configure, to be honest). Also annoying is the fact that the files are totally unreadable and are about a dozen times larger than all the NT-specific source code in our project (fltk). I always compile on NT using a batch file or gmake as these project files require launching the VC++ IDE which I otherwise don't use, I have also deleted my local CVS copies of these as the tiniest change will cause an extremely long CVS update time (over a 56K link), this makes CVS updates tolerable but also means I am always forgetting to update these when the set of files in the project changes.

      I do have to say that the gmake file for NT is nice and clean due to the unifomity between the Windows platforms. A lot of pain would be saved if the Unix people started refusing to support some of the older and non-standard Unix versions so that we could use a single makefile.

      One comment: if at all possible, the biggest win in readability and maintanability is to put explicit #ifdefs into the source, and use gmake and the output of uname to put 'if's into the makefile. This stuff is immesurably easier for a programmer to figure out and debug than autoconf. It would be nice if somebody made a make replacement that explicity compiled the dependency rules from a sequential language with normal if and looping constructs and obvious built-in tests for all the stuff in autoconf.

    25. Re:As Pro Linux as I am.... by SnarfQuest · · Score: 1

      The setup program does install all the DLL's that the programs want, even if you already have newer versions of those DLL's installed. Who cares if it installs DLL's that won't work with your version of Windows (as IE 5.5 did with versions of Windows 95). It's all OK as long as it's just one mouse click away.

      --
      Who would win this election: Andrew Weiner vs Andrew Weiner's weiner.
    26. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      The only people who have a hard time with a command line are the people who have been trained on nothing but Windows and have no desire to learn anything new

      OK, you're going to go and find the group of blue collar and elderly people that have been ignoring widely available personal computers for 25 years, and convince them that the commandline is superior. What a plan for world domination!

      Hopefully your guiney pigs will stay in their cave and never see how normal people use their computers. And you can ssh in (for FREE) and perform the system admin magic behind the scenes so they'll never know how bad the truth really is. Yup, that proves your point.

      OR, your theory is wrong, and GUIs really do lower traning costs and nearly as much usability as the CLI(except for edge cases). That's why the civilized world uses them and sees absolutely no need anymore to go to the command-line to accomlish straight-forward tasks. But that would mean your entire worldview is flawed, so happy hunting.

    27. Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      why are they then designing build systems?
      Shouldn't it be a prerequiste for doing build systems that you type and can create text files?

      Why stop at auto build systems? why not point and click and all your work is done.

      What a moran you must be.

  4. Why autoconf, automake and libtool fail by ppetru · · Score: 5, Informative

    Here's an article on the subject, written by Uwe Ohse (you can read the original article here. Many of the problems were fixed in the mean time, but it makes an interesting read nevertheless.

    autoconf config.guess, config.sub There was no source from which one could get up-to-date version of these scripts, which are used to determine the operating system type. This often caused pain: asked the openbsd port maintainers about it. (btw: there is now a canonical source for them, "ftp.gnu.org/gnu/config") autoconf takes the wrong approach The autoconf approach is, in short:

    • check for headers and define some preprocessor variables based on the result.
    • check for functions and define some preprocessor variables.
    • replace functions not already found in the installed libraries.
    Yes, it works, albeit some details are discouraging, to but it mildly.
    No, it doesn't work good enough. This approach has lead to an incredible amount of badly code around the world.

    Studying the autoconf documentation one learns what kind of incompatibilities exists. Using autoconf one can work around them. But autoconf doesn't provide a known working solution of such problems. Examples:

    1. AC_REPLACE_FUNCS, a macro to replace a function not in the systems libraries, leads to the inclusion of rarely used code in the package - which is a recipe for disaster. On the developers system the function unportable() is available, on another system it isn't? Oh well, just compile unportable.c there and link it into the programs ...
      Yes, this solves a problem. But it's overused, it's dangerous. In many cases unportable.c doesn't work on the developers system, so she can't test it. On other cases unportable.c only works correctly on _one_ kind of system, but will be used on others, too.

      Yes, the often used packages _have_ been tested almost everywhere. But what about the lesser often used?
      Keep in mind that there is no central repository of replacement functions anywhere ...

    2. The same is true for AC_CHECK_FUNC(S). In this case there isn't a replacement source file, but even worse, there's an #ifdef inside the main sources, unless the programmers are careful to use wrappers, which they often aren't, because compatibility problems are often discovered very late in the testing process (or even after release) and people are usually trying to make the smallest possible changes.
      This is surely nothing which can be avoided completely, but it's something which has to be avoided whereever possible.
    In both cases you end up with rarely, if ever, used code in your programs. It's not dead code, it's zombie code - one day, somewhere, it will get alive again.

    There's a solution to this problem, but it is completely different from what's used now: Instead of providing bare workaround autoconf (or a wrapper around it) ought to provide an abstraction layer above it, and a central repository for such things.
    That way a programmer wouldn't use opendir, readdir, closedir directly but call they through the wrap_opendir, wrap_readdir and wrap_closedir functions (i'm aware of the fact that the GNU C library is this kind of wrapper, but it hasn't been ported to lots of systems, and you can't rip only a few functions out of it).
    autoconf macros are inconsistent. For example: AC_FUNC_FNMATCH checks whether fnmatch is available and usable, and defines HAVE_FNMATCH in this case. AC_FUNC_MEMCMP checks for availability and usability of memcmp, and adds memcmp.o to LIBOBJS if that's not the case. Other examples exist. autoconf is not namespace-clean. autoconf doesn't stick to a small set of prefixes for macro names. For example it defines CLOSEDIR_VOID, STDC_HEADERS, MAJOR_IN_MKDEV, WORDS_BIGENDIAN, in addition to a number of HAVE_somethings. I really dislike that, and it seems to get worse with every new release.
    My absolutely best-loved macro in this regard is AC_FUNC_GETLOADAVG, which might define the following symbols: SVR4, DGUX, UMAX, UMAX4_3, NLIST_STRUCT, NLIST_NAME_UNION, GETLOADAVG_PRIVILEGED. autoconf is large I'm feeling uneasy about the sheer size of autoconf. I'm not impressed: autoconf-2.13.tar.gz has a size of 440 KB. Add automake to that (350 KB for version 1.4). Does it _really_ have to be that large? I don't think so.
    The size has a meaning - for me it means autoconf is very complicated. It didn't use to be so, back in the "good old days". And it accomplished it's task. I really don't see that it can do so much more today (i don't mean "so much more for me"). configure is large Even trivial configure scripts amount to 70 KB of size. Not much?
    Compressed with gzip it's still 16 KB. Multiply that by millions of copies and millions of downloads.
    No, i don't object to the size. It's perfectly ok if you get something for it. But you don't, about one half or more of each configure script can be thrown away without any lossage.

    • Large parts of it just deal with caching, which wouldn't be needed if configure wasn't so slow.
    • Other parts of it are the --help output, which looks so good ... but doesn't help usually (try it and find out what to do, without reading README or INSTALL).
    • Then there is the most bloated command line argument parser i've ever seen in any shell script.
    • Then there are many, many comments, but they aren't meant to help you seeing what's going on inside configure, they are the documentation for the macro maintainers (some might actually prove to be useful, but the vast majority doesn't).
    The configure scripts are the utter horror to read. There's a reason for this: configure doesn't use any "advanced" feature of the shell. But i wonder - are shell functions really unportable? And if the answer is yes: Do you really expect anything to work on that system? The problem is that a shell that old is unlikely to handle almost anything, for example large here documents.

    The configure scripts are the utter horror to debug. Please just try _once_ to debug 4000 lines of automatically generated shell scripts.

    Note the autoconf maintainers: The road you're on is going to end soon. autoconf is badly maintained Let me clarify this first: I don't think bad about the developement. I'm missing maintainance of the already released versions. Now, at the end of 2000, almost two years have passed without a maintainance release of autoconf. 9 months have passed since a security problem has been found (in the handling of temporary files). There have more bugs been found, of course.
    I know that nobody likes to dig in old code, but 2 years are a little bit much. automake My primary objection to automake is that automake forces me to use the same version of autoconf everywhere. Autoconf has a large number of inter-version conflicts anyway, but automake makes that situation worse, much worse.
    I'd need the same version of both tools on all machines i happen to touch the Makefile.am or configure.in or any other autoconf input file on. There are a number of reasons for that, one of them is that automake used to provide some autoconf-macros during the years autoconf wasn't developed at all, and these macros are now moved to autoconf, where they belong to. But if you happen to use, say, AM_PROG_INSTALL, and later versions declare that macro obsolete ...
    That doesn't sound too bad? Ok, but suppose

    1. update all those machines regulary (i'm not going to really do that, i'd rather stick to what's installed, but anyway)
    2. i didn't touch a project for, say, 2 years, and then i need to change something and release a new version. This involves changing the version number in configure.in.
    In more cases than not this will need considerable changes to configure.in. Some major, most minor - but even the minor ones need attention.
    I found that hard to deal with. Things were even worse since every CVS checkout tends to change time stamps, which can mean that autoreconf is run even if there's no chance been done to any autconf input file.

    Don't misunderstand me: i don't attribute that to automake. I attribute it to the internal instability of autoconf. Unfortunately you can't have automake without autoconf. libtool Libtool adds an additional layer of complexity. I never had any reason to look at the insides of libtool (which proves that it worked for me). But having one project which used autoconf, automake and libtool together was enough - never again. I got exactly the same problems as i got with automake, described above, but they were worse and happened more often.

    One problem with libtool is that releases don't happen very often. Libtool rarely is up to date with regards to changes on some operating systems. Which makes it difficult to use in packages meant to be really portable (to put it mildly).

    A libtool script and a number of support files are distributed with every package making use of libtool, which ensures that any user can compile the package without having to install libtool before. Sounds good? But it isn't.

    • This approach means that you can't replace all old libtool stuff on your system easiely.
    • It also means that every package you try to compile can have a different version of libtool. And since alpha versions of libtool are often used it's not unlikely that you happen to meet one of these versions.

    Another problem is the size of the libtool script. 4200 lines ... summary Autoconf is the weak link of the three tools, without any doubt. Version 1 wasn't really designed, version 2 made a half-hearted attempt of dealing with design problems. I'm not sure about the next version.

    --

    Petru
    1. Re:Why autoconf, automake and libtool fail by benwb · · Score: 1

      Do you have any alternatives?

    2. Re:Why autoconf, automake and libtool fail by quigonn · · Score: 1

      plain makefiles and portable programming. At least this works for me(tm).

      --
      A monkey is doing the real work for me.
    3. Re:Why autoconf, automake and libtool fail by tal197 · · Score: 1

      So how would you cope with supporting three different releases of libxml, each with different functions and prototypes for saving out an XML document?

    4. Re:Why autoconf, automake and libtool fail by quigonn · · Score: 1

      I'd support only one release of libxml. If they change function names at will, they should be shot, anyway. You should only add, but you must never remove syambols from a library. This guarantees compatibility (also, the behaviour must stay the same).

      An idea: fork the libxml code, and make your own library, only supporting the forked one. And on your website and in your documentation, explain why you did that (incompatible releases of the same library).

      --
      A monkey is doing the real work for me.
    5. Re:Why autoconf, automake and libtool fail by tal197 · · Score: 1
      What about Gtk+. Should I fork that too?

      For 2.0, they've changed the signal handling, menu short-cuts, text rendering, image handling, etc.

      Do I require everyone to install Gtk+-2.0 (when it's officially released, of course), thus annoying everyone who hasn't upgraded their distro in the last few months. Or should I stick to 1.2, and not let anyone benifit from the new features, even if they have it installed?

      Or shall I just use autoconf and support both?

    6. Re:Why autoconf, automake and libtool fail by reflective+recursion · · Score: 1

      You fork your own program. Make one release that works with GTK+ 1.2 and only apply bug fixes to it. The other release you make with GTK+ 2.0 and put the new stuff in there. Otherwise you might be supporting GTK+ 1.2 for a long long time. This lets your users know that you plan to move to GTK+ 2.0.

      I think this is a problem with autoconf/automake/etc. They can be a little too convenient and will turn good design and code into #ifdef spagetti in no time. Trust me. I wrote a program which supported GNOME, QT, _and_ plain GTK+. While the QT code was very seperate, the GTK+ and GNOME code overlapped much so I thought "hey, code reuse!" Bad idea. Once a new GTK+ version was out (no matter if it was a minor release or not) _everything_ broke. And there is always the case of relying on this one special "feature" of GTK+ only to have it gone in the next bugfix.

      --
      Dijkstra Considered Dead
    7. Re:Why autoconf, automake and libtool fail by damiam · · Score: 1

      Considering that GTK 2 doesn't have source compatibility with GTK 1.2 and you'd have to have two completely different versions of your app, I don't think that is a problem autoconf could solve.

      --
      It's hard to be religious when certain people are never incinerated by bolts of lightning.
    8. Re:Why autoconf, automake and libtool fail by Flarenet · · Score: 1

      Not to argue with any of your points, but I am using autoconf 2.52 on my Debian system. It was released on July 18, 2001. I imagine there might be a more up to date version, but I'm using the testing branch of the Debian distribution.

      autoconf/automake is not a silver bullet, but it does provide a uniform way for users to compile and install your package. Virtually every Unix user knows to do ./configure; make; make install to have the package installed.

    9. Re:Why autoconf, automake and libtool fail by tal197 · · Score: 1
      Eh? It already does solve it for me (and Gtk+-2.0's in API freeze now, so that should be the end of it). ROX-Filer (CVS) should compile cleanly against 1.3.11 or 1.2.x. (current developer release doesn't support 1.3.11 because that was before the API freeze).

      Sure, it means compiling against both versions for testing (but there are other developers who do that).

      Mostly it's just one line stuff, like this:

      #ifdef GTK2
      gtk_accel_map_load(menurc);
      #else
      gtk_item_factory_parse_rc(menurc);
      #endif

      I know it would be nice to dump the 1.2.x users, but it simply won't work (already had enough complaints about the developer releases requiring gdk-pixbuf, even though the stable release doesn't).

    10. Re:Why autoconf, automake and libtool fail by zoftie · · Score: 1

      This article say this and that is wrong with automake & friends. Maybe it does have problems,
      however I have problem with me maintaining a
      file for dozen types of different systems.
      Systems that automake does not work on either:
      1. windows
      2. dead Unix, from 1985 or something.
      Preaching that OH, this thing does not work, does not help, esp. in light that most Unixes where hightly incompatible and braindead. It just reinstating the obvious.
      What would be helpful is for more people to use automake, so that there will be pressures to address know issues, instead of spending eons writing articles and maintaining thousands of
      makefiles for every braindead OS there is.

      Please use automake, unless your department uses things like SunOS, HP-UX and SCO. In any case,
      using or not using automake & friends, you will be on the road to hell, you will just have to choose the way. Oh, and 'make' on those machines probably won't read your make files properly either.
      Shortest resistance path is GNUfication of development/installation environment, but that might not be kosher with sysadmins...

    11. Re:Why autoconf, automake and libtool fail by Anonymous Coward · · Score: 0

      xmkmf.
      you might also look at joerg shilling's aproach in mkisofs and the cd-burning stuff.

    12. Re:Why autoconf, automake and libtool fail by rhavyn · · Score: 2

      The autotools work fine on Windows assuming you have cygwin or the like installed. It needs something like that installed because Windows doesn't have sh or make installed by default. From the output of configure:
      checking for Cygwin environment... (cached) no
      checking for mingw32 environment... (cached) no

      Autotools also work fine on SunOS, HP-UX and SCO. libltdl (libtools wrapper library for dynamically loadable modules) supports .dlls from Windows and will correctly figure out the extension to use on different Unixes (.so on just about everything, .sl or HP-UX).

      And the makefiles output by autoconf/automake should work on every known version of make. They don't rely on any vendor specific features.

    13. Re:Why autoconf, automake and libtool fail by elflord · · Score: 1

      I'm not clear on what your problem is. If you don't like some of the autoconf macros, don't use them. I tend to avoid most of the macros you complain about here. Autoconf can be abused, as can most useful tools. I find it useful for simplifying build automation, and giving users (and myself) something better to work with than "edit the Makefile".

    14. Re:Why autoconf, automake and libtool fail by aminorex · · Score: 1

      So now you've rendered your own code just as
      unreadable and unmaintainable as the autoconf
      scripts themselves.

      Autoconf was a good idea that was kludged and
      grown far beyond the limits of it's kludgy design.
      As a result, it sucks.

      You can't run autoconf on anything but a
      GNU system. You can write portable build code
      for native Win32 and GNU, no problem.
      Introduce autoconf, and *wham*, you've just
      bought into a platform. Your code is no longer
      open.

      Autoconf is embrace-and-extend, FSF-style.
      Therefore, it sucks.

      --
      -I like my women like I like my tea: green-
    15. Re:Why autoconf, automake and libtool fail by aminorex · · Score: 1

      Like ACE, the auto tools are a big web of intrigue.
      If you are in for an inch, you're in for a mile.
      That means you have to suck in the whole GNU
      toolchain. And that means your code isn't portable
      any more.

      I'm no Java zealot, but even Ant is better than
      this baroque multilayed spaghetti tangle of
      undebuggable macros. Even if you *love* m4 and sed,
      you should be responsible to your peers, have pity
      on the fool who has to maintain your shoddy work,
      and write your build tools in something that can
      at least be rationally *debugged*.

      For the love of God, Montressor!.
      .

      --
      -I like my women like I like my tea: green-
    16. Re:Why autoconf, automake and libtool fail by Zagadka · · Score: 1

      You're kidding, right? Most of the time I've had to install stuff that used xmkmf, I ended up spending an hour or more fixing the Makefile. autoconf may be a bloated beast, but at least it works most of the time.

  5. Windows troll, was: Re:As Pro Linux as I am.... by pdqlamb · · Score: 1

    Of course, this assumes you have a single target platform (or a very limited set, like half a dozen Windows targets). Since the question was asked for a project with multiple target platforms, double-clicking setup.exe is irrelevant.

    1. Re:Windows troll, was: Re:As Pro Linux as I am.... by Vanders · · Score: 2, Interesting

      Why cant we have an equivilent of setup.exe that untars the package and runs ./configure && make && make install? The process the user sees would be comparable to an InstallShield installer. Open, ask a few questions, pass the answers onto configure, such as --prefix for example.

      Why would that be so difficult?

    2. Re:Windows troll, was: Re:As Pro Linux as I am.... by erikdalen · · Score: 1

      I'm pretty sure there is such an application called installfest

      /Erik

      --
      Erik Dalén
    3. Re:Windows troll, was: Re:As Pro Linux as I am.... by GreatUnknown · · Score: 1

      Great, if you're only targeting one platform. But it doesn't work for building on multiple platforms, because your "setup.exe" binary will only run on the platform it was built for.

      And as far as making it easy for your average user, most software (for linux at least) is released as .rpm or .deb for your distro which is usually just as easy as a setup.exe - double click the .rpm in Konquerer (or whatever file manager your distro uses by default) and away you go.

    4. Re:Windows troll, was: Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      But it doesn't work for building on multiple platforms, because your "setup.exe" binary will only run on the platform it was built for.

      How about writing it in Perl, or Python, or $PORTABLE_LANGUAGE and binding to a simple X toolkit (Which you could easily include with your "setup.exe")?

    5. Re:Windows troll, was: Re:As Pro Linux as I am.... by Atzanteol · · Score: 1

      install.exe:
      #!/bin/sh

      ./configure && make && make install

      Now, how difficult was that? Surely simpler than clicking on many buttons...

      --

      --
      "Ignorance more frequently begets confidence than does knowledge"

      - Charles Darwin
    6. Re:Windows troll, was: Re:As Pro Linux as I am.... by CheeseMunkie · · Score: 1

      Your servers run X? For something as complicated as this, chances are it's a server... Most of my servers don't even have X libraries, video cards, or mice, so your X toolkit won't work...

      As far as $PORTABLE_LANGUAGE, in large part that's what configure is. ./configure && make && make install is, after the warning about low disk space in motd, the most common thing on all unix platforms.

    7. Re:Windows troll, was: Re:As Pro Linux as I am.... by KenCrandall · · Score: 1

      Not exactly true...

      The BSD ports trees do exactly this, and with some work, could easily be extended to be a multi-platform solution.

      Ken

    8. Re:Windows troll, was: Re:As Pro Linux as I am.... by 42forty-two42 · · Score: 1

      Make it a bash script; use tail --bytes=targzsize to get the data out(appended to end)

    9. Re:Windows troll, was: Re:As Pro Linux as I am.... by vsync64 · · Score: 1
      Your servers run X? For something as complicated as this, chances are it's a server... Most of my servers don't even have X libraries, video cards, or mice, so your X toolkit won't work...

      Why not just install the libraries? Then you can:

      export DISPLAY=workstation:n
      --
      TO BUY A NEW CAR WOULD MAKE YOU SEXUALLY ATTRACTIVE.
    10. Re:Windows troll, was: Re:As Pro Linux as I am.... by Anonymous Coward · · Score: 0

      try Linux From Scratch or look at BSD-Portal-File-System...

  6. Make the switch but be prepared... by jvl001 · · Score: 5, Informative

    I am an engineering grad student working on a similarly sized project. Our project is compiled on a variety of Unix platforms using automake, autoconf and libtool. As you are already compiling for multiple platforms you are 90% of the way there in determining the different needs for each compile. If you haven't already organized your build process, now would be a good time before it becomes 10M lines of code.

    Autoconf and friends make it infinitely easier to compile our code. However you will have to put in a fair bit of work determining all variety of tests required to determine the idiosyncracies of each build. You are probably already doing something similar if you can build on multiple platforms.

    Autoconf has been well worth the initial effort. Occasionally new compile problems crop up, but they are usually solved by the addition of another 1 line check in configure.in.

    Selling autoconf should be easy. Wrestle with compile problems once getting autoconf working, or have users repeatedly wrestle with the problems without autoconf.

    --
    /. is to journalism as graffiti is to a bathroom wall
  7. Ant by ericrath · · Score: 2, Informative

    I'm a novice when it comes to automated build tools, but I've been impressed by Ant, from the Jakarta project by the Apache Group. From what I've read, it seems that Ant can do almost everything autoconf can, but because it's written in Java and uses XML to store its configuration, there are no cross-platform issues. I should add that I have *very* limited experience with autoconf; I've really only *used* it, not developed with it, so my opinion is a fairly uneducated one. Has anyone else used Ant and autoconf enough to make a good argument for or against Ant?

    1. Re:Ant by sqrt529 · · Score: 2, Informative

      Ant is a build tool for java. autoconf is a tool that generates the makefiles for mainly C projects. You can't compare both.

    2. Re:Ant by Enygma42 · · Score: 0

      I've developed with Ant for almost the last year now and it's really sweet. We're using it to dynamically build required modules and dynamically create config files etc.
      Extending Ant is simple too.
      Careful though, Ant 2.x buildfiles will be incompatible with Ant 1.x buildfiles.

      --
      "hehe, website" - Homer Simpson
    3. Re:Ant by Andy · · Score: 2, Informative

      I have experience with both. If you are developing a Java app, or specifically one that employs JSP servlets, EJB, etc. your best choice is Ant. Its builtin rules are very nice. Your project should build routinely on any Unix of M$ Windows. Autoconf should be used for C/C++ builds for Unix where the system libraries and includes must be closely scrutinized.

    4. Re:Ant by Xugumad · · Score: 1

      Ant rocks. I'm using it for a reasonably large scale project, and it makes my life so much easier its not funny. Despite what another poster has said, I see no reason why it cannot be used to develop C programs - however it does not support gcc directly, you would have to use <Exec>.

      I have also used autoconf, and tried to use automake - my general feeling on these tools is that they are very inelegant solutions to the problem of cross-platform portability. Personally I'd love to see an Ant-like tool which read in a file which contains both makefile and autoconf data (and using XML for the data format wouldn;t hurt, either).

    5. Re:Ant by Anonymous Coward · · Score: 0

      Plain wrong. Ant can be used to build basically anything you want. It's NOT limited to Java.

    6. Re:Ant by Anonymous Coward · · Score: 0

      but it's main advantage is that javac hasn't to be loaded and a new VM be fired up everytime another 10 lines of code in an other file want to get compiled. Integrating gcc into make could do the same for us...

    7. Re:Ant by aminorex · · Score: 1

      Sure you can compare them, because they can both
      be used to solve the same problems. You can make
      a direct comparison of the learning curve, the
      lines of build code, and the maintainability of
      the results. I've never done such a benchmark,
      but after using both tools (on different projects)
      I confident is saying that Ant wins by about 10^9
      aphid lengths, on every one of those points.
      Ant is better at doing what it wasn't designed
      for than autoconf is in fulfilling its own
      specialty.

      --
      -I like my women like I like my tea: green-
    8. Re:Ant by Anonymous Coward · · Score: 0

      A developer here claims that Ant cannot do build dependency analysis. Hence if you modify one little file in a large Ant build then run Ant it will go through and javac ALL of the source files - not simply the one that you just edited or touched. As such it is little more than a bat script wrapper around javac and does not do dependency analysis like make does.

  8. Just for the record: libtool and AIX by aheitner · · Score: 3, Informative

    For all the fact the libtool tag line is "Do you really want to worry about linking on AIX yourself?"...

    I spent quite a bit of time this summer trying to use autoconf'd stuff on AIX (Gtk+). I played with a pile of recent and not-so-recent versions of libtool. It was a pain in the butt. (Granted, linking on AIX is ... abnormal ... but you'd think libtool would know how to do it).

    I think the power of the autoconf suite to make things work across "all Unices" is a bit exaggerated. Check whether it really does a good job of supporting all the platforms you need, first.

    1. Re:Just for the record: libtool and AIX by tww-china · · Score: 1

      As of libtool 1.4.1, linking on AIX with LDFLAGS="-Wl,-brtl" works fine. The -brtl flag causes the AIX linker to look in *.a and *.so files.

    2. Re:Just for the record: libtool and AIX by devinoni · · Score: 1

      If you have source code still using libtool 1.3.5 or lower. IBM's Linux Toolbox has a version of libtool which can build most libtool applications. You'll just need to run libtoolize --force, on the source to update it to their 1.3.5a. Check IBM's site for the libtool RPMs. They have a bunch of gtk+ apps in packages already.

    3. Re:Just for the record: libtool and AIX by Jeff+Trawick · · Score: 1

      FYI... "-brtl" does more than just tell the
      linker to look in *.a and *.so. If you just
      want to tell the linker to look in *.a and *.so,
      "-brtl -bnortllib" is much safer. See the ld
      documentation on -brtl where it talks about the
      enablement of run-time linking.

  9. Portability by SuperguyA1 · · Score: 1

    We(anon) switched to using GNU Autoconf about 2 years ago, there is nothing like it to make it easier to build on mulitple architectures. All the info you need to #ifdef your heart away is easily accessable.

    --
    "as plurdled gabbleblotchits on a lurgid bee" - Prostetnic Vogon Jeltz. (One man's humorous is another mans flamebait)
  10. Autoconf does help portablity to "normal" OS's. by SirGeek · · Score: 3, Informative
    I'm working on Linux HA in their porting (porting to Solaris and *BSD).

    Thanks to Auto conf, some really nasty #if's in the code have been removed by a single include line, its also able to simplify code by removing 50 trillion OS specific checks from the source files and only insert it when it needs to.

    Once you get over the basic learning curve hurdles, then you should be fine.

    It would be nice though if there was a makefile -> autoconf converter (but that is just me).

  11. Slashbot Copy n' Paste Frolics by Anonymous Coward · · Score: 0, Funny
    Slashbot Fun Time Frolics
    Simply copy n' paste your favourite expression into a post!
    • "Oooh! How schweet! Does it run Linux?"
    • "I wonder how long it will take before Linux is ported to this puppy?"
    • "I was going to write the app, but I was too lazy to do it, and waited for someone else to make it instead."
    • "The GPL is great - Let's discuss it."
    • "My professor said I should be using emacs..."
    • "My professor said I should be using vi..."
    • "It's sooo easy to port this application, why hasn't anyone done it yet? I would, but I'm too busy working on the kernel and choosing new Transformers wallpaper..."
    • "If everyone was as talented a coder as me, we'd have beaten Microsoft by now!"
    • "I don't care if Windows Ultra has no bugs or security flaws whatsoever, it's still worse than Linux."
    • "Chyeah! Right! If it was a business requirement to use Java, they should have refused to do the project!"
    • "Of course I don't use Internet Explorer. I only use it when I'm forced to, like at the office, and at school, and at home..."
    • "The government can kiss my ass until they stop monitoring my phone calls... FREEEEEDOM!"
    • "I can't believe you paid money for Photoshop! GIMP is way better dude!"
    • "I was going to Ask Slashdot, but then I noticed that Dragonball Z was on cartoon network..."
    • "I've always wanted a Japanese girlfriend so I can understand my non-dubbed/subbed anime collection..."
    • "Uh! That's is such a rip off of Communication OS from Serial Experiments Lain!"
    • "Why didn't Alan ask Linus about the VM? I like being on first name basis with my heroes."
    • "Everyone on IRC told me Enterprise was crap. I watched it, loved it, and then told everyone I met that it was crap."
    • "The government is taking away my rights! This is so like '1984'!"
    • "I'm reading the preface to C for Dummies and my head already hurts..."
    • "But real programmers use a CLI! Anybody who doesn't use a Common Library Injector should have got a degree like me!"
    • "I'm going to code my Gamecube emulator in C, but even though I have only ever used Visual Basic Learning Edition, it should be a one banana problem and ready in the next few days."
    • "I hardly think you can call me a fashion victim - I been encoding to ogg since 1994"
    • "But I'm taking Computer Science at university; You WILL respect my opinion! I am the law!"
    • "I may have only just graduated, and may still be looking for work, but I've got more experience than you with your '20 years of coding'!! Get A BS!"
    • "I asked Neff if they would Open Source the code to my microwave, but they told me it was proprietary..."
    • "I know Ada, Fortran, Cobol, C, C++, Java, HTML, Perl and RPG.... Oh, I thought you meant know *of* them..."
    NickTheGreek, London
    The traffik's blaadhy murder, but then that's part a' the charm, aint't it?!
    1. Re:Slashbot Copy n' Paste Frolics by Anonymous Coward · · Score: 0

      I really enjoyed this post, how come ppl mod down great stuff like this?

      random text so i can find my excellent post in the future sdflksdflksdflk

  12. just do it by oogoody · · Score: 2, Insightful

    Just do the conversion and see what's it like.
    The talking about takes longer than doing it.
    Then you'll really know.

  13. Source versus binaries by srichman · · Score: 3, Insightful
    Why cant we have an equivilent of setup.exe that untars the package and runs ./configure && make && make install? The process the user sees would be comparable to an InstallShield installer.
    When was the last time an InstallShield installer compiled your new program from source for you based on a couple configuration questions?!!

    I think the important difference you're forgetting is that Windows installers are installing binaries, while configure and make are building source code. A better analog in the Linux world is rpm or apt-get. There are very few programs these days that don't come with prebuilt binaries for several Linux configurations. And, no, I don't think rpm/apt-get (graphical, if you like) is much harder than setup.exe (modulo dependency satisfaction in rpm, but I would hardly consider the fact that most Windows programs are distributed with (possibly out of date) versions of a lot of libraries you already have to be advantageous).

    The process the user sees would be comparable to an InstallShield installer. Open, ask a few questions, pass the answers onto configure, ...
    I would argue that one of the functions of configure (aside from detecting hella shit about your build environment) is to "ask a few questions." Just do ./configure --help or read the documentation, and it'll tell you about all sorts of "questions" you can answer (--prefix=XXX, --with-option-X, --without-option-X, --with-db=db3, whatever). If you're upset that there aren't any little radio buttons to help you answer these "questions", then, yeah, I'm sorry. It is possible for applications to support graphical configuration; the Linux kernel (make xconfig) illustrates this quite nicely. I think having a Tk frontend to configure is major overkill for nearly all applications, though.
    1. Re:Source versus binaries by Vanders · · Score: 1

      There is a difference between installing from source and straight binaries? Not really. Source install is a two step process. The first step is to compile binaries. Thats it.

      There is no reason why 99% of applications that rely on the current configure && make && make install could not be wrapped with a graphical front end. The same "questions" you need to "answer" with the configure script can easily be represented by a multi-stage graphical front end. For example, choosing the installtion directory just becomes a -prefix= argument to the configure script. Do you want to compile with SDL or use X overlays directly? Thats a radio button which becomes a --with-sdl or --without-sdl (For example) argument.

      Why would it be overkill? If the actual installer was part of your system anyway, based on say Python and Tk (As examples), then the actual installer script for each application would be a few lines of code. Applications that don't require a whole bunch of questions can just get the default installer (E.g it just asks you for the installation path) and that can simply run configure for you.

      The whole point of my idea is to reinforce a previous posters comment that expecting users to open a terminal and run configure etc. from a CLI is actually a high barrier of entry for most users who are migrating from Windows. Why should we make it tough on them? Why can't we try and focus on making Linux as easy to use as possible?

    2. Re:Source versus binaries by srichman · · Score: 3, Interesting
      The whole point of my idea is to reinforce a previous posters comment that expecting users to open a terminal and run configure etc. from a CLI is actually a high barrier of entry for most users who are migrating from Windows. Why should we make it tough on them?
      I totally agree in prinicple, but in practice, if you're a person who considers a build system that requires you to type --prefix=/usr/local on a command line (rather than typing /usr/local in a textbox) to be a "high barrier," then you probably have no special need for a build from source and would prefer a precompiled binary.
      There is a difference between installing from source and straight binaries? Not really. Source install is a two step process. The first step is to compile binaries. Thats it.
      Again, I agree that there is no real difference in principle (except source builds fail and cause problems a lot more than binaries because bulid environments are a lot more variable than dynamic linking environments). However, I think there is a major practical difference in terms of usage. 99% of users install binaries. Personally, when new versions of popular software come out, I almost never install them from source or non-packaged binary--no matter how painless the build process--and I've been using Linux for 5+ years.

      This is why so much development effort has been put into creating nice, user friendly graphical binary installers, and why so little effort has been put into more general Tk configure frontends. Development energy can be better spent elsewhere.

      Besides, the problem of build failure is a serious one. The other day I compiled an (autoconf-based) application that was supposed to build out of the box on my system. The developer, however, had not tested the application with gcc 3, and I had to make half a dozen changes to the source to get it to compile. What do you propose your graphical newbie-friendly builder does at this point? You're pretty much screwed, because there's no way to recover from "error X on line Y" aside from telling the user that there was an insurmountable failure. Binary installers work much better for newbies, because your installer can detect and report (and possibly fetch and install) missing libraries on which the new application is dependent. Then, with very high probability, the installation will succeed. (At that point, the only stumbling block should be things like the locations of configuration files.)

    3. Re:Source versus binaries by ethereal · · Score: 1
      There is no reason why 99% of applications that rely on the current configure && make && make install could not be wrapped with a graphical front end.

      Well, one reason: regular users probably won't have installed "C/C++ Development" at their RedHat install time, and so don't have gcc, etc. available. Building from source is going to be a needless complication for most users, with really limited utility since they will just be reproducing what their distro's binary packages would provide anyway.

      It seems to me that this whole thread is off on the wrong tangent. The equivalent of Windows setup.exe is double-clicking on your distribution's provided RPM file, and having KDE/Gnome be smart enough to run rpm -i for you. "Regular users" should only be installing from RPMs provided by their distribution maintainer and guaranteed to handle dependencies properly. Any time you get users that have to compile something from source or set up something from a foreign distro, you are way off of the parallel of Windows' setup.exe and are talking about something more akin to porting from one version of Windows to another.

      --

      Your right to not believe: Americans United for Separation of Church and

    4. Re:Source versus binaries by JohnQPublic · · Score: 1

      There is a difference between installing from source and straight binaries? Not really. Source install is a two step process. The first step is to compile binaries. Thats it.


      Nope. The first step is to succesfully compile binaries. That's it. Unfortunately, all too often there's more to that step than "./configure && make install". There's writing patches because nobody else has compiled this release of the package for platform X before. There's reconciling conflicts with standard libraries and include files. There's figuring out what changed since GCC 2.x such that the package won't compile with your compiler. There's installing the C compiler! Etc. The reason binary RPMs are so popular is that someone who knows how to do this stuff does the heavy lifting, and the rest of the crowd just installs the resulting binaries.


      Would you rather buy a Checker Marathon or try to assemble one from parts gathered from assorted manufacturers and hope it goes together right?

  14. Beware autoconf if you are cross-compiling!! by Stiletto · · Score: 5, Interesting

    I have found that autoconf has problems when you are cross-compiling. If you are or plan to cross-compile your project, stay far away from autoconf.

    A few macros (particularly AC_TRY_RUN, and anything that calls it) compile and run a program on the host to test for functionality. Unfortunately, there is no way to tell autoconf that you aren't going to be able to run the compiled program, because it's for your target platform.

    Many of the AC_FUNC_ macros simply DIE when running in a cross-compiling environment. For example, let's cross-compile the ncftp package. The configure.in uses the AC_FUNC_SETPGRP macro. Running autoconf results in:


    configure.in:146: warning: AC_TRY_RUN called without default to allow cross compiling


    That's right. This macro (defined elsewhere in the autoconf package) uses AC_TRY_RUN without a default clause. So instead of recovering nicely, the configure script dies when it tries to do this test. The only way to get around this is to modify /usr/share/autoconf/acspecific.m4 or not do the test!

    1. Re:Beware autoconf if you are cross-compiling!! by eli173 · · Score: 5, Informative

      When you are cross compiling, configure may not be able to run those tests, but you can help it out.
      Define the CONFIG_SITE to point to a config.site file in configure's environment. Then put into your config.site file a line like:
      ac_cv_func_getpgrp_void=yes
      Yes, you do have to look at the configure code to find that name, but it lets you give the software the answers it needs.

      HTH,

      Eli

    2. Re:Beware autoconf if you are cross-compiling!! by macshit · · Score: 1

      I've cross-compiled huge amounts of stuff using autoconf, and I think you're quite wrong. There are a few (and they are very few) autoconf tests that don't deal well when cross-compiling, but it's easy for the maintainer to provide a default for those cases (of course, most maintainers never cross-compile, so they don't even bother to do that). Most autoconf tests explicitly avoid running test programs precisely so they work well in a cross-compilation environment.

      Morever, you have to ask yourself -- what's the alternative? Most other configuration frameworks I've seen simply fold up and die when presented with a cross compilation environment (especially wierd non-standard ones). Autoconf, with just a smidgen of forethought, works like a champ.

      --
      We live, as we dream -- alone....
    3. Re:Beware autoconf if you are cross-compiling!! by Tadu · · Score: 1
      I don't know why this is rated funny...

      That's right. This macro (defined elsewhere in the autoconf package) uses AC_TRY_RUN without a default clause. So instead of recovering nicely, the configure script dies when it tries to do this test. The only way to get around this is to modify /usr/share/autoconf/acspecific.m4 or not do the test!

      Those test have been greatly improved in 2.5x, but there are of course lots of test that you just can't do on the host machine. Solution: Run those tests once on your target machine and add the result to your site-specific file. You can't expect autoconf to solve something that is impossible to solve.

    4. Re:Beware autoconf if you are cross-compiling!! by Stiletto · · Score: 1


      Ahh I admit my ignorance!

      That's what I get for spouting off like that. You're right--config.site is the answer for many of these situations.

    5. Re:Beware autoconf if you are cross-compiling!! by Anonymous Coward · · Score: 0

      GNU packages do cross-compiling just fine. Maybe you should have a look at them.

      I think there're variables like HOST_CC which default to CC, etc...

    6. Re:Beware autoconf if you are cross-compiling!! by eli173 · · Score: 1

      Glad my comment was useful to you, even if the moderators think nothing of it. :)

      One of the added benefits to that approach is that you can accumulate a config.site file that answers questions for most of what you cross compile. That way, you only have to say that a word is 4 bytes once. :)

      HTH,

      Eli

    7. Re:Beware autoconf if you are cross-compiling!! by Anonymous Coward · · Score: 0

      uses AC_TRY_RUN without a default clause

      Of COURSE this is funny! Can you imagine Santa Claus trying to run? He's huge? It'd be like CowboyNeal jogging!

    8. Re:Beware autoconf if you are cross-compiling!! by joelsherrill · · Score: 1

      RTEMS (a free embedded real-time OS) uses automake and autoconf. It is always cross compiled, supports about a dozen target CPUs,
      and untold number of hosts. Autoconf'ed packages that don't cross-compile easily are a reflection on the person who applied autoconf to the package -- not autoconf itself.

      Over the years, we have compiled numerous packages to target RTEMS. Some compile easily, some don't. That is independent of autoconf.

      We converted a few years ago from a complex custom Makefile scheme to autoconf. We have slowly used more and more features and are now using automake as well as autoconf. One thing autoconf does nicely is keep you from figuring out which features vary. Right now, that onus is on you.
      When a new OS version comes out -- you have to deal with it.

    9. Re:Beware autoconf if you are cross-compiling!! by Ian+Lance+Taylor · · Score: 2, Informative

      I've used autoconf extensively when building with a cross-compiler. Your advice to ``stay far away from autoconf'' is unwarranted.

      It's certainly true that building with a cross-compiler requires some extra care. It's also true that autoconf provides somes tests which give errors when building with a cross-compiler. However, it's not arbitrary. Those tests can not be run correctly if you can not run an executable. The tests are provided a convenience for the common case of a program which is never built with a cross-compiler.

      For a program which is built with a cross-compiler, there are various ways to handle these tests. I usually write the configure.in script to check the cross_compiling variable, and, if set, perform the check at run time rather than at compile time. For example, if you have the source code to GNU/Taylor UUCP around, look at how the ftime test is handled.

      There is a chapter in the book I cowrote which discusses building with a cross-compiler.

    10. Re:Beware autoconf if you are cross-compiling!! by Anonymous Coward · · Score: 0

      This is not autoconf's fault. Complain the author of ncftp for not supporting cross compilation. The manual of autoconf clearly explains how to use AC_TRY_RUN to make this work.

  15. Why not try Jam? by Anonymous Coward · · Score: 4, Informative

    I'm working on a relatively large project myself.
    We're using a build tool called "Jam", which can be gotten from http://www.perforce.com/jam/jam.html. It does a very good job at cross platformability and is faster than make at determining include dependencies.
    An open source project that uses their own version of Jam are the boost libraries at http://www.boost.org/

    Enjoy!

    1. Re:Why not try Jam? by David+Greene · · Score: 2, Informative
      An open source project that uses their own version of Jam are the boost libraries at http://www.boost.org/

      Ahh, you are a knowledgeable one. :) I was hoping someone would mention jam. It not only handles platform-dependent tasks, it's a full replacement for make and actually generates correct dependencies. It might be a little tough to convert a make-based project to jam, but it's the way I would go starting out.

      boost.build is the build system for the Boost libraries which, as mentioned, uses jam. In fact it uses an advanced version of jam with many new features. I'm not sure if those will be rolloed back into the "official" jam sources (boost jam is actually a derivative of FT Jam, from the FreeType project).

      Jamfiles (analogous to Makefiles) are platform-independent. A "Jamrules" file holds all the configuration-specific information. Some systems use autoconf to generate this. Boost does not and their build system is very flexible, allowing one to not only define platform-dependent things but also specify build features such as whether to make static of shared libraries (or both!), optimization levels, etc. A single build run can build shared and static libraries at several optimization levels, for example.

      --

    2. Re:Why not try Jam? by droleary · · Score: 1

      Interestingly (or not :-), jam is what Apple uses on Mac OS X for their Project Builder. It works very well, and it's especially nice for not choking like make does just because the path contains a space.

  16. Apple and Oranges by Utter · · Score: 1

    You are comparing apple and oranges here. autoconf is a build system to support building on different platforms. And I like autoconf very much, since development libraries, includes etc lives in very different places even on different Linux systems.

    setup.exe is a way of installing software to your system. Actually, it would be better to compare with Debian 'deb' files or RedHat 'rpm' files. Using apt-get should be equal to running setup.exe, assuming you have access to all deb files a certain application is dependent on.

    /Jonas U

  17. About to do the same by 4of12 · · Score: 4, Insightful

    We have a monstrously large software project with home grown kludges for building on multiple platforms that is a mess of shell scripts and makesfiles. It's ugly and the time required to keep fixing and extending this system is a heavy burden. Plus, it's only tolerable to use.

    I've used autoconf a little on a different smaller project and I know this much about it.

    When autoconf works, it works great. As a user, there's great delight in typing those 3 magic commands and having a whole series of feature tests fire off and configure the build process. And, as a developer, every time the system works (and it works more than kludge systems), it saves me from hassles of porting to platform de jour. If you look at some fairly complicated systems such as Octave or teTeX build, it's nothing short of amazing.

    However, that said, autoconf is complicated. And, you really have no choice but to learn a fair amount of the complications to deal with the issues that will inevitably come up during cross platform testing. I've mostly learned autoconf, a little of automake and almost none of libtool. The m4 macro language for defining the autoconf macros has syntax that always gives me nausea.

    If you implement autoconf for your project, great. But, expect a substantial fraction of your time-savings from it to be dedicated to becoming more of an expert at autoconf, m4, sh, etc.

    autoconf is better than imake, IMHO, but it sure is short of being as good as it should be. Large projects can justify the time for a person learning the intracacies of autoconf; small projects cannot, unless you happen to know it already. Learning autoconf is kind of like learning nroff just to write a man page - the time investment is more justifiable if you use your expertise to write more than one of them, or to write a really important man page.

    P.S. Is there any chance that the software carpentry project will come out with something soon? Some of their early submissions for improved build tools really sounded intriguing, like Tan, an XML based description.

    --
    "Provided by the management for your protection."
    1. Re:About to do the same by aminorex · · Score: 1

      > autoconf is better than imake, IMHO

      This reminds me of the questions I used
      to ask my mother after school, in the 5th
      grade, such as "Would you rather be drowned or
      frozen to death?" Both are non-solutions to
      non-problems.

      You get naseuous from m4? Wait until you
      have to debug it. You'll get hives.

      --
      -I like my women like I like my tea: green-
  18. External output/temp directories? by magi · · Score: 2

    One feature which I like in one Makefile system that I use, is not writing the output files, i.e., object and target files, to the source directory but somewhere else.

    Writing them somewhere else makes doing backups much easier, plus the directories don't get overcrowded. You can even make source distros just with a simple tar command.

    However, using Makefiles leads to really ugly bungles. Autoconf doesn't, to my knowledge, have any kind of support for this.

    Any ideas about how to do it easily and cleanly?

    1. Re:External output/temp directories? by Anonymous Coward · · Score: 0

      Eh? I'm currently doing the same (Sort of) without Autoconf but a hardcoded Makefile.

      First of all the "root" directory for the project has two directories, src & objs Source is in, well, src So is the Makefile.

      Basically, a simple Makefile would look like:

      OBJS=../objs/foo1.o ../objs/foo2.o

      CC=gcc
      LL=gcc

      CCFLAGS=-Wall -o

      all:$(OBJS)
      $(CC) foo1.c $(CCFLAGS) ../objs/foo1.o
      $(CC) foo2.c $(CCFLAGS) ../objs/foo2.o

      Why is that such an ugly bungle?

    2. Re:External output/temp directories? by kyz · · Score: 2

      However, using Makefiles leads to really ugly bungles. Autoconf doesn't, to my knowledge, have any kind of support for this.

      autoconf doesn't, but automake (or any other GNU Makefile standards-compliant makefile generator) can.

      Try this:

      % tar zxf package-version.tar.gz
      % mkdir build-package
      % cd build-package
      % ../package-version/configure
      % make
      % make install

      All your makefiles and such will be built in the build-package directory instead of the source tree.

      --
      Does my bum look big in this?
    3. Re:External output/temp directories? by Anonymous Coward · · Score: 0

      Wow! Separate a output directory for object files! What a novel concept! I've been doing this for many years with MSVC just by changing the output path field in the settings dialog.

      Damn I'm glad I don't have to piss around with those retarded makefiles with MSVC. Everything just works.

    4. Re:External output/temp directories? by Anonymous Coward · · Score: 0

      and when was the last time you told you MSVC to build an VMS or what ever Version of your prog?

    5. Re:External output/temp directories? by qbalus · · Score: 1

      food for thought:

      define generic relationships using pattern matching

      $(OBJ_DEST_DIR)%.o: $(OBJ_DEST_DIR)%.d
      $(CC_RULE)

      $(OBJ_DEST_DIR)%.d: %.c
      $(CC_DEP_RULE)

    6. Re:External output/temp directories? by magi · · Score: 1

      Wow, that was easy. Thanks! (To other people who replied too.)

      I had some slight problems with my own library that wants to have the source root directory in includes, and I had used "-I ..". I had to add a "-I $(top_srcdir)". But that's not too much trouble.

      I'll be using that feature a lot in future!

  19. Divide & conquer and other advice by James+Youngman · · Score: 5, Informative
    I'm assuming that since your system is a large project, it has subsystems in subdirectories. If this is the case, you can do a "pilot". Pick a very small subsystem and convert it to autoconf. Then pick a real target (for example, the most awkward system which is not gigantic) for a proof-of-principle. This process will provide you with enough evidence to back you up - or it will provide you with evidence that you shouldn't do the conversion after all. If you end up converting, you will have a top-level configure script that cascades down and calls the other ones.

    Don't forget the Autoconf macro library and also the fact that there are thousands of free packages out there which will have configure scripts from which you can borrow - try to find packages in a similar domain to your own.

    The difficulty (complexity, time taken) in maintaining a package which works on N platforms is usually proportional to N - or if you are unlucky, some small power of N like 2. What your code is really doing is trying to understand the properties of the target system and so the #ifdef __hpux__ for example in line 1249 of blurfl.c is actually trying to determine if the quux is use like this or like that. Autoconf on the other hand will produce a single preprocessor macro for driving the quux. This means that you don't have an extra 15 lines of #ifs to handle quuxes in other operating systems. Hence you may not have less #ifdeffed bits, but each of the #ifdeffed bits will be shorter.

    Autoconf works differently to thge standard approach - it allows your code to work with each feature independently, and so while the normal approach is O(N) or O(N^2) in the number of suppoered OSes, the complexity of maintaining an autoconfiscated program is O(N) in the number of different features supported by the operating systems between them. The great thing about this is that Autoconf keeps these orthogonal and prevents these things from interacting too heavily, and it turns out to the the case that the total number of different features basically flattens out to some constant number even when you continue to add more supported OSes (i.e. there are only a certain total number of different ways of doing things even though each of the N operating systems can choose among X ways of doing Y things).

    So, what this means is that you shold do the feasibility study as discussed above, but naturally autoconfiscating the whole system will take a while. The ideal time to do this is either

    1. when you are in any case adding support for an extra platform or two or
    2. on a piecemeal basis for each subsystem.

    Another option to explore in combination with Autoconf is the Apache Portable Runtime. There is also Autoproject but I suspect that is a little lightweight for your needs.

    Taking all the above together I suggest that you

    1. Propose a feasibility study, using a couple of sections of the project
    2. Identify a way of making the newly autoconf-ed section fit in with your existing build mechanism (so that you can roll out autoconfiscation gradually across the project).
    3. Identify any related open-source projects which might have useful autoconf macros (e.g. Gnome has lots).
  20. software carpentry by getafix · · Score: 1

    The software carpentry project/competition had a lot of useful information and implementations of build tools. You may want to read about them to weigh the pros and cons of current build systems. You may even want to use some of their implementations.

    software capentry.
    SC Config is the one that is of interest to autoconf alternative, and contains links to 4 alternatives (BuildConf, ConfBase, SapCat, Tan).

  21. Autoconf is not the only piece of the puzzle by chrysalis · · Score: 2
    Autoconf is just one piece of the Cygnus developpment tools. Two other tools complents it nicely :
    • Libtool
    • Automake

    With Libtool, you can be sure that shared libraries can be created, even on architectures/OS you don't have access to. That's a very important point.
    Automake eases a lot the building process of clean packages for end users, with all standard targets for 'make'. It also builds Makefiles that can automatically generate .tar.gz files with only the needed files in it, and build dependencies before compilation.
    Also, Autoconf, Automake and Libtool are aware of operating-systems bugs that you probably don't know if you never worked on them. So they are your best friends to produce portable and reliable software.

    --
    {{.sig}}
  22. Factor out system deps, set compliance standard by Anonymous Coward · · Score: 0
    Autoconf can be abused. It is at best an [un] neccessary evil. Before using Autoconf,
    • try to eliminate all #ifdefs from your code.
    • Factor out system depencencies into their own separate files.
    • Announce portability compliance requirements upfront - Posix and X/Open Unix98 should suffice. Meeting these requirements then becomes the onus of the end user.
    • Investigate using a truly portable and standard language such as Ada for future projects.
    Don't open the can of Autoconf worms if you can help it. Portability standards exist. Use them. Require your clients to meet you half-way by respecting these standards. Respecting standards is the key to portability.
    1. Re:Factor out system deps, set compliance standard by Anonymous Coward · · Score: 0

      Ada? "standard language"? Oh please. Using an obscure, poorly supported language like Ada is the last thing they'd want to do.

  23. A War Story by 12dec0de · · Score: 2, Interesting
    I am a great fan of auto* (the name that the company that I used to work for has given the whole suite, all parts of which are used extensively), and here is my story on how I came to be such:

    When I started to work for my last employer, they where using RCS and static Makefiles plus a hand-crufted make and version control system that a prior contractor had introduced. The code base for the large integrated system was about 250.000 LoC c/C++ code that ran on a number of Solaris 2.5, Linux-Boxen and Windows maschines. It used GNU-Tools and libraries quite liberally and thus was dependant on the regular introduction of external code.

    But since a number of developers didn't really grasp what make was doing, they would simply copy the makefile of one of the larger subprojects and tweak until they got it working. This led to each of the about 20 sub-projects having Makefiles of about 2000 lines each. Quite unmaintainiable.

    I started to use auto* for my own library that, in the beginning, was fairly separate from the other projects. More from curiosity, than actual need (I know how to use make B-) ), I put first autoconf, then automake and libtool into the code that was at that time about 20.000 LoC. I also got everybody to switch to CVS, since it supports multiple developers on the same project much better.

    It worked quite well I must say. For the following reasons:

    • not everybody is on a intimate level with make. If at least one person knows what they are doing the automake Macros allow encoding of that knowledge for others to use with new Makefiles.
    • Specific problems with one of the plattforms may be detected, together with the activation of workarounds, in a single place, which is configure.in. One earlier poster was saying that he was having problems with changing Makefiles. I allways found that if you take the log of what happend and debug from there, changing the behavior on a given plattform as needed becomes trivial.
    • You have a single place where to configure the inclusion of features, glues to other packages and the paths/names of libraries, config-files, etc. If you write your Makefiles and helper utils to do the same, it will just be duplication of effort with a smaller user-base. YMMV
    • with the config.status file you can save what you have configured in a separate place and reproduce the configuration just by copying it.
    The war story ends with a system that has about 2 MLoc now, and whith the help of a script that one of my fellow developers wrote, will automaticaly pull itself out of CVS (using the supplied branch) and configure and build each of the sub-packages in the proper order and install the packages on the proper machines (or at least schedule them for installation. Due to security concerns only 2 humans working together may actually install a component). My sub-project has grown to 140KLoC and the public part is on sourceforge now.

    Could this be done with only some make magic? Yes, if everybod knew make well. But in the real world people that really grok make are few and far between.

    would your own solution handle shared libs on multiple systems? Maybe you are that good. I am not. I use libtool.

    like any software there are problems with these. For instance the handling of languages like java is suboptimal in automake. But this is opensource. If you have a problem solve you itch and trust that others will solve other itches.

  24. Mozilla by nikel · · Score: 2, Informative

    The Mozilla Project has a project on their website about migrating from their build system to autoconf. No Idea how far this got, but it fits your requirements of a huge project.
    nikel

    1. Re:Mozilla by Anonymous Coward · · Score: 0

      It was a royal fucking pain, and it's still not done, and it was a kludgy solution aimed at getting "./configure" to work as quickly as possible. In short, a disaster.

      autoconf is great when you're creating a new program (though you still have to understand portability, which is usually learned the hard way). But it's really, really hard to retrofit, and it takes a long time-- longer than the other developers are usually willing to wait.

  25. autoconf/automake good; libtool bad by paulbd · · Score: 3, Insightful

    i've been using these tools for about 2-1/2 years. autoconf and automake have saved me a lot of hassle, i think. but i cannot recommend that anyone in their right minds uses libtool. libtool starts from a reasonable premise: the creation of shared libraries is done in very different ways on different platforms. it continues on to try to provide some standard method for developers to use when they need to do this. the problem is that for one reason or another, its gone way too far in a direction that with a little bit of objectivity is really quite bizarre. libraries end up being built in hidden directores, and are initially replaced by text files of dependencies. you have to run "libtool -gdb" if you want to debug your program without installing the libraries first. there are many wierd and obscure consequences to this design. and don't get me started on "libltdl", the libtool "portable dlopen() wrapper". in recent versions of this library (which were full of really stupid bugs) there are now hooks to replace malloc/realloc/free, for reasons that nobody on the libtool mailing list understood (probably some windows bullshit to do with calling malloc at some point during runtime linking, but who knows?). libltdl goes as far as "emulating support for run time linking even on platforms that don't support it". they are proud of this bizarre "accomplishment". libtool's basic problem is that it starts out trying to solve a goal that very few people face: trying to build a shared library on multiple platforms. because this is a very complicated task, libtool is necessarily complex. if you are writing a shared library for one or two platforms, particular where they are both fairly similar, using libtool to do this rather than doing it with your own understanding of the process can provide hours of frustration, confusion and despair. i don't see anyway forward for libtool. the sensible way to solve shared library problems is to wrap the actual linker in a new executable that operates in a standard way across platforms. this would hide the complexities and oddities of the process away from autoconf/automake and you.

    1. Re:autoconf/automake good; libtool bad by elflord · · Score: 1
      libltdl goes as far as "emulating support for run time linking even on platforms that don't support it". they are proud of this bizarre "accomplishment".

      This is potential useful. Suppose for example you want to profile dynamically loaded modules. gprof doesn't work with dynamic libraries. What options do you propose to libtdl ? I'm thinking of adopting it, for the very reason that several platforms don'/t use dlopen()

      libtool's basic problem is that it starts out trying to solve a goal that very few people face:

      A lot of people face it actually. In fact the vast majority of open source libraries available are supposed to work on several platforms.

  26. uhm, yeah it does. by Anonymous Coward · · Score: 0

    if you use automake its sort of automatically there.
    /usr/src/myprog> mkdir ../myprogbin ; cd ../myprogbin ; ../myprog/configure ; make
    this builds all the binaries in /usr/src/myprogbin and leaves the source in /usr/src/myprog.
    ok, so actually you have to run 'autoconf' and 'automake' and 'aclocal' and etc etc etc in the source directory, and its a little confusing, but
    it sort of works and leaves no binaries in the source dir.

    if you just use autoconf, not automake, you have to use some special VPATH command in the Makefile.in,
    this is in one of the texinfo manuals, autoconf or automake, i cant remember which.

  27. Consider imake by Anonymous Coward · · Score: 0

    Yep, it's old hat, but you may want to consider imake. I worked on a project where we did pretty much the same as what you're wanting to do -- using imake and did it in a couple of weeks. Multiple C++ compilers and on multiple platforms (NT, Solaris, AIX). And since you already have makefiles, you can do it a little at a time.

  28. Cool, but far from universal by da5idnetlimit.com · · Score: 1

    Yep, RPM click in Konqueror is Cool !

    No, it won't be the universal solution...
    Just you try with Nvidia driver.
    Just you try ...

    for you'll have to install the rpms, then modify the Xfree conf, then restart the whole shebang.

    It "could" have been easier.
    Could have ...

    --
    It takes 40+ muscles to frown, but only four to extend your arm and bitchslap the motherfucker
    1. Re:Cool, but far from universal by gmack · · Score: 1

      That is Invidia's fault.. They should provide a proper installer.

  29. Rational Clearcase is the only answer by Lord+Hugh+Toppingham · · Score: 0

    For large scale concurrent development, CVS is OK, but Rational Clearcase kicks the ass of every other CM system in existance. I know this from experience.

    1. Re:Rational Clearcase is the only answer by musicmaker · · Score: 1

      Clearcase is a piece of junk. It is slower than hell, and the locking system make it obsolete compared with CVS. I haven't worked on many project in the last 3 years that weren't concurrent development! Every project I've worked on in the last 18 months owes it's quick execution time to CVS and developers not having to negotiate file locks.

      --
      Everyone is living in a personal delusion, just some are more delusional than others.
    2. Re:Rational Clearcase is the only answer by renehollan · · Score: 2
      and costs about $1000 a seat.

      Been there, done that, used it, learned it, liked it, but geez the learning curve was high for newbies.

      As for Clearcase config files: I suppose it is useful to have the source control equivalent of a gun that can simultaneousely shoot only the deer of the right age, with antlers in excess of the legal minimum length, at the right time of season, during daylight hours, but having to trust that it won't go off when you point it at your own head in order to use it is, er, kind of unnerving. The kiss principle strongly applies here.

      --
      You could've hired me.
    3. Re:Rational Clearcase is the only answer by pyros · · Score: 1

      I'd like to start by saying at it's heart ClearCase is just a version control system. You can still use whatever build system you like. It does have it's own make systems, with their own pros and cons, but you don't have to use them.

      The effectiveness of ClearCase depends on the quality of the implementation. The tool is just too flexible to evaluate it en masse. Successfully implementing ClearCase for your project takes a ClearCase guru. Setting up the project poorly can make it a "productivity virus." If the project is set up well it shouldn't be any more cumbersome than CVS, but it will offer more features.

      The sticker price is pretty high though.

    4. Re:Rational Clearcase is the only answer by Lord+Hugh+Toppingham · · Score: 0
      Clearcase is a piece of junk. It is slower than hell, and the locking system make it obsolete compared with CVS

      You do not know what you are talking about. But then this is slashdot, so I guess I should expect that.

      Clearcase is fast, and it does not employ a 'locking system'. Any number of developers can work on any piece of source code from any branch. You probably had underspecced hardware, and underintelligent users.

    5. Re:Rational Clearcase is the only answer by kan · · Score: 1

      ClearCase is years ahead of other version control
      systems I have used or tried to evaluate. Locking
      system in ClearCase is actually superior to the
      CVS model once you figure out differenced between
      'reserved' and 'unreserved' checkouts. And why two
      developers would want to check out files for a
      long time (~10min) from the same branch anyway?
      Branches are what makes ClearCase exceptional,
      just create your own branch, redefine your
      config spec and hack away uninterrupted by
      anybody. Use cleartool findmerge command to
      merge your changes back when done, or to
      pull in changes done by others.

    6. Re:Rational Clearcase is the only answer by kan · · Score: 1

      Forgot to mention: I am not working for Rational,
      I am just a very loyal customer. If your project
      is huge and you have resources and hardware to
      spend on powerful ClearCase servers, then by all
      means go fo it. You'll never look back at CVS
      again.

  30. autoconf limits you to gnu make by Anonymous Coward · · Score: 0

    One thing which can be more or less bad is, that using autoconf makes you use gnu make as well.
    Some user or developers may like their own make. If so, it will be an additional 'cost'.
    I myself don't like make, it's badly suited for
    multiple build targets and cross directory targets. I haven't tried any other products on a larger scale though.
    One experience of this from the Mozilla project, if you change your configure tests too often, your people will have to rebuild their complete system for each change.

    1. Re:autoconf limits you to gnu make by rhavyn · · Score: 2

      Autoconf does *not* limit you to gnu make. Gnu make is required for the maintainer of configure.in, Makefile.am, etc. It uses features in gnu make to generate rules automatically. The Makefiles that are generated by automake will work fine under basically every known make.

    2. Re:autoconf limits you to gnu make by elflord · · Score: 2
      One thing which can be more or less bad is, that using autoconf makes you use gnu make as well.

      This is nonsense. Autoconf generates a configure script, which makes substitutions in a user supplied Makefile template, Makefile.in. If you write a portable Makefile.in, the configure script will write a portable Makefile.

  31. Sharp stick in a sore spot by Vinson+Massif · · Score: 1

    Pointy-cliky setups.

    My current nightmare install has a hard-coded db sid (ORCL), $ORACLE_HOME, and other asst. gems all wrapped up in a NT setup.exe.

    The $DOLLARS/day service engineer 'just happens' to have the exploded setup files on cd (that I am normally not allowed to see). What are they? A vb script that copies a few files and executes a few sql scripts (and not very well, mind you).

    Feh. Even the oddest of Makefile setups allows me to get in and figure things out if a make fails.

    --

    --
    "Remember, any tool can be the right tool." -- Red Green
  32. OT: language choice by YoJ · · Score: 3, Informative

    This is not a solution to the current question, but is something to think about when choosing which tools to use for any project. Different languages handle portability in different ways. The C approach is a mixed blessing; the core language is portable to about any platform in existence. But almost every non-trivial program uses many many library calls, and libraries can have many inconsistencies across platforms. Even if the functionality is the same, the functions may be called different names. In the case of more advanced features such as threads or IPC, different platforms can have entirely different systems. The way I see it (I may be wrong), automake and autoconf solve the stupid inconsistencies between library functions, and tell the user if a needed library is not installed.

    Other languages take different approaches. Java has a very large set of libraries that are specified to be part of the language and so must be included. The Java language is also constant between platforms. Not every platform has a conforming Java environment, but the most popular ones do. Common Lisp also has huge functionality in its standard library that is part of the language specification. OCaml has a nice standard library, and is open source. If you want your program to work in OCaml on some unsupported archictecture, you can compile it yourself. This still leaves porting the library. If the target archicture has POSIX, this is easy.

    1. Re:OT: language choice by Anonymous Coward · · Score: 0

      Java has nice libraries...

      But as a user, I'd prefer compiled programs. The free jvm's available do not run all java programs. It's generally a pain in the butt to get java programs to work.

      With compiled programs someone has to go to the bother of porting it. But as a user I just download the binary.

      Sun should gpl there jvm so that it would become the standard and java would actually be portable as it is advertised and hyped.

  33. You need to understand portability, first. by Above · · Score: 5, Informative

    Autoconf is a tool that in the end can only make portability choices for you. In order for those choices to mean anything you have to have a need for your software to be portable (to a wide number of platforms, really), and you need to understand the real issues with writing portable software.

    If you're writing for FreeBSD, Solaris, and Linux 98% of the time for application software you can write it so there are no portability issues. Why have the autoconf step when you can "make;make install"? Modern systems are not all that different for high level stuff, and are converging for medium level stuff. It's really only the low level details keeping them apart.

    If on the other hand running on an old Ultrix box, and on your SCO Unix box, or on that PDP-11 in your garage is important autoconf can give you the mechanisms to make all that work but only if you know that differences between the platforms, and what changes need to happen to your code to make it work . It does no good to have autoconf check to see if bzero exists if you don't know to use memcpy as an alternative, or vice versa. A check without an alternative is just a way of bombing a little sooner than the compile stage.

    The other thing autoconf can help with is optional packages. These are not portability issues per se, but rather choices that need to be made, but often aren't worth bothering a user about. Consider the application that's all command line based except for a single X app that's not really needed, just nifty. Well, if the system doesn't have X, you don't build it, and if there's no X it's unlikely the user wanted to run X apps anyway.

    As far as the mechanics go, autoconf is fairly easy. Once you understand the changes that need to happen making autoconf make them for you is trivial.

  34. static linking by Anonymous Coward · · Score: 0

    yeah, well, the reason they dont statically link everything
    is because then the system would need about 10 times the amount
    of memory it would use with shared libraries, because
    each of the libraries would be within the memory used by those 10 statically linked programs.

    on the other hand, the goddamn shared libraries have such an
    unstable API that alot of packages are pretty much forced to
    not statically link, but rather include entire source trees of these libraries
    within their projects, thus basically doing the same thing
    as static linking.

    the problem is somewhere related to the fact that
    linux library authors dont give a rats ass about
    compatibility between revisions because
    1. most of them have superfast computers on phat pipes that can easily
    download the latest cvs update whatever and recompile the whole fucking gnome library or whatever
    and if users have problems, well, 'it works for me'.
    2. they are assholes

    1. Re:static linking by Anonymous Coward · · Score: 0

      There's no top-down management of Linux APIs, let alone a solid ABI. There are people who PRIDE themselves on there not being a stable binary interface as it forces developers to release the source code.

      Whereas, most DOS programs from 1986 will run fine on a Windows XP machine. That's *REAL* stability. Find me a Linux box that runs a sizable portion of the binaries from even 1993.

  35. dissenting view by anothy · · Score: 5, Interesting

    i may well be in the minority among this crowd, but i think you should avoid autoconf like the plauge. people's most common reason for using autoconf/configure is portability, but that's a cop-out.
    basically, the autoconf/configure school of portability says "forget about actually writing portable code, just write it for each variant and let the build process pick". that's whacked. you'll continually be running accross new variants, new ways in which systems are different, or just new systems. for example, i use Plan 9, which has a very good ANSI/POSIX compatability system (better than many *nix systems). despite being near-fully ANSI compliant, pretty much every autoconf fails because it doesn't recognize the output of uname or something stupid like that (of course, that says noting about when programs that claim to be ANSI or POSIX arn't, like including non-ANSI/POSIX headers, typically BSD stuff).
    this school of portability also typically makes your code far less readable - littering it with ifdef's every third line - and much larger. it ends up taking much more time than just slowing down and disiplining yourself to write real portable code.
    the argument 'configure ; make ; make install' is easy is stupid, as well. y'know why? 'cause 'make install' is easier. build your makefiles well. the 'install' target should have prerequisits, obviously. make will build them for install. and 'configure' is slower and more prone to failure than 'cp makefile.linux.386 makefile'. and light years more reliable. and editing an example makefile is way easier than putzing with autoconf/configure if something doesn't work. not to mention easier to debug (uh, 'echo' anyone?).

    on a personal note, having done portability work a good bunch, i'd offer just a little extra advice: do not require GNU-specific stuff. don't use any of the gmake-specific features or gcc language extentions. GNU propaganda, that'll just kill your portability. and if you need something both simpler and more powerful than make, check out mk from the Plan 9 and Inferno distrubutions. Vita Nuova's got a version that runs on various unixes and win32 systems. it's very similar to make, but a bit more general and flexible. but, given that you've already got all the makefiles, i'd suggest your best bet is just sticking with plain makefiles and cleaning them up.

    --

    i speak for myself and those who like what i say.
    1. Re:dissenting view by ArmorFiend · · Score: 1

      Right on, brother!

      I tried for weeks to port a small project to automake/autoconf. Shelled for a physical book. Didn't understand some things, and posted to usenet. In other words tried dilligently. In the end, I concluded that learning how the system really worked was going to take 20% of the overall project time. A lot of it seems dedicated to fixing a crufty language (make). A lot of it only applies to C/C++, not all languages. I concluded that I'd rather discard make, automake, and autoconf, and write a shell script that actually did what I needed, rather than learning how to jump through convoluted, obfuscated hoops.

    2. Re:dissenting view by elflord · · Score: 2, Insightful
      basically, the autoconf/configure school of portability says "forget about actually writing portable code, just write it for each variant and let the build process pick".

      This is not true at all. There's nothing in autoconf that mandates sloppy programming.

      the argument 'configure ; make ; make install' is easy is stupid, as well. y'know why? 'cause 'make install' is easier.

      OK, but what if I want to set a different prefix, turn on optimisation, enable debugging, and tell the build where Qt is installed ? I've seen straight make builds where this information is distributed across several Makefiles, and that's a pain.

      i'd offer just a little extra advice: do not require GNU-specific stuff. don't use any of the gmake-specific features or gcc language extentions.

      This I agree with.

    3. Re:dissenting view by Ian+Lance+Taylor · · Score: 1

      As a co-author of a book about Autoconf and friends, I obviously disagree. I don't know why you have trouble using autoconf on Plan 9. I'll just note that I've used autoconf on Windows with the Microsoft C compiler, and it works fine (autoconf does require cygwin to run on Windows, but the programs I built with autoconf did not).

      You are certainly correct that autoconf is not going to prevent anybody from writing bad code, such as code littered with #ifdef statements. autoconf is a tool, and it's quite possible to use it poorly.

    4. Re:dissenting view by aminorex · · Score: 1

      You're not alone in this view. Autoconf's notion
      of portability is pretty much limited to posix-like
      systems. If you've written a win32/*nix makefile
      you've already solved the problems that autoconf
      can solve for you, and at a tiny fraction of the
      cost of polluting your valuable memory realestate
      with m4 macros. (Gad, what a kludge!) Save your
      braincase for something that solves a *real*
      problem, not some imaginary anal-omphalotic
      obsession.

      Writing portable code (including
      build code) is easy using GNU Make alone.
      The only reason to use autoconf is to
      conform to the dictatorial vision of a
      water buffalo who would be king.

      --
      -I like my women like I like my tea: green-
    5. Re:dissenting view by aminorex · · Score: 1

      > autoconf is a tool, and it's quite possible to
      > use it poorly.

      Some tools are conducive to good use, and
      elevate the skills of the user. Other tools
      are conducive to poor use, and dilute the skills
      of the user. I've *never* caught a readable,
      maintainable autoconf in the wild.

      --
      -I like my women like I like my tea: green-
    6. Re:dissenting view by Krazy+Kringle · · Score: 1

      I agree that the best way to keep projects portable is to avoid using system-specific features; this applies to the GNU tools as much as anything else.

      In my experience, however, GNU make is a good exception to this rule. The set of features common to all make implementations is just too small to write robust build systems with. GNU make has a good selection of needed make features, and more importantly, it's available for virtually every platform. (Correct me on this...) I haven't found any downside to using GNU make features in makefiles, and requiring that people have it to build isn't much of a burden these days.

      I spent a fair amount of time creating a vanilla-make-compatible build system for a previous project, and if I had it to do over again, I'd just skip all the workarounds and do it with GNU make.

    7. Re:dissenting view by anothy · · Score: 2
      There's nothin in autoconf that mandates sloppy programming.
      true, but that's not what i claimed. rather, i've found (by observing code quality in numerous commercial and Free Software projects) that autoconf/configure encourages sloppy coding by eliminating many of the things which otherwise encourage it, such as portability concerns.
      ...what if I want to set a different prefix...
      um, "prefix=/my/path make install"? environment variables work well for many such things. further, editing a well-written makefile for such things is simple; about as dificult, in my experience, as finding the desired options to different configures. this is even more true if any debugging is needed.
      I've seen straight make builds where this information is distributed across several Makefiles...
      true, and that does suck. you can build awful makefiles, and you can write truely elegant, portable code and use autoconf. they're tools. my point is what these tools encourage, what is generally true about projects in which they are used.
      --

      i speak for myself and those who like what i say.
    8. Re:dissenting view by anothy · · Score: 2

      well, gmake isn't available for Plan 9, for one thing, and that's the system i personally care most about (well, and Inferno, but i wouldn't expect it be work there). i tried building it some time ago, and couldn't: problems, ironicly enough, getting their autoconf-generated configure scripts to work on Plan 9. i spent alot of time trying to get it to work, and couldn't. having just pulled down the latest version now, and poked breifly, it doesn't look like the situation's improved there.
      more practically, i've admined many unix (primarialy Solaris, but others as well) boxes which didn't have gmake installed. when i want package foo, i don't want to have to install gmake to get it, particularly on sensative systems or in situations where time and/or space is a concern. i've also been a user on boxes other people administer. disk quotas often make builiding and storing my own build tools impractical when what i really want is some other package.
      i've written makefiles for several (admitedly small) projects, and not found it to be a problem. mk is better, but less commonly available. i still think if you're aiming at portability or generality of your build process, use the straight make.

      --

      i speak for myself and those who like what i say.
  36. Enlightenment by Anonymous Coward · · Score: 0

    Although in recent years the stable releases have been really good configuring, the latest development rev(.17) has been nearly impossible to configure. There lack of documentation is increasing making it worse to configure and install the latest cvs. its always linking bad object links. Referencing itself and a libray that is not there...

    1. Re: Enlightenment by Anonymous Coward · · Score: 0

      Have you heard the news...the dogs are dead...Eblightenment is dead project. Oh well....

  37. thats the way you do it by rkit · · Score: 1

    if you are using gnumake, that's easy:

    in your Makefile.in, put:

    VPATH = @srcdir@

    in configure.in, you need:

    AC_SUBST_FILE(srcdir)

    the VPATH variable is documented in the gnumake-manuals.

    --
    sig intentionally left blank
  38. What project is it? by Lozzer · · Score: 4, Funny

    I'm a CS grad student working on a large research project (over 1 million lines of code, supported on many platforms). The project has been under development for several years, and the build system is nontrivial for end-users.

    Linus is that you? Or maybe those whacky XFree86 guys.

    --
    Special Relativity: The person in the other queue thinks yours is moving faster.
  39. Autoconf/configure to the rescue! by Codifex+Maximus · · Score: 2

    I have to say this about configure/autoconf, 99 times out of 100 everything works perfectly. I feel a tremendous weight lifted from my shoulders when I see the configure script in the output of my tar -zxvf command.

    I'll even go for xmkmf before resorting to editing Makefiles by hand ala xanim. I've done editing of Makefiles but... a trip to the dentist is easy as pie in comparison.

    --
    Codifex Maximus ~ In search of... a shorter sig.
    1. Re:Autoconf/configure to the rescue! by Anonymous Coward · · Score: 0

      I'm going to assume you are on Linux or a *BSD. Anything using xmkmf tends to be aged (read: written with and to work on obsolete *ix systems) whereas autoconf/automake are modern and written mostly for and on GNU software. If you do indeed run a GNU compatible system then this is the reason you don't see many problems. _Everything_ using autoconf/automake will usually run on Linux.

      That said, I'm guessing you have never tried to use the autoconf (./configure, autogen, etc.) scripts to build the complete GNOME system. You have no idea what a pain it is to build 15 libraries and 10 utility programs (i.e. gettext, etc.) and find out the last component will not build because you have a old glibc (or something similarly stupid).

      autoconf works great if your system is fairly new or updated regularly. Throw a few incompatible libraries in the mix and you have absolute upgrade hell. Running ./configure can be fun for only so many hours.

    2. Re:Autoconf/configure to the rescue! by Codifex+Maximus · · Score: 2

      I agree with most of what you're saying... you don't see to many xmkmf situations anymore AND autoconf seems to only test to see if there *IS* a library and not what version - at least in the failied autoconf builds I've tried. I'm going to eventually need to study the ins-and-outs of autoconf for my own projects.

      Also, I have manually upgraded many librarys; except when I'm told I must do gcc I balk. At that point, I download the newest version of RedHat and it's associated errata and go to work heh.

      --
      Codifex Maximus ~ In search of... a shorter sig.
  40. Book by rusti999 · · Score: 1

    There's a book on this issue (autoconf, automake, libtool). I haven't read it. Maybe someone else can give a review.

    1. Re:Book by pauljlucas · · Score: 1
      I read it and I don't think it's that good. It has a little more than other documentation I've found, but not much, and only really covers the common cases.

      A cookbook would be much better.

      --
      If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
    2. Re:Book by rhavyn · · Score: 2

      Just an fyi, that book is available online at sources.redhat.com.

  41. This is ridiculous by oGMo · · Score: 2

    Building shared libraries on multiple systems is a task that many people face. Any time you expect to write a shared library and have it ported across various unix-like platforms, you have this problem. Getting shared libraries working across even a few platforms is difficult enough. Linux, Solaris, and FreeBSD? Each have different requirements and quirks and (especially in the latter case) brokenness.

    If you're just writing something on Linux with zero foresight as to portability, you might take the approach that "this doesn't matter," but that would be pretty naive.

    Also, libtool does more than just implement a layer of portability for building shared libraries (which is its main goal). It has library dependency tracking, version maintenance, and a module loading API. These, coupled with the extreme ease of building a shared library when coupled with automake and autoconf, make it an indispensible tool.

    --

    Don't think of it as a flame---it's more like an argument that does 3d6 fire damage

  42. jolly old libtool by Anonymous Coward · · Score: 0

    when you build shared libraries, by default, it compiles everything twice.
    this, along with debians 'build' scripts, has gotta be one of the best
    examples of idiotic elitism of the open source 'programmer' strata... assuming that
    RECOMPILING EVERYTHING TWICE IS NO BIG DEAL BECAUSE CPU AND RAM IS CHEAP. morons. absolute morons.

    instead of getting the basics right, like destroying this 'feature', they instead work on,
    as you said perfectly, the bizarre 'accomplishment' of emulating dynamic linking on platforms that dont have it.
    when, oh when, did someone use this? wouldnt it have belonged better somewhere else?

    and the hidden .lib directory, is supposed to some how 'keep things clean',
    but then it leaves all these goddamn .la files all over the place. then i have to perform some magic voodoo
    with LD_LIBRARY_PATH to get my fucking program to run against .so files without doing a 'make install', apparently because
    waiting 5 minutes for a bunch of 'man pages' to copy into somewhere THEY ALREADY WERE is some how
    'no big deal because cpu and ram is cheap' to the people who created this open sores monstrosity.

    on the other hand, it seems to work OK once you get
    past all the inane and stupid bullshit that cover it like thick goo.

  43. you are bi assed by onShore_Jake · · Score: 0, Flamebait

    I need to demonstrate that the benefits of autoconf outweigh the costs of migrating a large system of makefiles with a lot of ad-hoc kludge-enabling logic.

    You sir, are ignint. It bothers me that you set out to prove something you are not sure of. You should be investigating if the benefits of autoconf outweigh the costs of migrating. Not just set out to prove something that will earn you geek points. You do a disservice to anyone simply interested in facts.

  44. GNU autoconf/automake/libtool are Open Source, too by ddkilzer · · Score: 1

    A lot of people are complaining that autoconf doesn't do this or libtool doesn't work on this platform. Please remember that all of these tools are Open Source, so you may fix them yourself and contribute the changes back to the respective projects!

    Granted, not everyone has the time or the desire to fix such complex tools, but the author of the Berkeley amd story contributed many of his new tests back to these projects.

    Why not improve the status quo for everyone by contributing or fixing these tools when you decide to use them? You may learn a new skill or two that you may add to your résumé in the process!

  45. You want to support linux, forget imake by rkit · · Score: 1

    The basic idea behind imake is to use a configuration database, (i.e. some files that live in your X11 tree). This works fine, if this database is up-to-date (which is probably OK on platforms like AIX or IRIX), and all you do is X-specific.

    On a typical linux-system, the imake configuration files do not know how to handle OpenGL or Motif, leave alone Qt or GTK, or non-X stuff like SSL . I have never seen an imake template that handles shared libraries in a portable way. If a software package does not support imake templates (few open source projects do), imake will not help you at all.

    On the other hand, autoconf uses compile time tests to decide system characteristics. It will try to compile/link/execute little test programs, or execute shell scripts. (By the way, autoconf uses imake to find out X specific stuff :-). If you do not like the tests that come with autoconf, write your own.

    The basic problem is: autoconf will help you to check for system-specific stuff, but it will not write portable code for you.

    --
    sig intentionally left blank
  46. .Net may prove otherwise by gakguk · · Score: 1

    Take a look at 10 Tips for Great .NET Programming. Tip #10 states that:

    The .NET Framework exposes classes that let you compile code in a specified language. These classes live in the System.CodeDom.Compiler namespace. This code snippet shows how to obtain an in-memory running instance of the C# compiler:(...sample code follows)

    This seems to allow one to write a compiler/installer solution on the fly.

    Gokhan Altinoren

  47. Be careful... by seebs · · Score: 3, Insightful

    This is not a no-brainer guaranteed win. It is easy to make autoconf do horrible, silly, things - which make your code less portable. As always, the very first thing you do should be to make your code as portable as possible to begin with; this is much, much, more efficient than any kind of configuration system.

    Current versions of configure seem to sometimes produce makefiles which can't be used with classic Berkeley make, and depend on GNU extensions...

    --
    My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
  48. Troll, no. Offtopic, maybe by ras_b · · Score: 1

    That was not trolling. It was a little offtopic because my point had to do with the ease or difficulty of installers in general, for all types of users, and the original poster has a different audience. Why is anything remotely pro MS considered troll on this site? Open your mind.

    And I'm not sure how a setup.exe is only for a limited set- like half a dozen windows targets. For example, Morpheus is on over a million pc's. Every one of those was installed by double-clicking setup.exe (actually it is morpheus.exe). Even something as robust as the Microsoft Visual Studio uses setup.exe to install, and is also probably on a million windows machines.

    1. Re:Troll, no. Offtopic, maybe by pdqlamb · · Score: 1
      No, you don't understand what a "target" is. There are Windows targets like 95, 95OSR2, NT 3.5, 98, NT 4, ME, etc. - this is the number of operating systems the application can be installed on. Notice all the above are closely related, and, and least for a given "setup.exe," they all install on one chip (or chips that emulate that i386).

      Now contrast that with an application with mulitple targets. SunOS with Sun cc, SunOS with GCC, Solaris with cc or gcc, Irix with SGI cc or gcc, HP, Alpha, StrongARM, or Intel, each with at least one unique operating system and compiler, and possibly with varying windowing systems, etc.

      Perhaps "troll" is too strong a word. Nevertheless, a good project like this must compile and work in a far richer group of environments than the typical M$ user even knows about.

  49. bugs and version differences... by vladkrupin · · Score: 2, Interesting

    ...is what breaks autoconf and makes it often unusable.

    Look at the PHP project. They use autoconf. Yes, it (autoconf) works most of the time pretty good for PHP.

    However, you can use only certain versins of it because the older versions do not have the necessary features, and the new ones break BC or just plain have bugs that prevent PHP from building with that new version, so you are often locked in to a certain couple versions of autoconf, which is one of the main problems autoconf is supposed to fix in the first place.

    It does contribute a bit to developer frustration, but, in the long run, it is much better than most other things I have seen so far, so it's probably not that bad of a choice after all...

    :)

    --

    Jobs? Which jobs?
  50. the best in build configuration mgmt by FernandoValenzuela · · Score: 4, Funny

    You need to move your stuff to Visual C++ dsp and dsw files, man.

  51. While not autoconf... by Woodie · · Score: 1

    Hi -

    just a couple of words. Having dealt with make files a few times in the past, I can say that I would be very happy to avoid them. In dealing with a Java/JSP system under Apache, I happily made the switch to using Ant!

    Ant is a wonderful improvement over the batch files, and other kludges used to produce Java builds. Anything that makes that process less manual, easier to modify, and consistent is a good thing.

  52. Wow. jam seems to be what I've been looking for. by Bwah · · Score: 1

    The question I can't find an answer to in their doc (and I don't have time to install the tools yet) is : Can you do a parallel (multiprocess) build like gnu make?

    --
    "There's no secret. You just press the accelerator to the floor and keep turning left." -- Bill Vukovich
  53. Have a look at CMake by GSHI · · Score: 1

    An alternative to autoconf is certainly CMake , an open source cross plattform configuration and make tool developed by Kitware . This is a great tool, easy to set up and it has already successfully been used in large projects. This could reduce the effort needed for your task considerably.

  54. Use tmake by Circuit+Breaker · · Score: 2, Interesting

    From trolltech; The version that comes with qt-2 is Perl and thus as cross platform as you can probably hope for. tmakes are significantly easier to maintain directly than makefiles, configure scripts or any other beast I've looked at.

  55. Re:Switch to MS Developer Studio by Anonymous Coward · · Score: 0

    Not everybody does win only gui stuff like you do.
    I think the Submitter has some kind of Server application or cross-platfor library that has to compile on multiple platforms. I wouldn't bet to much of that his project supports win32 beyond cygwin at all ;-)

  56. Read the book! by devphil · · Score: 4, Informative


    The maintainers of the autotools (autoconf, automake, libtool) wrote a book to help explain the approach used by the tools. (Yes, it's called the goat book. Read the page to find out why.)

    I've seen an amazing amount of crap posted in these comments; the parent article by jvl001 is one of the few good exceptions. NO tool can get it all; the autotools get you about 90%, and you have to help it the rest of the way. There are solution for just about all of the problems and red-herrings I've seen posted here, but you need to look a little farther than /. to find them.

    --
    You cannot apply a technological solution to a sociological problem. (Edwards' Law)
  57. Re:Wow. jam seems to be what I've been looking for by droleary · · Score: 1

    Can you do a parallel (multiprocess) build like gnu make?

    Looks like the same switch:
    -jx Run up to x shell commands concurrently.

  58. Mozilla was successful! by alecf · · Score: 1

    Mozilla successfully switched to autoconf a few years ago, and it has made porting much easier. we have a very extensive autoconf system...check out all the ports we do now, thanks in part to autoconf Mozilla Ports

  59. Get a cllue by Nicopa · · Score: 2, Insightful

    libtool compiles every file twice because the options needed for statically linked code aren't the same as the ones needed for dinamically linked objetct files.

    When a .o file that will be used in a shared library is built, you need to pass -fPIC in order to tell gcc to create "position independent code". With this options gcc uses a register to provide this feature. As this register is lost for normal variable optimizations, statically linked code should not be compiled with this option turned on.

  60. Re:Wow. jam seems to be what I've been looking for by David+Greene · · Score: 1
    Yes, you can, and it actually works because Jam computes dependencies correctly.

    I've not used Jam or boost.build myself but I'm planning on diving into it in the future.

    --

  61. Multiplatform argument is bogus by Anonymous Coward · · Score: 0

    The multiplatform argument is bogus. A Setup program can be an option. It does not need to be the only installation method. Non-x86 users or x86 users who choose to can use tradition methods and x86 users who choose otherwise can use the setup program method.

    Nobody looses anything. One group, which happens to be 9x% of the community has a simplification available, no harm in that.

  62. Cons: another make alternative by SilentTristero · · Score: 1

    If you're considering Jam, also take a look at Cons. It's entirely written in perl, and the "Makefiles" (called Constructs and Conscripts) are also perl, which gives incredible power and flexibility. We use it and are very happy with it. Like Jam it maintains correct dependencies automatically and it can even correctly build large projects with many interdependent subprojects.

  63. Autoconf/Automake is a mixed blessing by graveyhead · · Score: 3, Informative
    There are three reasons in my mind why autoconf absolutely rocks.
    • The library dependancy checking via AC_CHECK_LIB rocks. Why should I have to deal with the infinite possible locations for shared libraries? Autoconf deals with this nicely, and builds your -l and -L parameters for you.
    • ./configure --prefix=[somewhere] makes it very easy for your users to customize the installation directory.
    • AC_ARG_WITH is an execllent macro that lets you create compilation options with ease. Two of my favorites are creating debugging and profiling builds that can be removed in a production compile.
    The only truly horrible feature of autoconf/automake is the function detection mechanism, as other posters have complained about. Since there is no viable replacement for the functions that are being checked, this is just plain dumb. I suggest not using this feature at all, and then only write code that is a) ansi strict, or b) only uses library functions that you checked with AC_CHECK_LIB.

    Following these simple rules has made it very easy for me to create sane makefiles across projects with a very large number of subdirectories and sources.

    --
    std::disclaimer<std::legalese> sig=new std::disclaimer; sig->dump(); delete sig;
  64. Autoconf is just a tool by Ian+Lance+Taylor · · Score: 3, Interesting

    In my experience with software projects, a straightforward build system is essential. It permits consistent builds, which is essential for debugging complex problems. It permits easy builds, which is essential for developer testing. The hardest part of programming is debugging, and good debugging requires speeding up the edit/compile/debug cycle, while ensuring that everybody still gets the same result for each build.

    So I would say that no matter what, you should improve your build system.

    Given that, should you use the GNU build system, which is autoconf/automake/libtool? Well, it depends. There is a definite learning curve to these tools. They are written in several different languages (sh, m4, perl) and dealing with certain problems can require understanding each of those languages and how they interact. Using these tools will not automatically make your code portable or easy to build; you have to use them correctly, and you have to understand what you are doing.

    On the other hand, every other system which supports a complex build process also has a steep learning curve. There's no easy solution--if there were one, everybody would be using it.

    The GNU build system is widely used, so there are a lot of people who can help you with it. The mailing lists are active and helpful. There is also a book, but I'm one of the co-authors so you'd better take that with a grain of salt.

    I've converted large projects from ad hoc build systems to using the GNU build system. It's usually pretty straightforward--a matter of a week or so--but then I have a lot of experience with the tools.

    I've never used most of the other build systems (e.g., Odin, Jam, ANT) for a serious project, so I can't honestly evaluate how they stack up. I can recommend against imake.

    1. Re:Autoconf is just a tool by Anonymous Coward · · Score: 0

      The hardest part of programming is debugging, . . .

      That should be true only if you don't design it well and don't use reliable programming techniques.

    2. Re:Autoconf is just a tool by Ian+Lance+Taylor · · Score: 1


      The hardest part of programming is debugging, . . .


      That should be true only if you don't design it well and don't use reliable programming techniques.

      Do you say that based on your experience with large multi-developer programming projects, or do you say that based on books that you have read? I genuinely want to know.

      My statement was based on many years of experience with multi-developer projects, both free and proprietary.

  65. 'portability' vs. 'optimization' by allenw · · Score: 2, Informative


    My experiences with autoconf- and libtool- based build processes is that they tend to either a) require using a gcc-based compiler or b) will only kick in optimization flags if the end user sets CFLAGS manually (and even then, the CFLAGS may not get carried over into all parts of the project).

    So, depending upon your needs and just how portable you need to make your project, you might want to look at imake. While imake isn't 'simple' by any stretch of the imagination, one can take advantage of the fact that any system that ships with X11 developer packages has a working imake system that includes a good set of optimization switches set. The only big problem with imake is that a lot of folks don't set the site and/or host configuration files to change the compiler settings if they aren't using the manufacturer's compiler. [a simple #define HasGcc2 YES or is usually all it takes!]

  66. Re:Automake isn't just a porability tool by elflord · · Score: 1
    It's also convenient to allow the user to specify build options, eg prefixes, debug/production/profile builds, locations of libraries, and build options. One can apply your bullet points, and still find use for automake. As for "standard languages", C is standard, and it's portable if you only write standard code. Of course, most people want to use system libraries, but using some other language doesn't buy you that much (if the language has a huge standard library, it replaces that problem with other problems.)

  67. ohhhh is plan9 awesome or what by horster · · Score: 1

    sorry to be so off-topic but plan9/inferno are just so f*cking cool I couldn't help myself. why don't more linux users check out plan9 - I just downloaded the source and have been reading through it a little. it is just increadibly clean and packed with layer after layer of increadible ideas. for an example - read up on the window system rio, rob pike has a number of great papers on the subject.

    1. Re:ohhhh is plan9 awesome or what by GypC · · Score: 2

      There are a lot of cool things about plan9, but I just can't get over the mouse-centric GUI. Even in the terminals you have to use the mouse all the time and I freaking hate it.

      And the Inferno GUI just seems like a buggy and half-assed Windows 95 clone.

      The lack of a web browser for plan9 pretty much sucks, too.

      Oh well, I hope that some of their better ideas make it into more mainstream OS's (yeah, right.)

  68. Re:Wow. jam seems to be what I've been looking for by PugMajere · · Score: 1

    How exactly does make (or really, GNU Make) fail to compute dependencies properly, when you give it all the information needed? (i.e, you include everything into one big Makefile, instead of using recursive make calls.)

    I've never had a problem with make -j failing when plain make worked.

  69. Repeatable - Managable - Empowered by qbalus · · Score: 1

    You may want to consider taking the approach of determining the needs of the
    consumers of the source tree and then ensuring that the end-result is
    repeatable, managable and empowers the consumers to maintain and extend
    the solution. (i.e if the consumers are primarily Linux developers/users, then
    autoconf tools are the standard).

    The choice of technology used implement the build system,
    in my opionion, should revolve around the consumers preferences, as this will
    ensure that they can most easily make use of the solution.

    If time and budget allow, using alternative technologies can achieve the desired
    end-result, but will require training the consumers to achieve an empowered
    system (i.e a system that does not require specialized knowledge to use, maintain
    or extend)

    My target build sytem consumers have been commerical companies. I use GnuMake and have
    not had to use autotools yet... as all build dependencies are managed and known up-front, so
    discovery is not part of the overall process or approach.

    One area I find most commerically implemented build systems lacking is, to narrow of focus.
    The life cycle of a source tree spans numerous organizations (dev, re, test, qa, perf, cust support,
    tech marketing) yet barely meets development and release engineering needs. If building
    a system for a commerical environment, talking with all consumers will help in defining requirements
    for a complete system.

  70. Try a modern approach... by jungd · · Score: 1

    I've reciently gotten completely jack of make. After looking around at options I settled on Jam (actually ftjam - the freetype project's mod).
    I find it brilliant. You'll have to write your own Jamerules though - check out what the boost.org project have done with it.
    Highly recommended.

    --
    /..sig file not found - permission denied.
  71. Re:Wow. jam seems to be what I've been looking for by David+Greene · · Score: 1
    How exactly does make (or really, GNU Make) fail to compute dependencies properly, when you give it all the information needed? (i.e, you include everything into one big Makefile, instead of using recursive make calls.)

    Exactly. :) Yes, one can use a tool to aggregate a Makefile, but why do that rather than using a build system that actually works as expected? This is not a slam on make. It's simply an observation that another, perhaps better tool exists.

    --

  72. Where you click by yerricde · · Score: 1

    where do i click?

    First click your CD drive's icon. Then click the big seashell icon with 'setup' written below it.

    --
    Will I retire or break 10K?
  73. libiberty by Pseudonym · · Score: 2

    There's already a library which does some of this, and chances are you already have it installed: libiberty. Perhaps its role could be expanded a bit?

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  74. Another cross platform solution by Caacrinolaas · · Score: 1

    This is a bit of a detour, since it's not about autoconf, but a different and I
    think better solution to the same problem.

    To start, I'd like to make my bias clear and upfront:

    I'm a developer for Rogue Wave Software (www.roguewave.com), where we sell
    cross platform C++ libraries. I _have_ gone ahead and talked to some of the
    higher ups to make sure I don't piss anyone off, but I'm speaking for myself --
    largely because I think the project I work on is fairly cool!

    Over the past 10 years we've tried several solutions to deal with the
    maintenance costs associated with cross platform building, including trying to
    support an unwieldly makefile system like the original poster describes.

    After determining that such things as autoconf didn't meet our needs, we've end
    up creating our own system, called RCB.

    RCB uses a java engine that generates makefiles, which it then uses to build
    our libraries as well as their examples and tests. This is hooked into our
    build and test manager (Batman!), allowing us to continously test various build
    configurations on all of the platforms we support.

    We use XML to specify how the makefiles should be built, describing both the
    parts that are common, and the things that differ, such as compiler flags, etc.
    RCB also uses XML to describe the "products" to be built, and which build
    variations (static or dynamic linking, threading library, compiler/os, etc.)
    they support.

    A Java gui is used to create a reusable text file that defines what is going to
    be built, and how it will be built (e.g. debug, or release?). The gui also
    makes sure that only valid combinations are selected, and that the proper
    required libraries are defined.

    Adding new products and giving them cross-platform support and _testing_ is a
    matter of creating xml that lists the source files, etc. that are a part of the
    library, what other libraries it requires, and perhaps some custom flags, or
    constraints on which platforms and buildtypes are supported.

    I really think this is the way to go, as it has cut our maintence costs,
    improved our testing, and allows more flexibility than our previous systems.
    Our customers seem to generally think it's an easier system to use as well.
    I couldn't imagine moving to autoconf, or going back to supporting a bunch
    of platform specific makefiles

    Personally, I think it would be cool if others were to use the system I've
    put so much time into, although I can understand the attraction of using
    more commonly available (and free!) tools. Still, I think RCB has a lot
    to offer.

    We've tossed around the idea of selling the system to others who face similar
    problems, or perhaps even open sourcing it, but it's only just now starting to
    become robust enough that this is feasible.

    Feel free to send me email if you're curious about any of this.

    -Jasper
    phillips@roguewave.com
    jasper@peak.org

  75. Score 1 point for Java ? by DrTone · · Score: 1

    So maybe migrating your entire project to Java is out of the question, but don't you wish you had its write once run anywhere capability now ?

  76. Mozilla uses autoconf by wheezy · · Score: 1

    Mozilla, everybody's favorite huge-ass software project, uses autoconf. I worked at Netscape last year, and I can tell you for sure, build issues were something I was quite glad to have been able to avoid in a project that size. There were only a couple bits of old code in Mozilla (last time I checked) left over from the Netscape 4.x days that were non-autoconf.

    If you're looking for a case study to present to your pointy-hairs, look no further than Mozilla.

    1. Re: Mozilla uses autoconf by wheezy · · Score: 1

      Here is what you're looking for.

  77. New Tool by mbrod · · Score: 1

    As someone who has been buidling a ton of the same software on different systems (OpenVMS, Linux, and Solaris) lately I must say that we should make a new tool.

    The new tool with simply be you have an xml file on each of these systems that have that systems libraries, compiler, architecture, etc. all in it kind of like how Perl's Makemaker builds a makefile but in a way that works better :-). On OpenVMS it sux.

    I would love to see -
    <oracle_8_header_files/>
    as opposed to searching 25 disk arrays to find one stupid .h then find out exactly what I need to define as a system logical (on VMS) to make it find that. Then make sure I did that ok.

    $INC{INST_LIBS} doesn't tell the lay person a damn thing. Put it in xml with good documentation how to fix it cuz it isn't going to work for everyone.

    Or maybe I will do it. Anyone else out there have any use for something like this?

  78. Re:Wow. jam seems to be what I've been looking for by PugMajere · · Score: 1

    Don't get me wrong, I don't build projects with a single makefile, I build them up out of hierarchical pieces where each level only knows about targets in the level below it.

    (And I include "Makefile.inc" instead of "Makefile" just to make sure they don't function as regular makefiles...)

    I really haven't had any problems with this, and I know it will work on any system with GNU Make. (And it's guaranteed to know all the dependencies so that make -j will work...)

    I guess I'm not seeing how I could simplify this - it works for large projects without anyone knowing everything about the project, we just share some common top-level definitions, and a few conventions on how to name targets so we don't clash).

  79. Using autotools for a large project by mckinlay · · Score: 1

    Internally, we use autoconf, automake and libtool exclusively. We found the autotools ideal for large projects, although we have made some slightly nonstandard modifications to some of the m4 and Makefile fragments.

    Our largest project which uses the autotools is an operating system, based around Linux, glibc and X. All of the components of the OS, with the exception of glibc, build with automake and libtool.

    This, at times, wasn't at all easy, but definitely worth the effort. Building a complete OS has never been easier :)

  80. Crossplatform C++ project with autoconf/automake by achim · · Score: 1

    You did not mention which language you use. I tried to use autoconf/automake to build a project using C++ that

    • has to work on Linux, Solaris, IRIX and NT
    • uses modern C++ features (namespaces, exceptions, STL, maybe even member templates)
    • uses native compilers for speed optimization (NT: Borland, VC++ and cygwin are not sufficient) besides GCC
    • cannot use cygwin.dll because that is GPLed
    • will maybe sometime in the future turn into open-source or even free software

    I've been very satisfied with the unform way of configuring and compiling programs for Linux and Unices. It seemed viable even for big C++-Projects like KDE. "Even wxWindows uses it, and that's cross-platform for sure.", I thought.

    Well, that was naive. I struggled for weeks building a build system that would work on Linux(GCC), IRIX(MipsPro), SUN(SunWS) and NT(Borland). Even the difference between GCC and the other Unix compilers became a hard problem. In the end I coded a macro that set CXXFLAGS and various other AC_SUBST variables according to the platform used. Still, the automatic dependency tracking only worked with GCC, so I started writing a script that simplified the generation of the configure script. Now I have to reconfigure each time I want to try, say, IRIX for compiling. Hmpf.

    NT (with Borland) was a disaster in itself. First, I installed cygwin to have the necessary tools. The CLI of Borland differs greatly from the (more-or-less) Unix standard, so I ended up writing wrapper scripts that translated them. The final point came when I wanted to build a static library. Well, it works, with another wrapper script, but it ends up in *.a files, because I found no way to tell autoconf/automake that there might be different extensions for static libs. Maybe I'm to blame here, because I didn't dare to use libtool, but the complexity of the toolset already grew over my head.

    Autoconf may have its advantages if your are using C and need to be compatible to some brain-dead machines from the seventies. For writing portable C++ programs, look for something else. Or stay with the makefiles. Good crafted makefiles still aren't that bad. You can even supply a dummy configure script, so no one downloading the thing has to change his habits ...

  81. autoconf annoyances by Zygo · · Score: 1
    There are three things that really annoy me about autoconf (and the autobook, for that matter):
    • The autobook examples of missing functions are trivial (meaning that the missing function is easily implemented in terms of non-missing ones--so easily, that any reasonable compiler would generate code identical to what would be generated if the package developer had written two sets of code with #ifdef HAVE_ macros). It is much easier for autoconf to simply implement strstr() in config.h if it detects that you only have index(), than it is to write, debug, and maintain one copy of every such function for every single project ever written. The code could easily fit within 'configure' itself.

      It would be a good idea for the GNU autotools project to create a single .h file (or .h.in file) with tested replacement functions for trivial missing features. Arguably this is what GNU libc is for--acting as a translation layer between POSIX or SVID and non-compliant or broken vendor systems, and implementing missing functionality in terms of existing interfaces; however, libc isn't really used in this way.

    • The first thing any ./configure script should do is look for a newer version of autoconf on the installer's build system, and upgrade its config.guess/config.sub/configure files appropriately (of course with a suitable --without- or --disable- option to turn this off, in case the package maintainer's version of autoconf is less broken than the package installer's version):

      checking for autoconf... ok
      checking version of configure... 1.2.3
      checking version of autoconf... 1.2.4
      creating configure
      restarting ./configure

    • Autoconf, and libtool and automake, seem to be missing support for compiling with profiling, debugging, and optimization. If you thought building cross-platform shared libraries was a pain, try building a project with working profiling or debugging support on several different compilers. I would love to have a "--enable-profiling" flag for ./configure that would automagically work consistently across platforms...
    autoconf, like libtool and automake, really only solves part of the much larger problem of portability. In the limiting cases, there are only two ways to build a portable system: either use the lowest common denominator, or link to a runtime library that contains functions you need and that has been ported to every platform you care about. Things in between these extremes are really just the above rule applied to individual features--if you don't HAVE_OFF64_T, then you have to design your code for systems that don't HAVE_OFF64_T (note that simply allowing your code to bomb in implementation-defined ways when given any file bigger than 2 gigabytes is, in a technical sense, designing your code for non-HAVE_OFF64_T systems). On the other hand, if you don't HAVE_BASENAME, then you just supply your own and move on.

    Once Linux achieves world domination, autoconf will be obsolete (well, except for choosing between multiple installed versions of packages, and the --prefix/--enable/--with override options).

    It would be a good idea for the GNU autotools project to create a single .h file (or .h.in file) with tested replacement functions for trivial missing features. Arguably this is what GNU libc is for--acting as a translation layer between POSIX or SVID and non-compliant or broken vendor systems, and implementing missing functionality in terms of existing interfaces; however, libc can't easily be used in this way at the moment.

    --
    -- I avoid spam by accepting only OpenPGP encrypted or signed email at this address. Clear-signed, RFC2015, heck, even
  82. Pro Installers by OsamaBinLogin · · Score: 1

    The reason why setup.exe (= installers in general) work is that they are foolproof and brainless and work the first time.

    [cough cough. Well, not always. yes sometimes they don't work, sometimes they crash, sometimes you have to coax them along, sometimes they break stuff that used to work, sometimes you gotta reformat and reinstall the whole os...]

    ./configure; make; make install
    is not the same:
    1) it takes more typing
    2) the chances of brainless success are lower, and you, the human installer, are assumed to have the skill to fix what's broken and coax it along.

    This is why and when software is distributed as source: it's less likely to work as-is, therefore, for a programmer who can hack, the means are there to fight toward success.

    A canned binary does not have this flexibility. A canned binary for x86 will not work on PowerPC and vice versa. A buildable source distro will.

    I got a 4 CD set of software, bsd ports, for Mac OS X. Sources. Scanning through the whole thing one evening, I loaded up everything I thought would be useful. I mostly wanted bash. Most of it just didn't build as it was, including bash, and I didn't take the time to think and fight - if it didn't build, I went on. At the end of the evening, I'd gained one piddly little program that I don't even remember. Nothing else worked - not brainlessly at least. Some day I'll attack the bash sources again.

    BY comparison, most Mac production software from apple or commercial publishers, installs a binary and works beautifully the first time. We're talking, Click. We're talking, the manual sez it won't work on a non-Apple USB, but it does anyway. But of course only for selected OS versions on PPC, and the installer took more work on the part of the publisher. There's no free lunch.

    PS: I'm not worried about computers taking oover the world. They need us humans to fix the bugs and run the installers and build scripts.

    --
    Marketing-driven companies end up over-marketing their products. Engineering-driven companies end up over-engineering