François PERRAD wrote:

When I follow the instructions what I've published in parrot/README.win32, the builded perl program gives : $ perl -e "print $^O" MSWin32

For me, mingw is not a platform (MSWin32 and cygwin are a platform), just the GCC compiler under MSWin32.
$mingw = ($^O eq 'MSWin32' and $Config{cc} eq 'gcc')


So, the case $is_mingw in config/init/hints/mswin32.pl is the good way to handle this compiler.


README.win32: "As Configure.pl extracts configuration from the perl program, first build/install perl with MinGW (no binary distribution available)."


But more obtainable/common are:

# run: cmd.exe
C:\>perl -e "print $^O"
MSWin32
C:\>perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
Binary build 810 provided by ActiveState Corp.
C:\>set PATH=%PATH%;C:\mingw\bin
C:\>gcc -v
gcc version 3.2.3 (mingw special 20030504-1)

# run: C:\msys\msys.bat
$ perl -e "print $^O"
msys
$ perl -v
This is perl, v5.6.1 built for msys
$ which gcc
/mingw/bin/gcc
$ gcc -v
gcc version 3.2.3 (mingw special 20030504-1)

# run C:\cygwin\cygwin.bat
$ perl -e "print $^O"
cygwin
$ perl -v
This is perl, v5.8.6 built for cygwin-thread-multi-64int
$ which gcc
/usr/bin/gcc
$ gcc -v
gcc version 3.3.3 (cygwin special)

See attached win32-env.txt for full listings.

I was thinking about merge cygwin.pl with mswin32.pl.
  my $O = lc($^O);
  $O = 'mswin32' if $O =~ /^(msys|cygwin)/;
  my $hints = "config/init/hints/" . $O . ".pl";

See attached mswin32.pl

See also http://xrl.us/fddn (MJWiki:Build Parrot with MinGW)

S pozdravem Michal Jurosz

C:\usr>perl -e "print $^O" 
MSWin32

C:\usr>perl -v 

This is perl, v5.8.4 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)

Copyright 1987-2004, Larry Wall

Binary build 810 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Jun  1 2004 11:52:21

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

C:\>set PATH=%PATH%;C:\mingw\bin

C:\usr>gcc -v 

Reading specs from C:/mingw/bin/../lib/gcc-lib/mingw32/3.2.3/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c++,f77,objc --disable-win32-registry --disable-shared --enable-sjlj-
exceptions
Thread model: win32
gcc version 3.2.3 (mingw special 20030504-1)

# ----------------------------------------------------------------------------

msys

This is perl, v5.6.1 built for msys

Copyright 1987-2001, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

/mingw/bin/gcc

Reading specs from c:/mingw/bin/../lib/gcc-lib/mingw32/3.2.3/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c++,f77,objc --disable-win32-registry --disable-shared --enable-sjlj
-exceptions
Thread model: win32
gcc version 3.2.3 (mingw special 20030504-1)

# ----------------------------------------------------------------------------

C:\cygwin>perl -e "print $^O" 
cygwin

C:\cygwin>perl -v 

This is perl, v5.8.6 built for cygwin-thread-multi-64int

Copyright 1987-2004, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

C:\cygwin>which gcc 
/usr/bin/gcc

C:\cygwin>gcc -v 

$ ./env.bat 2>&1 > des
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/specs
Configured with: /gcc/gcc-3.3.3-3/configure --verbose --prefix=/usr --exec-prefi
x=/usr --sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/s
hare/man --infodir=/usr/share/info --enable-languages=c,ada,c++,d,f77,java,objc,
pascal --enable-nls --without-included-gettext --enable-libgcj --with-system-zli
b --enable-interpreter --enable-threads=posix --enable-java-gc=boehm --enable-sj
lj-exceptions --disable-version-specific-runtime-libs --disable-win32-registry
Thread model: posix
gcc version 3.3.3 (cygwin special)

{
    my %args;
    @[EMAIL PROTECTED]@_;

    my($cc, $ccflags, $libs)=Configure::Data->get(qw(cc ccflags libs));

    # Later in the Parrot::Configure::RunSteps->runsteps process,
    # inter/progs.pl will merge the command-line overrides with the defaults.
    # We do one bit of its work early here, because we need the result now.
    $cc = $args{cc} if defined $args{cc};

    my $is_msvc  = grep { $cc eq $_ } ( qw(cl cl.exe) );
    my $is_intel = grep { $cc eq $_ } ( qw(icl icl.exe) );
    my $is_bcc   = grep { $cc eq $_ } ( qw(bcc32 bcc32.exe) );

    my $is_gcc   = grep { $cc eq $_ } ( qw(gcc gcc.exe) );
    my $is_gnu   = $is_gcc && ( lc($^O) ne 'mswin32' );     # cygwin or msys

    Configure::Data->set(
        PQ      => '"',
        make_c  => '$(PERL) -e "chdir shift @ARGV; system \'$(MAKE)\', @ARGV; exit $$? >> 8;"',
        ncilib_link_extra => '-def:src/libnci_test.def',
    );
    
    unless ( $is_gnu ) {
        Configure::Data->set(
            rm_f  => '$(PERL) -MExtUtils::Command -e rm_f',
            rm_rf => '$(PERL) -MExtUtils::Command -e rm_rf',
        );
    }

    unless ( $is_gcc ) {
        Configure::Data->set(
            share_ext  => '.dll',
            load_ext   => '.dll',
            a          => '.lib',
            o          => '.obj',

            slash      => '\\',
            cp         => 'copy',
            ar_flags => '',
        );
    }


    if( $is_msvc ) {
        # Check the output of cl.exe to see if it contains the
        # string 'Standard' and remove the -O1 option if it does.
        # This will prevent the 'optimization is not available in the
        # standard edition compiler' warning each time we compile.
        # The logo gets printed to STDERR; hence the redirection.
        my $cc_output = `$cc /? 2>&1`;
        $ccflags =~ s/-O1 // if $cc_output =~ m/Standard/ || $cc_output =~ m{/ZI};
        $ccflags =~ s/-Gf/-GF/ if $cc_output =~ m/Version (\d+)/ && $1 >= 13;


        Configure::Data->set(
            cc_o_out   => '-Fo',
            cc_exe_out => '-out:',
            cc_ldflags => '/link',
            cc_debug   => '-Zi', #ZI messes with __LINE__
            ld_debug   => '-debug',
            ld_share_flags => '-dll -def:libparrot.def',
            ld_load_flags  => '-dll -def:libparrot.def',
            ld_out     => '-out:',
            ldflags    => '-nologo -nodefaultlib',
            blib_lib_libparrot_a => 'blib/lib/libparrot_s$(A)',
            ar_out     => '-out:',
            ccflags    => $ccflags,
            ccwarn     => ''
        );
        # 'link' needs to be link.exe, not cl.exe.
        # This makes 'link' and 'ld' the same.
        Configure::Data->set('link', Configure::Data->get('ld'));

        # We can't use -opt: and -debug together.
        if (Configure::Data->get('ld_debug') =~ /-debug/) {
            my $linkflags = Configure::Data->get('linkflags');
            $linkflags =~ s/-opt:\S+//;
            Configure::Data->set('linkflags', $linkflags);
        }
    }
    elsif( $is_intel ) {
        Configure::Data->set(
            cc_o_out   => '-Fo',
            cc_exe_out => '-out:',
            cc_ldflags => '/link',
            cc_debug   => '-Zi', #ZI messes with __LINE__
            libs       => "$libs libircmt.lib",
            ld         => 'xilink',
            ld_debug   => '-debug',
            ld_share_flags  => '-dll -def:libparrot.def',
            ld_load_flags   => '-dll -def:libparrot.def',
            ld_out     => '-out:',
            ldflags    => '-nologo -nodefaultlib',
            blib_lib_libparrot_a => 'blib/lib/libparrot_s$(A)',
            ar         => 'xilib',
            ar_out     => '-out:',
            ccflags    => $ccflags,
            ccwarn     => ''
        );
        # 'link' needs to be xilink.exe, not icl.exe.
        # This makes 'link' and 'ld' the same.
        Configure::Data->set('link', Configure::Data->get('ld'));

        # We can't use -opt: and -debug together.
        if (Configure::Data->get('ld_debug') =~ /-debug/) {
            my $linkflags = Configure::Data->get('linkflags');
            $linkflags =~ s/-opt:\S+//;
            Configure::Data->set('linkflags', $linkflags);
        }
    }
    elsif( $is_bcc ) {
        Configure::Data->set(
            cc => ${cc},
            ccflags => '-O2 -w-8066 -DWIN32 -DNO_STRICT -DNDEBUG -D_CONSOLE',
            cc_o_out => '-o',
            cc_exe_out => '-e',
            cc_debug => '-v',

            ld => ${cc},
            ldflags => '',
            ld_out => '-e',
            cc_ldflags => '',
            ld_debug => '-v',
            ld_share_flags => '-WD',
            ld_load_flags => '-WD',
            libs => 'import32.lib cw32.lib',

            link => ${cc},
            linkflags => '',

            ar => 'tlib',
            ar_out => '',
            ar_extra => '/au',
            make_and => "\n\t",

            blib_lib_libparrot_a => 'blib\lib\libparrot.lib',
        );
    }
    elsif ( $is_gcc && ( lc($^O) eq 'cygwin' ) ) {
        # cygwin's perl is compiled with -lutil, which for some reason is not 
        # in the standard installation, so we get rid of it
        $libs =~ s/-lutil\b//g;

        # A note about building shared libraries:  Perl5 uses the 'ld2' tool, which
        # is installed as part of the perl5 installation.  So far, it appears
        # parrot can get by with simply using gcc -shared, so we override the
        # perl5 Configure defaults and use 'gcc -shared' instead of 'ld2'.
        # If this later causes problems, it might be worth revisiting.
        # A. Dougherty 9/9/2002
        Configure::Data->set(
          ld => 'gcc',
          ld_share_flags => '-shared',
          ld_load_flags => '-shared',
          libs => $libs,
        );

        #We need to define inet_aton on Cygwin.  The contents of the --define switch 
        # are in $_[2].
        # XXX EVIL EVIL EVIL HACK.  If you need to do this elsewhere, please do 
        # everyone a favor and write a proper interface for modifying the command-line
        # args, or even better do something to make the define interface not suck.
        unless($_[2]) {
          $_[2]='inet_aton';
        }
        elsif($_[2] !~ /inet_[ap]ton/) {
          $_[2]=join(',', 'inet_aton', $_[2]);
        }
    }
    elsif ( $is_gcc && ( lc($^O) eq 'mswin32' ) ) {
        # ActivePerl and MinGW
        $libs='' if $libs =~ /\.lib\s/i;
        Configure::Data->set(
            link      => 'gcc',
            libs      => $libs,
            
            slash     => '/',
            ar        => 'ar',
        );
    }
    elsif ( $is_gcc && ( lc($^O) eq 'msys' ) ) {
        $libs='' if $libs =~ /\.lib\s/i;
        $libs .= ' ' if $libs;
        $libs .= '/mingw/lib/libwsock32.a';
        Configure::Data->set(
            link      => 'gcc',
            libs      => $libs,

            slash     => '/',
            ar        => 'ar',

            ld        => '/bin/perl /bin/perlld',
        );
    }
}

Reply via email to