#7505: Add scripts which check C and C++ compilers, and report what they are.
---------------------------+------------------------------------------------
   Reporter:  drkirkby     |       Owner:  tbd         
       Type:  enhancement  |      Status:  needs_review
   Priority:  minor        |   Milestone:  sage-4.3    
  Component:  build        |    Keywords:              
Work_issues:               |      Author:  David Kirkby
   Reviewer:               |      Merged:              
---------------------------+------------------------------------------------
Changes (by drkirkby):

  * status:  new => needs_review


Old description:

> In some parts of Sage, it is desirable to know what compiler is being
> used - in particular if its gcc or Sun, but there are other cases too.
>
> The two scripts check the variable CC and CXX, and try to determine what
> the compiler is. I've no idea where the scripts should go though -
> ultimately they should be copied to SAGE_LOCAL/bin, but if great if
> someone can put them in a sensible place to start with. I would be
> appreciate that.
>
> The scripts can report one of several answers.
>
>     * GNU (for GNU gcc, on any platform.)
>     * Sun_on_Solaris (for the Sun Studio compiler on Solaris)
>     * Intel_improved_GCC (An improved commercial version of gcc by Intel.
> Compatible with gcc, but supposedly faster)
>     * Sun_improved_GCC (A compiler by Sun, that appears to code to be
> gcc, but uses Sun Studio as a back-end.)
>     * HP_on_Alpha_Linux (HP compiler on Alpha hardware running Linux)
>     * HP_on_HPUX (HP's commerical compiler on HP-UX)
>     * IBM_on_AIX (IBM's commercial compiler on AIX)
>     * HP_on_Tru64 (HP's commerical compiler on Tru64)
>     * Unknown  (The scripts can't work out what the compiler is).
>
> These two scripts work by testing what pre-processor directives the
> compilers test. For example, gcc will define __GNUC__.
>
> But so will the Intel and Sun compilers which try to be GNU like. But the
> Intel one will define __INTEL_COMPILER
> Rhe Sun compilers defined __SUNPRO_C  so it's possible to differentiate
> the GNU, Intel and Sun compilers, even though they all aim to be GCC-
> like.
>  Compiler documentation was obtained from various sites, and is
> documented in the scripts.
>  == Testing ==
> Obviously a reviewer can test these scripts on any platforms they have
> access to, but here are some tests I performed. I've not managed to check
> these scripts on every platform and compiler for which they are aimed to
> work on, due to lack of access to the hardware.
>
>  * On a Sun Blade 2000 SPARC box, with Sun Studio 12.1
> {{{
> drkir...@swan:[~] $ uname -a
> SunOS swan 5.10 Generic_139555-08 sun4u sparc SUNW,Sun-Blade-1000
> drkir...@swan:[~] $ echo $CC
> /opt/xxxsunstudio12.1/bin/cc
> drkir...@swan:[~] $ echo $CXX
> /opt/xxxsunstudio12.1/bin/CC
> drkir...@swan:[~] $ ./testcc
> Sun_on_Solaris
> drkir...@swan:[~] $ ./testcxx
> Sun_on_Solaris
> }}}
>
>  *  On the same Sun Blade 2000, but with CC and CXX set to gcc and g++
> {{{
> drkir...@swan:[~] $ export CC=gcc
> drkir...@swan:[~] $ export CXX=g++
> drkir...@swan:[~] $ ./testcc
> GNU
> drkir...@swan:[~] $ ./testcxx
> GNU
> }}}
>
>  * On a Sun Ultra 27, but with CC defined to be a simple ''hello world
> program'', to prove the code returns ''Unknown'' when it can not
> determine the compiler.
> {{{
> SunOS hawk 5.11 snv_111b i86pc i386 i86pc
> bash-3.2$ gcc hello.c -o hello
> bash-3.2$ export CC=./hello
> bash-3.2$ ./testcc
> Unknown
> }}}
>
>  * On an IBM machine running AIX 6.
> {{{
> $ uname -a
> AIX client9 1 6 00C6B7C04C00
> $ export CC=gcc
> $ export CXX=g++
> $ ./testcc
> GNU
> $ ./testcxx
> GNU
> }}}
>
>  * On the same IBM machine running AIX 6, but with CC and CXX set to the
> IBM commercial compilers.
> {{{
> $ uname -a
> AIX client9 1 6 00C6B7C04C00
> $ export CC=/usr/vacpp/bin/xlc
> $ export CXX=/usr/vacpp/bin/xlc++
> $ ./testcc
> IBM_on_AIX
> $ ./testcxx
> IBM_on_AIX
> }}}
>
>  * On a HP C3600 running HP-UX 11.11, CC and CXX set to GNU compilers.
> {{{
> $ uname -a
> HP-UX hpbox B.11.11 U 9000/785 2016698240 unlimited-user license
> $ export CC=gcc
> $ export CXX=g++
> $ ./testcc
> GNU
> $ ./testcxx
> GNU
> }}}
>
>  * On the same HP C3600, but this time using trial versions of HP's
> commercial C and C++ compilers.
> {{{
> $ export CC=/opt/ansic/bin/cc
> $ export CXX=/opt/aCC/bin/aCC
> $ ./testcc
> HP_on_HPUX
> $ ./testcxx
> HP_on_HPUX
> }}}
>
>  * On a linux machine (sage.math.washington.edu), with the variable CC
> and CXX not set. In this case, the exit code is 1, not 0.
> {{{
> kir...@sage:~$ unset CC
> kir...@sage:~$ unset CXX
> kir...@sage:~$ ./testcc
> Sorry, you should define the environment variable CC
> kir...@sage:~$ ./testcxx
> Sorry, you should define the environment variable CXX
> }}}
>
>  * On the same Linux machine, but with CC and CXX set to locations of GNU
> compilers. In one case an absolute path is given, in the other case it is
> not
> {{{
> kir...@sage:~$ uname -a
> Linux sage.math.washington.edu 2.6.24-23-server #1 SMP Wed Apr 1 22:14:30
> UTC 2009 x86_64 GNU/Linux
> kir...@sage:~$ export CC=/usr/bin/gcc
> kir...@sage:~$ export CXX=g++
> kir...@sage:~$ ./testcc
> GNU
> kir...@sage:~$ ./testcxx
> GNU
> }}}
>
>  * On an Apple (bsd.math.washington.edu) running OS X
> {{{
> [kir...@bsd ~]$ uname -a
> Darwin bsd.local 10.2.0 Darwin Kernel Version 10.2.0: Tue Nov  3 10:37:10
> PST 2009; root:xnu-1486.2.11~1/RELEASE_I386 i386 i386 MacPro1,1 Darwin
> [kir...@bsd ~]$ export CC=gcc
> [kir...@bsd ~]$ export CXX=g++
> [kir...@bsd ~]$ ./testcc
> GNU
> [kir...@bsd ~]$ ./testcxx
> GNU
> }}}
>
> The code was tested by someone else on Tru64, but I can not show the
> results of this.
>
> I have not verified it with the Sun or Intel compilers which are GCC
> compatible, nor on Alpha linux. In each case, I've used compiler
> documentation, and hope it is right.
>
> Dave

New description:

 In some parts of Sage, it is desirable to know what compiler is being used
 - in particular if its gcc or Sun, but there are other cases too.

 The two scripts check the variable CC and CXX, and try to determine what
 the compiler is. I've no idea where the scripts should go though -
 ultimately they should be copied to SAGE_LOCAL/bin, but if great if
 someone can put them in a sensible place to start with. I would be
 appreciate that.

 The scripts can report one of several answers.

     * GNU (for GNU gcc, on any platform.)
     * Sun_on_Solaris (for the Sun Studio compiler on Solaris)
     * Intel_improved_GCC (An improved commercial version of gcc by Intel.
 Compatible with gcc, but supposedly faster)
     * Sun_improved_GCC (A compiler by Sun, that appears to code to be gcc,
 but uses Sun Studio as a back-end.)
     * HP_on_Alpha_Linux (HP compiler on Alpha hardware running Linux)
     * HP_on_HPUX (HP's commerical compiler on HP-UX)
     * IBM_on_AIX (IBM's commercial compiler on AIX)
     * HP_on_Tru64 (HP's commerical compiler on Tru64)
     * Unknown  (The scripts can't work out what the compiler is).

 These two scripts work by testing what pre-processor directives the
 compilers test. For example, gcc will define __GNUC__.

 But so will the Intel and Sun compilers which try to be GNU like. But the
 Intel one will define __INTEL_COMPILER

 The Sun compilers defined __SUNPRO_C

 so it's possible to differentiate the GNU, Intel and Sun compilers, even
 though they all aim to be GCC-like.

 Compiler documentation was obtained from various sites, and is documented
 in the scripts.
  == Testing ==
 Obviously a reviewer can test these scripts on any platforms they have
 access to, but here are some tests I performed. I've not managed to check
 these scripts on every platform and compiler for which they are aimed to
 work on, due to lack of access to the hardware.

  * On a Sun Blade 2000 SPARC box, with Sun Studio 12.1
 {{{
 drkir...@swan:[~] $ uname -a
 SunOS swan 5.10 Generic_139555-08 sun4u sparc SUNW,Sun-Blade-1000
 drkir...@swan:[~] $ echo $CC
 /opt/xxxsunstudio12.1/bin/cc
 drkir...@swan:[~] $ echo $CXX
 /opt/xxxsunstudio12.1/bin/CC
 drkir...@swan:[~] $ ./testcc
 Sun_on_Solaris
 drkir...@swan:[~] $ ./testcxx
 Sun_on_Solaris
 }}}

  *  On the same Sun Blade 2000, but with CC and CXX set to gcc and g++
 {{{
 drkir...@swan:[~] $ export CC=gcc
 drkir...@swan:[~] $ export CXX=g++
 drkir...@swan:[~] $ ./testcc
 GNU
 drkir...@swan:[~] $ ./testcxx
 GNU
 }}}

  * On a Sun Ultra 27, but with CC defined to be a simple ''hello world
 program'', to prove the code returns ''Unknown'' when it can not determine
 the compiler.
 {{{
 SunOS hawk 5.11 snv_111b i86pc i386 i86pc
 bash-3.2$ gcc hello.c -o hello
 bash-3.2$ export CC=./hello
 bash-3.2$ ./testcc
 Unknown
 }}}

  * On an IBM machine running AIX 6.
 {{{
 $ uname -a
 AIX client9 1 6 00C6B7C04C00
 $ export CC=gcc
 $ export CXX=g++
 $ ./testcc
 GNU
 $ ./testcxx
 GNU
 }}}

  * On the same IBM machine running AIX 6, but with CC and CXX set to the
 IBM commercial compilers.
 {{{
 $ uname -a
 AIX client9 1 6 00C6B7C04C00
 $ export CC=/usr/vacpp/bin/xlc
 $ export CXX=/usr/vacpp/bin/xlc++
 $ ./testcc
 IBM_on_AIX
 $ ./testcxx
 IBM_on_AIX
 }}}

  * On a HP C3600 running HP-UX 11.11, CC and CXX set to GNU compilers.
 {{{
 $ uname -a
 HP-UX hpbox B.11.11 U 9000/785 2016698240 unlimited-user license
 $ export CC=gcc
 $ export CXX=g++
 $ ./testcc
 GNU
 $ ./testcxx
 GNU
 }}}

  * On the same HP C3600, but this time using trial versions of HP's
 commercial C and C++ compilers.
 {{{
 $ export CC=/opt/ansic/bin/cc
 $ export CXX=/opt/aCC/bin/aCC
 $ ./testcc
 HP_on_HPUX
 $ ./testcxx
 HP_on_HPUX
 }}}

  * On a linux machine (sage.math.washington.edu), with the variable CC and
 CXX not set. In this case, the exit code is 1, not 0.
 {{{
 kir...@sage:~$ unset CC
 kir...@sage:~$ unset CXX
 kir...@sage:~$ ./testcc
 Sorry, you should define the environment variable CC
 kir...@sage:~$ ./testcxx
 Sorry, you should define the environment variable CXX
 }}}

  * On the same Linux machine, but with CC and CXX set to locations of GNU
 compilers. In one case an absolute path is given, in the other case it is
 not
 {{{
 kir...@sage:~$ uname -a
 Linux sage.math.washington.edu 2.6.24-23-server #1 SMP Wed Apr 1 22:14:30
 UTC 2009 x86_64 GNU/Linux
 kir...@sage:~$ export CC=/usr/bin/gcc
 kir...@sage:~$ export CXX=g++
 kir...@sage:~$ ./testcc
 GNU
 kir...@sage:~$ ./testcxx
 GNU
 }}}

  * On an Apple (bsd.math.washington.edu) running OS X
 {{{
 [kir...@bsd ~]$ uname -a
 Darwin bsd.local 10.2.0 Darwin Kernel Version 10.2.0: Tue Nov  3 10:37:10
 PST 2009; root:xnu-1486.2.11~1/RELEASE_I386 i386 i386 MacPro1,1 Darwin
 [kir...@bsd ~]$ export CC=gcc
 [kir...@bsd ~]$ export CXX=g++
 [kir...@bsd ~]$ ./testcc
 GNU
 [kir...@bsd ~]$ ./testcxx
 GNU
 }}}

 The code was tested by someone else on Tru64, but I can not show the
 results of this.

 I have not verified it with the Sun or Intel compilers which are GCC
 compatible, nor on Alpha linux. In each case, I've used compiler
 documentation, and hope it is right.

 Dave

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/7505#comment:1>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

--

You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=.


Reply via email to