Merge branch 'master' of pltgit:plt
This commit is contained in:
commit
2b3386776c
|
@ -32,7 +32,8 @@ launching an external browser (such as Firefox).
|
|||
|
||||
@section[#:tag "browser"]{Browser}
|
||||
|
||||
@defmodule[browser]
|
||||
@defmodule*/no-declare[(browser)]
|
||||
@declare-exporting[browser/browser browser]
|
||||
|
||||
The browser supports basic HTML commands, plus special Racket hyperlinks
|
||||
of the form @litchar{<A MZSCHEME=sexpr>...</A>}. When the user clicks
|
||||
|
@ -99,12 +100,7 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
|
|||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defmixin[hyper-frame-mixin (frame%) ()]{
|
||||
|
||||
@defconstructor/auto-super[([url (or/c url? string? input-port?)])]{
|
||||
Shows the frame and visits @racket[url].
|
||||
}
|
||||
|
||||
@definterface[hyper-frame<%> ()]{
|
||||
@defmethod[(get-hyper-panel%) (subclass?/c panel%)]{
|
||||
Returns the class that is instantiated when the frame is created.
|
||||
Must be a panel with hyper-panel-mixin mixed in. Defaults to just
|
||||
|
@ -118,6 +114,16 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
|
|||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defmixin[hyper-frame-mixin (frame%) (hyper-frame<%>)]{
|
||||
|
||||
@defconstructor/auto-super[([url (or/c url? string? input-port?)])]{
|
||||
Shows the frame and visits @racket[url].
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defclass[hyper-no-show-frame%
|
||||
(hyper-frame-mixin (frame:status-line-mixin frame:basic%))
|
||||
()]
|
||||
|
@ -137,7 +143,15 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
|
|||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defmixin[hyper-text-mixin (text%) ()]{
|
||||
@definterface[hyper-text<%> ()]{
|
||||
@defmethod[(url-allows-evalling? [url (or/c port? url?)]) boolean?]{
|
||||
Determines if @litchar{MZSCHEME} annotations are actually evaluated,
|
||||
for a given url.
|
||||
}
|
||||
}
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defmixin[hyper-text-mixin (text%) (hyper-text<%>)]{
|
||||
|
||||
An instance of a @racket[hyper-text-mixin]-extended class should be
|
||||
displayed only in an instance of a class created with
|
||||
|
@ -257,6 +271,9 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
|
|||
|
||||
}
|
||||
|
||||
@defclass[hyper-canvas% (hyper-canvas-mixin canvas:basic%) ()]{}
|
||||
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defclass[hyper-text% (hyper-text-mixin text:keymap%) ()]{
|
||||
|
@ -328,7 +345,12 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
|
|||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defmixin[hyper-panel-mixin (area-container<%>) ()]{
|
||||
@definterface[hyper-panel<%> ()]{
|
||||
}
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@defmixin[hyper-panel-mixin (area-container<%>) (hyper-panel<%>)]{
|
||||
|
||||
@defconstructor/auto-super[([info-line? any/c])]{
|
||||
Creates controls and a hyper text canvas. The controls permit a
|
||||
|
@ -442,6 +464,16 @@ The @litchar{MZSCHEME} forms are disabled unless the web page is a
|
|||
}
|
||||
}
|
||||
|
||||
@defstruct[(exn:cancelled exn) ()]{
|
||||
This exception may be raised by the
|
||||
@method[hyper-text-mixin reload] method.
|
||||
}
|
||||
|
||||
@defstruct[(exn:file-saved-instead exn) ([pathname path-string?])]{
|
||||
This exception may be raised by the
|
||||
@method[hyper-text-mixin reload] method.
|
||||
}
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@section[#:tag "browser-unit"]{Browser Unit}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
(check-docs (quote browser))
|
||||
(check-docs (quote browser/htmltext))
|
||||
(check-docs (quote browser/external))
|
||||
(check-docs (quote browser/bullet-snip))
|
||||
(check-docs (quote browser/bullet-snip) #:skip '(snip-class))
|
||||
(check-docs (quote browser/browser))
|
||||
(check-docs (quote browser/browser-unit))
|
||||
(check-docs (quote browser/browser-sig))
|
||||
|
|
|
@ -201,9 +201,11 @@
|
|||
(define (compile-directory dir info
|
||||
#:verbose [verbose? #t]
|
||||
#:skip-path [orig-skip-path #f]
|
||||
#:skip-doc-sources? [skip-docs? #f])
|
||||
#:skip-doc-sources? [skip-docs? #f]
|
||||
#:managed-compile-zo [managed-compile-zo
|
||||
(make-caching-managed-compile-zo)])
|
||||
(define (worker prev sses)
|
||||
(for-each (make-caching-managed-compile-zo) sses))
|
||||
(for-each managed-compile-zo sses))
|
||||
(compile-directory-visitor dir info worker
|
||||
#:verbose verbose?
|
||||
#:skip-path orig-skip-path
|
||||
|
@ -212,21 +214,27 @@
|
|||
(define (get-compile-directory-srcs dir info
|
||||
#:verbose [verbose? #t]
|
||||
#:skip-path [orig-skip-path #f]
|
||||
#:skip-doc-sources? [skip-docs? #f])
|
||||
#:skip-doc-sources? [skip-docs? #f]
|
||||
#:managed-compile-zo [managed-compile-zo
|
||||
(make-caching-managed-compile-zo)])
|
||||
(compile-directory-visitor dir info append
|
||||
#:verbose verbose?
|
||||
#:skip-path orig-skip-path
|
||||
#:skip-doc-sources? skip-docs?))
|
||||
#:skip-doc-sources? skip-docs?
|
||||
#:managed-compile-zo managed-compile-zo))
|
||||
|
||||
(define (compile-collection-zos collection
|
||||
#:skip-path [skip-path #f]
|
||||
#:skip-doc-sources? [skip-docs? #f]
|
||||
#:managed-compile-zo [managed-compile-zo
|
||||
(make-caching-managed-compile-zo)]
|
||||
. cp)
|
||||
(compile-directory (apply collection-path collection cp)
|
||||
(c-get-info (cons collection cp))
|
||||
#:verbose #f
|
||||
#:skip-path skip-path
|
||||
#:skip-doc-sources? skip-docs?))
|
||||
#:skip-doc-sources? skip-docs?
|
||||
#:managed-compile-zo managed-compile-zo))
|
||||
|
||||
(define compile-directory-zos compile-directory)
|
||||
(define compile-directory-srcs get-compile-directory-srcs)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
#lang racket/base
|
||||
(require tests/utils/docs-complete)
|
||||
(check-docs (quote datalog/stx))
|
||||
(check-docs (quote datalog/runtime))
|
||||
(check-docs (quote datalog/pretty))
|
||||
(check-docs (quote datalog/parse))
|
||||
(check-docs (quote datalog))
|
||||
(check-docs (quote datalog/eval))
|
||||
(check-docs (quote datalog/ast))
|
|
@ -1,10 +1,7 @@
|
|||
#lang racket/base
|
||||
(require tests/utils/docs-complete)
|
||||
(check-docs (quote frtime/struct))
|
||||
(check-docs (quote frtime/reactive))
|
||||
(check-docs (quote frtime))
|
||||
(check-docs (quote frtime/gui))
|
||||
(check-docs (quote frtime/frtime))
|
||||
(check-docs (quote frtime/frtime-big))
|
||||
(check-docs (quote frtime/frp-snip))
|
||||
(check-docs (quote frtime/gui/fred))
|
||||
(check-docs (quote frtime/gui))
|
||||
(check-docs (quote frtime/animation))
|
||||
(check-docs (quote frtime/frlibs/math))
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
#lang scribble/doc
|
||||
@(require scribble/manual
|
||||
scribble/eval
|
||||
(for-label html)
|
||||
(for-label xml))
|
||||
(for-label html
|
||||
xml
|
||||
racket/contract))
|
||||
|
||||
@(define xexpr @tech[#:doc '(lib "xml/xml.scrbl")]{X-expression})
|
||||
|
||||
|
@ -64,7 +65,7 @@ Reads HTML from a port, producing an @xexpr compatible with the
|
|||
"<p>Hello world</p><p><b>Testing</b>!</p>"
|
||||
"</body></html>"))))
|
||||
|
||||
(code:comment @#,t{extract-pcdata: html-content -> (listof string)})
|
||||
(code:comment @#,t{extract-pcdata: html-content/c -> (listof string)})
|
||||
(code:comment @#,t{Pulls out the pcdata strings from some-content.})
|
||||
(define (extract-pcdata some-content)
|
||||
(cond [(x:pcdata? some-content)
|
||||
|
@ -95,21 +96,24 @@ Reads HTML from a port, producing an @xexpr compatible with the
|
|||
@racket[pcdata], @racket[entity], and @racket[attribute] are defined
|
||||
in the @racketmodname[xml] documentation.
|
||||
|
||||
A @racket[html-content] is either
|
||||
@defthing[html-content/c contract?]{
|
||||
A @racket[html-content/c] is either
|
||||
@itemize[
|
||||
@item[@racket[html-element]]
|
||||
@item[@racket[pcdata]]
|
||||
@item[@racket[entity]]]
|
||||
|
||||
}
|
||||
|
||||
@defstruct[html-element ([attributes (listof attribute)])]{
|
||||
Any of the structures below inherits from @racket[html-element].}
|
||||
|
||||
@defstruct[(html-full struct:html-element) ([content (listof html-content)])]{
|
||||
@defstruct[(html-full struct:html-element) ([content (listof html-content/c)])]{
|
||||
Any html tag that may include content also inherits from
|
||||
@racket[html-full] without adding any additional fields.}
|
||||
|
||||
|
||||
@defstruct[(mzscheme html-full) ()]{
|
||||
A @racket[mzscheme] is special legacy value for the old documentation system.
|
||||
}
|
||||
|
||||
@defstruct[(html html-full) ()]{
|
||||
A @racket[html] is
|
||||
|
@ -671,9 +675,9 @@ A @racket[Contents-of-object-applet] is either
|
|||
]
|
||||
|
||||
|
||||
@defstruct[(map html-full) ()]{
|
||||
@defstruct[(-map html-full) ()]{
|
||||
A Map is
|
||||
@racket[(make-map (listof attribute) (listof Contents-of-map))]
|
||||
@racket[(make--map (listof attribute) (listof Contents-of-map))]
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#lang racket/base
|
||||
(require tests/utils/docs-complete)
|
||||
(check-docs (quote html/sgml-reader))
|
||||
(check-docs (quote html))
|
||||
(check-docs (quote html/html))
|
||||
(check-docs (quote html/html-structs))
|
||||
(check-docs (quote html/html-spec))
|
|
@ -40,7 +40,7 @@
|
|||
check-error
|
||||
check-member-of
|
||||
check-range
|
||||
define-wish
|
||||
;; define-wish
|
||||
#%datum
|
||||
#%top-interaction
|
||||
empty true false
|
||||
|
|
|
@ -1566,7 +1566,7 @@ path/s is either such a string or a list of them.
|
|||
"collects/tests/racket/benchmarks/common/mk-gambit.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/benchmarks/common/r5rs-wrap.rktl" drdr:command-line (racket "-f" *)
|
||||
"collects/tests/racket/benchmarks/common/typed" responsible (stamourv)
|
||||
"collects/tests/racket/benchmarks/common/typed/cpstack.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/benchmarks/common/typed/cpstak.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/benchmarks/common/typed/ctak.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/benchmarks/common/typed/dderiv.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/benchmarks/common/typed/deriv.rktl" drdr:command-line #f
|
||||
|
@ -1822,7 +1822,7 @@ path/s is either such a string or a list of them.
|
|||
"collects/tests/racket/path.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/pathlib.rktl" drdr:command-line (racket "-f" *)
|
||||
"collects/tests/racket/pconvert.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/place-channel.rktl" responsible (tewk) drdr:command-line (racket "-f" *)
|
||||
"collects/tests/racket/place-channel.rkt" responsible (tewk) drdr:command-line (racket "-tm" *)
|
||||
"collects/tests/racket/place.rktl" responsible (tewk) drdr:command-line (racket "-f" *)
|
||||
"collects/tests/racket/port.rktl" drdr:command-line #f
|
||||
"collects/tests/racket/portlib.rktl" drdr:command-line #f
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
(check-docs (quote plai/web))
|
||||
(check-docs (quote plai/test-harness))
|
||||
(check-docs (quote plai/random-mutator))
|
||||
(check-docs (quote plai/mutator))
|
||||
(check-docs (quote plai/mutator) #:skip #rx"^#%")
|
||||
(check-docs (quote plai))
|
||||
(check-docs (quote plai/datatype))
|
||||
(check-docs (quote plai/collector))
|
||||
|
|
|
@ -517,7 +517,10 @@ Various common pieces of code that both the client and server need to access
|
|||
(close-input-port in)
|
||||
(when outport (close-output-port outport))]
|
||||
[else
|
||||
(when outport (display l outport))
|
||||
(when outport
|
||||
(display l outport)
|
||||
(newline outport)
|
||||
(flush-output outport))
|
||||
(planet-log l)
|
||||
(loop)]))))))
|
||||
(begin0
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
'#%place-struct
|
||||
racket/fixnum
|
||||
racket/flonum
|
||||
racket/vector)
|
||||
racket/vector
|
||||
(for-syntax racket/base))
|
||||
|
||||
(provide place
|
||||
place-sleep
|
||||
|
@ -19,6 +20,9 @@
|
|||
place?
|
||||
place-channel-send/receive
|
||||
processor-count
|
||||
place/anon
|
||||
place/thunk
|
||||
define-place
|
||||
(rename-out [pl-place-enabled? place-enabled?]))
|
||||
|
||||
(define-struct TH-place (th ch cust)
|
||||
|
@ -59,6 +63,7 @@
|
|||
(define (th-place-sleep n) (sleep n))
|
||||
(define (th-place-wait pl) (thread-wait (TH-place-th pl)) 0)
|
||||
(define (th-place-kill pl) (custodian-shutdown-all (TH-place-cust pl)))
|
||||
(define (th-place-break pl) (break-thread (TH-place-th pl)))
|
||||
(define (th-place-channel)
|
||||
(define-values (as ar) (make-th-async-channel))
|
||||
(define-values (bs br) (make-th-async-channel))
|
||||
|
@ -117,8 +122,39 @@
|
|||
(define-pl place-sleep pl-place-sleep th-place-sleep)
|
||||
(define-pl place-wait pl-place-wait th-place-wait)
|
||||
(define-pl place-kill pl-place-kill th-place-kill)
|
||||
(define-pl place-break pl-place-break th-place-break)
|
||||
(define-pl place-channel pl-place-channel th-place-channel)
|
||||
(define-pl place-channel-send pl-place-channel-send th-place-channel-send)
|
||||
(define-pl place-channel-receive pl-place-channel-receive th-place-channel-receive)
|
||||
(define-pl place-channel? pl-place-channel? th-place-channel?)
|
||||
(define-pl place? pl-place? TH-place?)
|
||||
|
||||
(define-syntax-rule (define-syntax-case (N a ...) b ...)
|
||||
(define-syntax (N stx)
|
||||
(syntax-case stx ()
|
||||
[(_ a ...) b ...])))
|
||||
|
||||
(define-for-syntax (gen-create-place stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch body ...)
|
||||
(with-syntax ([interal-def-name
|
||||
(syntax-local-lift-expression #'(lambda (ch) body ...))]
|
||||
[funcname #'OBSCURE_FUNC_NAME_%#%])
|
||||
(syntax-local-lift-provide #'(rename interal-def-name funcname))
|
||||
#'(let ([module-path (resolved-module-path-name
|
||||
(variable-reference->resolved-module-path
|
||||
(#%variable-reference)))])
|
||||
(place module-path (quote funcname))))]))
|
||||
|
||||
(define-syntax (place/thunk stx)
|
||||
(with-syntax ([create-place (gen-create-place stx)])
|
||||
#'(lambda () create-place)))
|
||||
|
||||
(define-syntax (place/anon stx)
|
||||
(gen-create-place stx))
|
||||
|
||||
|
||||
(define-syntax (define-place stx)
|
||||
(syntax-case stx ()
|
||||
[(_ (name ch) body ...)
|
||||
#'(define name (place/thunk ch body ...))]))
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
@title[#:tag "quick-start"]{Quick Start Guide for RackUnit}
|
||||
|
||||
Suppose we have code contained in @tt{file.rkt}, which
|
||||
implements buggy versions of @racket[+] and @racket[-]
|
||||
called @racket[my-+] and @racket[my--]:
|
||||
implements buggy versions of @racket[+] and @racket[*]
|
||||
called @racket[my-+] and @racket[my-*]:
|
||||
|
||||
@racketmod[
|
||||
racket/base
|
||||
|
|
|
@ -12,17 +12,17 @@
|
|||
(get-token (or/c (-> input-port?
|
||||
(values any/c
|
||||
symbol?
|
||||
(or/c false? symbol?)
|
||||
exact-nonnegative-integer?
|
||||
exact-nonnegative-integer?))
|
||||
(or/c symbol? #f)
|
||||
(or/c exact-nonnegative-integer? #f)
|
||||
(or/c exact-nonnegative-integer? #f)))
|
||||
(-> input-port?
|
||||
exact-nonnegative-integer?
|
||||
any/c
|
||||
(values any/c
|
||||
symbol?
|
||||
(or/c false? symbol?)
|
||||
exact-nonnegative-integer?
|
||||
exact-nonnegative-integer?
|
||||
(or/c symbol? #f)
|
||||
(or/c exact-nonnegative-integer? #f)
|
||||
(or/c exact-nonnegative-integer? #f)
|
||||
exact-nonnegative-integer?
|
||||
any/c))))
|
||||
(pairs (listof (list/c symbol? symbol?)))) void?))]{
|
||||
|
@ -50,9 +50,9 @@
|
|||
A symbol indicating how the token should be treated by the paren
|
||||
matcher or @scheme[#f]. This symbol should be in the pairs argument.}
|
||||
@item{
|
||||
The starting position of the token.}
|
||||
The starting position of the token (or @scheme[#f] if eof).}
|
||||
@item{
|
||||
The ending position of the token.}]
|
||||
The ending position of the token (or @scheme[#f] if eof).}]
|
||||
|
||||
When @scheme[get-token] accepts an offset and mode value in addition to an
|
||||
input port, it must also return two extra results, which are a backup
|
||||
|
|
|
@ -111,7 +111,7 @@ extraction, and type-like queries:
|
|||
The created names must not be the same as a primitive or another defined name.}
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@;{ ------- COMMENTED OUT FOR NOW ---------
|
||||
@section{@scheme[define-wish]}
|
||||
|
||||
@defform[(define-wish id)]{
|
||||
|
@ -127,7 +127,7 @@ Wished-for functions are reported in the test report for the current program.}
|
|||
Similar to the above form, defines a wished-for function named @racket[id]. If the
|
||||
wished-for function is called with one value, the result of @scheme[expr] is
|
||||
returned as the default value. }
|
||||
|
||||
}
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@section[#:tag "beginner-call"]{Function Calls}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
compiler/option
|
||||
compiler/option-unit
|
||||
compiler/comp-unit
|
||||
compiler/cm
|
||||
dynext/compile-sig
|
||||
dynext/link-sig
|
||||
dynext/file-sig
|
||||
|
@ -70,15 +71,21 @@ file is reported through the current output port.}
|
|||
|
||||
@defproc[(compile-collection-zos [collection string?] ...+
|
||||
[#:skip-path skip-path (or/c path-string? #f) #f]
|
||||
[#:skip-doc-sources? skip-docs? any/c #f])
|
||||
[#:skip-doc-sources? skip-docs? any/c #f]
|
||||
[#:managed-compile-zo managed-compile-zo
|
||||
(path-string? . -> . void?)
|
||||
(make-caching-managed-compile-zo)])
|
||||
void?]{
|
||||
|
||||
Compiles the specified collection's files to @filepath{.zo} files.
|
||||
Compiles the specified collection's files to @filepath{.zo} files
|
||||
by using @racket[managed-compile-zo] on each source file.
|
||||
The @filepath{.zo} files are placed into the collection's
|
||||
@filepath{compiled} directory. By default, all files with the
|
||||
@filepath{compiled} directory.
|
||||
|
||||
By default, all files with the
|
||||
extension @filepath{.rkt}, @filepath{.ss}, or @filepath{.scm} in a collection are
|
||||
compiled, as are all such files within subdirectories, execept that
|
||||
any file or directory whose path starts with @scheme[racket-path] is
|
||||
any file or directory whose path starts with @scheme[skip-path] is
|
||||
skipped. (``Starts with'' means that the simplified path @scheme[_p]'s
|
||||
byte-string form after @scheme[(simplify-path _p #f)]starts with the
|
||||
byte-string form of @scheme[(simplify-path skip-path #f)].)
|
||||
|
@ -118,17 +125,17 @@ collection. The following fields are used:
|
|||
unless the provided @scheme[skip-docs?] argument is a true
|
||||
value.}
|
||||
|
||||
]
|
||||
|
||||
The compilation process for an individual file is driven by
|
||||
@scheme[managed-compile-zo] from @schememodname[compiler/cm].}
|
||||
]}
|
||||
|
||||
|
||||
@defproc[(compile-directory-zos [path path-string?]
|
||||
[info ()]
|
||||
[#:verbose verbose? any/c #f]
|
||||
[#:skip-path skip-path (or/c path-string? #f) #f]
|
||||
[#:skip-doc-sources? skip-docs? any/c #f])
|
||||
[#:skip-doc-sources? skip-docs? any/c #f]
|
||||
[#:managed-compile-zo managed-compile-zo
|
||||
(path-string? . -> . void?)
|
||||
(make-caching-managed-compile-zo)])
|
||||
void?]{
|
||||
|
||||
Like @scheme[compile-collection-zos], but compiles the given directory
|
||||
|
|
|
@ -39,9 +39,9 @@ Returns @racket[#t] if @racket[v] is a weak box, @racket[#f] otherwise.}
|
|||
|
||||
An @deftech{ephemeron} @cite{Hayes97} is a generalization of a
|
||||
@tech{weak box} (see @secref["weakbox"]). Instead of just containing
|
||||
one value, an emphemeron holds two values: one that is considered the
|
||||
one value, an ephemeron holds two values: one that is considered the
|
||||
value of the ephemeron and another that is the ephemeron's key. Like
|
||||
the value in a weak box, the value in and ephemeron may be replaced by
|
||||
the value in a weak box, the value in an ephemeron may be replaced by
|
||||
@racket[#f], but when the @emph{key} is no longer reachable (except
|
||||
possibly via weak references) instead of when the value is no longer
|
||||
reachable.
|
||||
|
|
|
@ -18,9 +18,11 @@
|
|||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
||||
@margin-note{Parallel support for @racket[place] is currently disabled by
|
||||
default. Enable places by supplying @DFlag{enable-places} to
|
||||
@exec{configure} when building Racket.}
|
||||
@margin-note{Currently, parallel support for @racket[place] is enabled
|
||||
only for Racket 3m (which is the main variant of Racket), and only
|
||||
by default for Windows, Linux x86/x86_64, and Mac OS X x86/x86_64. To
|
||||
enable support for other platforms, use @DFlag{enable-places} with
|
||||
@exec{configure} when building Racket.}
|
||||
|
||||
@note-lib[racket/place]
|
||||
|
||||
|
@ -117,6 +119,32 @@ racket
|
|||
blocking until the place completes if it has not already completed.
|
||||
}
|
||||
|
||||
@defproc[(place-break [p place?]) void?]{
|
||||
Sends place @racket[p] a break signal; see @secref["breakhandler"].
|
||||
}
|
||||
|
||||
@defproc[(place-kill [p place?]) void?]{
|
||||
Terminates the place indicated by @racket[p],
|
||||
}
|
||||
|
||||
|
||||
@defform[(place/thunk place-channel? body ...)]{
|
||||
In-line definition of a place worker body, which is lifted up to module scope.
|
||||
@racket[place/thunk] closes over only module scope variables.
|
||||
Returns a thunk for creating the described place.
|
||||
}
|
||||
|
||||
@defform[(place/anon place-channel? body ...)]{
|
||||
In-line definition of a place worker body, which is lifted up to module scope.
|
||||
@racket[place/anon] closes over only module scope variables.
|
||||
Returns the place descriptor for the newly constructed place.
|
||||
}
|
||||
|
||||
@defform[(define-place (place-name-id place-channel-id) body ...)]{
|
||||
In-line definition of a place worker body, which is lifted up to module scope.
|
||||
@racket[define-place] closes over only module scope variables.
|
||||
Defines a procedure for creating the described place.
|
||||
}
|
||||
|
||||
@defproc[(place-channel) (values place-channel? place-channel?)]{
|
||||
|
||||
|
|
|
@ -82,14 +82,14 @@
|
|||
(define/public (send/msg msg)
|
||||
(with-handlers ([exn:fail?
|
||||
(lambda (x)
|
||||
(eprintf "CONTROLLER SEND MESSAGE ERROR TO WORKER ~a ~a\n" id (exn-message x))
|
||||
(eprintf "While sending message to parallel-do worker: ~a ~a\n" id (exn-message x))
|
||||
(exit 1))])
|
||||
(DEBUG_COMM (eprintf "CSENDING ~v ~v\n" id msg))
|
||||
(write msg in) (flush-output in)))
|
||||
(define/public (recv/msg)
|
||||
(with-handlers ([exn:fail?
|
||||
(lambda (x)
|
||||
(eprintf "CONTROLLER RECEIVE MESSAGE ERROR FROM WORKER ~a ~a\n" id (exn-message x))
|
||||
(eprintf "While receiving message from parallel-do worker ~a ~a\n" id (exn-message x))
|
||||
(exit 1))])
|
||||
(define r (read out))
|
||||
(DEBUG_COMM (eprintf "CRECEIVNG ~v ~v\n" id r))
|
||||
|
@ -177,6 +177,7 @@
|
|||
(define (jobs?) (queue/has jobqueue))
|
||||
(define (empty?) (not (queue/has jobqueue)))
|
||||
(define workers #f)
|
||||
(define no-breaks #f)
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(parameterize-break #f
|
||||
|
@ -206,7 +207,7 @@
|
|||
[error-count error-count])
|
||||
(error-threshold error-count)
|
||||
(with-handlers* ([exn:fail? (lambda (e)
|
||||
(printf "MASTER WRITE ERROR - writing to worker: ~v ~a\n" (wrkr/id wrkr) (exn-message e))
|
||||
(printf "Error writing to worker: ~v ~a\n" (wrkr/id wrkr) (exn-message e))
|
||||
(wrkr/kill wrkr)
|
||||
(retry-loop (spawn (wrkr/id wrkr)) (add1 error-count)))])
|
||||
(wrkr/send wrkr cmd-list))
|
||||
|
@ -224,7 +225,7 @@
|
|||
[(list node wrkr)
|
||||
(handle-evt (wrkr/out wrkr) (λ (e)
|
||||
(with-handlers* ([exn:fail? (lambda (e)
|
||||
(printf "MASTER READ ERROR - reading from worker: ~v ~a\n" (wrkr/id wrkr) (exn-message e))
|
||||
(printf "Error reading from worker: ~v ~a\n" (wrkr/id wrkr) (exn-message e))
|
||||
(kill/remove-dead-worker node-worker wrkr))])
|
||||
(let ([msg (if use-places e (wrkr/recv wrkr))])
|
||||
(if (pair? msg)
|
||||
|
@ -238,7 +239,9 @@
|
|||
(eprintf "parallel-do-event-loop match node-worker failed.\n")
|
||||
(eprintf "trying to match:\n~a\n" node-worker)]))
|
||||
(DEBUG_COMM (printf "WAITING ON WORKERS TO RESPOND\n"))
|
||||
(apply sync (map gen-node-handler inflight))])))
|
||||
(begin0
|
||||
(apply sync (map gen-node-handler inflight))
|
||||
(set! no-breaks #t))])))
|
||||
(lambda ()
|
||||
;(printf "Asking all workers to die\n")
|
||||
(for ([p workers]) (with-handlers ([exn:fail? void]) (wrkr/send p (list 'DIE))))
|
||||
|
@ -368,28 +371,3 @@
|
|||
(define module-path (path->string (resolved-module-path-name (variable-reference->resolved-module-path (#%variable-reference)))))
|
||||
(parallel-do-event-loop module-path 'name initalmsg wq worker-count)
|
||||
(queue/results wq))]))
|
||||
|
||||
(define-syntax-rule (define-syntax-case (N a ...) b ...)
|
||||
(define-syntax (N stx)
|
||||
(syntax-case stx ()
|
||||
[(_ a ...) b ...])))
|
||||
|
||||
(define-for-syntax (gen-create-place stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch body ...)
|
||||
(with-syntax ([interal-def-name
|
||||
(syntax-local-lift-expression #'(lambda (ch) body ...))]
|
||||
[funcname #'OBSCURE_FUNC_NAME_%#%])
|
||||
(syntax-local-lift-provide #'(rename interal-def-name funcname))
|
||||
#'(let ([module-path (resolved-module-path-name
|
||||
(variable-reference->resolved-module-path
|
||||
(#%variable-reference)))])
|
||||
(place module-path (quote funcname))))]))
|
||||
|
||||
(define-syntax (place/thunk stx)
|
||||
(with-syntax ([create-place (gen-create-place stx)])
|
||||
#'(lambda () create-place)))
|
||||
|
||||
(define-syntax (place/anon stx)
|
||||
(gen-create-place stx))
|
||||
|
||||
|
|
|
@ -124,7 +124,6 @@
|
|||
(when (not (zero? (string-length err))) (eprintf "STDERR:\n~a=====\n" err)))))
|
||||
|
||||
(define (done)
|
||||
(setup-printf #f "done")
|
||||
(unless (null? errors)
|
||||
(setup-printf #f "")
|
||||
(show-errors (current-error-port))
|
||||
|
@ -639,6 +638,11 @@
|
|||
(thunk)))])
|
||||
(thunk))))))
|
||||
|
||||
;; We keep timestamp information for all files that we try to compile.
|
||||
;; That's O(N) for an installation of size N, but the constant is small,
|
||||
;; and it makes a do-nothing setup complete much faster.
|
||||
(define caching-managed-compile-zo (make-caching-managed-compile-zo))
|
||||
|
||||
(define (compile-cc cc gcs)
|
||||
(parameterize ([current-namespace (make-base-empty-namespace)])
|
||||
(begin-record-error cc "making"
|
||||
|
@ -651,6 +655,7 @@
|
|||
[info (cc-info cc)])
|
||||
(clean-cc dir info)
|
||||
(compile-directory-zos dir info
|
||||
#:managed-compile-zo caching-managed-compile-zo
|
||||
#:skip-path (and (avoid-main-installation) (find-collects-dir))
|
||||
#:skip-doc-sources? (not (make-docs)))))))
|
||||
(match gcs
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#lang scheme/base
|
||||
(require "string-constant.ss")
|
||||
(provide (all-from-out "string-constant.ss"))
|
||||
#lang racket/base
|
||||
(require "string-constant.rkt")
|
||||
(provide (all-from-out "string-constant.rkt"))
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
(require (for-syntax racket/base)
|
||||
(for-syntax mzlib/etc)
|
||||
(for-syntax mzlib/list)
|
||||
(for-syntax (prefix-in english: "english-string-constants.rkt"))
|
||||
(for-syntax (prefix-in spanish: "spanish-string-constants.rkt"))
|
||||
(for-syntax (prefix-in german: "german-string-constants.rkt"))
|
||||
(for-syntax (prefix-in french: "french-string-constants.rkt"))
|
||||
(for-syntax (prefix-in dutch: "dutch-string-constants.rkt"))
|
||||
(for-syntax (prefix-in danish: "danish-string-constants.rkt"))
|
||||
(for-syntax (prefix-in portuguese: "portuguese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in japanese: "japanese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in traditional-chinese: "traditional-chinese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in simplified-chinese: "simplified-chinese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in russian: "russian-string-constants.rkt"))
|
||||
(for-syntax (prefix-in ukrainian: "ukrainian-string-constants.rkt"))
|
||||
(for-syntax (prefix-in korean: "korean-string-constants.rkt")))
|
||||
(for-syntax (prefix-in english: "private/english-string-constants.rkt"))
|
||||
(for-syntax (prefix-in spanish: "private/spanish-string-constants.rkt"))
|
||||
(for-syntax (prefix-in german: "private/german-string-constants.rkt"))
|
||||
(for-syntax (prefix-in french: "private/french-string-constants.rkt"))
|
||||
(for-syntax (prefix-in dutch: "private/dutch-string-constants.rkt"))
|
||||
(for-syntax (prefix-in danish: "private/danish-string-constants.rkt"))
|
||||
(for-syntax (prefix-in portuguese: "private/portuguese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in japanese: "private/japanese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in traditional-chinese: "private/traditional-chinese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in simplified-chinese: "private/simplified-chinese-string-constants.rkt"))
|
||||
(for-syntax (prefix-in russian: "private/russian-string-constants.rkt"))
|
||||
(for-syntax (prefix-in ukrainian: "private/ukrainian-string-constants.rkt"))
|
||||
(for-syntax (prefix-in korean: "private/korean-string-constants.rkt")))
|
||||
|
||||
(require mzlib/file
|
||||
mzlib/etc
|
||||
|
@ -243,12 +243,3 @@
|
|||
(map sc-language-name available-string-constant-sets)])
|
||||
(syntax (list 'languages ...)))])))
|
||||
|
||||
#|
|
||||
(require string-constant)
|
||||
(string-constant is-this-your-native-language)
|
||||
(string-constants is-this-your-native-language)
|
||||
(all-languages)
|
||||
(this-language)
|
||||
(expand #'(string-constant is-this-your-native-language))
|
||||
(expand #'(string-constants is-this-your-native-language))
|
||||
|#
|
||||
|
|
|
@ -11,7 +11,8 @@ DrRacket's GUI.
|
|||
@; ----------------------------------------------------------------------
|
||||
|
||||
@section{Using String Constants}
|
||||
@defmodule[string-constants]
|
||||
@defmodule*/no-declare[(string-constants)]
|
||||
@declare-exporting[string-constants/string-constant string-constants]
|
||||
|
||||
@defform[(string-constant name)]{
|
||||
|
||||
|
@ -40,20 +41,14 @@ running DrRacket.}
|
|||
@; ----------------------------------------------------------------------
|
||||
|
||||
@section{Adding String Constants}
|
||||
@defmodule[string-constants/string-constant-lang]
|
||||
|
||||
To add string constants to DrRacket, see the files:
|
||||
|
||||
@itemize[
|
||||
@item{@filepath{english-string-constants.ss}}
|
||||
@item{@filepath{french-string-constants.ss}}
|
||||
@item{@filepath{spanish-string-constants.ss}}
|
||||
@item{@filepath{german-string-constants.ss}}
|
||||
@item{@filepath{danish-string-constants.ss}}
|
||||
@item{@filepath{italian-string-constants.ss}}]
|
||||
To add string constants to DrRacket, see the file
|
||||
@filepath{private/english-string-constants.rkt}
|
||||
and the other string constants files in the @filepath{private}
|
||||
directory.
|
||||
|
||||
Each file has the same format. They are each modules in the
|
||||
@racketmodname[string-constants/string-constant-lang] language. The
|
||||
@racket[string-constants/private/string-constant-lang] language. The
|
||||
body of each module is a finite mapping table that gives the mapping
|
||||
from the symbolic name of a string constant to its translation in the
|
||||
appropriate language.
|
||||
|
@ -61,7 +56,7 @@ appropriate language.
|
|||
The @filepath{english-string-constants} is considered the master file;
|
||||
string constants will be set there and translated into each of the
|
||||
other language files. In addition, the
|
||||
@filepath{english-string-constants.ss} file should contain hints about
|
||||
@filepath{english-string-constants.rkt} file should contain hints about
|
||||
the context of the strings whose symbol name might not be clear.
|
||||
|
||||
@; ----------------------------------------------------------------------
|
||||
|
|
|
@ -1,17 +1,4 @@
|
|||
#lang racket/base
|
||||
(require tests/utils/docs-complete)
|
||||
(check-docs (quote string-constants/ukrainian-string-constants))
|
||||
(check-docs (quote string-constants/traditional-chinese-string-constants))
|
||||
(check-docs (quote string-constants/string-constant))
|
||||
(check-docs (quote string-constants/spanish-string-constants))
|
||||
(check-docs (quote string-constants/simplified-chinese-string-constants))
|
||||
(check-docs (quote string-constants/russian-string-constants))
|
||||
(check-docs (quote string-constants/portuguese-string-constants))
|
||||
(check-docs (quote string-constants))
|
||||
(check-docs (quote string-constants/korean-string-constants))
|
||||
(check-docs (quote string-constants/japanese-string-constants))
|
||||
(check-docs (quote string-constants/german-string-constants))
|
||||
(check-docs (quote string-constants/french-string-constants))
|
||||
(check-docs (quote string-constants/english-string-constants))
|
||||
(check-docs (quote string-constants/dutch-string-constants))
|
||||
(check-docs (quote string-constants/danish-string-constants))
|
||||
|
|
3
collects/tests/datalog/test-docs-complete.rkt
Normal file
3
collects/tests/datalog/test-docs-complete.rkt
Normal file
|
@ -0,0 +1,3 @@
|
|||
#lang racket/base
|
||||
(require tests/utils/docs-complete)
|
||||
(check-docs (quote datalog))
|
3
collects/tests/html/test-docs-complete.rkt
Normal file
3
collects/tests/html/test-docs-complete.rkt
Normal file
|
@ -0,0 +1,3 @@
|
|||
#lang racket/base
|
||||
(require tests/utils/docs-complete)
|
||||
(check-docs (quote html))
|
|
@ -80,9 +80,95 @@
|
|||
(! (a? (d 1 2))) => false
|
||||
))
|
||||
|
||||
; Lazy Racket examples from Premiers cours de programmation avec Scheme (Roy)
|
||||
(define (pcps-tests)
|
||||
;; Definitions --------------------------------------------------------------
|
||||
(define (f x y) x)
|
||||
(define (fac n)
|
||||
(if (= n 0) 1 (* n (fac (- n 1)))))
|
||||
(define (new-if test p q)
|
||||
(cond (test p)
|
||||
(else q)))
|
||||
(define fibs (cons 0 (cons 1 (map + fibs (cdr fibs)))))
|
||||
#;(define ($list-ref L k)
|
||||
(let loop ((k (force k)) (L (force L)))
|
||||
(if (= k 0)
|
||||
(car L)
|
||||
(loop (- k 1) (cdr (force L))))))
|
||||
(define L2 (cons 2 (map add1 L2)))
|
||||
(define (rayer n L) ; L prive des multiples de n
|
||||
(filter (lambda (x) (not (= 0 (modulo x n)))) L))
|
||||
(define (crible L)
|
||||
(cons (car L) (crible (rayer (car L) (cdr L)))))
|
||||
(define PREMS (crible L2)) ; primes
|
||||
(define ZERO (cons 0 ZERO)) ; le flot infini <0,0,0,0,...>
|
||||
(define (poly->serie L) ; L = coeffs en puissances croissantes
|
||||
(define (copy L)
|
||||
(if (null? L)
|
||||
ZERO ; padding à droite par des 0
|
||||
(cons (car L) (copy (cdr L)))))
|
||||
(copy L))
|
||||
(define (int-serie S) ; integration terme a terme
|
||||
(define (aux S i)
|
||||
(cons (/ (car S) i) (aux (cdr S) (+ i 1))))
|
||||
(aux S 1))
|
||||
(define EXPO (cons 1 (int-serie EXPO)))
|
||||
(define SIN (cons 0 (int-serie COS)))
|
||||
(define COS (cons 1 (map - (int-serie SIN))))
|
||||
(define (ints-from n)
|
||||
(cons n (ints-from (+ n 1))))
|
||||
(define NAT (ints-from 0))
|
||||
(define UN (cons 1 UN))
|
||||
(define nats (cons 0 (map + nats UN)))
|
||||
(define QUATRE (filter (lambda (x) (zero? (modulo x 4))) NAT))
|
||||
(define (melanger F1 F2) ; F1 et F2 infinis strictement croissants
|
||||
(cond ((< (car F1) (car F2)) (cons (car F1) (melanger (cdr F1) F2)))
|
||||
((> (car F1) (car F2)) (cons (car F2) (melanger F1 (cdr F2))))
|
||||
(else (cons (car F1) (melanger (cdr F1) (cdr F2))))))
|
||||
(define (zoom x F)
|
||||
(cons (* (car F) x) (zoom x (cdr F))))
|
||||
(define PAIR (zoom 2 NAT))
|
||||
(define (hamming)
|
||||
(define h (cons 1 (melanger (zoom 2 h) (melanger (zoom 3 h) (zoom 5 h)))))
|
||||
h)
|
||||
(define h (hamming))
|
||||
(define FACT (cons 1 (map * FACT (cdr NAT))))
|
||||
(define (entrelacer s1 s2)
|
||||
(cons (car s1) (entrelacer s2 (cdr s1))))
|
||||
(define F (entrelacer NAT F))
|
||||
;; Tests --------------------------------------------------------------------
|
||||
(test
|
||||
(!! (fac 5)) => 120
|
||||
(!! (new-if (= 1 2) (/ 1 0) 3)) => 3
|
||||
(!! (take 20 PREMS)) =>
|
||||
'(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71)
|
||||
(!! (list-ref PREMS 999)) => 7919
|
||||
(!! (apply + (take 100 PREMS))) => 24133
|
||||
(!! (take 10 (poly->serie '(1 2 3)))) => '(1 2 3 0 0 0 0 0 0 0)
|
||||
(!! (take 10 EXPO)) =>
|
||||
'(1 1 1/2 1/6 1/24 1/120 1/720 1/5040 1/40320 1/362880)
|
||||
(!! (take 8 SIN)) => '(0 1 0 -1/6 0 1/120 0 -1/5040)
|
||||
(!! (take 8 COS)) => '(1 0 -1/2 0 1/24 0 -1/720 0)
|
||||
(!! (take 10 (ints-from 5))) => '(5 6 7 8 9 10 11 12 13 14)
|
||||
(!! (take 10 NAT)) => '(0 1 2 3 4 5 6 7 8 9)
|
||||
(!! (take 10 UN)) => '(1 1 1 1 1 1 1 1 1 1)
|
||||
(!! (take 10 nats)) => '(0 1 2 3 4 5 6 7 8 9)
|
||||
(!! (take 10 QUATRE)) => '(0 4 8 12 16 20 24 28 32 36)
|
||||
(!! (take 10 (melanger NAT QUATRE))) => '(0 1 2 3 4 5 6 7 8 9)
|
||||
(!! (take 10 PAIR)) => '(0 2 4 6 8 10 12 14 16 18)
|
||||
(!! (take 30 h)) =>
|
||||
'(1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 45 48 50 54 60 64 72 75 80)
|
||||
(!! (list-ref h 10000)) => 288555831593533440
|
||||
(!! (take 10 FACT)) => '(1 1 2 6 24 120 720 5040 40320 362880)
|
||||
(!! (take 10 (entrelacer NAT PAIR))) => '(0 0 1 2 2 4 3 6 4 8)
|
||||
(!! (take 10 F)) => '(0 0 1 0 2 1 3 0 4 2)
|
||||
)
|
||||
)
|
||||
|
||||
(provide lang-tests)
|
||||
(define (lang-tests)
|
||||
(! (begin (basic-tests)
|
||||
(list-tests)
|
||||
(take-tests)
|
||||
(misc-tests))))
|
||||
(misc-tests)
|
||||
(pcps-tests))))
|
||||
|
|
|
@ -9,7 +9,7 @@ where <impl-or-benchmark> names an implementation as one of
|
|||
...
|
||||
or a benchmark as one of
|
||||
conform
|
||||
cpstack
|
||||
cpstak
|
||||
ctak
|
||||
...
|
||||
or any of the above prefixed by "no-" to skip the corresponding
|
||||
|
|
|
@ -282,12 +282,10 @@ exec racket -qu "$0" ${1+"$@"}
|
|||
(map bytes->number (cdr m))))
|
||||
|
||||
(define (extract-bigloo-times bm str)
|
||||
(let ([m (regexp-match #rx#"real: ([0-9]+) sys: ([0-9]+) user: ([0-9]+)" str)]
|
||||
;; `time' result is 10s of milliseconds? OS ticks, maybe?
|
||||
[msec/tick 10])
|
||||
(list (* msec/tick (+ (bytes->number (caddr m))
|
||||
(bytes->number (cadddr m))))
|
||||
(* msec/tick (bytes->number (cadr m)))
|
||||
(let ([m (regexp-match #rx#"real: ([0-9]+) sys: ([0-9]+) user: ([0-9]+)" str)])
|
||||
(list (+ (bytes->number (caddr m))
|
||||
(bytes->number (cadddr m)))
|
||||
(bytes->number (cadr m))
|
||||
0)))
|
||||
|
||||
(define (extract-larceny-times bm str)
|
||||
|
@ -297,10 +295,12 @@ exec racket -qu "$0" ${1+"$@"}
|
|||
(bytes->number (caddr m)))))
|
||||
|
||||
(define (extract-chicken-times bm str)
|
||||
(let ([m (regexp-match #rx#"([0-9.]+) seconds.*[^0-9.]([0-9.]+) seconds" str)])
|
||||
(let ([m (regexp-match #rx#"([0-9.]+)s CPU time(, ([0-9.]+)s GC time)?" str)])
|
||||
(list (* 1000 (string->number (format "#e~a" (cadr m))))
|
||||
#f
|
||||
(* 1000 (string->number (format "#e~a" (caddr m)))))))
|
||||
(if (caddr m) ; if the GC doesn't kick in, chicken doesn't print anything for GC time
|
||||
(* 1000 (string->number (format "#e~a" (cadddr m))))
|
||||
#f))))
|
||||
|
||||
(define (extract-time-times bm str)
|
||||
(let ([m (regexp-match #rx#"real[ \t]+([0-9m.]+)s.*user[ \t]+([0-9m.]+)s.sys[ \t]+([0-9m.]+)s." str)]
|
||||
|
@ -449,7 +449,7 @@ exec racket -qu "$0" ${1+"$@"}
|
|||
run-exe
|
||||
extract-bigloo-times
|
||||
clean-up-bin
|
||||
(append '(cpstack takr2)
|
||||
(append '(cpstak nucleic2 takr2)
|
||||
racket-specific-progs))
|
||||
(make-impl 'gambit
|
||||
void
|
||||
|
@ -505,11 +505,11 @@ exec racket -qu "$0" ${1+"$@"}
|
|||
racket-specific-progs))
|
||||
))
|
||||
|
||||
(define obsolte-impls '(racket3m racketcgc racket-j racketcgc-j racketcgc-tl mzc mz-old))
|
||||
(define obsolete-impls '(racket3m racketcgc racket-j racketcgc-j racketcgc-tl mzc mz-old))
|
||||
|
||||
(define benchmarks
|
||||
'(conform
|
||||
cpstack
|
||||
cpstak
|
||||
ctak
|
||||
deriv
|
||||
dderiv
|
||||
|
@ -585,7 +585,7 @@ exec racket -qu "$0" ${1+"$@"}
|
|||
num-iterations)
|
||||
(process-command-line benchmarks
|
||||
extra-benchmarks
|
||||
(map impl-name impls) obsolte-impls
|
||||
(map impl-name impls) obsolete-impls
|
||||
3))
|
||||
|
||||
(define-runtime-path bm-directory ".")
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
(module cpstack "wrap.ss")
|
2
collects/tests/racket/benchmarks/common/cpstak.rkt
Normal file
2
collects/tests/racket/benchmarks/common/cpstak.rkt
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
(module cpstak "wrap.ss")
|
|
@ -642,6 +642,15 @@
|
|||
(lambda () v) 0 "other"
|
||||
(lambda () (test "other" unbox v))))
|
||||
|
||||
(bin-exact #t 'procedure-arity-includes? cons 2)
|
||||
(bin-exact #f 'procedure-arity-includes? cons 1)
|
||||
(bin-exact #f 'procedure-arity-includes? cons 3)
|
||||
(bin-exact #t 'procedure-arity-includes? car 1)
|
||||
(bin-exact #t 'procedure-arity-includes? car 1)
|
||||
(bin-exact #t 'procedure-arity-includes? (lambda (x) x) 1)
|
||||
(bin-exact #f 'procedure-arity-includes? (lambda (x) x) 2)
|
||||
(bin-exact #t 'procedure-arity-includes? (lambda x x) 2)
|
||||
|
||||
))
|
||||
|
||||
(define (comp=? c1 c2)
|
||||
|
|
194
collects/tests/racket/place-channel.rkt
Normal file
194
collects/tests/racket/place-channel.rkt
Normal file
|
@ -0,0 +1,194 @@
|
|||
#lang racket/base
|
||||
(require racket/flonum
|
||||
racket/fixnum
|
||||
racket/place
|
||||
racket/list
|
||||
rackunit
|
||||
(for-syntax racket/base))
|
||||
|
||||
(provide main)
|
||||
|
||||
(define (splat txt fn)
|
||||
(call-with-output-file fn #:exists 'replace
|
||||
(lambda (out)
|
||||
(fprintf out "~a" txt))))
|
||||
|
||||
(define big (make-string 1025 #\K))
|
||||
|
||||
(define (big-sender ch msg) (car (place-channel-send/receive ch (cons msg big))))
|
||||
|
||||
(define-syntax (normal-receiver stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch x body ...)
|
||||
#'(let ([x (place-channel-receive ch)])
|
||||
(place-channel-send ch (begin body ...)))]))
|
||||
|
||||
(define-syntax (big-receiver stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch x body ...)
|
||||
#'(let ([x (car (place-channel-receive ch))])
|
||||
(place-channel-send ch (cons (begin body ...) big)))]))
|
||||
|
||||
(define (test expect fun . args)
|
||||
(printf "~s ==> " (cons fun args))
|
||||
(flush-output)
|
||||
(let ([res (if (procedure? fun)
|
||||
(apply fun args)
|
||||
(car args))])
|
||||
(printf "~s\n" res)
|
||||
(let ([ok? (equal? expect res)])
|
||||
(unless ok?
|
||||
(printf " BUT EXPECTED ~s\n" expect))
|
||||
ok?)))
|
||||
|
||||
(define (echo ch) (place-channel-send ch (place-channel-receive ch)))
|
||||
(define (recv/print ch) (displayln (place-channel-receive ch)))
|
||||
|
||||
(define-struct building (rooms location) #:prefab)
|
||||
(define-struct (house building) (occupied ) #:prefab)
|
||||
(define h1 (make-house 5 'factory 'yes))
|
||||
|
||||
(define-syntax (test-place-channel-receive/send stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch x body ...) #'(normal-receiver ch x body ...)]))
|
||||
|
||||
(define-syntax (test-place-channel-receive/send-* stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch x body ...) #'(begin (normal-receiver ch x body) ...)]))
|
||||
|
||||
|
||||
(define-syntax-rule (channel-test-basic-types-worker receiver ch)
|
||||
(begin
|
||||
(define-syntax-rule (test-place-channel-receive/send-* x body (... ...))
|
||||
(begin (receiver ch x body) (... ...)))
|
||||
|
||||
(test-place-channel-receive/send-* x
|
||||
(not x)
|
||||
(not x)
|
||||
(void)
|
||||
null
|
||||
1/3
|
||||
(/ 1 5)
|
||||
(* x 2)
|
||||
4+9i
|
||||
(+ 1 x)
|
||||
(string-append x "-ok")
|
||||
(cons (car x) 'b)
|
||||
(list (car x) 'b (cadr x))
|
||||
(vector (vector-ref x 0) 'b (vector-ref x 1))
|
||||
#s((abuilding 1 building 2) 6 'utah 'no)
|
||||
`(,x))))
|
||||
|
||||
(define (channel-test-basic-types-master sender ch)
|
||||
(define-syntax-rule (test-place-channel-send-receive sender ch (send expect) ...)
|
||||
(begin (test expect sender ch send) ...))
|
||||
|
||||
(test-place-channel-send-receive sender ch
|
||||
(#t #f)
|
||||
(#f #t)
|
||||
(null (void))
|
||||
((void) null)
|
||||
((/ 1 2) 1/3)
|
||||
(1/4 (/ 1 5))
|
||||
((exact->inexact (/ 1 3)) 0.6666666666666666)
|
||||
(3+8i 4+9i)
|
||||
(1 2)
|
||||
("Hello" "Hello-ok")
|
||||
((cons 'a 'a) (cons 'a 'b))
|
||||
((list 'a 'a) (list 'a 'b 'a))
|
||||
(#(a a) #(a b a))
|
||||
(h1 #s((abuilding 1 building 2) 6 'utah 'no))
|
||||
('(printf "Hello") '((printf "Hello")))))
|
||||
|
||||
(define-place (place-worker ch)
|
||||
(channel-test-basic-types-worker normal-receiver ch)
|
||||
(channel-test-basic-types-worker big-receiver ch)
|
||||
|
||||
(define pc1 (place-channel-receive ch))
|
||||
(test-place-channel-receive/send pc1 x (string-append x "-ok"))
|
||||
|
||||
(define pc3 (first (place-channel-receive ch)))
|
||||
(test-place-channel-receive/send pc3 x (string-append x "-ok3"))
|
||||
|
||||
(test-place-channel-receive/send-* ch x
|
||||
(begin (flvector-set! x 2 5.0) "Ready1")
|
||||
(begin (flvector-set! x 2 6.0) "Ready2")
|
||||
(begin (fxvector-set! x 2 5) "Ready2.1")
|
||||
(begin (fxvector-set! x 2 6) "Ready2.2")
|
||||
(begin (bytes-set! x 2 67) "Ready3")
|
||||
(begin (bytes-set! x 2 67) "Ready4"))
|
||||
|
||||
(define pc5 (place-channel-receive ch))
|
||||
(place-channel-send pc5 "Ready5")
|
||||
|
||||
(channel-test-basic-types-worker normal-receiver pc5)
|
||||
(channel-test-basic-types-worker big-receiver pc5)
|
||||
|
||||
(for ([i (in-range 3)]) (echo pc5))
|
||||
(for ([i (in-range 3)]) (recv/print ch)))
|
||||
|
||||
|
||||
(define (main)
|
||||
(let ([pl (place-worker)])
|
||||
(define flv1 (shared-flvector 0.0 1.0 2.0 3.0))
|
||||
(define flv2 (make-shared-flvector 4 3.0))
|
||||
(define fxv1 (shared-fxvector 0 1 2 3))
|
||||
(define fxv2 (make-shared-fxvector 4 3))
|
||||
(define b1 (shared-bytes 66 66 66 66))
|
||||
(define b2 (make-shared-bytes 4 65))
|
||||
|
||||
(channel-test-basic-types-master place-channel-send/receive pl)
|
||||
(channel-test-basic-types-master big-sender pl)
|
||||
|
||||
(define-values (pc1 pc2) (place-channel))
|
||||
(place-channel-send pl pc2)
|
||||
(test "Testing-ok" place-channel-send/receive pc1 "Testing")
|
||||
|
||||
(define-values (pc3 pc4) (place-channel))
|
||||
(place-channel-send pl (list pc4))
|
||||
(test "Testing-ok3" place-channel-send/receive pc3 "Testing")
|
||||
|
||||
(test "Ready1" place-channel-send/receive pl flv1)
|
||||
(test 5.0 flvector-ref flv1 2)
|
||||
|
||||
(test "Ready2" place-channel-send/receive pl flv2)
|
||||
(test 6.0 flvector-ref flv2 2)
|
||||
|
||||
(test "Ready2.1" place-channel-send/receive pl fxv1)
|
||||
(test 5 fxvector-ref fxv1 2)
|
||||
|
||||
(test "Ready2.2" place-channel-send/receive pl fxv2)
|
||||
(test 6 fxvector-ref fxv2 2)
|
||||
|
||||
(test "Ready3" place-channel-send/receive pl b1)
|
||||
(test 67 bytes-ref b1 2)
|
||||
|
||||
(test "Ready4" place-channel-send/receive pl b2)
|
||||
(test 67 bytes-ref b2 2)
|
||||
|
||||
(define-values (pc5 pc6) (place-channel))
|
||||
(place-channel-send pl pc5)
|
||||
(test "Ready5" sync pc6)
|
||||
(channel-test-basic-types-master place-channel-send/receive pc6)
|
||||
(channel-test-basic-types-master big-sender pc6)
|
||||
|
||||
#|
|
||||
|#
|
||||
(let ([try-graph
|
||||
(lambda (s)
|
||||
(let ([v (read (open-input-string s))])
|
||||
(place-channel-send pc6 v)
|
||||
(test v place-channel-receive pc6)))])
|
||||
(try-graph "#0=(#0# . #0#)")
|
||||
(try-graph "#0=#(#0# 7 #0#)")
|
||||
(try-graph "#0=#s(thing 7 #0#)"))
|
||||
|
||||
(check-exn exn:fail? (λ () (place-channel-send pl (open-output-string))))
|
||||
(check-not-exn (λ () (place-channel-send pl "Test String")))
|
||||
(check-not-exn (λ () (place-channel-send pl (bytes->path #"/tmp/unix" 'unix))))
|
||||
(check-not-exn (λ () (place-channel-send pl (bytes->path #"C:\\Windows" 'windows))))
|
||||
|
||||
(place-wait pl)
|
||||
)
|
||||
)
|
||||
;(report-errs)
|
|
@ -1,153 +0,0 @@
|
|||
(load-relative "loadtest.rktl")
|
||||
(Section 'place-channel)
|
||||
(require racket/flonum
|
||||
racket/fixnum
|
||||
rackunit)
|
||||
|
||||
(define (splat txt fn)
|
||||
(call-with-output-file fn #:exists 'replace
|
||||
(lambda (out)
|
||||
(fprintf out "~a" txt))))
|
||||
|
||||
(splat
|
||||
#<<END
|
||||
(module pct1 racket/base
|
||||
(provide place-main)
|
||||
(require racket/flonum
|
||||
racket/fixnum
|
||||
racket/place
|
||||
racket/list
|
||||
(for-syntax racket/base))
|
||||
|
||||
(define-syntax (test-place-channel-receive/send stx)
|
||||
(syntax-case stx ()
|
||||
[(_ ch body)
|
||||
(with-syntax
|
||||
[(x (syntax-local-introduce #'x))]
|
||||
#'(place-channel-send ch
|
||||
(let ([x (place-channel-receive ch)])
|
||||
body)))]))
|
||||
|
||||
(define-syntax-rule (test-place-channel-receive/send-* ch body ...)
|
||||
(begin (test-place-channel-receive/send ch body) ...))
|
||||
|
||||
(define (place-main ch)
|
||||
(test-place-channel-receive/send-* ch
|
||||
(not x)
|
||||
(not x)
|
||||
(void)
|
||||
null
|
||||
1/3
|
||||
(/ 1 5)
|
||||
(* x 2)
|
||||
4+9i
|
||||
(+ 1 x)
|
||||
(string-append x "-ok")
|
||||
(cons (car x) 'b)
|
||||
(list (car x) 'b (cadr x))
|
||||
(vector (vector-ref x 0) 'b (vector-ref x 1))
|
||||
#s((abuilding 1 building 2) 6 'utah 'no)
|
||||
`(,x))
|
||||
|
||||
(define pc1 (place-channel-receive ch))
|
||||
(test-place-channel-receive/send pc1 (string-append x "-ok"))
|
||||
|
||||
(define pc3 (first (place-channel-receive ch)))
|
||||
(test-place-channel-receive/send pc3 (string-append x "-ok3"))
|
||||
|
||||
(test-place-channel-receive/send-* ch
|
||||
(begin (flvector-set! x 2 5.0) "Ready1")
|
||||
(begin (flvector-set! x 2 6.0) "Ready2")
|
||||
(begin (fxvector-set! x 2 5) "Ready2.1")
|
||||
(begin (fxvector-set! x 2 6) "Ready2.2")
|
||||
(begin (bytes-set! x 2 67) "Ready3")
|
||||
(begin (bytes-set! x 2 67) "Ready4"))
|
||||
|
||||
(define pc5 (place-channel-receive ch))
|
||||
(place-channel-send pc5 "Ready5")
|
||||
)
|
||||
)
|
||||
END
|
||||
"pct1.ss")
|
||||
|
||||
(define-syntax-rule (pc-send-receive-test ch (send expect) ...)
|
||||
(begin (test expect place-channel-send/receive ch send) ...))
|
||||
|
||||
|
||||
(define-struct building (rooms location) #:prefab)
|
||||
(define-struct (house building) (occupied ) #:prefab)
|
||||
(define h1 (make-house 5 'factory 'yes))
|
||||
|
||||
(define flv1 (shared-flvector 0.0 1.0 2.0 3.0))
|
||||
(define flv2 (make-shared-flvector 4 3.0))
|
||||
(define fxv1 (shared-fxvector 0 1 2 3))
|
||||
(define fxv2 (make-shared-fxvector 4 3))
|
||||
(define b1 (shared-bytes 66 66 66 66))
|
||||
(define b2 (make-shared-bytes 4 65))
|
||||
|
||||
(let ([pl (place "pct1.ss" 'place-main)])
|
||||
(pc-send-receive-test pl
|
||||
(#t #f)
|
||||
(#f #t)
|
||||
(null (void))
|
||||
((void) null)
|
||||
((/ 1 2) 1/3)
|
||||
(1/4 (/ 1 5))
|
||||
((exact->inexact (/ 1 3)) 0.6666666666666666)
|
||||
(3+8i 4+9i)
|
||||
(1 2)
|
||||
("Hello" "Hello-ok")
|
||||
((cons 'a 'a) (cons 'a 'b))
|
||||
((list 'a 'a) (list 'a 'b 'a))
|
||||
(#(a a) #(a b a))
|
||||
(h1 #s((abuilding 1 building 2) 6 'utah 'no))
|
||||
('(printf "Hello") '((printf "Hello"))))
|
||||
|
||||
(define-values (pc1 pc2) (place-channel))
|
||||
(place-channel-send pl pc2)
|
||||
(test "Testing-ok" place-channel-send/receive pc1 "Testing")
|
||||
|
||||
(define-values (pc3 pc4) (place-channel))
|
||||
(place-channel-send pl (list pc4))
|
||||
(test "Testing-ok3" place-channel-send/receive pc3 "Testing")
|
||||
|
||||
(test "Ready1" place-channel-send/receive pl flv1)
|
||||
(test 5.0 flvector-ref flv1 2)
|
||||
|
||||
(test "Ready2" place-channel-send/receive pl flv2)
|
||||
(test 6.0 flvector-ref flv2 2)
|
||||
|
||||
(test "Ready2.1" place-channel-send/receive pl fxv1)
|
||||
(test 5 fxvector-ref fxv1 2)
|
||||
|
||||
(test "Ready2.2" place-channel-send/receive pl fxv2)
|
||||
(test 6 fxvector-ref fxv2 2)
|
||||
|
||||
(test "Ready3" place-channel-send/receive pl b1)
|
||||
(test 67 bytes-ref b1 2)
|
||||
|
||||
(test "Ready4" place-channel-send/receive pl b2)
|
||||
(test 67 bytes-ref b2 2)
|
||||
|
||||
(define-values (pc5 pc6) (place-channel))
|
||||
(place-channel-send pl pc5)
|
||||
(test "Ready5" sync pc6)
|
||||
|
||||
(let ([try-graph
|
||||
(lambda (s)
|
||||
(let ([v (read (open-input-string s))])
|
||||
(place-channel-send pc5 v)
|
||||
(test v place-channel-receive pc6)))])
|
||||
(try-graph "#0=(#0# . #0#)")
|
||||
(try-graph "#0=#(#0# 7 #0#)")
|
||||
(try-graph "#0=#s(thing 7 #0#)"))
|
||||
|
||||
(check-exn exn:fail? (λ () (place-channel-send pl (open-output-string))))
|
||||
(check-not-exn (λ () (place-channel-send pl "Test String")))
|
||||
(check-not-exn (λ () (place-channel-send pl (bytes->path #"/tmp/unix" 'unix))))
|
||||
(check-not-exn (λ () (place-channel-send pl (bytes->path #"C:\\Windows" 'windows))))
|
||||
|
||||
(place-wait pl)
|
||||
)
|
||||
|
||||
(report-errs)
|
|
@ -8,8 +8,29 @@
|
|||
|
||||
;; checks to make sure that all of the exports of
|
||||
;; the 'what' library are documented
|
||||
(provide/contract [check-docs (-> symbol? any)])
|
||||
(define (check-docs what)
|
||||
(provide/contract [check-docs (->* (symbol?)
|
||||
(#:skip (or/c regexp?
|
||||
symbol?
|
||||
#f
|
||||
(-> symbol? any)
|
||||
(listof (or/c regexp? symbol?))))
|
||||
any)])
|
||||
(define (check-docs what #:skip [skip #f])
|
||||
(define (skip-proc f)
|
||||
(cond
|
||||
[(regexp? skip)
|
||||
(regexp-match skip (symbol->string f))]
|
||||
[(procedure? skip)
|
||||
(skip f)]
|
||||
[(not skip) #f]
|
||||
[(list? skip)
|
||||
(for/or ([x (in-list skip)])
|
||||
(cond
|
||||
[(regexp? x)
|
||||
(regexp-match skip (symbol->string f))]
|
||||
[(symbol? x)
|
||||
(eq? x f)]))]))
|
||||
|
||||
(define pieces (regexp-split #rx"/" (symbol->string what)))
|
||||
(cond
|
||||
[(null? pieces) (error 'get-docs "bad arg ~s" what)]
|
||||
|
@ -38,7 +59,9 @@
|
|||
"~a_scm.zo"))
|
||||
(if file
|
||||
(call-with-input-file file read)
|
||||
(k '() '()))))))
|
||||
(begin
|
||||
(eprintf "did not find compiled file for ~s\n" what)
|
||||
(k '() '())))))))
|
||||
|
||||
(define (get n info)
|
||||
(define a (assoc n info))
|
||||
|
@ -51,15 +74,13 @@
|
|||
|
||||
(define undocumented-exports
|
||||
(for/list ([ex (in-list exports)]
|
||||
#:when ;; skip #%module-begin, #%top, etc.
|
||||
(not (regexp-match #rx"^#%" (symbol->string ex)))
|
||||
#:when ;; skip deserialization library stuff
|
||||
(not (regexp-match #rx"^deserialize-info:" (symbol->string ex)))
|
||||
#:when
|
||||
(not (xref-binding->definition-tag
|
||||
xref
|
||||
(list what ex)
|
||||
#f)))
|
||||
#f))
|
||||
#:when
|
||||
(not (skip-proc ex)))
|
||||
ex))
|
||||
|
||||
(unless (null? undocumented-exports)
|
||||
|
|
|
@ -150,18 +150,6 @@ corresponding to @racket[trest], where @racket[bound]
|
|||
|
||||
@ex[(box "hello world")]
|
||||
|
||||
@deftogether[(
|
||||
@defform[(Syntaxof t)]
|
||||
@defidform[Syntax]
|
||||
@defidform[Identifier])]{A @rtech{syntax object} containing a
|
||||
@racket[t]. @racket[Syntax] is the type of any object constructable
|
||||
via @racket[datum->syntax]. @racket[Identifier] is @racket[(Syntaxof
|
||||
Symbol)].
|
||||
|
||||
@ex[#'here]
|
||||
|
||||
}
|
||||
|
||||
@defform[(Vectorof t)]{Homogenous @rtech{vectors} of @racket[t]}
|
||||
@defform[(Vector t ...)]{is the type of the list with one element, in order,
|
||||
for each type provided to the @racket[Vector] type constructor.}
|
||||
|
@ -191,9 +179,39 @@ corresponding to @racket[trest], where @racket[bound]
|
|||
@defform[(Promise t)]{A @rtech{promise} of @racket[t].
|
||||
@ex[(delay 3)]}
|
||||
|
||||
@defidform[Sexp]{A recursive union containing types traversed by
|
||||
@racket[datum->syntax]. Note that this is @emph{not} the type produced
|
||||
by @racket[read].}
|
||||
@subsection{Syntax Objects}
|
||||
|
||||
The following types represent @rtech{syntax object}s and their content.
|
||||
|
||||
@defform[(Syntaxof t)]{A syntax object with content of type @racket[t].
|
||||
Applying @racket[syntax-e] to a value of type @racket[(Syntaxof t)] produces a
|
||||
value of type @racket[t].}
|
||||
|
||||
@defidform[Identifier]{A syntax object containing a @rtech{symbol}. Equivalent
|
||||
to @racket[(Syntaxof Symbol)].}
|
||||
|
||||
@defidform[Syntax]{A syntax object containing only @rtech{symbol}s,
|
||||
@rtech{keyword}s, @rtech{string}s, @rtech{character}s, @rtech{boolean}s,
|
||||
@rtech{number}s, @rtech{box}es containing @racket[Syntax], @rtech{vector}s of
|
||||
@racket[Syntax], or (possibly improper) @rtech{list}s of @racket[Syntax].
|
||||
Equivalent to @racket[(Syntaxof Syntax-E)].}
|
||||
|
||||
@defidform[Syntax-E]{The content of syntax objects of type @racket[Syntax].
|
||||
Applying @racket[syntax-e] to a value of type @racket[Syntax] produces a value
|
||||
of type @racket[Syntax-E].}
|
||||
|
||||
@defform[(Sexpof t)]{The recursive union of @racket[t] with @rtech{symbol}s,
|
||||
@rtech{keyword}s, @rtech{string}s, @rtech{character}s, @rtech{boolean}s,
|
||||
@rtech{number}s, @rtech{box}es, @rtech{vector}s, and (possibly improper)
|
||||
@rtech{list}s.}
|
||||
|
||||
@defidform[Sexp]{Applying @racket[syntax->datum] to a value of type
|
||||
@racket[Syntax] produces a value of type @racket[Sexp]. Equivalent to
|
||||
@racket[(Sexpof Nothing)].}
|
||||
|
||||
@defidform[Datum]{Applying @racket[datum->syntax] to a value of type
|
||||
@racket[Datum] produces a value of type @racket[Syntax]. Equivalent to
|
||||
@racket[(Sexpof Syntax)].}
|
||||
|
||||
@subsection{Other Type Constructors}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
(check-docs (quote unstable/path))
|
||||
(check-docs (quote unstable/mutated-vars))
|
||||
(check-docs (quote unstable/match))
|
||||
(check-docs (quote unstable/markparam))
|
||||
(check-docs (quote unstable/markparam) #:skip #rx"^deserialize-info:")
|
||||
(check-docs (quote unstable/list))
|
||||
(check-docs (quote unstable/hash))
|
||||
(check-docs (quote unstable/generics))
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
Version 5.2 [Mon Apr 25 11:07:14 EDT 2011]
|
||||
|
||||
* tiny bug fix in registration process for universe
|
||||
implies incompatibility of protocols between 5.1 programs and
|
||||
predecessors
|
||||
|
||||
------------------------------------------------------------------------
|
||||
Version 5.1 [Tue Feb 8 13:05:17 EST 2011]
|
||||
|
|
422
src/configure
vendored
422
src/configure
vendored
|
@ -660,7 +660,6 @@ EXEEXT
|
|||
OBJEXT
|
||||
CPP
|
||||
RANLIB
|
||||
PERL
|
||||
GREP
|
||||
EGREP
|
||||
PREFLAGS
|
||||
|
@ -702,8 +701,6 @@ FRAMEWORK_PREFIX
|
|||
INSTALL_ORIG_TREE
|
||||
EXE_SUFFIX
|
||||
SO_SUFFIX
|
||||
MZRT_CGC_FLAGS
|
||||
LIBATOM
|
||||
OWN_LIBFFI
|
||||
LIBSFX
|
||||
WXLIBS
|
||||
|
@ -754,8 +751,7 @@ LDFLAGS
|
|||
LIBS
|
||||
CPPFLAGS
|
||||
CPP'
|
||||
ac_subdirs_all='racket/gc/libatomic_ops
|
||||
foreign/libffi '
|
||||
ac_subdirs_all='foreign/libffi '
|
||||
|
||||
# Initialize some variables set by options.
|
||||
ac_init_help=
|
||||
|
@ -1296,13 +1292,8 @@ Fine tuning of the installation directories:
|
|||
--includedir=DIR C header files [PREFIX/include]
|
||||
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
|
||||
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
|
||||
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
|
||||
--mandir=DIR man documentation [DATAROOTDIR/man]
|
||||
--docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
|
||||
--htmldir=DIR html documentation [DOCDIR]
|
||||
--dvidir=DIR dvi documentation [DOCDIR]
|
||||
--pdfdir=DIR pdf documentation [DOCDIR]
|
||||
--psdir=DIR ps documentation [DOCDIR]
|
||||
_ACEOF
|
||||
|
||||
cat <<\_ACEOF
|
||||
|
@ -1316,43 +1307,37 @@ if test -n "$ac_init_help"; then
|
|||
Optional Features:
|
||||
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||
--enable-gracket compile GRacket as well as Racket (enabled by default)
|
||||
--enable-plot compile plot libraries (enabled by default)
|
||||
--enable-gracket build GRacket as well as Racket (enabled by default)
|
||||
--enable-jit support JIT compiler (enabled by default)
|
||||
--enable-foreign support foreign calls (enabled by default)
|
||||
--enable-places support places (3m only; usually enabled by default)
|
||||
--enable-futures support futures (usually enabled by default)
|
||||
--enable-plot support plot libraries (enabled by default)
|
||||
--enable-float support single-precision floats (enabled by default)
|
||||
--enable-floatinstead use single-precision by default
|
||||
--enable-origtree install with original directory structure
|
||||
--enable-docs build docs on install (enabled by default)
|
||||
--enable-usersetup setup user-specific files on install
|
||||
--enable-shared create shared libraries
|
||||
--enable-dynlib same as --enable-shared
|
||||
--enable-lt=<prog> use <prog> instead of bundled libtool
|
||||
--enable-origtree install with original directory structure
|
||||
--enable-jit compile JIT support (enabled by default)
|
||||
--enable-foreign compile foreign support (enabled by default)
|
||||
--enable-libffi use installed libffi (enabled by default)
|
||||
--enable-places compile places support (usually enabled by default)
|
||||
--enable-futures compile futures support (usually enabled by default)
|
||||
--enable-cgcdefault use CGC (Boehm or Senora) as default build
|
||||
--enable-sgc use Senora GC instead of the Boehm GC
|
||||
--enable-sgcdebug use Senora GC for debugging
|
||||
--enable-account 3m: use memory-accounting GC (enabled by default)
|
||||
--enable-compact 3m: use compact GC (no accounting)
|
||||
--enable-backtrace 3m: support GC backtrace dumps
|
||||
--enable-float support single-precision floats (enabled by default)
|
||||
--enable-floatinstead compile to use single-precision by default
|
||||
--enable-pthread link with pthreads
|
||||
--enable-stackup assume "up" if stack direction cannot be determined
|
||||
--enable-bigendian assume "big" if endianness cannot be determined
|
||||
--enable-oskit compile OSKit-based Racket kernel
|
||||
--enable-smalloskit compile small OSKit-based Racket kernel
|
||||
--enable-perl use perl to regenerate certain sources
|
||||
--enable-gprof compile for profiling with gprof (gcc only)
|
||||
--enable-gcov compile to gather gcov statistics (gcc3 only)
|
||||
--enable-noopt drop -O C flags
|
||||
--enable-sdk=<path> use Mac OS X 10.4 SDK directory
|
||||
--enable-xonx compile Unix style (e.g., use Gtk) for Mac OS X
|
||||
--enable-xonx use Unix style (e.g., use Gtk) for Mac OS X
|
||||
--enable-libfw install Mac OS X frameworks to /Library/Frameworks
|
||||
--enable-userfw install Mac OS X frameworks to ~/Library/Frameworks
|
||||
--enable-macprefix allow --prefix with a Mac OS X install
|
||||
--enable-mac64 do not force 32-bit build
|
||||
--enable-gcplacestest compile GC places testing support
|
||||
--enable-cgcdefault use CGC (Boehm or Senora) as default build
|
||||
--enable-sgc use Senora GC instead of the Boehm GC
|
||||
--enable-sgcdebug use Senora GC for debugging
|
||||
--enable-backtrace 3m: support GC backtrace dumps
|
||||
--enable-pthread link with pthreads
|
||||
--enable-stackup assume "up" if stack direction cannot be determined
|
||||
--enable-bigendian assume "big" if endianness cannot be determined
|
||||
--enable-gprof compile for profiling with gprof (gcc only)
|
||||
--enable-gcov compile to gather gcov statistics (gcc3 only)
|
||||
--enable-noopt drop -O C flags
|
||||
|
||||
Some influential environment variables:
|
||||
CC C compiler command
|
||||
|
@ -1797,6 +1782,30 @@ else
|
|||
enable_gracket=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-jit was given.
|
||||
if test "${enable_jit+set}" = set; then
|
||||
enableval=$enable_jit;
|
||||
else
|
||||
enable_jit=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-foreign was given.
|
||||
if test "${enable_foreign+set}" = set; then
|
||||
enableval=$enable_foreign;
|
||||
else
|
||||
enable_foreign=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-places was given.
|
||||
if test "${enable_places+set}" = set; then
|
||||
enableval=$enable_places;
|
||||
fi
|
||||
|
||||
# Check whether --enable-futures was given.
|
||||
if test "${enable_futures+set}" = set; then
|
||||
enableval=$enable_futures;
|
||||
fi
|
||||
|
||||
# Check whether --enable-plot was given.
|
||||
if test "${enable_plot+set}" = set; then
|
||||
enableval=$enable_plot;
|
||||
|
@ -1804,6 +1813,25 @@ else
|
|||
enable_plot=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-float was given.
|
||||
if test "${enable_float+set}" = set; then
|
||||
enableval=$enable_float;
|
||||
else
|
||||
enable_float=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-floatinstead was given.
|
||||
if test "${enable_floatinstead+set}" = set; then
|
||||
enableval=$enable_floatinstead;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-origtree was given.
|
||||
if test "${enable_origtree+set}" = set; then
|
||||
enableval=$enable_origtree;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-docs was given.
|
||||
if test "${enable_docs+set}" = set; then
|
||||
enableval=$enable_docs;
|
||||
|
@ -1834,27 +1862,6 @@ else
|
|||
fi
|
||||
|
||||
|
||||
# Check whether --enable-origtree was given.
|
||||
if test "${enable_origtree+set}" = set; then
|
||||
enableval=$enable_origtree;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-jit was given.
|
||||
if test "${enable_jit+set}" = set; then
|
||||
enableval=$enable_jit;
|
||||
else
|
||||
enable_jit=yes
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-foreign was given.
|
||||
if test "${enable_foreign+set}" = set; then
|
||||
enableval=$enable_foreign;
|
||||
else
|
||||
enable_foreign=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-libffi was given.
|
||||
if test "${enable_libffi+set}" = set; then
|
||||
enableval=$enable_libffi;
|
||||
|
@ -1863,119 +1870,11 @@ else
|
|||
fi
|
||||
|
||||
|
||||
# Check whether --enable-places was given.
|
||||
if test "${enable_places+set}" = set; then
|
||||
enableval=$enable_places;
|
||||
fi
|
||||
|
||||
# Check whether --enable-futures was given.
|
||||
if test "${enable_futures+set}" = set; then
|
||||
enableval=$enable_futures;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-cgcdefault was given.
|
||||
if test "${enable_cgcdefault+set}" = set; then
|
||||
enableval=$enable_cgcdefault;
|
||||
fi
|
||||
|
||||
# Check whether --enable-sgc was given.
|
||||
if test "${enable_sgc+set}" = set; then
|
||||
enableval=$enable_sgc;
|
||||
fi
|
||||
|
||||
# Check whether --enable-sgcdebug was given.
|
||||
if test "${enable_sgcdebug+set}" = set; then
|
||||
enableval=$enable_sgcdebug;
|
||||
fi
|
||||
|
||||
# Check whether --enable-account was given.
|
||||
if test "${enable_account+set}" = set; then
|
||||
enableval=$enable_account;
|
||||
else
|
||||
enable_account=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-compact was given.
|
||||
if test "${enable_compact+set}" = set; then
|
||||
enableval=$enable_compact;
|
||||
fi
|
||||
|
||||
# Check whether --enable-backtrace was given.
|
||||
if test "${enable_backtrace+set}" = set; then
|
||||
enableval=$enable_backtrace;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-float was given.
|
||||
if test "${enable_float+set}" = set; then
|
||||
enableval=$enable_float;
|
||||
else
|
||||
enable_float=yes
|
||||
fi
|
||||
|
||||
# Check whether --enable-floatinstead was given.
|
||||
if test "${enable_floatinstead+set}" = set; then
|
||||
enableval=$enable_floatinstead;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-pthread was given.
|
||||
if test "${enable_pthread+set}" = set; then
|
||||
enableval=$enable_pthread;
|
||||
fi
|
||||
|
||||
# Check whether --enable-stackup was given.
|
||||
if test "${enable_stackup+set}" = set; then
|
||||
enableval=$enable_stackup;
|
||||
fi
|
||||
|
||||
# Check whether --enable-bigendian was given.
|
||||
if test "${enable_bigendian+set}" = set; then
|
||||
enableval=$enable_bigendian;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-oskit was given.
|
||||
if test "${enable_oskit+set}" = set; then
|
||||
enableval=$enable_oskit;
|
||||
fi
|
||||
|
||||
# Check whether --enable-smalloskit was given.
|
||||
if test "${enable_smalloskit+set}" = set; then
|
||||
enableval=$enable_smalloskit;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-perl was given.
|
||||
if test "${enable_perl+set}" = set; then
|
||||
enableval=$enable_perl;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-gprof was given.
|
||||
if test "${enable_gprof+set}" = set; then
|
||||
enableval=$enable_gprof;
|
||||
fi
|
||||
|
||||
# Check whether --enable-gcov was given.
|
||||
if test "${enable_gcov+set}" = set; then
|
||||
enableval=$enable_gcov;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-noopt was given.
|
||||
if test "${enable_noopt+set}" = set; then
|
||||
enableval=$enable_noopt;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-enable_sdk was given.
|
||||
if test "${enable_enable_sdk+set}" = set; then
|
||||
enableval=$enable_enable_sdk;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-xonx was given.
|
||||
if test "${enable_xonx+set}" = set; then
|
||||
enableval=$enable_xonx;
|
||||
|
@ -2002,9 +1901,60 @@ if test "${enable_mac64+set}" = set; then
|
|||
fi
|
||||
|
||||
|
||||
# Check whether --enable-gc2_places_testing was given.
|
||||
if test "${enable_gc2_places_testing+set}" = set; then
|
||||
enableval=$enable_gc2_places_testing;
|
||||
# Check whether --enable-cgcdefault was given.
|
||||
if test "${enable_cgcdefault+set}" = set; then
|
||||
enableval=$enable_cgcdefault;
|
||||
fi
|
||||
|
||||
# Check whether --enable-sgc was given.
|
||||
if test "${enable_sgc+set}" = set; then
|
||||
enableval=$enable_sgc;
|
||||
fi
|
||||
|
||||
# Check whether --enable-sgcdebug was given.
|
||||
if test "${enable_sgcdebug+set}" = set; then
|
||||
enableval=$enable_sgcdebug;
|
||||
fi
|
||||
|
||||
# Check whether --enable-backtrace was given.
|
||||
if test "${enable_backtrace+set}" = set; then
|
||||
enableval=$enable_backtrace;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-pthread was given.
|
||||
if test "${enable_pthread+set}" = set; then
|
||||
enableval=$enable_pthread;
|
||||
fi
|
||||
|
||||
# Check whether --enable-stackup was given.
|
||||
if test "${enable_stackup+set}" = set; then
|
||||
enableval=$enable_stackup;
|
||||
fi
|
||||
|
||||
# Check whether --enable-bigendian was given.
|
||||
if test "${enable_bigendian+set}" = set; then
|
||||
enableval=$enable_bigendian;
|
||||
fi
|
||||
|
||||
|
||||
# AC_ARG_ENABLE(oskit, [ --enable-oskit compile OSKit-based Racket kernel])
|
||||
# AC_ARG_ENABLE(smalloskit, [ --enable-smalloskit compile small OSKit-based Racket kernel])
|
||||
|
||||
# Check whether --enable-gprof was given.
|
||||
if test "${enable_gprof+set}" = set; then
|
||||
enableval=$enable_gprof;
|
||||
fi
|
||||
|
||||
# Check whether --enable-gcov was given.
|
||||
if test "${enable_gcov+set}" = set; then
|
||||
enableval=$enable_gcov;
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-noopt was given.
|
||||
if test "${enable_noopt+set}" = set; then
|
||||
enableval=$enable_noopt;
|
||||
fi
|
||||
|
||||
|
||||
|
@ -2080,22 +2030,6 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
if test "${enable_gc2_places_testing}" = "yes" ; then
|
||||
enable_shared=yes
|
||||
enable_places=yes
|
||||
fi
|
||||
|
||||
|
||||
# Hack for the implementor:
|
||||
if test "${enable_perl}" = "" ; then
|
||||
if test "$USER" = "mflatt" ; then
|
||||
enable_perl=yes
|
||||
fi
|
||||
if test "$USER" = "matthewf" ; then
|
||||
enable_perl=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${enable_iconv}" = "" ; then
|
||||
enable_iconv=yes
|
||||
fi
|
||||
|
@ -2220,11 +2154,8 @@ show_explicitly_disabled "${enable_places}" Places
|
|||
show_explicitly_enabled "${enable_futures}" Futures
|
||||
show_explicitly_disabled "${enable_futures}" Futures
|
||||
|
||||
show_explicitly_enabled "${enable_gc2_places_testing}" "GC2 Places Testing"
|
||||
|
||||
show_explicitly_enabled "${enable_sgc}" SGC
|
||||
show_explicitly_enabled "${enable_sgcdebug}" "SGC debug mode"
|
||||
show_explicitly_enabled "${enable_compact}" "Compact 3m GC"
|
||||
show_explicitly_enabled "${enable_backtrace}" "3m GC backtraces"
|
||||
|
||||
show_explicitly_disabled "${enable_float}" "Single-precision floats"
|
||||
|
@ -2234,8 +2165,6 @@ show_explicitly_enabled "${enable_pthread}" "pthreads"
|
|||
show_explicitly_enabled "${enable_oskit}" "OSKit"
|
||||
show_explicitly_enabled "${enable_smalloskit}" "OSKit small mode"
|
||||
|
||||
show_explicitly_enabled "${enable_perl}" "Perl"
|
||||
|
||||
show_explicitly_enabled "${enable_gprof}" "gprof"
|
||||
show_explicitly_enabled "${enable_gcov}" "gcov"
|
||||
|
||||
|
@ -2270,8 +2199,6 @@ INCLUDEDEP="#"
|
|||
WX_MMD_FLAG=
|
||||
|
||||
PREFLAGS="$CPPFLAGS"
|
||||
MZRT_CGC_FLAGS=""
|
||||
LIBATOM="LIBATOM_NONE"
|
||||
|
||||
OWN_LIBFFI="ON"
|
||||
|
||||
|
@ -3633,51 +3560,6 @@ if test "$CC" = "gcc" ; then
|
|||
DYN_CFLAGS="-fPIC"
|
||||
fi
|
||||
|
||||
if test "${enable_perl}" = "yes" ; then
|
||||
# Extract the first word of "perl", so it can be a program name with args.
|
||||
set dummy perl; ac_word=$2
|
||||
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_path_PERL+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
case $PERL in
|
||||
[\\/]* | ?:[\\/]*)
|
||||
ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
|
||||
;;
|
||||
*)
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
||||
ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
|
||||
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
PERL=$ac_cv_path_PERL
|
||||
if test -n "$PERL"; then
|
||||
{ echo "$as_me:$LINENO: result: $PERL" >&5
|
||||
echo "${ECHO_T}$PERL" >&6; }
|
||||
else
|
||||
{ echo "$as_me:$LINENO: result: no" >&5
|
||||
echo "${ECHO_T}no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
else
|
||||
PERL=""
|
||||
fi
|
||||
|
||||
if test "$REZ" = '' ; then
|
||||
REZ=/Developer/Tools/Rez
|
||||
fi
|
||||
|
@ -3883,7 +3765,6 @@ case $OS in
|
|||
*FreeBSD)
|
||||
LIBS="$LIBS -rdynamic"
|
||||
DYN_CFLAGS="-fPIC"
|
||||
GC_THREADS_FLAG="-DGC_FREEBSD_THREADS"
|
||||
enable_pthread=yes
|
||||
;;
|
||||
OpenBSD)
|
||||
|
@ -3904,7 +3785,6 @@ case $OS in
|
|||
Linux)
|
||||
LIBS="$LIBS -ldl -lm -rdynamic"
|
||||
DYN_CFLAGS="-fPIC"
|
||||
GC_THREADS_FLAG="-DGC_LINUX_THREADS"
|
||||
STRIP_DEBUG="strip -S"
|
||||
case `$UNAME -m` in
|
||||
#Required for CentOS 4.6
|
||||
|
@ -3993,8 +3873,6 @@ case $OS in
|
|||
|
||||
SO_SUFFIX=.dylib
|
||||
|
||||
GC_THREADS_FLAG="-DGC_DARWIN_THREADS"
|
||||
|
||||
gcc_vers_three=`${CC} -v 2>&1 | grep "version [3-9][.]"`
|
||||
if test "$gcc_vers_three" = "" ; then
|
||||
# gcc 2.95.2
|
||||
|
@ -5214,20 +5092,6 @@ if test "${enable_backtrace}" = "yes" ; then
|
|||
GC2OPTIONS="$GC2OPTIONS -DMZ_GC_BACKTRACE"
|
||||
fi
|
||||
|
||||
if test "${enable_compact}" = "yes" ; then
|
||||
GC2OPTIONS="$GC2OPTIONS -DUSE_COMPACT_3M_GC"
|
||||
enable_account=no
|
||||
enable_memtrace=no
|
||||
fi
|
||||
|
||||
if test "${enable_account}" = "yes" ; then
|
||||
GC2OPTIONS="$GC2OPTIONS -DNEWGC_BTC_ACCOUNT"
|
||||
fi
|
||||
|
||||
if test "${enable_memtrace}" = "yes" ; then
|
||||
GC2OPTIONS="$GC2OPTIONS -DNEWGC_MEMORY_TRACE"
|
||||
fi
|
||||
|
||||
LFS_CFLAGS=`getconf LFS_CFLAGS 2> /dev/null`
|
||||
if test "${LFS_CFLAGS}" != "" ; then
|
||||
echo "Large-file support: ${LFS_CFLAGS}"
|
||||
|
@ -8243,16 +8107,6 @@ _ACEOF
|
|||
|
||||
fi
|
||||
|
||||
############### GC2_PLACES_TESTING ###################
|
||||
|
||||
if test "${enable_gc2_places_testing}" = "yes" ; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define GC2_PLACES_TESTING 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
############### places ###################
|
||||
|
||||
if test "${enable_parallel_by_default}" = "yes" ; then
|
||||
|
@ -8290,8 +8144,6 @@ fi
|
|||
############### OS threads ###################
|
||||
|
||||
if test "${enable_mzrt}" = "yes" ; then
|
||||
MZRT_CGC_FLAGS="$GC_THREADS_FLAG -DTHREAD_LOCAL_ALLOC"
|
||||
LIBATOM="LIBATOM_USE"
|
||||
enable_pthread=yes
|
||||
fi
|
||||
|
||||
|
@ -8633,9 +8485,6 @@ LIBS="$LIBS $EXTRALIBS"
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -8658,9 +8507,12 @@ if test "${enable_shared}" = "yes" ; then
|
|||
ac_configure_args="$ac_configure_args --enable-shared"
|
||||
fi
|
||||
|
||||
if test "${LIBATOM}" = "LIBATOM_USE" ; then
|
||||
ac_aux_dir=
|
||||
for ac_dir in racket/gc/libatomic_ops "$srcdir"/racket/gc/libatomic_ops ; do
|
||||
FOREIGNTARGET=
|
||||
FOREIGN_IF_USED="FOREIGN_NOT_USED"
|
||||
if test -d "${srcdir}/foreign" && test "${enable_foreign}" = "yes" ; then
|
||||
if test "${have_libffi}" != "yes" ; then
|
||||
ac_aux_dir=
|
||||
for ac_dir in foreign/libffi "$srcdir"/foreign/libffi ; do
|
||||
if test -f "$ac_dir/install-sh"; then
|
||||
ac_aux_dir=$ac_dir
|
||||
ac_install_sh="$ac_aux_dir/install-sh -c"
|
||||
|
@ -8676,8 +8528,8 @@ for ac_dir in racket/gc/libatomic_ops "$srcdir"/racket/gc/libatomic_ops ; do
|
|||
fi
|
||||
done
|
||||
if test -z "$ac_aux_dir"; then
|
||||
{ { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in racket/gc/libatomic_ops \"$srcdir\"/racket/gc/libatomic_ops " >&5
|
||||
echo "$as_me: error: cannot find install-sh or install.sh in racket/gc/libatomic_ops \"$srcdir\"/racket/gc/libatomic_ops " >&2;}
|
||||
{ { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in foreign/libffi \"$srcdir\"/foreign/libffi " >&5
|
||||
echo "$as_me: error: cannot find install-sh or install.sh in foreign/libffi \"$srcdir\"/foreign/libffi " >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
|
@ -8690,14 +8542,6 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
|
|||
ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
|
||||
|
||||
|
||||
subdirs="$subdirs racket/gc/libatomic_ops"
|
||||
|
||||
fi
|
||||
|
||||
FOREIGNTARGET=
|
||||
FOREIGN_IF_USED="FOREIGN_NOT_USED"
|
||||
if test -d "${srcdir}/foreign" && test "${enable_foreign}" = "yes" ; then
|
||||
if test "${have_libffi}" != "yes" ; then
|
||||
subdirs="$subdirs foreign/libffi"
|
||||
|
||||
fi
|
||||
|
@ -9387,7 +9231,6 @@ EXEEXT!$EXEEXT$ac_delim
|
|||
OBJEXT!$OBJEXT$ac_delim
|
||||
CPP!$CPP$ac_delim
|
||||
RANLIB!$RANLIB$ac_delim
|
||||
PERL!$PERL$ac_delim
|
||||
GREP!$GREP$ac_delim
|
||||
EGREP!$EGREP$ac_delim
|
||||
PREFLAGS!$PREFLAGS$ac_delim
|
||||
|
@ -9429,8 +9272,6 @@ FRAMEWORK_PREFIX!$FRAMEWORK_PREFIX$ac_delim
|
|||
INSTALL_ORIG_TREE!$INSTALL_ORIG_TREE$ac_delim
|
||||
EXE_SUFFIX!$EXE_SUFFIX$ac_delim
|
||||
SO_SUFFIX!$SO_SUFFIX$ac_delim
|
||||
MZRT_CGC_FLAGS!$MZRT_CGC_FLAGS$ac_delim
|
||||
LIBATOM!$LIBATOM$ac_delim
|
||||
OWN_LIBFFI!$OWN_LIBFFI$ac_delim
|
||||
LIBSFX!$LIBSFX$ac_delim
|
||||
WXLIBS!$WXLIBS$ac_delim
|
||||
|
@ -9438,6 +9279,9 @@ WXVARIANT!$WXVARIANT$ac_delim
|
|||
ICP!$ICP$ac_delim
|
||||
MRLIBINSTALL!$MRLIBINSTALL$ac_delim
|
||||
LIBFINISH!$LIBFINISH$ac_delim
|
||||
MAKE_GRACKET!$MAKE_GRACKET$ac_delim
|
||||
MAKE_PLOT!$MAKE_PLOT$ac_delim
|
||||
MAKE_COPYTREE!$MAKE_COPYTREE$ac_delim
|
||||
_ACEOF
|
||||
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
|
||||
|
@ -9479,9 +9323,6 @@ _ACEOF
|
|||
ac_delim='%!_!# '
|
||||
for ac_last_try in false false false false false :; do
|
||||
cat >conf$$subs.sed <<_ACEOF
|
||||
MAKE_GRACKET!$MAKE_GRACKET$ac_delim
|
||||
MAKE_PLOT!$MAKE_PLOT$ac_delim
|
||||
MAKE_COPYTREE!$MAKE_COPYTREE$ac_delim
|
||||
MAKE_FINISH!$MAKE_FINISH$ac_delim
|
||||
WXPRECOMP!$WXPRECOMP$ac_delim
|
||||
USE_WXPRECOMP!$USE_WXPRECOMP$ac_delim
|
||||
|
@ -9514,7 +9355,7 @@ LIBOBJS!$LIBOBJS$ac_delim
|
|||
LTLIBOBJS!$LTLIBOBJS$ac_delim
|
||||
_ACEOF
|
||||
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 33; then
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 30; then
|
||||
break
|
||||
elif $ac_last_try; then
|
||||
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
|
||||
|
@ -9972,6 +9813,9 @@ if test "$no_recursion" != yes; then
|
|||
ac_prev=prefix ;;
|
||||
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
|
||||
;;
|
||||
# Strip away all feature choices
|
||||
-enable* | --enable* | -disable* | --disable*)
|
||||
;;
|
||||
*)
|
||||
case $ac_arg in
|
||||
*\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
||||
|
|
|
@ -95,7 +95,6 @@ racketlib:
|
|||
$(MAKE) mzlibrary
|
||||
|
||||
dynlib:
|
||||
cd src; $(MAKE) mzheaders
|
||||
cd dynsrc; $(MAKE) dynlib
|
||||
|
||||
dynexample:
|
||||
|
@ -109,6 +108,9 @@ oe:
|
|||
g-c:
|
||||
cd @GCDIR@; $(MAKE) ../libmzgc.@LIBSFX@
|
||||
|
||||
exports:
|
||||
cd src; $(MAKE) mzheaders
|
||||
|
||||
sproc-extra-lib:
|
||||
cd @GCDIR@; $(MAKE) sproc.@LTO@
|
||||
$(MAKE) sproc.@LTO@
|
||||
|
@ -198,10 +200,13 @@ starter: mzstart.exe
|
|||
exn:
|
||||
$(MAKE) $(srcdir)/src/schexn.h
|
||||
$(MAKE) $(collectsdir)/scheme/private/kernstruct.rkt
|
||||
|
||||
|
||||
STARTUPDEST = startup.inc
|
||||
CSTARTUPDEST = cstartup.inc
|
||||
|
||||
startup:
|
||||
$(MAKE) $(srcdir)/src/$(STARTUPDEST)
|
||||
cstartup:
|
||||
$(MAKE) $(srcdir)/src/$(CSTARTUPDEST)
|
||||
|
||||
total_startup:
|
||||
|
@ -225,9 +230,10 @@ $(srcdir)/src/schexn.h: $(srcdir)/src/makeexn
|
|||
$(collectsdir)/scheme/private/kernstruct.rkt: $(srcdir)/src/makeexn
|
||||
./racket@CGC@ -um $(srcdir)/src/makeexn kernstruct $(collectsdir)/scheme/private/kernstruct.rkt
|
||||
|
||||
|
||||
$(srcdir)/src/$(STARTUPDEST): $(srcdir)/src/startup.rktl $(srcdir)/src/sstoinct.rkt
|
||||
racket -cu $(srcdir)/src/sstoinct.rkt < $(srcdir)/src/startup.rktl > $(srcdir)/src/$(CSTARTUPDEST)
|
||||
$(srcdir)/src/$(CSTARTUPDEST): $(srcdir)/src/startup.rktl $(srcdir)/src/schvers.h $(srcdir)/src/schminc.h
|
||||
./racket@CGC@ -cqu $(srcdir)/src/sstoinc.rkt $(CSTARTUPEXTRA) $(srcdir)/src/$(CSTARTUPDEST) < $(srcdir)/src/startup.rktl
|
||||
racket -cu $(srcdir)/src/sstoinc.rkt $(CSTARTUPEXTRA) $(srcdir)/src/$(CSTARTUPDEST) < $(srcdir)/src/startup.rktl
|
||||
$(srcdir)/src/mzmark.c: $(srcdir)/src/mzmarksrc.c $(srcdir)/src/mkmark.rkt
|
||||
racket -cu $(srcdir)/src/mkmark.rkt < $(srcdir)/src/mzmarksrc.c > $(srcdir)/src/mzmark.c
|
||||
|
||||
|
|
|
@ -23,57 +23,48 @@ AC_INIT([Racket])
|
|||
AC_CONFIG_SRCDIR(racket/src/bignum.c)
|
||||
AC_CONFIG_HEADERS([racket/mzconfig.h])
|
||||
|
||||
AC_ARG_ENABLE(gracket, [ --enable-gracket compile GRacket as well as Racket (enabled by default)], , enable_gracket=yes )
|
||||
AC_ARG_ENABLE(plot, [ --enable-plot compile plot libraries (enabled by default)], , enable_plot=yes )
|
||||
AC_ARG_ENABLE(gracket, [ --enable-gracket build GRacket as well as Racket (enabled by default)], , enable_gracket=yes )
|
||||
AC_ARG_ENABLE(jit, [ --enable-jit support JIT compiler (enabled by default)], , enable_jit=yes)
|
||||
AC_ARG_ENABLE(foreign, [ --enable-foreign support foreign calls (enabled by default)], , enable_foreign=yes)
|
||||
AC_ARG_ENABLE(places, [ --enable-places support places (3m only; usually enabled by default)])
|
||||
AC_ARG_ENABLE(futures, [ --enable-futures support futures (usually enabled by default)])
|
||||
AC_ARG_ENABLE(plot, [ --enable-plot support plot libraries (enabled by default)], , enable_plot=yes )
|
||||
AC_ARG_ENABLE(float, [ --enable-float support single-precision floats (enabled by default)], , enable_float=yes)
|
||||
AC_ARG_ENABLE(floatinstead, [ --enable-floatinstead use single-precision by default])
|
||||
|
||||
AC_ARG_ENABLE(origtree,[ --enable-origtree install with original directory structure])
|
||||
|
||||
AC_ARG_ENABLE(docs, [ --enable-docs build docs on install (enabled by default)], , enable_docs=yes)
|
||||
AC_ARG_ENABLE(usersetup, [ --enable-usersetup setup user-specific files on install])
|
||||
AC_ARG_ENABLE(shared, [ --enable-shared create shared libraries])
|
||||
AC_ARG_ENABLE(dynlib, [ --enable-dynlib same as --enable-shared])
|
||||
AC_ARG_ENABLE(lt, [ --enable-lt=<prog> use <prog> instead of bundled libtool], LIBTOOLPROG="$enableval", enable_lt=no)
|
||||
|
||||
AC_ARG_ENABLE(origtree,[ --enable-origtree install with original directory structure])
|
||||
|
||||
AC_ARG_ENABLE(jit, [ --enable-jit compile JIT support (enabled by default)], , enable_jit=yes)
|
||||
|
||||
AC_ARG_ENABLE(foreign, [ --enable-foreign compile foreign support (enabled by default)], , enable_foreign=yes)
|
||||
AC_ARG_ENABLE(libffi, [ --enable-libffi use installed libffi (enabled by default)], , enable_libffi=yes)
|
||||
|
||||
AC_ARG_ENABLE(places, [ --enable-places compile places support (usually enabled by default)])
|
||||
AC_ARG_ENABLE(futures, [ --enable-futures compile futures support (usually enabled by default)])
|
||||
|
||||
AC_ARG_ENABLE(cgcdefault, [ --enable-cgcdefault use CGC (Boehm or Senora) as default build])
|
||||
AC_ARG_ENABLE(sgc, [ --enable-sgc use Senora GC instead of the Boehm GC])
|
||||
AC_ARG_ENABLE(sgcdebug,[ --enable-sgcdebug use Senora GC for debugging])
|
||||
AC_ARG_ENABLE(account, [ --enable-account 3m: use memory-accounting GC (enabled by default)], , enable_account=yes)
|
||||
AC_ARG_ENABLE(compact, [ --enable-compact 3m: use compact GC (no accounting)])
|
||||
AC_ARG_ENABLE(backtrace, [ --enable-backtrace 3m: support GC backtrace dumps])
|
||||
|
||||
AC_ARG_ENABLE(float, [ --enable-float support single-precision floats (enabled by default)], , enable_float=yes)
|
||||
AC_ARG_ENABLE(floatinstead, [ --enable-floatinstead compile to use single-precision by default])
|
||||
|
||||
AC_ARG_ENABLE(pthread, [ --enable-pthread link with pthreads])
|
||||
AC_ARG_ENABLE(stackup, [ --enable-stackup assume "up" if stack direction cannot be determined])
|
||||
AC_ARG_ENABLE(bigendian, [ --enable-bigendian assume "big" if endianness cannot be determined])
|
||||
|
||||
AC_ARG_ENABLE(oskit, [ --enable-oskit compile OSKit-based Racket kernel])
|
||||
AC_ARG_ENABLE(smalloskit, [ --enable-smalloskit compile small OSKit-based Racket kernel])
|
||||
|
||||
AC_ARG_ENABLE(perl, [ --enable-perl use perl to regenerate certain sources])
|
||||
|
||||
AC_ARG_ENABLE(gprof, [ --enable-gprof compile for profiling with gprof (gcc only)])
|
||||
AC_ARG_ENABLE(gcov, [ --enable-gcov compile to gather gcov statistics (gcc3 only)])
|
||||
|
||||
AC_ARG_ENABLE(noopt, [ --enable-noopt drop -O C flags])
|
||||
|
||||
AC_ARG_ENABLE(enable_sdk, [ --enable-sdk=<path> use Mac OS X 10.4 SDK directory])
|
||||
|
||||
AC_ARG_ENABLE(xonx, [ --enable-xonx compile Unix style (e.g., use Gtk) for Mac OS X])
|
||||
AC_ARG_ENABLE(xonx, [ --enable-xonx use Unix style (e.g., use Gtk) for Mac OS X])
|
||||
AC_ARG_ENABLE(libfw, [ --enable-libfw install Mac OS X frameworks to /Library/Frameworks])
|
||||
AC_ARG_ENABLE(libfw, [ --enable-userfw install Mac OS X frameworks to ~/Library/Frameworks])
|
||||
AC_ARG_ENABLE(macprefix, [ --enable-macprefix allow --prefix with a Mac OS X install])
|
||||
AC_ARG_ENABLE(mac64, [ --enable-mac64 do not force 32-bit build])
|
||||
|
||||
AC_ARG_ENABLE(gc2_places_testing, [ --enable-gcplacestest compile GC places testing support])
|
||||
AC_ARG_ENABLE(cgcdefault, [ --enable-cgcdefault use CGC (Boehm or Senora) as default build])
|
||||
AC_ARG_ENABLE(sgc, [ --enable-sgc use Senora GC instead of the Boehm GC])
|
||||
AC_ARG_ENABLE(sgcdebug,[ --enable-sgcdebug use Senora GC for debugging])
|
||||
AC_ARG_ENABLE(backtrace, [ --enable-backtrace 3m: support GC backtrace dumps])
|
||||
|
||||
AC_ARG_ENABLE(pthread, [ --enable-pthread link with pthreads])
|
||||
AC_ARG_ENABLE(stackup, [ --enable-stackup assume "up" if stack direction cannot be determined])
|
||||
AC_ARG_ENABLE(bigendian, [ --enable-bigendian assume "big" if endianness cannot be determined])
|
||||
|
||||
# AC_ARG_ENABLE(oskit, [ --enable-oskit compile OSKit-based Racket kernel])
|
||||
# AC_ARG_ENABLE(smalloskit, [ --enable-smalloskit compile small OSKit-based Racket kernel])
|
||||
|
||||
AC_ARG_ENABLE(gprof, [ --enable-gprof compile for profiling with gprof (gcc only)])
|
||||
AC_ARG_ENABLE(gcov, [ --enable-gcov compile to gather gcov statistics (gcc3 only)])
|
||||
|
||||
AC_ARG_ENABLE(noopt, [ --enable-noopt drop -O C flags])
|
||||
|
||||
###### Get OS Type #######
|
||||
|
||||
|
@ -147,22 +138,6 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
if test "${enable_gc2_places_testing}" = "yes" ; then
|
||||
enable_shared=yes
|
||||
enable_places=yes
|
||||
fi
|
||||
|
||||
|
||||
# Hack for the implementor:
|
||||
if test "${enable_perl}" = "" ; then
|
||||
if test "$USER" = "mflatt" ; then
|
||||
enable_perl=yes
|
||||
fi
|
||||
if test "$USER" = "matthewf" ; then
|
||||
enable_perl=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${enable_iconv}" = "" ; then
|
||||
enable_iconv=yes
|
||||
fi
|
||||
|
@ -287,11 +262,8 @@ show_explicitly_disabled "${enable_places}" Places
|
|||
show_explicitly_enabled "${enable_futures}" Futures
|
||||
show_explicitly_disabled "${enable_futures}" Futures
|
||||
|
||||
show_explicitly_enabled "${enable_gc2_places_testing}" "GC2 Places Testing"
|
||||
|
||||
show_explicitly_enabled "${enable_sgc}" SGC
|
||||
show_explicitly_enabled "${enable_sgcdebug}" "SGC debug mode"
|
||||
show_explicitly_enabled "${enable_compact}" "Compact 3m GC"
|
||||
show_explicitly_enabled "${enable_backtrace}" "3m GC backtraces"
|
||||
|
||||
show_explicitly_disabled "${enable_float}" "Single-precision floats"
|
||||
|
@ -301,8 +273,6 @@ show_explicitly_enabled "${enable_pthread}" "pthreads"
|
|||
show_explicitly_enabled "${enable_oskit}" "OSKit"
|
||||
show_explicitly_enabled "${enable_smalloskit}" "OSKit small mode"
|
||||
|
||||
show_explicitly_enabled "${enable_perl}" "Perl"
|
||||
|
||||
show_explicitly_enabled "${enable_gprof}" "gprof"
|
||||
show_explicitly_enabled "${enable_gcov}" "gcov"
|
||||
|
||||
|
@ -337,8 +307,6 @@ INCLUDEDEP="#"
|
|||
WX_MMD_FLAG=
|
||||
|
||||
PREFLAGS="$CPPFLAGS"
|
||||
MZRT_CGC_FLAGS=""
|
||||
LIBATOM="LIBATOM_NONE"
|
||||
|
||||
OWN_LIBFFI="ON"
|
||||
|
||||
|
@ -446,12 +414,6 @@ if test "$CC" = "gcc" ; then
|
|||
DYN_CFLAGS="-fPIC"
|
||||
fi
|
||||
|
||||
if test "${enable_perl}" = "yes" ; then
|
||||
AC_PATH_PROG(PERL,perl)
|
||||
else
|
||||
PERL=""
|
||||
fi
|
||||
|
||||
if test "$REZ" = '' ; then
|
||||
REZ=/Developer/Tools/Rez
|
||||
fi
|
||||
|
@ -516,7 +478,6 @@ case $OS in
|
|||
*FreeBSD)
|
||||
LIBS="$LIBS -rdynamic"
|
||||
DYN_CFLAGS="-fPIC"
|
||||
GC_THREADS_FLAG="-DGC_FREEBSD_THREADS"
|
||||
enable_pthread=yes
|
||||
;;
|
||||
OpenBSD)
|
||||
|
@ -537,7 +498,6 @@ case $OS in
|
|||
Linux)
|
||||
LIBS="$LIBS -ldl -lm -rdynamic"
|
||||
DYN_CFLAGS="-fPIC"
|
||||
GC_THREADS_FLAG="-DGC_LINUX_THREADS"
|
||||
STRIP_DEBUG="strip -S"
|
||||
case `$UNAME -m` in
|
||||
#Required for CentOS 4.6
|
||||
|
@ -626,8 +586,6 @@ case $OS in
|
|||
|
||||
SO_SUFFIX=.dylib
|
||||
|
||||
GC_THREADS_FLAG="-DGC_DARWIN_THREADS"
|
||||
|
||||
[ gcc_vers_three=`${CC} -v 2>&1 | grep "version [3-9][.]"` ]
|
||||
if test "$gcc_vers_three" = "" ; then
|
||||
# gcc 2.95.2
|
||||
|
@ -909,20 +867,6 @@ if test "${enable_backtrace}" = "yes" ; then
|
|||
GC2OPTIONS="$GC2OPTIONS -DMZ_GC_BACKTRACE"
|
||||
fi
|
||||
|
||||
if test "${enable_compact}" = "yes" ; then
|
||||
GC2OPTIONS="$GC2OPTIONS -DUSE_COMPACT_3M_GC"
|
||||
enable_account=no
|
||||
enable_memtrace=no
|
||||
fi
|
||||
|
||||
if test "${enable_account}" = "yes" ; then
|
||||
GC2OPTIONS="$GC2OPTIONS -DNEWGC_BTC_ACCOUNT"
|
||||
fi
|
||||
|
||||
if test "${enable_memtrace}" = "yes" ; then
|
||||
GC2OPTIONS="$GC2OPTIONS -DNEWGC_MEMORY_TRACE"
|
||||
fi
|
||||
|
||||
LFS_CFLAGS=`getconf LFS_CFLAGS 2> /dev/null`
|
||||
if test "${LFS_CFLAGS}" != "" ; then
|
||||
echo "Large-file support: ${LFS_CFLAGS}"
|
||||
|
@ -998,12 +942,6 @@ if test "${endianness}" = "big" ; then
|
|||
AC_DEFINE(SCHEME_BIG_ENDIAN,1,[Big endian])
|
||||
fi
|
||||
|
||||
############### GC2_PLACES_TESTING ###################
|
||||
|
||||
if test "${enable_gc2_places_testing}" = "yes" ; then
|
||||
AC_DEFINE(GC2_PLACES_TESTING,1,[GC2 Places Testing])
|
||||
fi
|
||||
|
||||
############### places ###################
|
||||
|
||||
if test "${enable_parallel_by_default}" = "yes" ; then
|
||||
|
@ -1033,8 +971,6 @@ fi
|
|||
############### OS threads ###################
|
||||
|
||||
if test "${enable_mzrt}" = "yes" ; then
|
||||
MZRT_CGC_FLAGS="$GC_THREADS_FLAG -DTHREAD_LOCAL_ALLOC"
|
||||
LIBATOM="LIBATOM_USE"
|
||||
enable_pthread=yes
|
||||
fi
|
||||
|
||||
|
@ -1197,7 +1133,6 @@ AC_SUBST(PROFFLAGS)
|
|||
AC_SUBST(LDFLAGS)
|
||||
AC_SUBST(CPP)
|
||||
AC_SUBST(SED)
|
||||
AC_SUBST(PERL)
|
||||
AC_SUBST(AS)
|
||||
AC_SUBST(RANLIB)
|
||||
AC_SUBST(AR)
|
||||
|
@ -1236,8 +1171,6 @@ AC_SUBST(FRAMEWORK_PREFIX)
|
|||
AC_SUBST(INSTALL_ORIG_TREE)
|
||||
AC_SUBST(EXE_SUFFIX)
|
||||
AC_SUBST(SO_SUFFIX)
|
||||
AC_SUBST(MZRT_CGC_FLAGS)
|
||||
AC_SUBST(LIBATOM)
|
||||
AC_SUBST(OWN_LIBFFI)
|
||||
|
||||
AC_SUBST(LIBSFX)
|
||||
|
@ -1305,15 +1238,11 @@ if test "${enable_shared}" = "yes" ; then
|
|||
ac_configure_args="$ac_configure_args --enable-shared"
|
||||
fi
|
||||
|
||||
if test "${LIBATOM}" = "LIBATOM_USE" ; then
|
||||
AC_CONFIG_AUX_DIR( racket/gc/libatomic_ops )
|
||||
AC_CONFIG_SUBDIRS( racket/gc/libatomic_ops )
|
||||
fi
|
||||
|
||||
FOREIGNTARGET=
|
||||
FOREIGN_IF_USED="FOREIGN_NOT_USED"
|
||||
if test -d "${srcdir}/foreign" && test "${enable_foreign}" = "yes" ; then
|
||||
if test "${have_libffi}" != "yes" ; then
|
||||
AC_CONFIG_AUX_DIR( foreign/libffi )
|
||||
AC_CONFIG_SUBDIRS( foreign/libffi )
|
||||
fi
|
||||
FOREIGNTARGET="foreign-stuff"
|
||||
|
|
|
@ -37,9 +37,6 @@ VPATH= $(srcdir)
|
|||
AO_SRC_DIR=$(srcdir)/libatomic_ops
|
||||
AO_INSTALL_DIR=$(srcdir)/libatomic_ops
|
||||
|
||||
LIBATOM_USE=libatomic_ops/libatomic_ops.a
|
||||
LIBATOM_NONE=
|
||||
|
||||
# for version.mak:
|
||||
mainsrcdir = @srcdir@/../..
|
||||
@INCLUDEDEP@ @srcdir@/../version.mak
|
||||
|
@ -47,7 +44,7 @@ mainsrcdir = @srcdir@/../..
|
|||
# compiler options; mainly used to allow importing options
|
||||
OPTIONS=@OPTIONS@ @CGCOPTIONS@
|
||||
|
||||
BASEFLAGS= -I$(srcdir)/include -I$(AO_INSTALL_DIR)/src @CFLAGS@ @COMPFLAGS@ @PREFLAGS@ @MZRT_CGC_FLAGS@
|
||||
BASEFLAGS= -I$(srcdir)/include -I$(AO_INSTALL_DIR)/src @CFLAGS@ @COMPFLAGS@ @PREFLAGS@
|
||||
CFLAGS= $(BASEFLAGS) @PROFFLAGS@ $(OPTIONS) -DNO_EXECUTE_PERMISSION -DSILENT -DNO_GETENV -DLARGE_CONFIG -DATOMIC_UNCOLLECTABLE -DINITIAL_MARK_STACK_SIZE=8192
|
||||
|
||||
# To build the parallel collector on Linux, add to the above:
|
||||
|
@ -498,7 +495,7 @@ tests:
|
|||
mkdir tests
|
||||
|
||||
# PLTSCHEME: make ../libmzgc.a, and use $(AR), $(RANLIB), and @LIBSFX@:
|
||||
base_lib ../libmzgc.@LIBSFX@: $(@LIBATOM@) $(OBJS) dyn_load.@LTO@ $(UTILS)
|
||||
base_lib ../libmzgc.@LIBSFX@: $(OBJS) dyn_load.@LTO@ $(UTILS)
|
||||
$(NICEAR) $(AR) $(ARFLAGS) ../libmzgc.@LIBSFX@ $(OBJS) dyn_load.@LTO@
|
||||
$(RANLIB) ../libmzgc.@LIBSFX@
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
Originally written by Hans Boehm, with some platform-dependent code
|
||||
imported from the Boehm-Demers-Weiser GC, where it was contributed
|
||||
by many others.
|
||||
|
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
|
@ -1,206 +0,0 @@
|
|||
2008-02-11 Hans Boehm <Hans.Boehm@hp.com>
|
||||
(Really Ian Wienand & Debian maintainers)
|
||||
* src/atomic_ops/sysdeps/gcc/x86.h
|
||||
(AO_compare_double_and_swap_double_full): Correctly account for
|
||||
ebx usage with PIC.
|
||||
|
||||
2008-01-09 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* src/atomic_ops/sysdeps/standard_ao_double_t.h: Let
|
||||
double_ptr_storage default to long long; define everywhere.
|
||||
|
||||
2008-01-08 Hans Boehm <Hans.Boehm@hp.com> (Really mostly Joerg Wagner)
|
||||
* src/atomic_ops/sysdeps/msftc/x86.h: Conditionally add
|
||||
compare_double_and_swap_double.
|
||||
|
||||
2008-01-06 Hans Boehm <Hans.Boehm@hp.com> (Really mostly Joerg Wagner)
|
||||
* src/atomic_ops/generalize.h: Add test_and_set generalizations,
|
||||
Add AO_double_compare_and_swap generalizations.
|
||||
* src/atomic_ops/sysdeps/armcc/arm_v6.h: New file.
|
||||
* src/atomic_ops/sysdeps/gcc/arm.h: Handle V6 and V7.
|
||||
* src/atomic_ops/sysdeps/gcc/x86.h,
|
||||
src/atomic_ops/sysdeps/{gcc,msftc}/x86_64.h: Conditionally add
|
||||
compare_double_and_swap_double, commented out for msftc.
|
||||
* src/atomic_ops/sysdeps/standard_ao_double_t.h: Add
|
||||
double_ptr_storage field.
|
||||
|
||||
2008-01-03 Hans Boehm <Hans.Boehm@hp.com>
|
||||
(Merge from separate atomic_ops tree)
|
||||
* src/atomic_ops/sysdeps/gcc/x86.h: Define correct macro for
|
||||
double-width cas, and fix its implementation.
|
||||
* doc/README.txt: Clarify use of _full. Add more warnings about
|
||||
data dependencies.
|
||||
|
||||
2008-01-02 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* src/atomic_ops/sysdeps/gcc/powerpc.h (AO_load_acquire): Add
|
||||
%X1 modifier to support indexed addressing.
|
||||
|
||||
2007-07-23 Hans Boehm <Hans.Boehm@hp.com> (really Jim Marshall)
|
||||
* src/atomic_ops/sysdeps/msftc/x86.h (_InterlockedExchangeAdd): Define
|
||||
for VC++6.
|
||||
|
||||
2007-07-05 Andreas Tobler <a.tobler@schweiz.org>
|
||||
* src/atomic_ops.h: Check for __powerpc64__ and __ppc64__ to include
|
||||
powerpc.h.
|
||||
|
||||
2007-06-26 Hans Boehm <Hans.Boehm@hp.com> (really Luca Barbato)
|
||||
* src/atomic_ops/sysdeps/gcc/powerpc.h (AO_load_acquire): Add
|
||||
64-bit version.
|
||||
|
||||
2007-06-13 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* src/atomic_ops.h: include stddef.h
|
||||
|
||||
2007-06-06 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* src/atomic_ops/sysdeps/msftc/x86_64.h: New file.
|
||||
* src/atomic_ops.h: Add test for msftc/x86_64.h.
|
||||
* src/atomic_ops/sysdeps/msftc/x86.h: Complain for _WIN64.
|
||||
* src/atomic_ops/sysdeps/Makefile.am: Add x86_64.h.
|
||||
* src/atomic_ops/sysdeps/Makefile.in: Regenerate.
|
||||
* src/atomic_ops/sysdeps/aligned_atomic_load_store.h,
|
||||
src/atomic_ops/sysdeps/int_aligned_atomic_load_store.h,
|
||||
src/atomic_ops/sysdeps/short_aligned_atomic_load_store.h:
|
||||
Replace unsigned long cast with size_t.
|
||||
|
||||
2007-05-17 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* src/atomic_ops/sysdeps/gcc/hppa.h (AO_test_and_set_full):
|
||||
Add cast for return.
|
||||
|
||||
2007-05-14 Hans Boehm <Hans.Boehm@hp.com>
|
||||
doc/README.txt: Update to reflect C++0x effort.
|
||||
|
||||
2007-05-07 Hans Boehm <Hans.Boehm@hp.com> (with help from Philipp Zambelli)
|
||||
* src/atomic_ops/sysdeps/msftc/x86.h: Don't just assume that mfence
|
||||
is present.
|
||||
* src/atomic_ops/sysdeps/gcc/arm.h (AO_test_and_set_full): Correct
|
||||
oldval type.
|
||||
|
||||
2006-11-09 Earl Chew (Agilent)
|
||||
* msftc/x86.h: Follow Microsoft documentation and include
|
||||
windows.h.
|
||||
|
||||
[1.2 release]
|
||||
|
||||
2006-07-11 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* src/atomic_ops/sysdeps/hpc/ia64.h: Fix typos.
|
||||
|
||||
2006-03-28 Earl Chew (Agilent)
|
||||
* src/atomic_ops/sysdeps/gcc/powerpc.h: Remove unused variable cr.
|
||||
* src/atomic_ops/sysdeps/msftc/x86.h:
|
||||
Use new intrinsics available in MSVC 2003 and MSVC 2005.
|
||||
Use inline assembler to generate mfence and byte sized xchg
|
||||
Use correct prototype for InterlockedCompareExchange.
|
||||
* src/atomic_ops.h: Add test for __PPC__ .
|
||||
* tests/run_parallel.inc: Add simple VxWorks support.
|
||||
* tests/test_atomic.c, tests/test_atomic_include.h: Add prototypes
|
||||
to silence compiler warnings.
|
||||
|
||||
2006-1-13 Hans Boehm <Hans.Boehm@hp.com>
|
||||
*src/atomic_ops/sysdeps/gcc/powerpc.h: Beginnings of 64 bit support.
|
||||
*src/atomic_ops/sysdeps/gcc/x86.h: Use "=q" for AO_test_and_set_full.
|
||||
|
||||
2005-11-4 Hans Boehm <Hans.Boehm@hp.com>
|
||||
*src/atomic_ops/sysdeps/gcc/ia64.h: Include
|
||||
all_acquire_release_volatile.h, instead of just the pointer-sized
|
||||
version.
|
||||
*src/atomic_ops/sysdeps/gcc/ia64.h: Include
|
||||
all_acquire_release_volatile.h and all_atomic_load_store.h,
|
||||
instead of just the pointer-sized versions.
|
||||
|
||||
[1.1 release]
|
||||
|
||||
2005-09-27 Hans Boehm <Hans.Boehm@hp.com>
|
||||
*src/atomic_ops.h: Define AO_CAN_EMUL_CAS for arm.
|
||||
*src/atomic_ops/sysdeps/read_ordered.h: New file, extracted from
|
||||
ordered_except_wr.h.
|
||||
*src/atomic_ops/sysdeps/ordered_except_wr.h: include read_ordered.h
|
||||
instead of duplicating it.
|
||||
*src/atomic_ops/sysdeps/gcc/arm.h: Include read_ordered.h.
|
||||
|
||||
2005-09-16 Hans Boehm <Hans.Boehm@hp.com>
|
||||
*src/atomic_ops/sysdeps/gcc/arm.h: Replace the AO_test_and_set
|
||||
definition with one that might actually work. (Thanks to Kazu
|
||||
Hirata and Paul Brook.)
|
||||
|
||||
2005-08-01 Hans Boehm <Hans.Boehm@hp.com>
|
||||
*src/atomic_ops/Makefile.am: Change function naming from "byte" to
|
||||
"char" (again).
|
||||
|
||||
[1.0 release]
|
||||
|
||||
2005-03-21 Hans Boehm <Hans.Boehm@hp.com>
|
||||
Fix various acquire_release_volatile.h files to reflect the fact
|
||||
that both icc and gcc seem to reorder ordinary memory accesses around
|
||||
volatile accesses early in the compilation. Modify the acquire
|
||||
release test to catch this problem (with high probablity, and only on
|
||||
a multiprocessor).
|
||||
|
||||
2005-03 Hans Boehm <Hans.Boehm@hp.com>
|
||||
Fixes for recently introduced bugs. Update x86 and x86-64 assembly
|
||||
syntax to deal with complaints by some recent gcc versions.
|
||||
|
||||
2005-02 Hans Boehm <Hans.Boehm@hp.com>
|
||||
Added libatomic_ops_gpl library with support for mostly
|
||||
lock-free stack and malloc().
|
||||
|
||||
2005-01 Ian Wienand <ianw@gelato.unsw.edu.au>, Al Stone <ahs3@debian.org>,
|
||||
Hans Boehm <Hans.Boehm@hp.com>
|
||||
Use autoconf, automake, starting with code from Debian package.
|
||||
Don't use libtool.
|
||||
|
||||
2005-01 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* test_and_set_t_is_ao_t.h, test_and_set_t_is_char.h, others:
|
||||
Change most platforms to use byte-wide test-and-set locations.
|
||||
|
||||
2005-01 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* ao_t_is_int.h: Add to trivially support int-wide operations
|
||||
on platforms with int-sized pointers.
|
||||
|
||||
2004-12 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* gcc/powerpc.h: First serious attempt to support PowerPC (with
|
||||
help from Maged Michael and others).
|
||||
|
||||
2004-12 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* sunc/sparc.[hS]: Added minimal supprt for the Sun SPARC compiler.
|
||||
* atomic_ops_sysdeps.S: Add support for platforms that require
|
||||
out-of-line assmebly code.
|
||||
|
||||
2004-10 Hans Boehm <Hans.Boehm@hp.com>
|
||||
More work on char, short, int sized data. Add both
|
||||
compare_double_and_swap_double and compare_and_swap_double.
|
||||
Typically each platform will provide at most one of these.
|
||||
|
||||
2004-07-02 Ranko Zivojnovic
|
||||
Replace both instances of AO_HAVE_NOP_FULL with AO_HAVE_nop_full.
|
||||
|
||||
2004-06 Hans Boehm <Hans.Boehm@hp.com>
|
||||
Start to add atomic_ops primitives for different sized data.
|
||||
|
||||
2003-12-18 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* atomic_ops/sysdeps/acquire_release_volatile.h, atomic_ops.h:
|
||||
Fix support for ecc on IA64. Remove compiler_barrier workaround
|
||||
for gcc 3.4 and later.
|
||||
|
||||
2003-12-17 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* atomic_ops/sysdeps/hpc/{ia64.h,hppa.h},
|
||||
atomic_ops/sysdeps/msftc/x86.h, Makefile, Makefile.atomic_ops,
|
||||
Makefile.atomic_ops.msft, atomic_ops.h: Add initial support
|
||||
for atomic_ops for VC++/Windows/X86 and HP/UX with the HP
|
||||
compiler on PA_RISC and IA64.
|
||||
|
||||
2003-12-09 Hans Boehm <Hans.Boehm@hp.com>
|
||||
|
||||
* many: Install under "atomic_ops" instead of "ao".
|
||||
Change atomic_ops include file structure. Auxiliary include
|
||||
files are all under include/atomic_ops.
|
||||
Fix (hopefully) "make dist" in atomic_ops distribution.
|
||||
Renamed various types to end in _t, though the old versions
|
||||
are still defined for backward compatibility.
|
||||
|
||||
2003-12-08 Carlos O'Donell <carlos@baldric.uwo.ca>
|
||||
|
||||
* ao_sysdeps/gcc/hppa.h: Define AO_CLEAR macro. Change
|
||||
AO_pa_clearable_loc type. Add __ldcw, and __ldcw_align
|
||||
helper macros. AO_test_and_set_full uses helper macros.
|
||||
|
||||
|
||||
Started sometime after version 0.4 release. Currently the format is
|
||||
informal. Eventually should become more GNU-like.
|
|
@ -1,14 +0,0 @@
|
|||
The configuration and build scripts for this package were generated by
|
||||
automake/autoconf. "configure --prefix=<install dir>; make; make install"
|
||||
in this directory should work.
|
||||
|
||||
Note that much of the content of this library is in the header files.
|
||||
|
||||
However two small libraries are built and installed:
|
||||
|
||||
- libatomic_ops.a is a support library, which is not needed on some platforms.
|
||||
This is intended to be usable, under some mild restrictions, in free or
|
||||
proprietary code, as are all the header files. See doc/LICENSING.txt.
|
||||
- libatomic_ops_gpl.a contains some higher level facilities. This code is
|
||||
currently covered by the GPL. The contents currently correspond to
|
||||
the headers atomic_ops_stack.h and atomic_ops_malloc.h.
|
|
@ -1,3 +0,0 @@
|
|||
SUBDIRS = src doc tests
|
||||
|
||||
#distclean-local:
|
|
@ -1,565 +0,0 @@
|
|||
# Makefile.in generated by automake 1.9.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
|
||||
ChangeLog INSTALL NEWS compile config.guess config.sub depcomp \
|
||||
install-sh missing mkinstalldirs
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NEED_ASM_FALSE = @NEED_ASM_FALSE@
|
||||
NEED_ASM_TRUE = @NEED_ASM_TRUE@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAG = @PICFLAG@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
SUBDIRS = src doc tests
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
# PLTSCHEME: don't re-run autoconf or aclocal:
|
||||
# $(top_srcdir)/configure: $(am__configure_deps)
|
||||
# cd $(srcdir) && $(AUTOCONF)
|
||||
# $(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
# cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-recursive ctags \
|
||||
ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
|
||||
dist-tarZ dist-zip distcheck distclean distclean-generic \
|
||||
distclean-recursive distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
#distclean-local:
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -1 +0,0 @@
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
This package provides semi-portable access to hardware provided
|
||||
atomic memory operations. These might allow you to write code:
|
||||
|
||||
- That does more interesting things in signal handlers.
|
||||
- Makes more effective use of multiprocessors by allowing you to write
|
||||
clever lock-free code. Note that such code is very difficult to get
|
||||
right, and will unavoidably be less portable than lock-based code. It
|
||||
ia also not always faster than lock-based code. But it may occasionally
|
||||
be a large performance win.
|
||||
- To experiment with new and much better thread programming paradigms, etc.
|
||||
|
||||
For details and licensing restrictions see the files in the doc
|
||||
subdirectory.
|
1076
src/racket/gc/libatomic_ops/aclocal.m4
vendored
1076
src/racket/gc/libatomic_ops/aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
|
@ -1,142 +0,0 @@
|
|||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand `-c -o'.
|
||||
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file `INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
eat=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we strip `-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
1500
src/racket/gc/libatomic_ops/config.guess
vendored
1500
src/racket/gc/libatomic_ops/config.guess
vendored
File diff suppressed because it is too large
Load Diff
1608
src/racket/gc/libatomic_ops/config.sub
vendored
1608
src/racket/gc/libatomic_ops/config.sub
vendored
File diff suppressed because it is too large
Load Diff
5899
src/racket/gc/libatomic_ops/configure
vendored
5899
src/racket/gc/libatomic_ops/configure
vendored
File diff suppressed because it is too large
Load Diff
|
@ -1,66 +0,0 @@
|
|||
# Process this file with autoconf to produce a configure script.
|
||||
AC_INIT([libatomic_ops],[1.2])
|
||||
AC_CANONICAL_TARGET([])
|
||||
AC_CONFIG_SRCDIR(src/atomic_ops.c)
|
||||
AM_INIT_AUTOMAKE
|
||||
AC_PROG_RANLIB
|
||||
|
||||
AM_CONFIG_HEADER(src/config.h)
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
AM_PROG_AS
|
||||
|
||||
# Checks for functions.
|
||||
AC_FUNC_MMAP
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
# AC_CHECK_HEADERS([ ])
|
||||
|
||||
# Determine PIC flag, adjust default CFLAGS
|
||||
need_asm=false
|
||||
PICFLAG=
|
||||
AC_MSG_CHECKING(Determining PIC compiler flag)
|
||||
if test "$GCC" = yes; then
|
||||
AC_MSG_RESULT(-fPIC)
|
||||
PICFLAG=-fPIC
|
||||
else
|
||||
case "$host" in
|
||||
*-*-hpux*)
|
||||
AC_MSG_RESULT("+Z")
|
||||
PICFLAG="+Z"
|
||||
if test "$GCC" != yes; then
|
||||
CFLAGS="$CFLAGS +O2 -mt"
|
||||
fi
|
||||
;;
|
||||
*-*-solaris*)
|
||||
AC_MSG_RESULT(-Kpic)
|
||||
PICFLAG=-Kpic
|
||||
if test "$GCC" != yes; then
|
||||
CFLAGS="$CFLAGS -O"
|
||||
need_asm=true
|
||||
fi
|
||||
;;
|
||||
*-*-linux*)
|
||||
AC_MSG_RESULT(-fPIC)
|
||||
PICFLAG=-fPIC
|
||||
# Any Linux compiler had better be gcc compatible.
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT("<none>")
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
CFLAGS="$CFLAGS -DNDEBUG"
|
||||
|
||||
AC_SUBST(PICFLAG)
|
||||
AC_SUBST(DEFS)
|
||||
|
||||
AM_CONDITIONAL(NEED_ASM, test x$need_asm = xtrue)
|
||||
|
||||
AC_CONFIG_FILES([Makefile src/Makefile src/atomic_ops/Makefile src/atomic_ops/sysdeps/Makefile doc/Makefile tests/Makefile])
|
||||
AC_CONFIG_COMMANDS([default],[[]],[[PICFLAG=${PICFLAG}
|
||||
CC=${CC}
|
||||
DEFS=${DEFS}]])
|
||||
AC_OUTPUT
|
|
@ -1,530 +0,0 @@
|
|||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2005-07-09.11
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> $depfile
|
||||
echo >> $depfile
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> $depfile
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
|
||||
tmpdepfile="$stripped.u"
|
||||
if test "$libtool" = yes; then
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test -f "$tmpdepfile"; then :
|
||||
else
|
||||
stripped=`echo "$stripped" | sed 's,^.*/,,'`
|
||||
tmpdepfile="$stripped.u"
|
||||
fi
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile"; then
|
||||
outname="$stripped.o"
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# With Tru64 cc, shared objects can also be used to make a
|
||||
# static library. This mecanism is used in libtool 1.4 series to
|
||||
# handle both shared and static libraries in a single compilation.
|
||||
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||
#
|
||||
# With libtool 1.5 this exception was removed, and libtool now
|
||||
# generates 2 separate objects for the 2 libraries. These two
|
||||
# compilations output dependencies in in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.o.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
tmpdepfile4=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no
|
||||
for arg in "$@"; do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
"$@" || exit $?
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
|
@ -1,64 +0,0 @@
|
|||
Our intent is to make it easy to use libatomic_ops, in
|
||||
both free and proprietary software. Hence most code that we expect to be
|
||||
linked into a client application is covered by an MIT-style license.
|
||||
|
||||
A few library routines are covered by the GNU General Public License.
|
||||
These are put into a separate library, libatomic_ops_gpl.a .
|
||||
|
||||
The low-level part of the library is mostly covered by the following
|
||||
license:
|
||||
|
||||
----------------------------------------
|
||||
|
||||
Copyright (c) ...
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
--------------------------------
|
||||
|
||||
A few files in the sysdeps directory were inherited in part from the
|
||||
Boehm-Demers-Weiser conservative garbage collector, and are covered by
|
||||
its license, which is similar in spirit:
|
||||
|
||||
--------------------------------
|
||||
|
||||
Copyright (c) ...
|
||||
|
||||
THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
|
||||
OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
|
||||
|
||||
Permission is hereby granted to use or copy this program
|
||||
for any purpose, provided the above notices are retained on all copies.
|
||||
Permission to modify the code and to distribute modified code is granted,
|
||||
provided the above notices are retained, and a notice that the code was
|
||||
modified is included with the above copyright notice.
|
||||
|
||||
----------------------------------
|
||||
|
||||
A few files are covered by the GNU General Public License. (See file
|
||||
"COPYING".) This applies only to test code, sample applications,
|
||||
and the libatomic_ops_gpl portion of the library.
|
||||
Thus libatomic_ops_gpl should generally not be linked into proprietary code.
|
||||
(This distinction was motivated by patent considerations.)
|
||||
|
||||
It is possible that the license of the GPL pieces may be changed for
|
||||
future versions to make them more consistent with the rest of the package.
|
||||
If you submit patches, and have strong preferences about licensing, please
|
||||
express them.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
# installed documentation
|
||||
#
|
||||
dist_pkgdata_DATA=COPYING LICENSING.txt README.txt COPYING README_stack.txt README_malloc.txt README_win32.txt
|
|
@ -1,330 +0,0 @@
|
|||
# Makefile.in generated by automake 1.9.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = doc
|
||||
DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in COPYING
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
|
||||
dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
|
||||
DATA = $(dist_pkgdata_DATA)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NEED_ASM_FALSE = @NEED_ASM_FALSE@
|
||||
NEED_ASM_TRUE = @NEED_ASM_TRUE@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAG = @PICFLAG@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
# installed documentation
|
||||
#
|
||||
dist_pkgdata_DATA = COPYING LICENSING.txt README.txt COPYING README_stack.txt README_malloc.txt README_win32.txt
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)"
|
||||
@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
|
||||
$(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-dist_pkgdataDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(DATA)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(pkgdatadir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-dist_pkgdataDATA
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-dist_pkgdataDATA uninstall-info-am
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am \
|
||||
install-dist_pkgdataDATA install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am uninstall uninstall-am \
|
||||
uninstall-dist_pkgdataDATA uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -1,245 +0,0 @@
|
|||
Usage:
|
||||
|
||||
0) If possible, do this on a multiprocessor, especially if you are planning
|
||||
on modifying or enhancing the package. It will work on a uniprocessor,
|
||||
but the tests are much more likely to pass in the presence of serious problems.
|
||||
|
||||
1) Type ./configure --prefix=<install dir>; make; make check
|
||||
in the directory containing unpacked source. The usual GNU build machinery
|
||||
is used, except that only static, but position-independent, libraries
|
||||
are normally built. On Windows, read README_win32.txt instead.
|
||||
|
||||
2) Applications should include atomic_ops.h. Nearly all operations
|
||||
are implemented by header files included from it. It is sometimes
|
||||
necessary, and always recommended to also link against libatomic_ops.a.
|
||||
To use the almost non-blocking stack or malloc implementations,
|
||||
see the corresponding README files, and also link against libatomic_gpl.a
|
||||
before linking against libatomic_ops.a.
|
||||
|
||||
OVERVIEW:
|
||||
Atomic_ops.h defines a large collection of operations, each one of which is
|
||||
a combination of an (optional) atomic memory operation, and a memory barrier.
|
||||
Also defines associated feature-test macros to determine whether a particular
|
||||
operation is available on the current target hardware (either directly or
|
||||
by synthesis). This is an attempt to replace various existing files with
|
||||
similar goals, since they usually do not handle differences in memory
|
||||
barrier styles with sufficient generality.
|
||||
|
||||
If this is included after defining AO_REQUIRE_CAS, then the package
|
||||
will make an attempt to emulate compare-and-swap in a way that (at least
|
||||
on Linux) should still be async-signal-safe. As a result, most other
|
||||
atomic operations will then be defined using the compare-and-swap
|
||||
emulation. This emulation is slow, since it needs to disable signals.
|
||||
And it needs to block in case of contention. If you care about performance
|
||||
on a platform that can't directly provide compare-and-swap, there are
|
||||
probably better alternatives. But this allows easy ports to some such
|
||||
platforms (e.g. PA_RISC). The option is ignored if compare-and-swap
|
||||
can be implemented directly.
|
||||
|
||||
If atomic_ops.h is included after defining AO_USE_PTHREAD_DEFS, then all
|
||||
atomic operations will be emulated with pthread locking. This is NOT
|
||||
async-signal-safe. And it is slow. It is intended primarily for debugging
|
||||
of the atomic_ops package itself.
|
||||
|
||||
Note that the implementation reflects our understanding of real processor
|
||||
behavior. This occasionally diverges from the documented behavior. (E.g.
|
||||
the documented X86 behavior seems to be weak enough that it is impractical
|
||||
to use. Current real implementations appear to be much better behaved.)
|
||||
We of course are in no position to guarantee that future processors
|
||||
(even HPs) will continue to behave this way, though we hope they will.
|
||||
|
||||
This is a work in progress. Corrections/additions for other platforms are
|
||||
greatly appreciated. It passes rudimentary tests on X86, Itanium, and
|
||||
Alpha.
|
||||
|
||||
OPERATIONS:
|
||||
|
||||
Most operations operate on values of type AO_t, which are unsigned integers
|
||||
whose size matches that of pointers on the given architecture. Exceptions
|
||||
are:
|
||||
|
||||
- AO_test_and_set operates on AO_TS_t, which is whatever size the hardware
|
||||
supports with good performance. In some cases this is the length of a cache
|
||||
line. In some cases it is a byte. In many cases it is equivalent to AO_t.
|
||||
|
||||
- A few operations are implemented on smaller or larger size integers.
|
||||
Such operations are indicated by the appropriate prefix:
|
||||
|
||||
AO_char_... Operates on unsigned char values.
|
||||
AO_short_... Operates on unsigned short values.
|
||||
AO_int_... Operates on unsigned int values.
|
||||
|
||||
(Currently a very limited selection of these is implemented. We're
|
||||
working on it.)
|
||||
|
||||
The defined operations are all of the form AO_[<size>_]<op><barrier>(<args>).
|
||||
|
||||
The <op> component specifies an atomic memory operation. It may be
|
||||
one of the following, where the corresponding argument and result types
|
||||
are also specified:
|
||||
|
||||
void nop()
|
||||
No atomic operation. The barrier may still be useful.
|
||||
AO_t load(volatile AO_t * addr)
|
||||
Atomic load of *addr.
|
||||
void store(volatile AO_t * addr, AO_t new_val)
|
||||
Atomically store new_val to *addr.
|
||||
AO_t fetch_and_add(volatile AO_t *addr, AO_t incr)
|
||||
Atomically add incr to *addr, and return the original value of *addr.
|
||||
AO_t fetch_and_add1(volatile AO_t *addr)
|
||||
Equivalent to AO_fetch_and_add(addr, 1).
|
||||
AO_t fetch_and_sub1(volatile AO_t *addr)
|
||||
Equivalent to AO_fetch_and_add(addr, (AO_t)(-1)).
|
||||
void or(volatile AO_t *addr, AO_t incr)
|
||||
Atomically or incr into *addr.
|
||||
int compare_and_swap(volatile AO_t * addr, AO_t old_val, AO_t new_val)
|
||||
Atomically compare *addr to old_val, and replace *addr by new_val
|
||||
if the first comparison succeeds. Returns nonzero if the comparison
|
||||
succeeded and *addr was updated.
|
||||
AO_TS_VAL_t test_and_set(volatile AO_TS_t * addr)
|
||||
Atomically read the binary value at *addr, and set it. AO_TS_VAL_t
|
||||
is an enumeration type which includes the two values AO_TS_SET and
|
||||
and AO_TS_CLEAR. An AO_TS_t location is capable of holding an
|
||||
AO_TS_VAL_t, but may be much larger, as dictated by hardware
|
||||
constraints. Test_and_set logically sets the value to AO_TS_SET.
|
||||
It may be reset to AO_TS_CLEAR with the AO_CLEAR(AO_TS_t *) macro.
|
||||
AO_TS_t locations should be initialized to AO_TS_INITIALIZER.
|
||||
The values of AO_TS_SET and AO_TS_CLEAR are hardware dependent.
|
||||
(On PA-RISC, AO_TS_SET is zero!)
|
||||
|
||||
Test_and_set is a more limited version of compare_and_swap. Its only
|
||||
advantage is that it is more easily implementable on some hardware. It
|
||||
should thus be used if only binary test-and-set functionality is needed.
|
||||
|
||||
If available, we also provide compare_and_swap operations that operate
|
||||
on wider values. Since standard data types for double width values
|
||||
may not be available, these explicitly take pairs of arguments for the
|
||||
new and/or old value. Unfortunately, there are two common variants,
|
||||
neither of which can easily and efficiently emulate the other.
|
||||
The first performs a comparison against the entire value being replaced,
|
||||
where the second replaces a double-width replacement, but performs
|
||||
a single-width comparison:
|
||||
|
||||
int compare_double_and_swap_double(volatile AO_double_t * addr,
|
||||
AO_t old_val1, AO_t old_val2,
|
||||
AO_t new_val1, AO_t new_val2);
|
||||
|
||||
int compare_and_swap_double(volatile AO_double_t * addr,
|
||||
AO_t old_val1,
|
||||
AO_t new_val1, AO_t new_val2);
|
||||
|
||||
where AO_double_t is a structure containing AO_val1 and AO_val2 fields,
|
||||
both of type AO_t. For compare_and_swap_double, we compare against
|
||||
the val1 field. AO_double_t exists only if AO_HAVE_double_t
|
||||
is defined.
|
||||
|
||||
ORDERING CONSTRAINTS:
|
||||
|
||||
Each operation name also includes a suffix that specifies the associated
|
||||
ordering semantics. The ordering constraint limits reordering of this
|
||||
operation with repsect to other atomic operations and ordinary memory
|
||||
references. The current implementation assumes that all memory references
|
||||
are to ordinary cacheable memory; the ordering guarantee is with respect
|
||||
to other threads or processes, not I/O devices. (Whether or not this
|
||||
distinction is important is platform-dependent.)
|
||||
|
||||
Ordering suffixes are one of the following:
|
||||
|
||||
<none>: No memory barrier. A plain AO_nop() really does nothing.
|
||||
_release: Earlier operations must become visible to other threads
|
||||
before the atomic operation.
|
||||
_acquire: Later operations must become visible after this operation.
|
||||
_read: Subsequent reads must become visible after reads included in
|
||||
the atomic operation or preceding it. Rarely useful for clients?
|
||||
_write: Earlier writes become visible before writes during or after
|
||||
the atomic operation. Rarely useful for clients?
|
||||
_full: Ordered with respect to both earlier and later memops.
|
||||
AO_store_full or AO_nop_full are the normal ways to force a store
|
||||
to be ordered with respect to a later load.
|
||||
_release_write: Ordered with respect to earlier writes. This is
|
||||
normally implemented as either a _write or _release
|
||||
barrier.
|
||||
_dd_acquire_read: Ordered with respect to later reads that are data
|
||||
dependent on this one. This is needed on
|
||||
a pointer read, which is later dereferenced to read a
|
||||
second value, with the expectation that the second
|
||||
read is ordered after the first one. On most architectures,
|
||||
this is equivalent to no barrier. (This is very
|
||||
hard to define precisely. It should probably be avoided.
|
||||
A major problem is that optimizers tend to try to
|
||||
eliminate dependencies from the generated code, since
|
||||
dependencies force the hardware to execute the code
|
||||
serially.)
|
||||
_release_read: Ordered with respect to earlier reads. Useful for
|
||||
implementing read locks. Can be implemented as _release,
|
||||
but not as _read, since _read groups the current operation
|
||||
with the earlier ones.
|
||||
|
||||
We assume that if a store is data-dependent on an a previous load, then
|
||||
the two are always implicitly ordered.
|
||||
|
||||
It is possible to test whether AO_<op><barrier> is available on the
|
||||
current platform by checking whether AO_HAVE_<op>_<barrier> is defined
|
||||
as a macro.
|
||||
|
||||
Note that we generally don't implement operations that are either
|
||||
meaningless (e.g. AO_nop_acquire, AO_nop_release) or which appear to
|
||||
have no clear use (e.g. AO_load_release, AO_store_acquire, AO_load_write,
|
||||
AO_store_read). On some platforms (e.g. PA-RISC) many operations
|
||||
will remain undefined unless AO_REQUIRE_CAS is defined before including
|
||||
the package.
|
||||
|
||||
When typed in the package build directory, the following command
|
||||
will print operations that are unimplemented on the platform:
|
||||
|
||||
make test_atomic; ./test_atomic
|
||||
|
||||
The following command generates a file "list_atomic.i" containing the
|
||||
macro expansions of all implemented operations on the platform:
|
||||
|
||||
make list_atomic.i
|
||||
|
||||
Future directions:
|
||||
|
||||
It currently appears that something roughly analogous to this is very likely
|
||||
to become part of the C++0x standard. That effort has pointed out a number
|
||||
of issues that we expect to address there. Since some of the solutions
|
||||
really require compiler support, they may not be completely addressed here.
|
||||
|
||||
Known issues include:
|
||||
|
||||
We should be more precise in defining the semantics of the ordering
|
||||
constraints, and if and how we can guarantee sequential consistency.
|
||||
|
||||
Dd_acquire_read is very hard or impossible to define in a way that cannot
|
||||
be invalidated by reasonably standard compiler transformations.
|
||||
|
||||
There is probably no good reason to provide operations on standard
|
||||
integer types, since those may have the wrong alignment constraints.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
If you want to initialize an object, and then "publish" a pointer to it
|
||||
in a global location p, such that other threads reading the new value of
|
||||
p are guaranteed to see an initialized object, it suffices to use
|
||||
AO_release_write(p, ...) to write the pointer to the object, and to
|
||||
retrieve it in other threads with AO_acquire_read(p).
|
||||
|
||||
Platform notes:
|
||||
|
||||
All X86: We quietly assume 486 or better.
|
||||
|
||||
Windows:
|
||||
Currently AO_REQUIRE_CAS is not supported.
|
||||
|
||||
Microsoft compilers:
|
||||
Define AO_ASSUME_WINDOWS98 to get access to hardware compare-and-swap
|
||||
functionality. This relies on the InterlockedCompareExchange() function
|
||||
which was apparently not supported in Windows95. (There may be a better
|
||||
way to get access to this.) Currently only X86(32 bit) is supported for
|
||||
Windows.
|
||||
|
||||
Gcc on x86:
|
||||
Define AO_USE_PENTIUM4_INSTRS to use the Pentium 4 mfence instruction.
|
||||
Currently this is appears to be of marginal benefit.
|
|
@ -1,57 +0,0 @@
|
|||
The libatomic_ops_gpl includes a simple almost-lock-free malloc implementation.
|
||||
|
||||
This is intended as a safe way to allocate memory from a signal handler,
|
||||
or to allocate memory in the context of a library that does not know what
|
||||
thread library it will be used with. In either case locking is impossible.
|
||||
|
||||
Note that the operations are only guaranteed to be 1-lock-free, i.e. a
|
||||
single blocked thread will not prevent progress, but multiple blocked
|
||||
threads may. To safely use these operations in a signal handler,
|
||||
the handler should be non-reentrant, i.e. it should not be interruptable
|
||||
by another handler using these operations. Furthermore use outside
|
||||
of signal handlers in a multithreaded application should be protected
|
||||
by a lock, so that at most one invocation may be interrupted by a signal.
|
||||
The header will define the macro "AO_MALLOC_IS_LOCK_FREE" on platforms
|
||||
on which malloc is completely lock-free, and hence these restrictions
|
||||
do not apply.
|
||||
|
||||
In the presence of threads, but absence of contention, the time performance
|
||||
of this package should be as good, or slightly better than, most system
|
||||
malloc implementations. Its space performance
|
||||
is theoretically optimal (to within a constant factor), but probably
|
||||
quite poor in practice. In particular, no attempt is made to
|
||||
coalesce free small memory blocks. Something like Doug Lea's malloc is
|
||||
likely to use significantly less memory for complex applications.
|
||||
|
||||
Perfomance on platforms without an efficient compare-and-swap implementation
|
||||
will be poor.
|
||||
|
||||
This package was not designed for processor-scalability in the face of
|
||||
high allocation rates. If all threads happen to allocate different-sized
|
||||
objects, you might get lucky. Otherwise expect contention and false-sharing
|
||||
problems. If this is an issue, something like Maged Michael's algorithm
|
||||
(PLDI 2004) would be technically a far better choice. If you are concerned
|
||||
only with scalablity, and not signal-safety, you might also consider
|
||||
using Hoard instead. We have seen a factor of 3 to 4 slowdown from the
|
||||
standard glibc malloc implementation with contention, even when the
|
||||
performance without contention was faster. (To make the implementation
|
||||
more scalable, one would need to replicate at least the free list headers,
|
||||
so that concurrent access is possible without cache conflicts.)
|
||||
|
||||
Unfortunately there is no portable async-signal-safe way to obtain large
|
||||
chunks of memory from the OS. Based on reading of the source code,
|
||||
mmap-based allocation appears safe under Linux, and probably BSD variants.
|
||||
It is probably unsafe for operating systems built on Mach, such as
|
||||
Apple's Darwin. Without use of mmap, the allocator is
|
||||
limited to a fixed size, statically preallocated heap (2MB by default),
|
||||
and will fail to allocate objects above a certain size (just under 64K
|
||||
by default). Use of mmap to circumvent these limitations requires an
|
||||
explicit call.
|
||||
|
||||
The entire interface to the AO_malloc package currently consists of:
|
||||
|
||||
#include <atomic_ops_malloc.h> /* includes atomic_ops.h */
|
||||
|
||||
void *AO_malloc(size_t sz);
|
||||
void AO_free(void *p);
|
||||
void AO_malloc_enable_mmap(void);
|
|
@ -1,78 +0,0 @@
|
|||
Note that the AO_stack implementation is licensed under the GPL,
|
||||
unlike the lower level routines.
|
||||
|
||||
The header file atomic_ops_stack.h defines a linked stack abstraction.
|
||||
Stacks may be accessed by multiple concurrent threads. The implementation
|
||||
is 1-lock-free, i.e. it will continue to make progress if at most one
|
||||
thread becomes inactive while operating on the data structure.
|
||||
|
||||
(The implementation can be built to be N-lock-free for any given N. But that
|
||||
seems to rarely be useful, especially since larger N involve some slowdown.)
|
||||
|
||||
This makes it safe to access these data structures from non-reentrant
|
||||
signal handlers, provided at most one non-signal-handler thread is
|
||||
accessing the data structure at once. This latter condition can be
|
||||
ensured by acquiring an ordinary lock around the non-hndler accesses
|
||||
to the data structure.
|
||||
|
||||
For details see:
|
||||
|
||||
Hans-J. Boehm, "An Almost Non-Blocking Stack", PODC 2004,
|
||||
http://portal.acm.org/citation.cfm?doid=1011767.1011774, or
|
||||
http://www.hpl.hp.com/techreports/2004/HPL-2004-105.html
|
||||
(This is not exactly the implementation described there, since the
|
||||
interface was cleaned up in the interim. But it should perform
|
||||
very similarly.)
|
||||
|
||||
We use a fully lock-free implementation when the underlying hardware
|
||||
makes that less expensive, i.e. when we have a double-wide compare-and-swap
|
||||
operation available. (The fully lock-free implementation uses an AO_t-
|
||||
sized version count, and assumes it does not wrap during the time any
|
||||
given operation is active. This seems reasonably safe on 32-bit hardware,
|
||||
and very safe on 64-bit hardware.) If a fully lock-free implementation
|
||||
is used, the macro AO_STACK_IS_LOCK_FREE will be defined.
|
||||
|
||||
The implementation is interesting only because it allows reuse of
|
||||
existing nodes. This is necessary, for example, to implement a memory
|
||||
allocator.
|
||||
|
||||
Since we want to leave the precise stack node type up to the client,
|
||||
we insist only that each stack node contains a link field of type AO_t.
|
||||
When a new node is pushed on the stack, the push operation expects to be
|
||||
passed the pointer to this link field, which will then be overwritten by
|
||||
this link field. Similarly, the pop operation returns a pointer to the
|
||||
link field of the object that previously was on the top of the stack.
|
||||
|
||||
The cleanest way to use these routines is probably to define the stack node
|
||||
type with an initial AO_t link field, so that the conversion between the
|
||||
link-field pointer and the stack element pointer is just a compile-time
|
||||
cast. But other possibilities exist. (This would be cleaner in C++ with
|
||||
templates.)
|
||||
|
||||
A stack is represented by an AO_stack_t structure. (This is normally
|
||||
2 or 3 times the size of a pointer.) It may be statically initialized
|
||||
by setting it to AO_STACK_INITIALIZER, or dynamically initialized to
|
||||
an empty stack with AO_stack_init. There are only three operations for
|
||||
accessing stacks:
|
||||
|
||||
void AO_stack_init(AO_stack_t *list);
|
||||
void AO_stack_push_release(AO_stack_t *list, AO_t *new_element);
|
||||
AO_t * AO_stack_pop_acquire(volatile AO_stack_t *list);
|
||||
|
||||
We require that the objects pushed as list elements remain addressable
|
||||
as long as any push or pop operation are in progress. (It is OK for an object
|
||||
to be "pop"ped off a stack and "deallocated" with a concurrent "pop" on
|
||||
the same stack still in progress, but only if "deallocation" leaves the
|
||||
object addressable. The second "pop" may still read the object, but
|
||||
the value it reads will not matter.)
|
||||
|
||||
We require that the headers (AO_stack objects) remain allocated and
|
||||
valid as long as any operations on them are still in-flight.
|
||||
|
||||
We also provide macros AO_REAL_HEAD_PTR that converts an AO_stack_t
|
||||
to a pointer to the link field in the next element, and AO_REAL_NEXT_PTR
|
||||
that converts a link field to a real, dereferencable, pointer to the link field
|
||||
in the next element. This is intended only for debugging, or to traverse
|
||||
the list after modification has ceased. There is otherwise no guarantee that
|
||||
walking a stack using this macro will produce any kind of consistent
|
||||
picture of the data structure.
|
|
@ -1,28 +0,0 @@
|
|||
Most of the atomic_ops functionality is available under Win32 with
|
||||
the Microsoft tools, but the build process currently is considerably more
|
||||
primitive than on Linux/Unix platforms.
|
||||
|
||||
To build:
|
||||
|
||||
1) Go to the src directory in the distribution.
|
||||
2) Make sure the Microsoft command-line tools (e.g. nmake) are available.
|
||||
3) Run "nmake -f Makefile.msft". This should run some tests, which
|
||||
may print warnings about the types of the "Interlocked" functions.
|
||||
I haven't been able to make all versions of VC++ happy. If you know
|
||||
how to, please send a patch.
|
||||
4) To compile applications, you will need to retain or copy the following
|
||||
pieces from the resulting src directory contents:
|
||||
"atomic_ops.h" - Header file defining low-level primitives. This
|
||||
includes files from:
|
||||
"atomic_ops"- Subdirectory containing implementation header files.
|
||||
"atomic_ops_stack.h" - Header file describing almost lock-free stack.
|
||||
"atomic_ops_malloc.h" - Header file describing almost lock-free malloc.
|
||||
"libatomic_ops_gpl.lib" - Library containing implementation of the
|
||||
above two. The atomic_ops.h implementation
|
||||
is entirely in the header files in Win32.
|
||||
|
||||
Most clients of atomic_ops.h will need to define AO_ASSUME_WINDOWS98 before
|
||||
including it. Compare_and_swap is otherwise not available.
|
||||
|
||||
Note that the library is covered by the GNU General Public License, while
|
||||
the top 2 of these pieces allow use in proprietary code.
|
|
@ -1,323 +0,0 @@
|
|||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch. It can only install one file at a time, a restriction
|
||||
# shared with many OS's install programs.
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit="${DOITPROG-}"
|
||||
|
||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||
|
||||
mvprog="${MVPROG-mv}"
|
||||
cpprog="${CPPROG-cp}"
|
||||
chmodprog="${CHMODPROG-chmod}"
|
||||
chownprog="${CHOWNPROG-chown}"
|
||||
chgrpprog="${CHGRPPROG-chgrp}"
|
||||
stripprog="${STRIPPROG-strip}"
|
||||
rmprog="${RMPROG-rm}"
|
||||
mkdirprog="${MKDIRPROG-mkdir}"
|
||||
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=
|
||||
chgrpcmd=
|
||||
stripcmd=
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dstarg=
|
||||
no_target_directory=
|
||||
|
||||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
-c (ignored)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-c) shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t) dstarg=$2
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-T) no_target_directory=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
*) # When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
test -n "$dir_arg$dstarg" && break
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dstarg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dstarg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dstarg=$arg
|
||||
done
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -z "$1"; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
|
||||
if test -d "$dst"; then
|
||||
mkdircmd=:
|
||||
chmodcmd=
|
||||
else
|
||||
mkdircmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dstarg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dstarg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dstarg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst/`basename "$src"`
|
||||
fi
|
||||
fi
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
shift
|
||||
IFS=$oIFS
|
||||
|
||||
pathcomp=
|
||||
|
||||
while test $# -ne 0 ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
if test ! -d "$pathcomp"; then
|
||||
$mkdirprog "$pathcomp"
|
||||
# mkdir can fail with a `File exist' error in case several
|
||||
# install-sh are creating the directory concurrently. This
|
||||
# is OK.
|
||||
test -d "$pathcomp" || exit
|
||||
fi
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
$doit $mkdircmd "$dst" \
|
||||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
||||
|
||||
else
|
||||
dstfile=`basename "$dst"`
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
$doit $cpprog "$src" "$dsttmp" &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| {
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
if test -f "$dstdir/$dstfile"; then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
||||
|| {
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
}
|
||||
}
|
||||
fi || { (exit 1); exit 1; }
|
||||
done
|
||||
|
||||
# The final little trick to "correctly" pass the exit status to the exit trap.
|
||||
{
|
||||
(exit 0); exit 0
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
|
@ -1,360 +0,0 @@
|
|||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2005-06-08.21
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program).
|
||||
case "$1" in
|
||||
lex|yacc)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
||||
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
||||
fi
|
||||
if [ -f "$file" ]; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar)
|
||||
shift
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
|
@ -1,158 +0,0 @@
|
|||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
|
||||
scriptversion=2005-06-29.22
|
||||
|
||||
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain.
|
||||
#
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
errstatus=0
|
||||
dirmode=
|
||||
|
||||
usage="\
|
||||
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
|
||||
|
||||
Create each directory DIR (with mode MODE, if specified), including all
|
||||
leading file name components.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>."
|
||||
|
||||
# process command line arguments
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
-h | --help | --h*) # -h for help
|
||||
echo "$usage"
|
||||
exit $?
|
||||
;;
|
||||
-m) # -m PERM arg
|
||||
shift
|
||||
test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
|
||||
dirmode=$1
|
||||
shift
|
||||
;;
|
||||
--version)
|
||||
echo "$0 $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
--) # stop option processing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*) # unknown option
|
||||
echo "$usage" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
*) # first non-opt arg
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for file
|
||||
do
|
||||
if test -d "$file"; then
|
||||
shift
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
case $# in
|
||||
0) exit 0 ;;
|
||||
esac
|
||||
|
||||
# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
|
||||
# mkdir -p a/c at the same time, both will detect that a is missing,
|
||||
# one will create a, then the other will try to create a and die with
|
||||
# a "File exists" error. This is a problem when calling mkinstalldirs
|
||||
# from a parallel make. We use --version in the probe to restrict
|
||||
# ourselves to GNU mkdir, which is thread-safe.
|
||||
case $dirmode in
|
||||
'')
|
||||
if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
|
||||
echo "mkdir -p -- $*"
|
||||
exec mkdir -p -- "$@"
|
||||
else
|
||||
# On NextStep and OpenStep, the `mkdir' command does not
|
||||
# recognize any option. It will interpret all options as
|
||||
# directories to create, and then abort because `.' already
|
||||
# exists.
|
||||
test -d ./-p && rmdir ./-p
|
||||
test -d ./--version && rmdir ./--version
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
|
||||
test ! -d ./--version; then
|
||||
echo "mkdir -m $dirmode -p -- $*"
|
||||
exec mkdir -m "$dirmode" -p -- "$@"
|
||||
else
|
||||
# Clean up after NextStep and OpenStep mkdir.
|
||||
for d in ./-m ./-p ./--version "./$dirmode";
|
||||
do
|
||||
test -d $d && rmdir $d
|
||||
done
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
for file
|
||||
do
|
||||
case $file in
|
||||
/*) pathcomp=/ ;;
|
||||
*) pathcomp= ;;
|
||||
esac
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set fnord $file
|
||||
shift
|
||||
IFS=$oIFS
|
||||
|
||||
for d
|
||||
do
|
||||
test "x$d" = x && continue
|
||||
|
||||
pathcomp=$pathcomp$d
|
||||
case $pathcomp in
|
||||
-*) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp"
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
else
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $pathcomp"
|
||||
lasterr=
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
|
@ -1,16 +0,0 @@
|
|||
SUBDIRS=atomic_ops
|
||||
|
||||
AM_CFLAGS=@PICFLAG@
|
||||
|
||||
include_HEADERS=atomic_ops.h atomic_ops_stack.h atomic_ops_malloc.h
|
||||
lib_LIBRARIES = libatomic_ops.a libatomic_ops_gpl.a
|
||||
if NEED_ASM
|
||||
libatomic_ops_a_SOURCES = atomic_ops.c atomic_ops_sysdeps.S
|
||||
else
|
||||
libatomic_ops_a_SOURCES = atomic_ops.c
|
||||
endif
|
||||
|
||||
libatomic_ops_gpl_a_SOURCES = atomic_ops_stack.c atomic_ops_malloc.c
|
||||
|
||||
EXTRA_DIST=Makefile.msft
|
||||
|
|
@ -1,598 +0,0 @@
|
|||
# Makefile.in generated by automake 1.9.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
|
||||
SOURCES = $(libatomic_ops_a_SOURCES) $(libatomic_ops_gpl_a_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src
|
||||
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
|
||||
libLIBRARIES_INSTALL = $(INSTALL_DATA)
|
||||
LIBRARIES = $(lib_LIBRARIES)
|
||||
AR = ar
|
||||
ARFLAGS = cru
|
||||
libatomic_ops_a_AR = $(AR) $(ARFLAGS)
|
||||
libatomic_ops_a_LIBADD =
|
||||
am__libatomic_ops_a_SOURCES_DIST = atomic_ops.c atomic_ops_sysdeps.S
|
||||
@NEED_ASM_FALSE@am_libatomic_ops_a_OBJECTS = atomic_ops.$(OBJEXT)
|
||||
@NEED_ASM_TRUE@am_libatomic_ops_a_OBJECTS = atomic_ops.$(OBJEXT) \
|
||||
@NEED_ASM_TRUE@ atomic_ops_sysdeps.$(OBJEXT)
|
||||
libatomic_ops_a_OBJECTS = $(am_libatomic_ops_a_OBJECTS)
|
||||
libatomic_ops_gpl_a_AR = $(AR) $(ARFLAGS)
|
||||
libatomic_ops_gpl_a_LIBADD =
|
||||
am_libatomic_ops_gpl_a_OBJECTS = atomic_ops_stack.$(OBJEXT) \
|
||||
atomic_ops_malloc.$(OBJEXT)
|
||||
libatomic_ops_gpl_a_OBJECTS = $(am_libatomic_ops_gpl_a_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libatomic_ops_a_SOURCES) $(libatomic_ops_gpl_a_SOURCES)
|
||||
DIST_SOURCES = $(am__libatomic_ops_a_SOURCES_DIST) \
|
||||
$(libatomic_ops_gpl_a_SOURCES)
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
includeHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NEED_ASM_FALSE = @NEED_ASM_FALSE@
|
||||
NEED_ASM_TRUE = @NEED_ASM_TRUE@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAG = @PICFLAG@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
SUBDIRS = atomic_ops
|
||||
AM_CFLAGS = @PICFLAG@
|
||||
include_HEADERS = atomic_ops.h atomic_ops_stack.h atomic_ops_malloc.h
|
||||
lib_LIBRARIES = libatomic_ops.a libatomic_ops_gpl.a
|
||||
@NEED_ASM_FALSE@libatomic_ops_a_SOURCES = atomic_ops.c
|
||||
@NEED_ASM_TRUE@libatomic_ops_a_SOURCES = atomic_ops.c atomic_ops_sysdeps.S
|
||||
libatomic_ops_gpl_a_SOURCES = atomic_ops_stack.c atomic_ops_malloc.c
|
||||
EXTRA_DIST = Makefile.msft
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .S .c .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status src/config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
install-libLIBRARIES: $(lib_LIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
@$(POST_INSTALL)
|
||||
@list='$(lib_LIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(lib_LIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLIBRARIES:
|
||||
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
|
||||
libatomic_ops.a: $(libatomic_ops_a_OBJECTS) $(libatomic_ops_a_DEPENDENCIES)
|
||||
-rm -f libatomic_ops.a
|
||||
$(libatomic_ops_a_AR) libatomic_ops.a $(libatomic_ops_a_OBJECTS) $(libatomic_ops_a_LIBADD)
|
||||
$(RANLIB) libatomic_ops.a
|
||||
libatomic_ops_gpl.a: $(libatomic_ops_gpl_a_OBJECTS) $(libatomic_ops_gpl_a_DEPENDENCIES)
|
||||
-rm -f libatomic_ops_gpl.a
|
||||
$(libatomic_ops_gpl_a_AR) libatomic_ops_gpl.a $(libatomic_ops_gpl_a_OBJECTS) $(libatomic_ops_gpl_a_LIBADD)
|
||||
$(RANLIB) libatomic_ops_gpl.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomic_ops.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomic_ops_malloc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomic_ops_stack.Po@am__quote@
|
||||
|
||||
.S.o:
|
||||
$(CCASCOMPILE) -c $<
|
||||
|
||||
.S.obj:
|
||||
$(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
uninstall-info-am:
|
||||
install-includeHEADERS: $(include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
|
||||
@list='$(include_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
$(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(include_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(LIBRARIES) $(HEADERS) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libLIBRARIES mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-hdr distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-includeHEADERS
|
||||
|
||||
install-exec-am: install-libLIBRARIES
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-includeHEADERS uninstall-info-am \
|
||||
uninstall-libLIBRARIES
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-generic clean-libLIBRARIES clean-recursive ctags \
|
||||
ctags-recursive distclean distclean-compile distclean-generic \
|
||||
distclean-hdr distclean-recursive distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-includeHEADERS install-info install-info-am \
|
||||
install-libLIBRARIES install-man install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-includeHEADERS \
|
||||
uninstall-info-am uninstall-libLIBRARIES
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -1,45 +0,0 @@
|
|||
#
|
||||
# Copyright (c) 2003-2005 Hewlett-Packard Developlment Company, L.P.
|
||||
#
|
||||
# The really trivial win32/VC++ Makefile. Note that atomic_ops.c isn't useful.
|
||||
# And we rely on a pre-built test_atomic_include.h and generalize-small.h,
|
||||
# since we can't rely on sed.
|
||||
# Win32 clients only need to include the header files.
|
||||
# To install, copy atomic_ops.h and the atomic_ops/... tree to your favorite
|
||||
# include directory.
|
||||
|
||||
#MY_CPU=X86
|
||||
#CPU=$(MY_CPU)
|
||||
#!include <ntwin32.mak>
|
||||
|
||||
LIB_OBJS=atomic_ops_stack.obj atomic_ops_malloc.obj
|
||||
|
||||
all: check
|
||||
|
||||
atomic_ops_stack.obj:
|
||||
cl -O2 -c -DAO_ASSUME_WINDOWS98 atomic_ops_stack.c
|
||||
|
||||
atomic_ops_malloc.obj:
|
||||
cl -O2 -c -DAO_ASSUME_WINDOWS98 atomic_ops_malloc.c
|
||||
|
||||
test_atomic: ..\tests\test_atomic.c ..\tests\test_atomic_include.h
|
||||
cl -O2 -I. -DAO_ASSUME_WINDOWS98 ..\tests\test_atomic.c -o test_atomic
|
||||
|
||||
test_atomic_w95: ..\tests\test_atomic.c ..\tests\test_atomic_include.h
|
||||
cl -O2 -I. ..\tests\test_atomic.c -o test_atomic_w95
|
||||
|
||||
test_malloc: ..\tests\test_malloc.c ..\tests\test_atomic_include.h \
|
||||
libatomic_ops_gpl.lib
|
||||
cl -O2 -DAO_ASSUME_WINDOWS98 -I. ..\tests\test_malloc.c -o test_malloc libatomic_ops_gpl.lib
|
||||
|
||||
libatomic_ops_gpl.lib: $(LIB_OBJS)
|
||||
lib /MACHINE:i386 /out:libatomic_ops_gpl.lib $(LIB_OBJS)
|
||||
|
||||
check: test_atomic test_atomic_w95 test_malloc
|
||||
echo The following will print lots of \"Missing ...\" messages.
|
||||
test_atomic_w95
|
||||
echo The following will print some \"Missing ...\" messages.
|
||||
test_atomic
|
||||
test_malloc
|
||||
|
||||
|
|
@ -1,225 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2003 Hewlett-Packard Development Company, L.P.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Initialized data and out-of-line functions to support atomic_ops.h
|
||||
* go here. Currently this is needed only for pthread-based atomics
|
||||
* emulation, or for compare-and-swap emulation.
|
||||
* Pthreads emulation isn't useful on a native Windows platform, and
|
||||
* cas emulation is not needed. Thus we skip this on Windows.
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__BORLANDC__)
|
||||
|
||||
#undef AO_REQUIRE_CAS
|
||||
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
#ifdef _HPUX_SOURCE
|
||||
# include <sys/time.h>
|
||||
#else
|
||||
# include <sys/select.h>
|
||||
#endif
|
||||
#include "atomic_ops.h" /* Without cas emulation! */
|
||||
|
||||
#ifndef AO_HAVE_double_t
|
||||
# include "atomic_ops/sysdeps/standard_ao_double_t.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Lock for pthreads-based implementation.
|
||||
*/
|
||||
|
||||
pthread_mutex_t AO_pt_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
/*
|
||||
* Out of line compare-and-swap emulation based on test and set.
|
||||
*
|
||||
* We use a small table of locks for different compare_and_swap locations.
|
||||
* Before we update perform a compare-and-swap, we grap the corresponding
|
||||
* lock. Different locations may hash to the same lock, but since we
|
||||
* never acquire more than one lock at a time, this can't deadlock.
|
||||
* We explicitly disable signals while we perform this operation.
|
||||
*
|
||||
* FIXME: We should probably also suppport emulation based on Lamport
|
||||
* locks, since we may not have test_and_set either.
|
||||
*/
|
||||
#define AO_HASH_SIZE 16
|
||||
|
||||
#define AO_HASH(x) (((unsigned long)(x) >> 12) & (AO_HASH_SIZE-1))
|
||||
|
||||
AO_TS_t AO_locks[AO_HASH_SIZE] = {
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
AO_TS_INITIALIZER, AO_TS_INITIALIZER,
|
||||
};
|
||||
|
||||
static AO_T dummy = 1;
|
||||
|
||||
/* Spin for 2**n units. */
|
||||
void AO_spin(int n)
|
||||
{
|
||||
int i;
|
||||
AO_T j = AO_load(&dummy);
|
||||
|
||||
for (i = 0; i < (2 << n); ++i)
|
||||
{
|
||||
j *= 5;
|
||||
j -= 4;
|
||||
}
|
||||
AO_store(&dummy, j);
|
||||
}
|
||||
|
||||
void AO_pause(int n)
|
||||
{
|
||||
if (n < 12)
|
||||
AO_spin(n);
|
||||
else
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
/* Short async-signal-safe sleep. */
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = (n > 28? 100000 : (1 << (n - 12)));
|
||||
select(0, 0, 0, 0, &tv);
|
||||
}
|
||||
}
|
||||
|
||||
static void lock_ool(volatile AO_TS_t *l)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
while (AO_test_and_set_acquire(l) == AO_TS_SET)
|
||||
AO_pause(++i);
|
||||
}
|
||||
|
||||
AO_INLINE void lock(volatile AO_TS_t *l)
|
||||
{
|
||||
if (AO_test_and_set_acquire(l) == AO_TS_SET)
|
||||
lock_ool(l);
|
||||
}
|
||||
|
||||
AO_INLINE void unlock(volatile AO_TS_t *l)
|
||||
{
|
||||
AO_CLEAR(l);
|
||||
}
|
||||
|
||||
static sigset_t all_sigs;
|
||||
|
||||
static volatile AO_t initialized = 0;
|
||||
|
||||
static volatile AO_TS_t init_lock = AO_TS_INITIALIZER;
|
||||
|
||||
int AO_compare_and_swap_emulation(volatile AO_t *addr, AO_t old,
|
||||
AO_t new_val)
|
||||
{
|
||||
AO_TS_t *my_lock = AO_locks + AO_HASH(addr);
|
||||
sigset_t old_sigs;
|
||||
int result;
|
||||
|
||||
if (!AO_load_acquire(&initialized))
|
||||
{
|
||||
lock(&init_lock);
|
||||
if (!initialized) sigfillset(&all_sigs);
|
||||
unlock(&init_lock);
|
||||
AO_store_release(&initialized, 1);
|
||||
}
|
||||
sigprocmask(SIG_BLOCK, &all_sigs, &old_sigs);
|
||||
/* Neither sigprocmask nor pthread_sigmask is 100% */
|
||||
/* guaranteed to work here. Sigprocmask is not */
|
||||
/* guaranteed be thread safe, and pthread_sigmask */
|
||||
/* is not async-signal-safe. Under linuxthreads, */
|
||||
/* sigprocmask may block some pthreads-internal */
|
||||
/* signals. So long as we do that for short periods, */
|
||||
/* we should be OK. */
|
||||
lock(my_lock);
|
||||
if (*addr == old)
|
||||
{
|
||||
*addr = new_val;
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
result = 0;
|
||||
unlock(my_lock);
|
||||
sigprocmask(SIG_SETMASK, &old_sigs, NULL);
|
||||
return result;
|
||||
}
|
||||
|
||||
int AO_compare_double_and_swap_double_emulation(volatile AO_double_t *addr,
|
||||
AO_t old_val1, AO_t old_val2,
|
||||
AO_t new_val1, AO_t new_val2)
|
||||
{
|
||||
AO_TS_t *my_lock = AO_locks + AO_HASH(addr);
|
||||
sigset_t old_sigs;
|
||||
int result;
|
||||
|
||||
if (!AO_load_acquire(&initialized))
|
||||
{
|
||||
lock(&init_lock);
|
||||
if (!initialized) sigfillset(&all_sigs);
|
||||
unlock(&init_lock);
|
||||
AO_store_release(&initialized, 1);
|
||||
}
|
||||
sigprocmask(SIG_BLOCK, &all_sigs, &old_sigs);
|
||||
/* Neither sigprocmask nor pthread_sigmask is 100% */
|
||||
/* guaranteed to work here. Sigprocmask is not */
|
||||
/* guaranteed be thread safe, and pthread_sigmask */
|
||||
/* is not async-signal-safe. Under linuxthreads, */
|
||||
/* sigprocmask may block some pthreads-internal */
|
||||
/* signals. So long as we do that for short periods, */
|
||||
/* we should be OK. */
|
||||
lock(my_lock);
|
||||
if (addr -> AO_val1 == old_val1 && addr -> AO_val2 == old_val2)
|
||||
{
|
||||
addr -> AO_val1 = new_val1;
|
||||
addr -> AO_val2 = new_val2;
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
result = 0;
|
||||
unlock(my_lock);
|
||||
sigprocmask(SIG_SETMASK, &old_sigs, NULL);
|
||||
return result;
|
||||
}
|
||||
|
||||
void AO_store_full_emulation(volatile AO_t *addr, AO_t val)
|
||||
{
|
||||
AO_TS_t *my_lock = AO_locks + AO_HASH(addr);
|
||||
lock(my_lock);
|
||||
*addr = val;
|
||||
unlock(my_lock);
|
||||
}
|
||||
|
||||
#else /* Non-posix platform */
|
||||
|
||||
int AO_non_posix_implementation_is_entirely_in_headers;
|
||||
|
||||
#endif
|
|
@ -1,300 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2003 Hewlett-Packard Development Company, L.P.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef ATOMIC_OPS_H
|
||||
|
||||
#define ATOMIC_OPS_H
|
||||
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/* We define various atomic operations on memory in a */
|
||||
/* machine-specific way. Unfortunately, this is complicated */
|
||||
/* by the fact that these may or may not be combined with */
|
||||
/* various memory barriers. Thus the actual operations we */
|
||||
/* define have the form AO_<atomic-op>_<barrier>, for all */
|
||||
/* plausible combinations of <atomic-op> and <barrier>. */
|
||||
/* This of course results in a mild combinatorial explosion. */
|
||||
/* To deal with it, we try to generate derived */
|
||||
/* definitions for as many of the combinations as we can, as */
|
||||
/* automatically as possible. */
|
||||
/* */
|
||||
/* Our assumption throughout is that the programmer will */
|
||||
/* specify the least demanding operation and memory barrier */
|
||||
/* that will guarantee correctness for the implementation. */
|
||||
/* Our job is to find the least expensive way to implement it */
|
||||
/* on the applicable hardware. In many cases that will */
|
||||
/* involve, for example, a stronger memory barrier, or a */
|
||||
/* combination of hardware primitives. */
|
||||
/* */
|
||||
/* Conventions: */
|
||||
/* "plain" atomic operations are not guaranteed to include */
|
||||
/* a barrier. The suffix in the name specifies the barrier */
|
||||
/* type. Suffixes are: */
|
||||
/* _release: Earlier operations may not be delayed past it. */
|
||||
/* _acquire: Later operations may not move ahead of it. */
|
||||
/* _read: Subsequent reads must follow this operation and */
|
||||
/* preceding reads. */
|
||||
/* _write: Earlier writes precede both this operation and */
|
||||
/* later writes. */
|
||||
/* _full: Ordered with respect to both earlier and later memops.*/
|
||||
/* _release_write: Ordered with respect to earlier writes. */
|
||||
/* _acquire_read: Ordered with repsect to later reads. */
|
||||
/* */
|
||||
/* Currently we try to define the following atomic memory */
|
||||
/* operations, in combination with the above barriers: */
|
||||
/* AO_nop */
|
||||
/* AO_load */
|
||||
/* AO_store */
|
||||
/* AO_test_and_set (binary) */
|
||||
/* AO_fetch_and_add */
|
||||
/* AO_fetch_and_add1 */
|
||||
/* AO_fetch_and_sub1 */
|
||||
/* AO_or */
|
||||
/* AO_compare_and_swap */
|
||||
/* */
|
||||
/* Note that atomicity guarantees are valid only if both */
|
||||
/* readers and writers use AO_ operations to access the */
|
||||
/* shared value, while ordering constraints are intended to */
|
||||
/* apply all memory operations. If a location can potentially */
|
||||
/* be accessed simultaneously from multiple threads, and one of */
|
||||
/* those accesses may be a write access, then all such */
|
||||
/* accesses to that location should be through AO_ primitives. */
|
||||
/* However if AO_ operations enforce sufficient ordering to */
|
||||
/* ensure that a location x cannot be accessed concurrently, */
|
||||
/* or can only be read concurrently, then x can be accessed */
|
||||
/* via ordinary references and assignments. */
|
||||
/* */
|
||||
/* Compare_and_exchange takes an address and an expected old */
|
||||
/* value and a new value, and returns an int. Nonzero */
|
||||
/* indicates that it succeeded. */
|
||||
/* Test_and_set takes an address, atomically replaces it by */
|
||||
/* AO_TS_SET, and returns the prior value. */
|
||||
/* An AO_TS_t location can be reset with the */
|
||||
/* AO_CLEAR macro, which normally uses AO_store_release. */
|
||||
/* AO_fetch_and_add takes an address and an AO_t increment */
|
||||
/* value. The AO_fetch_and_add1 and AO_fetch_and_sub1 variants */
|
||||
/* are provided, since they allow faster implementations on */
|
||||
/* some hardware. AO_or atomically ors an AO_t value into a */
|
||||
/* memory location, but does not provide access to the original.*/
|
||||
/* */
|
||||
/* We expect this list to grow slowly over time. */
|
||||
/* */
|
||||
/* Note that AO_nop_full is a full memory barrier. */
|
||||
/* */
|
||||
/* Note that if some data is initialized with */
|
||||
/* data.x = ...; data.y = ...; ... */
|
||||
/* AO_store_release_write(&data_is_initialized, 1) */
|
||||
/* then data is guaranteed to be initialized after the test */
|
||||
/* if (AO_load_release_read(&data_is_initialized)) ... */
|
||||
/* succeeds. Furthermore, this should generate near-optimal */
|
||||
/* code on all common platforms. */
|
||||
/* */
|
||||
/* All operations operate on unsigned AO_t, which */
|
||||
/* is the natural word size, and usually unsigned long. */
|
||||
/* It is possible to check whether a particular operation op */
|
||||
/* is available on a particular platform by checking whether */
|
||||
/* AO_HAVE_op is defined. We make heavy use of these macros */
|
||||
/* internally. */
|
||||
|
||||
/* The rest of this file basically has three sections: */
|
||||
/* */
|
||||
/* Some utility and default definitions. */
|
||||
/* */
|
||||
/* The architecture dependent section: */
|
||||
/* This defines atomic operations that have direct hardware */
|
||||
/* support on a particular platform, mostly by uncluding the */
|
||||
/* appropriate compiler- and hardware-dependent file. */
|
||||
/* */
|
||||
/* The synthesis section: */
|
||||
/* This tries to define other atomic operations in terms of */
|
||||
/* those that are explicitly available on the platform. */
|
||||
/* This section is hardware independent. */
|
||||
/* We make no attempt to synthesize operations in ways that */
|
||||
/* effectively introduce locks, except for the debugging/demo */
|
||||
/* pthread-based implementation at the beginning. A more */
|
||||
/* relistic implementation that falls back to locks could be */
|
||||
/* added as a higher layer. But that would sacrifice */
|
||||
/* usability from signal handlers. */
|
||||
/* The synthesis section is implemented almost entirely in */
|
||||
/* atomic_ops_generalize.h. */
|
||||
|
||||
/* Some common defaults. Overridden for some architectures. */
|
||||
#define AO_t size_t
|
||||
|
||||
/* The test_and_set primitive returns an AO_TS_VAL_t value. */
|
||||
/* AO_TS_t is the type of an in-memory test-and-set location. */
|
||||
|
||||
#define AO_TS_INITIALIZER (AO_t)AO_TS_CLEAR
|
||||
|
||||
/* Platform-dependent stuff: */
|
||||
#if defined(__GNUC__) || defined(_MSC_VER) || defined(__INTEL_COMPILER)
|
||||
# define AO_INLINE static __inline
|
||||
#else
|
||||
# define AO_INLINE static
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
||||
# define AO_compiler_barrier() __asm__ __volatile__("" : : : "memory")
|
||||
#elif defined(_MSC_VER)
|
||||
# if defined(_AMD64_)
|
||||
# pragma intrinsic(_ReadWriteBarrier)
|
||||
# define AO_compiler_barrier() _ReadWriteBarrier()
|
||||
/* We assume this does not generate a fence instruction. */
|
||||
/* The documentation is a bit unclear. */
|
||||
# else
|
||||
# define AO_compiler_barrier() __asm { }
|
||||
/* The preceding implementation may be preferable here too. */
|
||||
/* But the documentation warns about VC++ 2003 and earlier. */
|
||||
# endif
|
||||
#elif defined(__INTEL_COMPILER)
|
||||
# define AO_compiler_barrier() __memory_barrier() /* Too strong? IA64-only? */
|
||||
#elif defined(_HPUX_SOURCE)
|
||||
# if defined(__ia64)
|
||||
# include <machine/sys/inline.h>
|
||||
# define AO_compiler_barrier() _Asm_sched_fence()
|
||||
# else
|
||||
/* FIXME - We dont know how to do this. This is a guess. */
|
||||
/* And probably a bad one. */
|
||||
static volatile int AO_barrier_dummy;
|
||||
# define AO_compiler_barrier() AO_barrier_dummy = AO_barrier_dummy
|
||||
# endif
|
||||
#else
|
||||
/* We conjecture that the following usually gives us the right */
|
||||
/* semantics or an error. */
|
||||
# define AO_compiler_barrier() asm("")
|
||||
#endif
|
||||
|
||||
#if defined(AO_USE_PTHREAD_DEFS)
|
||||
# include "atomic_ops/sysdeps/generic_pthread.h"
|
||||
#endif /* AO_USE_PTHREAD_DEFS */
|
||||
|
||||
#if defined(__GNUC__) && !defined(AO_USE_PTHREAD_DEFS) \
|
||||
&& !defined(__INTEL_COMPILER)
|
||||
# if defined(__i386__)
|
||||
# include "atomic_ops/sysdeps/gcc/x86.h"
|
||||
# endif /* __i386__ */
|
||||
# if defined(__x86_64__)
|
||||
# include "atomic_ops/sysdeps/gcc/x86_64.h"
|
||||
# endif /* __i386__ */
|
||||
# if defined(__ia64__)
|
||||
# include "atomic_ops/sysdeps/gcc/ia64.h"
|
||||
# define AO_GENERALIZE_TWICE
|
||||
# endif /* __ia64__ */
|
||||
# if defined(__hppa__)
|
||||
# include "atomic_ops/sysdeps/gcc/hppa.h"
|
||||
# define AO_CAN_EMUL_CAS
|
||||
# endif /* __hppa__ */
|
||||
# if defined(__alpha__)
|
||||
# include "atomic_ops/sysdeps/gcc/alpha.h"
|
||||
# define AO_GENERALIZE_TWICE
|
||||
# endif /* __alpha__ */
|
||||
# if defined(__s390__)
|
||||
# include "atomic_ops/sysdeps/gcc/s390.h"
|
||||
# endif /* __s390__ */
|
||||
# if defined(__sparc__)
|
||||
# include "atomic_ops/sysdeps/gcc/sparc.h"
|
||||
# define AO_CAN_EMUL_CAS
|
||||
# endif /* __sparc__ */
|
||||
# if defined(__m68k__)
|
||||
# include "atomic_ops/sysdeps/gcc/m68k.h"
|
||||
# endif /* __m68k__ */
|
||||
# if defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) \
|
||||
|| defined(__powerpc64__) || defined(__ppc64__)
|
||||
# include "atomic_ops/sysdeps/gcc/powerpc.h"
|
||||
# endif /* __powerpc__ */
|
||||
# if defined(__arm__) && !defined(AO_USE_PTHREAD_DEFS)
|
||||
# include "atomic_ops/sysdeps/gcc/arm.h"
|
||||
# define AO_CAN_EMUL_CAS
|
||||
# endif /* __arm__ */
|
||||
# if defined(__cris__) || defined(CRIS)
|
||||
# include "atomic_ops/sysdeps/gcc/cris.h"
|
||||
# endif
|
||||
#endif /* __GNUC__ && !AO_USE_PTHREAD_DEFS */
|
||||
|
||||
#if defined(__INTEL_COMPILER) && !defined(AO_USE_PTHREAD_DEFS)
|
||||
# if defined(__ia64__)
|
||||
# include "atomic_ops/sysdeps/icc/ia64.h"
|
||||
# define AO_GENERALIZE_TWICE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(_HPUX_SOURCE) && !defined(__GNUC__) && !defined(AO_USE_PTHREAD_DEFS)
|
||||
# if defined(__ia64)
|
||||
# include "atomic_ops/sysdeps/hpc/ia64.h"
|
||||
# define AO_GENERALIZE_TWICE
|
||||
# else
|
||||
# include "atomic_ops/sysdeps/hpc/hppa.h"
|
||||
# define AO_CAN_EMUL_CAS
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(__GNUC__) && (defined(sparc) || defined(__sparc)) \
|
||||
&& !defined(AO_USE_PTHREAD_DEFS)
|
||||
# include "atomic_ops/sysdeps/sunc/sparc.h"
|
||||
# define AO_CAN_EMUL_CAS
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# if defined(_AMD64_)
|
||||
# include "atomic_ops/sysdeps/msftc/x86_64.h"
|
||||
# elif _M_IX86 >= 400
|
||||
# include "atomic_ops/sysdeps/msftc/x86.h"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(AO_REQUIRE_CAS) && !defined(AO_HAVE_compare_and_swap) \
|
||||
&& !defined(AO_HAVE_compare_and_swap_full) \
|
||||
&& !defined(AO_HAVE_compare_and_swap_acquire)
|
||||
# if defined(AO_CAN_EMUL_CAS)
|
||||
# include "atomic_ops/sysdeps/emul_cas.h"
|
||||
# else
|
||||
# error Cannot implement AO_compare_and_swap_full on this architecture.
|
||||
# endif
|
||||
#endif /* AO_REQUIRE_CAS && !AO_HAVE_compare_and_swap ... */
|
||||
|
||||
/* The most common way to clear a test-and-set location */
|
||||
/* at the end of a critical section. */
|
||||
#if AO_AO_TS_T && !defined(AO_CLEAR)
|
||||
# define AO_CLEAR(addr) AO_store_release((AO_TS_t *)addr, AO_TS_CLEAR)
|
||||
#endif
|
||||
#if AO_CHAR_TS_T && !defined(AO_CLEAR)
|
||||
# define AO_CLEAR(addr) AO_char_store_release((AO_TS_t *)addr, AO_TS_CLEAR)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The generalization section.
|
||||
* Theoretically this should repeatedly include atomic_ops_generalize.h.
|
||||
* In fact, we observe that this converges after a small fixed number
|
||||
* of iterations, usually one.
|
||||
*/
|
||||
#include "atomic_ops/generalize.h"
|
||||
#ifdef AO_GENERALIZE_TWICE
|
||||
# include "atomic_ops/generalize.h"
|
||||
#endif
|
||||
|
||||
/* For compatibility with version 0.4 and earlier */
|
||||
#define AO_TS_T AO_TS_t
|
||||
#define AO_T AO_t
|
||||
#define AO_TS_VAL AO_TS_VAL_t
|
||||
|
||||
#endif /* ATOMIC_OPS_H */
|
|
@ -1,12 +0,0 @@
|
|||
SUBDIRS=sysdeps
|
||||
|
||||
EXTRA_DIST=generalize-small.template
|
||||
|
||||
#Private Headers
|
||||
private_HEADERS=generalize.h generalize-small.h
|
||||
privatedir=${includedir}/atomic_ops/
|
||||
|
||||
generalize-small.h: generalize-small.template
|
||||
sed -e s:XSIZE:char:g -e s:XCTYPE:char:g $? > $@
|
||||
sed -e s:XSIZE:short:g -e s:XCTYPE:short:g $? >> $@
|
||||
sed -e s:XSIZE:int:g -e s:XCTYPE:int:g $? >> $@
|
|
@ -1,481 +0,0 @@
|
|||
# Makefile.in generated by automake 1.9.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/atomic_ops
|
||||
DIST_COMMON = $(private_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(privatedir)"
|
||||
privateHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(private_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NEED_ASM_FALSE = @NEED_ASM_FALSE@
|
||||
NEED_ASM_TRUE = @NEED_ASM_TRUE@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAG = @PICFLAG@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
SUBDIRS = sysdeps
|
||||
EXTRA_DIST = generalize-small.template
|
||||
|
||||
#Private Headers
|
||||
private_HEADERS = generalize.h generalize-small.h
|
||||
privatedir = ${includedir}/atomic_ops/
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/atomic_ops/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/atomic_ops/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
install-privateHEADERS: $(private_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(privatedir)" || $(mkdir_p) "$(DESTDIR)$(privatedir)"
|
||||
@list='$(private_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(privateHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(privatedir)/$$f'"; \
|
||||
$(privateHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(privatedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-privateHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(private_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(privatedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(privatedir)/$$f"; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(HEADERS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(privatedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-privateHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-privateHEADERS
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-generic clean-recursive ctags ctags-recursive \
|
||||
distclean distclean-generic distclean-recursive distclean-tags \
|
||||
distdir dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-privateHEADERS install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-generic mostlyclean-recursive pdf \
|
||||
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-info-am uninstall-privateHEADERS
|
||||
|
||||
|
||||
generalize-small.h: generalize-small.template
|
||||
sed -e s:XSIZE:char:g -e s:XCTYPE:char:g $? > $@
|
||||
sed -e s:XSIZE:short:g -e s:XCTYPE:short:g $? >> $@
|
||||
sed -e s:XSIZE:int:g -e s:XCTYPE:int:g $? >> $@
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
File diff suppressed because it is too large
Load Diff
|
@ -1,575 +0,0 @@
|
|||
/* XSIZE_load */
|
||||
#if defined(AO_HAVE_XSIZE_load_acquire) && !defined(AO_HAVE_XSIZE_load)
|
||||
# define AO_XSIZE_load(addr) AO_XSIZE_load_acquire(addr)
|
||||
# define AO_HAVE_XSIZE_load
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_load_full) && !defined(AO_HAVE_XSIZE_load_acquire)
|
||||
# define AO_XSIZE_load_acquire(addr) AO_XSIZE_load_full(addr)
|
||||
# define AO_HAVE_XSIZE_load_acquire
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_load_full) && !defined(AO_HAVE_XSIZE_load_read)
|
||||
# define AO_XSIZE_load_read(addr) AO_XSIZE_load_full(addr)
|
||||
# define AO_HAVE_XSIZE_load_read
|
||||
#endif
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_load_acquire_read) && defined(AO_HAVE_XSIZE_load_acquire)
|
||||
# define AO_XSIZE_load_acquire_read(addr) AO_XSIZE_load_acquire(addr)
|
||||
# define AO_HAVE_XSIZE_load_acquire_read
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_load) && defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_load_acquire)
|
||||
AO_INLINE unsigned XCTYPE
|
||||
AO_XSIZE_load_acquire(volatile unsigned XCTYPE *addr)
|
||||
{
|
||||
unsigned XCTYPE result = AO_XSIZE_load(addr);
|
||||
/* Acquire barrier would be useless, since the load could be delayed */
|
||||
/* beyond it. */
|
||||
AO_nop_full();
|
||||
return result;
|
||||
}
|
||||
# define AO_HAVE_XSIZE_load_acquire
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_load) && defined(AO_HAVE_nop_read) && \
|
||||
!defined(AO_HAVE_XSIZE_load_read)
|
||||
AO_INLINE unsigned XCTYPE
|
||||
AO_XSIZE_load_read(volatile unsigned XCTYPE *addr)
|
||||
{
|
||||
unsigned XCTYPE result = AO_XSIZE_load(addr);
|
||||
/* Acquire barrier would be useless, since the load could be delayed */
|
||||
/* beyond it. */
|
||||
AO_nop_read();
|
||||
return result;
|
||||
}
|
||||
# define AO_HAVE_XSIZE_load_read
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_load_acquire) && defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_load_full)
|
||||
# define AO_XSIZE_load_full(addr) (AO_nop_full(), AO_XSIZE_load_acquire(addr))
|
||||
# define AO_HAVE_XSIZE_load_full
|
||||
#endif
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_load_acquire_read) && defined(AO_HAVE_XSIZE_load_read)
|
||||
# define AO_XSIZE_load_acquire_read(addr) AO_XSIZE_load_read(addr)
|
||||
# define AO_HAVE_XSIZE_load_acquire_read
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_load_acquire_read) && !defined(AO_HAVE_XSIZE_load)
|
||||
# define AO_XSIZE_load(addr) AO_XSIZE_load_acquire_read(addr)
|
||||
# define AO_HAVE_XSIZE_load
|
||||
#endif
|
||||
|
||||
#ifdef AO_NO_DD_ORDERING
|
||||
# if defined(AO_HAVE_XSIZE_load_acquire_read)
|
||||
# define AO_XSIZE_load_dd_acquire_read(addr) \
|
||||
AO_XSIZE_load_acquire_read(addr)
|
||||
# define AO_HAVE_XSIZE_load_dd_acquire_read
|
||||
# endif
|
||||
#else
|
||||
# if defined(AO_HAVE_XSIZE_load)
|
||||
# define AO_XSIZE_load_dd_acquire_read(addr) \
|
||||
AO_XSIZE_load(addr)
|
||||
# define AO_HAVE_XSIZE_load_dd_acquire_read
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* XSIZE_store */
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_release) && !defined(AO_HAVE_XSIZE_store)
|
||||
# define AO_XSIZE_store(addr, val) AO_XSIZE_store_release(addr,val)
|
||||
# define AO_HAVE_XSIZE_store
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_full) && !defined(AO_HAVE_XSIZE_store_release)
|
||||
# define AO_XSIZE_store_release(addr,val) AO_XSIZE_store_full(addr,val)
|
||||
# define AO_HAVE_XSIZE_store_release
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_full) && !defined(AO_HAVE_XSIZE_store_write)
|
||||
# define AO_XSIZE_store_write(addr,val) AO_XSIZE_store_full(addr,val)
|
||||
# define AO_HAVE_XSIZE_store_write
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_release) && \
|
||||
!defined(AO_HAVE_XSIZE_store_release_write)
|
||||
# define AO_XSIZE_store_release_write(addr, val) \
|
||||
AO_XSIZE_store_release(addr,val)
|
||||
# define AO_HAVE_XSIZE_store_release_write
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_write) && !defined(AO_HAVE_XSIZE_store)
|
||||
# define AO_XSIZE_store(addr, val) AO_XSIZE_store_write(addr,val)
|
||||
# define AO_HAVE_XSIZE_store
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store) && defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_store_release)
|
||||
# define AO_XSIZE_store_release(addr,val) \
|
||||
(AO_nop_full(), AO_XSIZE_store(addr,val))
|
||||
# define AO_HAVE_XSIZE_store_release
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_XSIZE_store) && \
|
||||
!defined(AO_HAVE_XSIZE_store_write)
|
||||
# define AO_XSIZE_store_write(addr, val) \
|
||||
(AO_nop_write(), AO_XSIZE_store(addr,val))
|
||||
# define AO_HAVE_XSIZE_store_write
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_write) && \
|
||||
!defined(AO_HAVE_XSIZE_store_release_write)
|
||||
# define AO_XSIZE_store_release_write(addr, val) AO_XSIZE_store_write(addr,val)
|
||||
# define AO_HAVE_XSIZE_store_release_write
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_store_release) && defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_store_full)
|
||||
# define AO_XSIZE_store_full(addr, val) \
|
||||
(AO_XSIZE_store_release(addr, val), AO_nop_full())
|
||||
# define AO_HAVE_XSIZE_store_full
|
||||
#endif
|
||||
|
||||
|
||||
/* XSIZE_fetch_and_add */
|
||||
#if defined(AO_HAVE_XSIZE_compare_and_swap_full) && \
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add_full)
|
||||
AO_INLINE AO_t
|
||||
AO_XSIZE_fetch_and_add_full(volatile unsigned XCTYPE *addr,
|
||||
unsigned XCTYPE incr)
|
||||
{
|
||||
unsigned XCTYPE old;
|
||||
do
|
||||
{
|
||||
old = *addr;
|
||||
}
|
||||
while (!AO_XSIZE_compare_and_swap_full(addr, old, old+incr));
|
||||
return old;
|
||||
}
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_full
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_compare_and_swap_acquire) && \
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
|
||||
AO_INLINE AO_t
|
||||
AO_XSIZE_fetch_and_add_acquire(volatile unsigned XCTYPE *addr,
|
||||
unsigned XCTYPE incr)
|
||||
{
|
||||
unsigned XCTYPE old;
|
||||
do
|
||||
{
|
||||
old = *addr;
|
||||
}
|
||||
while (!AO_XSIZE_compare_and_swap_acquire(addr, old, old+incr));
|
||||
return old;
|
||||
}
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_acquire
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_compare_and_swap_release) && \
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add_release)
|
||||
AO_INLINE AO_t
|
||||
AO_XSIZE_fetch_and_add_release(volatile unsigned XCTYPE *addr,
|
||||
unsigned XCTYPE incr)
|
||||
{
|
||||
unsigned XCTYPE old;
|
||||
do
|
||||
{
|
||||
old = *addr;
|
||||
}
|
||||
while (!AO_XSIZE_compare_and_swap_release(addr, old, old+incr));
|
||||
return old;
|
||||
}
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_release
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_full)
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add_release)
|
||||
# define AO_XSIZE_fetch_and_add_release(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_full(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_release
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
|
||||
# define AO_XSIZE_fetch_and_add_acquire(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_full(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_acquire
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add_write)
|
||||
# define AO_XSIZE_fetch_and_add_write(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_full(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_write
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add_read)
|
||||
# define AO_XSIZE_fetch_and_add_read(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_full(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_read
|
||||
# endif
|
||||
#endif /* AO_HAVE_XSIZE_fetch_and_add_full */
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_release)
|
||||
# define AO_XSIZE_fetch_and_add(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_release(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
|
||||
# define AO_XSIZE_fetch_and_add(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_acquire(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_write)
|
||||
# define AO_XSIZE_fetch_and_add(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_write(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_read)
|
||||
# define AO_XSIZE_fetch_and_add(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_read(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\
|
||||
defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add_full)
|
||||
# define AO_XSIZE_fetch_and_add_full(addr, val) \
|
||||
(AO_nop_full(), AO_XSIZE_fetch_and_add_acquire(addr, val))
|
||||
#endif
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add_release_write) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_write)
|
||||
# define AO_XSIZE_fetch_and_add_release_write(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_write(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_release_write
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add_release_write) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_release)
|
||||
# define AO_XSIZE_fetch_and_add_release_write(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_release(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_release_write
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_read)
|
||||
# define AO_XSIZE_fetch_and_add_acquire_read(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_read(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_acquire_read
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
|
||||
# define AO_XSIZE_fetch_and_add_acquire_read(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_acquire(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_acquire_read
|
||||
#endif
|
||||
|
||||
#ifdef AO_NO_DD_ORDERING
|
||||
# if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read)
|
||||
# define AO_XSIZE_fetch_and_add_dd_acquire_read(addr, val) \
|
||||
AO_XSIZE_fetch_and_add_acquire_read(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_dd_acquire_read
|
||||
# endif
|
||||
#else
|
||||
# if defined(AO_HAVE_XSIZE_fetch_and_add)
|
||||
# define AO_XSIZE_fetch_and_add_dd_acquire_read(addr, val) \
|
||||
AO_XSIZE_fetch_and_add(addr, val)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add_dd_acquire_read
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* XSIZE_fetch_and_add1 */
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_full) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_full)
|
||||
# define AO_XSIZE_fetch_and_add1_full(addr) \
|
||||
AO_XSIZE_fetch_and_add_full(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_full
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_release) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_release)
|
||||
# define AO_XSIZE_fetch_and_add1_release(addr) \
|
||||
AO_XSIZE_fetch_and_add_release(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_release
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
|
||||
# define AO_XSIZE_fetch_and_add1_acquire(addr) \
|
||||
AO_XSIZE_fetch_and_add_acquire(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_acquire
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_write) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_write)
|
||||
# define AO_XSIZE_fetch_and_add1_write(addr) \
|
||||
AO_XSIZE_fetch_and_add_write(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_write
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_read) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_read)
|
||||
# define AO_XSIZE_fetch_and_add1_read(addr) \
|
||||
AO_XSIZE_fetch_and_add_read(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_read
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_release_write) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_release_write)
|
||||
# define AO_XSIZE_fetch_and_add1_release_write(addr) \
|
||||
AO_XSIZE_fetch_and_add_release_write(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_release_write
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read)
|
||||
# define AO_XSIZE_fetch_and_add1_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_add_acquire_read(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_acquire_read
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1)
|
||||
# define AO_XSIZE_fetch_and_add1(addr) \
|
||||
AO_XSIZE_fetch_and_add(addr,1)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add1_full)
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add1_release)
|
||||
# define AO_XSIZE_fetch_and_add1_release(addr) \
|
||||
AO_XSIZE_fetch_and_add1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_release
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
|
||||
# define AO_XSIZE_fetch_and_add1_acquire(addr) \
|
||||
AO_XSIZE_fetch_and_add1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_acquire
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add1_write)
|
||||
# define AO_XSIZE_fetch_and_add1_write(addr) \
|
||||
AO_XSIZE_fetch_and_add1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_write
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_add1_read)
|
||||
# define AO_XSIZE_fetch_and_add1_read(addr) \
|
||||
AO_XSIZE_fetch_and_add1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_read
|
||||
# endif
|
||||
#endif /* AO_HAVE_XSIZE_fetch_and_add1_full */
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_release)
|
||||
# define AO_XSIZE_fetch_and_add1(addr) \
|
||||
AO_XSIZE_fetch_and_add1_release(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
|
||||
# define AO_XSIZE_fetch_and_add1(addr) \
|
||||
AO_XSIZE_fetch_and_add1_acquire(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_write)
|
||||
# define AO_XSIZE_fetch_and_add1(addr) \
|
||||
AO_XSIZE_fetch_and_add1_write(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_read)
|
||||
# define AO_XSIZE_fetch_and_add1(addr) \
|
||||
AO_XSIZE_fetch_and_add1_read(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) &&\
|
||||
defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_add1_full)
|
||||
# define AO_XSIZE_fetch_and_add1_full(addr) \
|
||||
(AO_nop_full(), AO_XSIZE_fetch_and_add1_acquire(addr))
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_full
|
||||
#endif
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_write)
|
||||
# define AO_XSIZE_fetch_and_add1_release_write(addr) \
|
||||
AO_XSIZE_fetch_and_add1_write(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_release_write
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_release)
|
||||
# define AO_XSIZE_fetch_and_add1_release_write(addr) \
|
||||
AO_XSIZE_fetch_and_add1_release(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_release_write
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_read)
|
||||
# define AO_XSIZE_fetch_and_add1_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_add1_read(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_acquire_read
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
|
||||
# define AO_XSIZE_fetch_and_add1_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_add1_acquire(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_acquire_read
|
||||
#endif
|
||||
|
||||
#ifdef AO_NO_DD_ORDERING
|
||||
# if defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read)
|
||||
# define AO_XSIZE_fetch_and_add1_dd_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_add1_acquire_read(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_dd_acquire_read
|
||||
# endif
|
||||
#else
|
||||
# if defined(AO_HAVE_XSIZE_fetch_and_add1)
|
||||
# define AO_XSIZE_fetch_and_add1_dd_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_add1(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_add1_dd_acquire_read
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* XSIZE_fetch_and_sub1 */
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_full) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_full)
|
||||
# define AO_XSIZE_fetch_and_sub1_full(addr) \
|
||||
AO_XSIZE_fetch_and_add_full(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_full
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_release) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
|
||||
# define AO_XSIZE_fetch_and_sub1_release(addr) \
|
||||
AO_XSIZE_fetch_and_add_release(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_release
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
|
||||
# define AO_XSIZE_fetch_and_sub1_acquire(addr) \
|
||||
AO_XSIZE_fetch_and_add_acquire(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_acquire
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_write) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
|
||||
# define AO_XSIZE_fetch_and_sub1_write(addr) \
|
||||
AO_XSIZE_fetch_and_add_write(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_write
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_read) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
|
||||
# define AO_XSIZE_fetch_and_sub1_read(addr) \
|
||||
AO_XSIZE_fetch_and_add_read(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_read
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_release_write) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write)
|
||||
# define AO_XSIZE_fetch_and_sub1_release_write(addr) \
|
||||
AO_XSIZE_fetch_and_add_release_write(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_release_write
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read)
|
||||
# define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_add_acquire_read(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read
|
||||
#endif
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_add) &&\
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1)
|
||||
# define AO_XSIZE_fetch_and_sub1(addr) \
|
||||
AO_XSIZE_fetch_and_add(addr,(unsigned XCTYPE)(-1))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_sub1_full)
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
|
||||
# define AO_XSIZE_fetch_and_sub1_release(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_release
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
|
||||
# define AO_XSIZE_fetch_and_sub1_acquire(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_acquire
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
|
||||
# define AO_XSIZE_fetch_and_sub1_write(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_write
|
||||
# endif
|
||||
# if !defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
|
||||
# define AO_XSIZE_fetch_and_sub1_read(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_full(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_read
|
||||
# endif
|
||||
#endif /* AO_HAVE_XSIZE_fetch_and_sub1_full */
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
|
||||
# define AO_XSIZE_fetch_and_sub1(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_release(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
|
||||
# define AO_XSIZE_fetch_and_sub1(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_acquire(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
|
||||
# define AO_XSIZE_fetch_and_sub1(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_write(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
|
||||
# define AO_XSIZE_fetch_and_sub1(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_read(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1
|
||||
#endif
|
||||
|
||||
#if defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) &&\
|
||||
defined(AO_HAVE_nop_full) && \
|
||||
!defined(AO_HAVE_XSIZE_fetch_and_sub1_full)
|
||||
# define AO_XSIZE_fetch_and_sub1_full(addr) \
|
||||
(AO_nop_full(), AO_XSIZE_fetch_and_sub1_acquire(addr))
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_full
|
||||
#endif
|
||||
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
|
||||
# define AO_XSIZE_fetch_and_sub1_release_write(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_write(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_release_write
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
|
||||
# define AO_XSIZE_fetch_and_sub1_release_write(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_release(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_release_write
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
|
||||
# define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_read(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read
|
||||
#endif
|
||||
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) && \
|
||||
defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
|
||||
# define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_acquire(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read
|
||||
#endif
|
||||
|
||||
#ifdef AO_NO_DD_ORDERING
|
||||
# if defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read)
|
||||
# define AO_XSIZE_fetch_and_sub1_dd_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_sub1_acquire_read(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_dd_acquire_read
|
||||
# endif
|
||||
#else
|
||||
# if defined(AO_HAVE_XSIZE_fetch_and_sub1)
|
||||
# define AO_XSIZE_fetch_and_sub1_dd_acquire_read(addr) \
|
||||
AO_XSIZE_fetch_and_sub1(addr)
|
||||
# define AO_HAVE_XSIZE_fetch_and_sub1_dd_acquire_read
|
||||
# endif
|
||||
#endif
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,47 +0,0 @@
|
|||
#General sysdep utility headers, followed by the arch-specific ones
|
||||
nobase_sysdep_HEADERS= generic_pthread.h \
|
||||
atomic_load_store.h \
|
||||
aligned_atomic_load_store.h \
|
||||
acquire_release_volatile.h \
|
||||
char_acquire_release_volatile.h \
|
||||
char_atomic_load_store.h \
|
||||
short_acquire_release_volatile.h \
|
||||
short_aligned_atomic_load_store.h \
|
||||
short_atomic_load_store.h \
|
||||
int_acquire_release_volatile.h \
|
||||
int_aligned_atomic_load_store.h \
|
||||
int_atomic_load_store.h \
|
||||
all_acquire_release_volatile.h \
|
||||
all_aligned_atomic_load_store.h \
|
||||
all_atomic_load_store.h \
|
||||
read_ordered.h \
|
||||
ordered_except_wr.h \
|
||||
ordered.h \
|
||||
ao_t_is_int.h \
|
||||
test_and_set_t_is_ao_t.h \
|
||||
test_and_set_t_is_char.h \
|
||||
emul_cas.h \
|
||||
standard_ao_double_t.h \
|
||||
README \
|
||||
\
|
||||
gcc/alpha.h gcc/arm.h gcc/x86.h \
|
||||
gcc/hppa.h gcc/ia64.h \
|
||||
gcc/powerpc.h gcc/sparc.h \
|
||||
gcc/hppa.h gcc/m68k.h gcc/s390.h \
|
||||
gcc/ia64.h gcc/x86_64.h gcc/cris.h \
|
||||
\
|
||||
icc/ia64.h \
|
||||
\
|
||||
msftc/x86.h \
|
||||
msftc/x86_64.h \
|
||||
\
|
||||
hpc/ia64.h hpc/hppa.h \
|
||||
\
|
||||
sunc/sparc.h \
|
||||
\
|
||||
ibmc/powerpc.h
|
||||
|
||||
sysdepdir= ${includedir}/atomic_ops/sysdeps
|
||||
|
||||
# A few architectures require special .S files
|
||||
EXTRA_DIST = sunc/sparc.S
|
|
@ -1,427 +0,0 @@
|
|||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../../..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/atomic_ops/sysdeps
|
||||
DIST_COMMON = README $(nobase_sysdep_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(sysdepdir)"
|
||||
nobase_sysdepHEADERS_INSTALL = $(install_sh_DATA)
|
||||
HEADERS = $(nobase_sysdep_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCAS = @CCAS@
|
||||
CCASFLAGS = @CCASFLAGS@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NEED_ASM_FALSE = @NEED_ASM_FALSE@
|
||||
NEED_ASM_TRUE = @NEED_ASM_TRUE@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAG = @PICFLAG@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
#General sysdep utility headers, followed by the arch-specific ones
|
||||
nobase_sysdep_HEADERS = generic_pthread.h \
|
||||
atomic_load_store.h \
|
||||
aligned_atomic_load_store.h \
|
||||
acquire_release_volatile.h \
|
||||
char_acquire_release_volatile.h \
|
||||
char_atomic_load_store.h \
|
||||
short_acquire_release_volatile.h \
|
||||
short_aligned_atomic_load_store.h \
|
||||
short_atomic_load_store.h \
|
||||
int_acquire_release_volatile.h \
|
||||
int_aligned_atomic_load_store.h \
|
||||
int_atomic_load_store.h \
|
||||
all_acquire_release_volatile.h \
|
||||
all_aligned_atomic_load_store.h \
|
||||
all_atomic_load_store.h \
|
||||
read_ordered.h \
|
||||
ordered_except_wr.h \
|
||||
ordered.h \
|
||||
ao_t_is_int.h \
|
||||
test_and_set_t_is_ao_t.h \
|
||||
test_and_set_t_is_char.h \
|
||||
emul_cas.h \
|
||||
standard_ao_double_t.h \
|
||||
README \
|
||||
\
|
||||
gcc/alpha.h gcc/arm.h gcc/x86.h \
|
||||
gcc/hppa.h gcc/ia64.h \
|
||||
gcc/powerpc.h gcc/sparc.h \
|
||||
gcc/hppa.h gcc/m68k.h gcc/s390.h \
|
||||
gcc/ia64.h gcc/x86_64.h gcc/cris.h \
|
||||
\
|
||||
icc/ia64.h \
|
||||
\
|
||||
msftc/x86.h \
|
||||
msftc/x86_64.h \
|
||||
\
|
||||
hpc/ia64.h hpc/hppa.h \
|
||||
\
|
||||
sunc/sparc.h \
|
||||
\
|
||||
ibmc/powerpc.h
|
||||
|
||||
sysdepdir = ${includedir}/atomic_ops/sysdeps
|
||||
|
||||
# A few architectures require special .S files
|
||||
EXTRA_DIST = sunc/sparc.S
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/atomic_ops/sysdeps/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/atomic_ops/sysdeps/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
install-nobase_sysdepHEADERS: $(nobase_sysdep_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(sysdepdir)" || $(mkdir_p) "$(DESTDIR)$(sysdepdir)"
|
||||
@$(am__vpath_adj_setup) \
|
||||
list='$(nobase_sysdep_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
$(am__vpath_adj) \
|
||||
echo " $(nobase_sysdepHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(sysdepdir)/$$f'"; \
|
||||
$(nobase_sysdepHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(sysdepdir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-nobase_sysdepHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@$(am__vpath_adj_setup) \
|
||||
list='$(nobase_sysdep_HEADERS)'; for p in $$list; do \
|
||||
$(am__vpath_adj) \
|
||||
echo " rm -f '$(DESTDIR)$(sysdepdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(sysdepdir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/gcc $(distdir)/hpc $(distdir)/ibmc $(distdir)/icc $(distdir)/msftc $(distdir)/sunc
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(sysdepdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-nobase_sysdepHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-nobase_sysdepHEADERS
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
ctags distclean distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man \
|
||||
install-nobase_sysdepHEADERS install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-nobase_sysdepHEADERS
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -1,7 +0,0 @@
|
|||
There are two kinds of entities in this directory:
|
||||
|
||||
- Subdirectories corresponding to specific compilers (or compiler/OS combinations).
|
||||
Each of these includes one or more architecture-specific headers.
|
||||
|
||||
- More generic header files corresponding to a particular ordering and/or
|
||||
atomicity property that might be shared by multiple hardware platforms.
|
|
@ -1,64 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2003 Hewlett-Packard Development Company, L.P.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file adds definitions appropriate for environments in which an AO_t
|
||||
* volatile load has acquire semantics, and an AO_t volatile store has release
|
||||
* semantics. This is arguably supposed to be true with the standard Itanium
|
||||
* software conventions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Empirically gcc/ia64 does some reordering of ordinary operations around volatiles
|
||||
* even when we think it shouldn't. Gcc 3.3 and earlier could reorder a volatile store
|
||||
* with another store. As of March 2005, gcc pre-4 reused previously computed
|
||||
* common subexpressions across a volatile load.
|
||||
* Hence we now add compiler barriers for gcc.
|
||||
*/
|
||||
#if !defined(AO_GCC_BARRIER)
|
||||
# if defined(__GNUC__)
|
||||
# define AO_GCC_BARRIER() AO_compiler_barrier()
|
||||
# else
|
||||
# define AO_GCC_BARRIER()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
AO_INLINE AO_t
|
||||
AO_load_acquire(volatile AO_t *p)
|
||||
{
|
||||
AO_t result = *p;
|
||||
/* A normal volatile load generates an ld.acq */
|
||||
AO_GCC_BARRIER();
|
||||
return result;
|
||||
}
|
||||
#define AO_HAVE_load_acquire
|
||||
|
||||
AO_INLINE void
|
||||
AO_store_release(volatile AO_t *p, AO_t val)
|
||||
{
|
||||
AO_GCC_BARRIER();
|
||||
/* A normal volatile store generates an st.rel */
|
||||
*p = val;
|
||||
}
|
||||
#define AO_HAVE_store_release
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user