Ticket #815: step-thread-v2.patch

File step-thread-v2.patch, 13.9 KB (added by fperrad, 5 years ago)

fix --without-threads on linux

  • config/auto/thread.pm

     
     1# Copyright (C) 2009, Parrot Foundation. 
     2# $Id$ 
     3 
     4=head1 NAME 
     5 
     6config/auto/thread.pm - Thread support 
     7 
     8=head1 DESCRIPTION 
     9 
     10Determining if the system has a Thread support. 
     11 
     12=cut 
     13 
     14package auto::thread; 
     15 
     16use strict; 
     17use warnings; 
     18 
     19use base qw(Parrot::Configure::Step); 
     20 
     21use Parrot::Configure::Utils ':auto'; 
     22 
     23sub _init { 
     24    my $self = shift; 
     25    my %data; 
     26    $data{description} = q{Does your system has thread}; 
     27    $data{result}      = q{}; 
     28    return \%data; 
     29} 
     30 
     31sub runstep { 
     32    my ( $self, $conf ) = @_; 
     33 
     34    my ( $verbose, $without ) = $conf->options->get( 
     35        qw| 
     36            verbose 
     37            without-threads 
     38        | 
     39    ); 
     40 
     41    if ($without) { 
     42        $conf->data->set( HAS_THREADS => 0 ); 
     43        $self->set_result('no'); 
     44        return 1; 
     45    } 
     46 
     47    if ($conf->data->get_p5('OSNAME') eq 'MSWin32' 
     48     || $conf->data->get('i_pthread') eq 'define') { 
     49        $conf->data->set( HAS_THREADS => 1 ); 
     50        $self->set_result('yes'); 
     51    } 
     52    else { 
     53        $conf->data->set( HAS_THREADS => 0 ); 
     54        $self->set_result('no'); 
     55    } 
     56 
     57    return 1; 
     58} 
     59 
     601; 
     61 
     62# Local Variables: 
     63#   mode: cperl 
     64#   cperl-indent-level: 4 
     65#   fill-column: 100 
     66# End: 
     67# vim: expandtab shiftwidth=4: 
  • config/gen/platform/generic/threads.h

    Property changes on: config\auto\thread.pm
    ___________________________________________________________________
    Added: svn:keywords
       + Author Date Id Revision
    Added: svn:eol-style
       + native
    
     
    99 * POSIX threading stuff 
    1010 */ 
    1111 
    12 #ifdef PARROT_HAS_HEADER_PTHREAD 
     12#ifdef PARROT_HAS_THREADS 
     13 
    1314#  include "parrot/thr_pthread.h" 
    14 #endif 
    1515 
    16 #ifdef PARROT_HAS_HEADER_UNISTD 
    17 include <unistd.h> 
    18 ifdef _POSIX_PRIORITY_SCHEDULING 
    19 #    define YIELD sched_yield() 
    20 endif 
    21 #endif 
     16#  ifdef PARROT_HAS_HEADER_UNISTD 
     17  include <unistd.h> 
     18  ifdef _POSIX_PRIORITY_SCHEDULING 
     19#      define YIELD sched_yield() 
     20  endif 
     21#  endif /* PARROT_HAS_HEADER_UNISTD */ 
    2222 
     23#endif /* PARROT_HAS_THREADS */ 
     24 
    2325#endif /* PARROT_PLATFORM_GENERIC_THREADS_H_GUARD */ 
    2426 
    2527/* 
  • config/gen/platform/win32/threads.h

     
    66#ifndef PARROT_PLATFORM_WIN32_THREADS_H_GUARD 
    77#define PARROT_PLATFORM_WIN32_THREADS_H_GUARD 
    88 
    9 #include "parrot/thr_windows.h" 
     9#undef CONST 
     10#include <windows.h> 
    1011 
     12#ifdef PARROT_HAS_THREADS 
     13 
     14#  include "parrot/thr_windows.h" 
     15 
     16#endif /* PARROT_HAS_THREADS */ 
     17 
     18#undef CONST 
     19 
    1120#endif /* PARROT_PLATFORM_WIN32_THREADS_H_GUARD */ 
    1221 
    1322/* 
  • include/parrot/atomic.h

     
    1919 
    2020#  define PARROT_HAS_NATIVE_ATOMIC 1      /* we'll redefine later if need be */ 
    2121 
    22 #if (PARROT_HAS_THREADS) 
     22#ifdef PARROT_HAS_THREADS 
    2323#  if defined(PARROT_HAS_I386_GCC_CMPXCHG) 
    2424#    include "parrot/atomic/gcc_x86.h" 
    2525#  elif defined(PARROT_HAS_PPC_GCC_CMPSET) 
     
    3636    void *val; 
    3737} Parrot_atomic_pointer; 
    3838 
    39 typedef Parrot_atomic_integer { 
     39typedef struct Parrot_atomic_integer { 
    4040    INTVAL val; 
    4141} Parrot_atomic_integer; 
    4242 
    4343#  define PARROT_ATOMIC_PTR_INIT(a) 
    44 #  define PARROT_ATOMIC_PTR_GET(result, (a)) (result) = (a).val 
     44#  define PARROT_ATOMIC_PTR_GET(result, a) (result) = (a).val 
    4545#  define PARROT_ATOMIC_PTR_SET(a, b) (a).val = (b) 
    4646 
    4747/* a is the Parrot_atomic. 
     
    6565#  define PARROT_ATOMIC_PTR_DESTROY(a) 
    6666#  define PARROT_ATOMIC_INT_INIT(a) 
    6767#  define PARROT_ATOMIC_INT_DESTROY(a) 
    68 #  define PARROT_ATOMIC_INT_GET(result, (a)) (result) = (a).val 
     68#  define PARROT_ATOMIC_INT_GET(result, a) (result) = (a).val 
    6969#  define PARROT_ATOMIC_INT_SET(a, value)  (a).val = (value) 
    7070#  define PARROT_ATOMIC_INT_CAS(result, a, expect, update) \ 
    7171      do { \ 
  • include/parrot/thr_pthread.h

     
    1818 
    1919#  include <pthread.h> 
    2020 
    21 #  define PARROT_SYNC_PRIMITIVES_DEFINED 
    2221#  define LOCK(m) pthread_mutex_lock((pthread_mutex_t*)&(m)) 
    2322#  define UNLOCK(m) pthread_mutex_unlock((pthread_mutex_t*)&(m)) 
    2423#  define COND_WAIT(c, m) pthread_cond_wait(&(c), &(m)) 
  • include/parrot/thr_windows.h

     
    1313#ifndef PARROT_THR_WINDOWS_H_GUARD 
    1414#define PARROT_THR_WINDOWS_H_GUARD 
    1515 
    16 #  undef CONST 
    17 #  include <windows.h> 
    1816#  undef FASTCALL 
    1917#  include <process.h> 
    2018#  include <limits.h> 
    2119 
    22 #  define PARROT_SYNC_PRIMITIVES_DEFINED 
    23  
    2420typedef CRITICAL_SECTION Parrot_mutex; 
    2521typedef struct Windows_cond 
    2622  { 
     
    131127}; 
    132128#endif /* HAVE_STRUCT_TIMESPEC */ 
    133129 
    134 #  undef CONST 
    135  
    136130#endif /* PARROT_THR_WINDOWS_H_GUARD */ 
    137131 
    138132/* 
  • include/parrot/thread.h

     
    1414#define PARROT_THREAD_H_GUARD 
    1515 
    1616#  include "parrot/parrot.h" 
    17  
    18 #  define PARROT_HAS_THREADS 1 
    1917#  include "parrot/atomic.h" 
    2018 
    21 #ifndef PARROT_SYNC_PRIMITIVES_DEFINED 
     19#ifndef PARROT_HAS_THREADS 
    2220 
    23 #  undef  PARROT_HAS_THREADS 
    24 #  define PARROT_HAS_THREADS 0 
    25  
    2621#  define LOCK(m) 
    2722#  define UNLOCK(m) 
    2823#  define COND_WAIT(c, m) 
     
    5146 
    5247typedef void (*Cleanup_Handler)(void *); 
    5348 
    54 #  ifndef _STRUCT_TIMESPEC 
    55 #    define _STRUCT_TIMESPEC 
     49#  ifndef __timespec_defined 
     50#    define __timespec_defined 
    5651struct timespec { 
    5752    time_t tv_sec; 
    5853    long tv_nsec; 
    5954}; 
    60 #  endif /* _STRUCT_TIMESPEC */ 
     55#  endif /* __timespec_defined */ 
    6156 
    62 #endif /* PARROT_SYNC_PRIMITIVES_DEFINED */ 
     57#endif /* PARROT_HAS_THREADS */ 
    6358 
    6459#ifndef YIELD 
    6560#  define YIELD 
  • lib/Parrot/Configure/Options/Conf.pm

     
    9696   --execcapable        Use JIT to emit a native executable 
    9797   --gc=(type)          Determine the type of garbage collection 
    9898                        type=(gc|libc|malloc|malloc-trace) default is gc 
     99   --without-threads    Build parrot without thread support 
    99100 
    100101External Library Options: 
    101102 
  • lib/Parrot/Configure/Options/Conf/Shared.pm

     
    7272    without-gdbm 
    7373    without-gettext 
    7474    without-gmp 
     75    without-icu 
    7576    without-opengl 
    7677    without-pcre 
    77     without-icu 
     78    without-threads 
    7879    yacc 
    7980}; 
    8081 
  • lib/Parrot/Configure/Step/List.pm

     
    5252    auto::socklen_t 
    5353    auto::neg_0 
    5454    auto::env 
     55    auto::thread 
    5556    auto::gmp 
    5657    auto::readline 
    5758    auto::gdbm 
  • MANIFEST

     
    11# ex: set ro: 
    22# $Id$ 
    33# 
    4 # generated by tools/dev/mk_manifest_and_skip.pl Mon Jul  6 16:56:56 2009 UT 
     4# generated by tools/dev/mk_manifest_and_skip.pl Mon Jul  6 17:51:00 2009 UT 
    55# 
    66# See below for documentation on the format of this file. 
    77# 
     
    289289config/auto/snprintf.pm                                     [] 
    290290config/auto/snprintf/test_c.in                              [] 
    291291config/auto/socklen_t.pm                                    [] 
     292config/auto/thread.pm                                       [] 
    292293config/auto/va_ptr.pm                                       [] 
    293294config/auto/va_ptr/test_c.in                                [] 
    294295config/auto/warnings.pm                                     [] 
     
    19811982t/steps/auto_sizes-01.t                                     [test] 
    19821983t/steps/auto_snprintf-01.t                                  [test] 
    19831984t/steps/auto_socklen_t-01.t                                 [test] 
     1985t/steps/auto_thread-01.t                                    [test] 
    19841986t/steps/auto_va_ptr-01.t                                    [test] 
    19851987t/steps/auto_warnings-01.t                                  [test] 
    19861988t/steps/gen_call_list-01.t                                  [test] 
  • src/events.c

     
    13511351Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, ARGIN_NULLOK(opcode_t *next)) 
    13521352{ 
    13531353    ASSERT_ARGS(Parrot_sleep_on_event) 
    1354 #if PARROT_HAS_THREADS 
     1354#ifdef PARROT_HAS_THREADS 
    13551355 
    13561356    if (interp->sleeping) 
    13571357        fprintf(stderr, "nested sleep might not work\n"); 
  • src/scheduler.c

     
    10051005Parrot_cx_schedule_sleep(PARROT_INTERP, FLOATVAL time, ARGIN_NULLOK(opcode_t *next)) 
    10061006{ 
    10071007    ASSERT_ARGS(Parrot_cx_schedule_sleep) 
    1008 #if PARROT_HAS_THREADS 
     1008#ifdef PARROT_HAS_THREADS 
    10091009    Parrot_cond condition; 
    10101010    Parrot_mutex lock; 
    10111011    const FLOATVAL timer_end = time + Parrot_floatval_time(); 
  • t/pmc/threads.t

     
    77use lib qw( . lib ../lib ../../lib ); 
    88use Test::More; 
    99use Parrot::Test; 
     10use Parrot::Config; 
    1011 
    1112=head1 NAME 
    1213 
     
    2324 
    2425=cut 
    2526 
    26 my %platforms = map { $_ => 1 } qw/ 
    27     aix 
    28     cygwin 
    29     dec_osf 
    30     freebsd 
    31     hpux 
    32     irix 
    33     linux 
    34     netbsd 
    35     openbsd 
    36     solaris 
    37     MSWin32 
    38     darwin 
    39     /; 
    40  
    4127if ( $^O eq "cygwin" ) { 
    4228    my @uname = split / /, qx'uname -v'; 
    4329 
     
    4632        exit; 
    4733    } 
    4834} 
    49 if ( $platforms{$^O} ) { 
     35if ( $PConfig{HAS_THREADS} ) { 
    5036    plan tests => 14; 
    5137} 
    5238else { 
    53     plan skip_all => "No threading yet or test not enabled for '$^O'"; 
    54  
    55     # plan skip_all => "Needs COPY for argument passing"; 
     39    plan skip_all => "No threading enabled for '$^O'"; 
    5640} 
    5741 
    5842pasm_output_is( <<'CODE', <<'OUTPUT', "interp identity" ); 
  • t/pmc/timer.t

     
    77use lib qw( . lib ../lib ../../lib ); 
    88use Test::More; 
    99use Parrot::Test tests => 6; 
     10use Parrot::Config; 
    1011 
    1112=head1 NAME 
    1213 
     
    2425 
    2526$ENV{TEST_PROG_ARGS} ||= ''; 
    2627 
    27 my %platforms = map { $_ => 1 } qw/ 
    28     aix 
    29     cygwin 
    30     darwin 
    31     dec_osf 
    32     freebsd 
    33     hpux 
    34     irix 
    35     linux 
    36     openbsd 
    37     MSWin32 
    38 /; 
    39  
    4028pasm_output_is( <<'CODE', <<'OUT', "Timer setup" ); 
    4129.include "timer.pasm" 
    4230    new P0, ['Timer'] 
     
    10088OUT 
    10189 
    10290SKIP: { 
    103     skip( "No thread config yet", 3 ) unless ( $platforms{$^O} ); 
     91    skip( "No thread enabled", 3 ) unless ( $PConfig{HAS_THREADS} ); 
    10492 
    10593    pasm_output_like( <<'CODE', <<'OUT', "Timer setup - initializer/start" ); 
    10694.include "timer.pasm" 
  • t/steps/auto_thread-01.t

     
     1#! perl 
     2# Copyright (C) 2009, Parrot Foundation. 
     3# $Id$ 
     4 
     5use strict; 
     6use warnings; 
     7use Test::More tests => 8; 
     8use Carp; 
     9use lib qw( lib t/configure/testlib ); 
     10use_ok('config::auto::thread'); 
     11use Parrot::Configure; 
     12use Parrot::Configure::Options qw( process_options ); 
     13use Parrot::Configure::Test qw( 
     14    test_step_thru_runstep 
     15    rerun_defaults_for_testing 
     16    test_step_constructor_and_description 
     17); 
     18use IO::CaptureOutput qw( capture ); 
     19 
     20########## --without-threads ########## 
     21 
     22my ($args, $step_list_ref) = process_options( 
     23    { 
     24        argv => [ q{--without-threads} ], 
     25        mode => q{configure}, 
     26    } 
     27); 
     28 
     29my $conf = Parrot::Configure->new; 
     30 
     31my $pkg = q{auto::thread}; 
     32 
     33$conf->add_steps($pkg); 
     34 
     35my $serialized = $conf->pcfreeze(); 
     36 
     37$conf->options->set( %{$args} ); 
     38my $step = test_step_constructor_and_description($conf); 
     39my $ret = $step->runstep($conf); 
     40ok( $ret, "runstep() returned true value" ); 
     41is($conf->data->get('HAS_THREADS'), 0, 
     42    "Got expected value for 'HAS_THREADS'"); 
     43is($step->result(), q{no}, "Expected result was set"); 
     44 
     45$conf->replenish($serialized); 
     46 
     47pass("Completed all tests in $0"); 
     48 
     49################### DOCUMENTATION ################### 
     50 
     51=head1 NAME 
     52 
     53auto_thread-01.t - test auto::thread 
     54 
     55=head1 SYNOPSIS 
     56 
     57    % prove t/steps/auto_thread-01.t 
     58 
     59=head1 DESCRIPTION 
     60 
     61The files in this directory test functionality used by F<Configure.pl>. 
     62 
     63The tests in this file test auto::thread. 
     64 
     65=head1 HISTORY 
     66 
     67Mostly taken from F<t/steps/auto_gdbm-01.t>. 
     68 
     69=head1 AUTHOR 
     70 
     71Francois Perrad 
     72 
     73=head1 SEE ALSO 
     74 
     75config::auto::thread, F<Configure.pl>. 
     76 
     77=cut 
     78 
     79# Local Variables: 
     80#   mode: cperl 
     81#   cperl-indent-level: 4 
     82#   fill-column: 100 
     83# End: 
     84# vim: expandtab shiftwidth=4: