diff --git a/pkgs/racket-doc/scribblings/raco/setup.scrbl b/pkgs/racket-doc/scribblings/raco/setup.scrbl index a99cbe2040..f19e04df4f 100644 --- a/pkgs/racket-doc/scribblings/raco/setup.scrbl +++ b/pkgs/racket-doc/scribblings/raco/setup.scrbl @@ -545,6 +545,10 @@ Optional @filepath{info.rkt} fields trigger additional actions by @item{@racket['no-search] : Build the document without a search box.} + @item{@racket['every-main-layer] : With @racket['main-doc], + indicates that the document should be rendered separately + at every installation layer (see @secref["layered-install"]).} + ] The @racket[_category] list specifies how to show the document in diff --git a/pkgs/racket-index/scribblings/main/info.rkt b/pkgs/racket-index/scribblings/main/info.rkt index e1fd50aec2..75c507848a 100644 --- a/pkgs/racket-index/scribblings/main/info.rkt +++ b/pkgs/racket-index/scribblings/main/info.rkt @@ -1,10 +1,9 @@ #lang info (define scribblings - '(("start.scrbl" - (main-doc-root depends-all-main no-depend-on) (omit)) - ("search.scrbl" (depends-all-main no-depend-on) (omit) "search" 1 10) - ("local-redirect.scrbl" (depends-all-main no-depend-on) (omit) "local-redirect" 1 10) + '(("start.scrbl" (main-doc-root depends-all-main no-depend-on) (omit)) + ("search.scrbl" (depends-all-main no-depend-on every-main-layer) (omit) "search" 1 10) + ("local-redirect.scrbl" (depends-all-main no-depend-on every-main-layer) (omit) "local-redirect" 1 10) ("license.scrbl" () (omit)) ("acks.scrbl" () (omit)) ("release.scrbl" (depends-all-main no-depend-on) (omit)))) diff --git a/pkgs/racket-index/scribblings/main/private/local-redirect.rkt b/pkgs/racket-index/scribblings/main/private/local-redirect.rkt index dd7d3f6af5..7a879eff4d 100644 --- a/pkgs/racket-index/scribblings/main/private/local-redirect.rkt +++ b/pkgs/racket-index/scribblings/main/private/local-redirect.rkt @@ -284,7 +284,8 @@ [i (in-naturals)]) (define name (extract-name e)) (fprintf o (if (zero? i) "\n" ",\n")) - (fprintf o " [~s, ~s]" name (if user? + (fprintf o " [~s, ~s]" name (if (or user? + (not (immediately-in-doc-dir? e))) (url->string (path->url e)) (format "../~a" name)))) (fprintf o "];\n\n") @@ -305,4 +306,8 @@ (js-addition (string->url "local-user-redirect.js")) (js-addition (string->bytes/utf-8 search-code)))) - null))) + null))) + +(define (immediately-in-doc-dir? path) + (define-values (base name dir?) (split-path path)) + (equal? (path->directory-path (find-doc-dir)) base)) diff --git a/pkgs/racket-index/setup/private/doc-path.rkt b/pkgs/racket-index/setup/private/doc-path.rkt index 875c3de50f..c62c89cab3 100644 --- a/pkgs/racket-index/setup/private/doc-path.rkt +++ b/pkgs/racket-index/setup/private/doc-path.rkt @@ -23,12 +23,13 @@ (memq 'main-doc flags) (pair? (path->main-collects-relative dir))) (and main? - ;; check for existing directory in search path before - ;; assuming the main doc directory - (or (for/or ([dir (get-doc-search-dirs)]) - (define p (build-path dir name)) - (and (directory-exists? p) - p)) + ;; check for existing directory in search path (unless + ;; 'every-main-layer) before assuming the main doc directory + (or (and (not (memq 'every-main-layer flags)) + (for/or ([dir (get-doc-extra-search-dirs)]) + (define p (build-path dir name)) + (and (directory-exists? p) + p))) (build-path (find-doc-dir) name)))] [else (and (not (eq? 'never user-doc-mode)) diff --git a/pkgs/racket-index/setup/scribble.rkt b/pkgs/racket-index/setup/scribble.rkt index 21ab76f247..92a9bd7631 100644 --- a/pkgs/racket-index/setup/scribble.rkt +++ b/pkgs/racket-index/setup/scribble.rkt @@ -158,7 +158,8 @@ (define (scribblings-flag? sym) (memq sym '(main-doc main-doc-root user-doc-root user-doc multi-page depends-all depends-all-main depends-all-user - no-depend-on always-run keep-style no-search))) + no-depend-on always-run keep-style no-search + every-main-layer))) (define (validate-scribblings-infos infos) (define (validate path [flags '()] [cat '(library)] [name #f] [out-count 1] [order-hint 0]) (and (string? path) (relative-path? path)