Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #15643

Re: Writing "absolutely" portable code

From Rui Maciel <rui.maciel@gmail.com>
Newsgroups comp.lang.c
Subject Re: Writing "absolutely" portable code
Date 2012-01-09 15:58 +0000
Organization Aioe.org NNTP Server
Message-ID <jef2qn$is1$1@speranza.aioe.org> (permalink)
References <9483089.582.1326104763671.JavaMail.geo-discussion-forums@prj1> <jeek4h$695$1@dont-email.me>

Show all headers | View raw


ec429 wrote:

<snip/>
> Don't rely on the sizes of integer types;
> if you need an N-bit int, use intN_t.  

I would go a bit further than that.  It would be a good idea to define type 
names for primitive data types in a separate header (config.h), either 
through macro definitions or typedefs, and then set/update that definition 
based on checks performed by the configuration script.  

The GNU build system (i.e., autotools) was developed basically with this in 
mind, through the use of a config.h.in file, and cmake also supports this as 
well.

<snip/>

> Hand-make a configure script that
> tests for the things you need (by compiling and running tiny C programs)
> and outputs that information into a file that gets included by your
> Makefile (and defines some variable to hold some -D macro definitions
> for the cpp).  

I don't believe this suggestion is very good. Any flexibility which might be 
gained by developing our own shell scripts may require a relevant amount of 
maintenance and research, once we need to support more than one platform.  
There were good reasons why smart people decided to invest their time 
developing automated build systems in order to avoid hand-making configure 
scripts.


> Hand-roll your makefile too, using implicit rules (%, $<
> and $@ are your friends), but if some targets don't support GNU make,
> you may need to write a tool to generate an explicit makefile from your
> implicit rules (such a tool would be easier to write in, say, perl, than
> in C).

Again, this is the same problem I've previously pointed out.  If someone 
intends to avoid automatic build systems when developing portable projects 
and instead they opt to rely on all sorts of custom hand-written scripts, 
they are digging themselves into a hole from which they may experience a lot 
of problems just to escape it.

Another aspect which is rarely taken into account by those who decide to 
rely on a set of hand-crafted scripts to automate their build process is 
that another advantage in relying on automated build systems is familiarity.  
There is a wealth of information and discussion groups dedicated to specific 
automated build systems, and a considerable number of developers already 
have experience in writing/managing them.  It is also terribly easy for any 
developer who intends to use one to simply read up on them and, in a matter 
of minutes, get them up and running.  Therefore, it wouldn't be a challenge 
for a clueless newbie to read up on a standard/popular build system and not 
have a problem implementing basic stuff, such as adding files to a project.

The same doesn't necessarily apply to hand-crafted scripts.  Once a project 
grows after some point, the project's hand-crafted scripts tend to become, 
at least to those who didn't developed them, a violent mix of arcane 
enchantments and textual noise, which is practically impossible to 
understand, let alone maintain and update.  As those scripts represent a 
one-off attempt at writing a build script, there won't be a lot of help 
available to those who intend to decipher them.  So, although a specific mix 
of "let's hand-craft everything" may serve well a specific developer in that 
very specific occasion, it may undermine the ability to contribute by anyone 
else.  And this is a problem.


<snip/>
> On the more general note of avoiding Autotools, I would note that all my
> open-source projects (there are several) use hand-written Makefiles,
> none has a configure script, and I have yet to encounter anything more
> severe than a few #ifdef WINDOWS to handle cross-compilation to that
> platform (and separate make rules for Windows targets).  With a
> cross-compiling gcc, even Cygwin is not necessary (although it would be
> if you wanted to /compile/ on Windows).

Like any tool ever developed, there is a threshold that marks the start of 
its usefulness.  Or, better yet, the point where applying that tool makes 
sense.

Considering build automation tools, their usefulness only kicks in if they 
actually help manage the build process.  In some tiny, one-off projects, 
even writing a simple makefile ends up being too much work which brings 
little to no reward. 

So, just because some projects can be adequately managed by a set of hand-
crafted makefiles and shell scripts, it doesn't mean that build automation 
tools are bad and should be avoided.  They do have their purpose and they do 
help a lot.  You only need to understand where and when it makes sense to 
rely on them, and in what cases it makes more sense to rely on other means.


Rui Maciel

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 02:26 -0800
  Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 11:47 +0000
    Re: Writing "absolutely" portable code Jens Gustedt <jens.gustedt@loria.fr> - 2012-01-09 13:56 +0100
    Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 05:45 -0800
      Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 14:46 +0000
        Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-10 01:11 -0800
    Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-09 15:58 +0000
    Re: Writing "absolutely" portable code falk@rahul.net (Edward A. Falk) - 2012-01-09 18:41 +0000
  Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-09 12:23 +0000
    Re: Writing "absolutely" portable code Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-01-09 08:45 -0500
      Re: Writing "absolutely" portable code superpollo <superpollo@tznvy.pbz> - 2012-01-09 15:02 +0100
        Re: Writing "absolutely" portable code Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-01-09 16:11 +0000
    Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 05:56 -0800
      Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-09 15:07 +0000
        Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-10 01:21 -0800
          Re: Writing "absolutely" portable code Stephen Sprunk <stephen@sprunk.org> - 2012-01-10 13:20 -0600
            Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-11 06:57 -0800
          Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-11 09:23 +0000
  Re: Writing "absolutely" portable code jacob navia <jacob@spamsink.net> - 2012-01-09 13:48 +0100
    Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 13:11 +0000
      Re: Writing "absolutely" portable code Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-01-09 05:27 -0800
        Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 13:41 +0000
          Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 06:09 -0800
      Re: Writing "absolutely" portable code jacob navia <jacob@spamsink.net> - 2012-01-09 14:35 +0100
        Re: Writing "absolutely" portable code Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-01-09 13:44 +0000
          Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 06:18 -0800
          Re: Writing "absolutely" portable code jacob navia <jacob@spamsink.net> - 2012-01-09 18:59 +0100
          Re: Writing "absolutely" portable code jacob navia <jacob@spamsink.net> - 2012-01-09 19:01 +0100
            Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 19:21 +0000
              Re: Writing "absolutely" portable code Richard <rgrdev_@gmail.com> - 2012-01-10 20:48 +0100
                Re: Writing "absolutely" portable code David Dyer-Bennet <dd-b@dd-b.net> - 2012-01-10 14:26 -0600
                Re: Writing "absolutely" portable code Richard <rgrdev_@gmail.com> - 2012-01-10 21:44 +0100
                Re: Writing "absolutely" portable code David Dyer-Bennet <dd-b@dd-b.net> - 2012-01-10 15:45 -0600
                Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-11 09:12 +0000
                Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-11 11:10 +0000
                Re: Writing "absolutely" portable code James Kuyper <jameskuyper@verizon.net> - 2012-01-11 11:52 -0500
                Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-11 17:01 +0000
                Re: Writing "absolutely" portable code James Kuyper <jameskuyper@verizon.net> - 2012-01-11 12:11 -0500
              Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-11 09:08 +0000
            Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-11 08:22 +0000
            Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-11 08:54 +0000
        Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 13:57 +0000
          Re: Writing "absolutely" portable code Seebs <usenet-nospam@seebs.net> - 2012-01-09 19:21 +0000
            Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-09 19:52 +0000
              Re: Writing "absolutely" portable code Seebs <usenet-nospam@seebs.net> - 2012-01-09 20:20 +0000
        Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 06:16 -0800
    Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-09 06:02 -0800
  Re: Writing "absolutely" portable code Keith Thompson <kst-u@mib.org> - 2012-01-09 14:50 -0800
    Re: Writing "absolutely" portable code Kaz Kylheku <kaz@kylheku.com> - 2012-01-09 23:20 +0000
      Re: Writing "absolutely" portable code Rui Maciel <rui.maciel@gmail.com> - 2012-01-10 00:23 +0000
    Re: Writing "absolutely" portable code Dirk Zabel <zabel@riccius-sohn.eu> - 2012-01-10 17:44 +0100
      Re: Writing "absolutely" portable code ArifulHossain tuhin <etothepowerpi@gmail.com> - 2012-01-11 07:13 -0800
      Re: Writing "absolutely" portable code Nick Bowler <nbowler@draconx.ca> - 2012-01-17 20:36 +0000
        Re: Writing "absolutely" portable code ec429 <ec429@cam.ac.uk> - 2012-01-17 23:06 +0000
          Re: Writing "absolutely" portable code blp@cs.stanford.edu (Ben Pfaff) - 2012-01-17 15:32 -0800
            Re: Writing "absolutely" portable code Kaz Kylheku <kaz@kylheku.com> - 2012-01-18 00:40 +0000
              Re: Writing "absolutely" portable code Seebs <usenet-nospam@seebs.net> - 2012-01-18 18:35 +0000
                Re: Writing "absolutely" portable code Kaz Kylheku <kaz@kylheku.com> - 2012-01-18 19:15 +0000
                Re: Writing "absolutely" portable code Seebs <usenet-nospam@seebs.net> - 2012-01-21 21:32 +0000
            Re: Writing "absolutely" portable code "io_x" <a@b.c.invalid> - 2012-01-18 07:26 +0100
              Re: Writing "absolutely" portable code "Joachim Schmitz" <nospam.jojo@schmitz-digital.de> - 2012-01-18 11:07 +0100
                Re: Writing "absolutely" portable code Seebs <usenet-nospam@seebs.net> - 2012-01-21 21:32 +0000
                Re: Writing "absolutely" portable code Ian Collins <ian-news@hotmail.com> - 2012-01-22 10:42 +1300
                Re: Writing "absolutely" portable code "io_x" <a@b.c.invalid> - 2012-01-22 18:53 +0100
                Re: Writing "absolutely" portable code "io_x" <a@b.c.invalid> - 2012-01-22 19:00 +0100
                Re: Writing "absolutely" portable code "io_x" <a@b.c.invalid> - 2012-01-23 19:28 +0100
              Re: Writing "absolutely" portable code Stephen Sprunk <stephen@sprunk.org> - 2012-01-18 08:44 -0600
              Re: Writing "absolutely" portable code James Dow Allen <jdallen2000@yahoo.com> - 2012-01-18 07:09 -0800
                Re: Writing "absolutely" portable code "io_x" <a@b.c.invalid> - 2012-01-18 17:44 +0100
        Re: Writing "absolutely" portable code Seebs <usenet-nospam@seebs.net> - 2012-01-18 07:58 +0000

csiph-web