Segher Boessenkool segher at chello.nl
Sun Jun 23 16:47:37 CEST 2002

> There was some discussion on this list on probing compiler
> features before actually using them instead of making vague assumptions
> on what version supports which feature.

I still prefer just requiring gcc-3 (although it currently works "fine"
with 2.95 as well) (except on some 64-bit targets).

> Instead of using a vast amount of autoconf/automake magic, I wrote a
> small perl script that calls the compiler with simple code fragments
> and analyzes these afterwards using nm.

Good :)  The autoevil suite is, well, evil ;)

> This way it is also
> usable when cross compiling. Basically the patch removes types.h
> as it will be autogenerated plus the already known ANSI fixes (mostly
> applying a regexp to change comment style)

Please keep types.h intact, and have it include an auto-types.h or
something like that.  Much easier if you want to bypass the automatic
stuff for whatever reason.

> The configuration script conf.pl also checks for available data types
> and chooses the needed ones to set up the internal structures.
> gcc's TI mode is probed and, if available and needed, it is used.
> Any comments? ;)

Walkthrough :)  :

-CFLAGS = -Wall -W -std=gnu9x -g -O2 # -pg
+CFLAGS  = -Wall -std=gnu9x -g -O2 # -pg

Why remove -W ?  It's soooo useful :)

+CC     = gcc

I removed this for a reason ;)   Just   CC=gcc make   if you need it...

+NM     = nm -t bsd

Not all nm's are GNU nm.  Different nm's outputs are similar enough to
be parseable with a simple regexp.

-paflof.o paflof.s: paflof.c prim.code prep.h dict.xt
+paflof.o paflof.s: paflof.c prim.code prep.h types.h dict.xt

Ah yes, I forgot.  Thanks.

+$CC="gcc -std=gnu9x";

Better just use sh's already-set variables for this.

+sub check_size
+       my $what=shift;
+       my $attr=shift;
+       my $include=shift;
+       # create .test.c file
+       open(F, ">.test.c");

Don't hide temporary files -- if you feel they clobber the source dir,
create them somewhere else (like, /tmp).

+# Check for restrict keyword.
+my $answer="no";
+print("\nChecking whether we can use the restrict keyword (C99)... ");
+print(I "\n#define __RESTRICT__ ");

The C compiler already defines __STDC_VERSION__ to 199901L or greater if
C99 features are supported.

-//#define DEBUG_STACKS

Don't remove this, please ;)  #undef it, if you want, but keep all compile-time
flags at the top op file :)

 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <string.h>
+#define __USE_MISC
 #include <sys/mman.h>
+#include <string.h>
 #include <termios.h>
+#define __USE_POSIX
+#define __USE_POSIX199309
 #include <signal.h>
 #include <fcntl.h>

This isn't exactly making stuff more portable, now is it?

 struct interpreter {
-       cell *restrict data_stack;
-       cell *restrict return_stack;
-       cell *restrict dictionary;
-       char *restrict tib;
-       char *restrict pockets;
+       cell * __RESTRICT__ data_stack;
+       cell * __RESTRICT__ return_stack;
+       cell * __RESTRICT__ dictionary;
+       char * __RESTRICT__ tib;
+       char * __RESTRICT__ pockets;
        void *here;

It would have been simpler had you done
#define restrict
if restrict isn't supported...

+#if 0
+       free(i->data_stack);
+       free(i->return_stack);
+       free(i->dictionary);

#if 0  for commenting out code is evil, imho.

Well, I'll get to it.


To unsubscribe: send mail to majordomo at freiburg.linux.de
with 'unsubscribe openbios' in the body of the message
http://www.freiburg.linux.de/OpenBIOS/ - free your system..

More information about the openbios mailing list