Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the lib_root and libexec_root install sections #947

Merged
2 commits merged into from Jul 3, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ next

- Do not require opam-installer anymore (#941, @diml)

- Add the `lib_root` and `libexec_root` install sections (#947, @diml)

1.0+beta20 (10/04/2018)
-----------------------

Expand Down
2 changes: 2 additions & 0 deletions doc/dune-files.rst
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,9 @@ The syntax is as follows:
manual. The following sections are available:

- ``lib``
- ``lib_root``
- ``libexec``
- ``libexec_root``
- ``bin``
- ``sbin``
- ``toplevel``
Expand Down
189 changes: 106 additions & 83 deletions src/install.ml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ open Import
module Section = struct
type t =
| Lib
| Lib_root
| Libexec
| Libexec_root
| Bin
| Sbin
| Toplevel
Expand All @@ -18,109 +20,130 @@ module Section = struct
let compare : t -> t -> Ordering.t = compare

let to_string = function
| Lib -> "lib"
| Libexec -> "libexec"
| Bin -> "bin"
| Sbin -> "sbin"
| Toplevel -> "toplevel"
| Share -> "share"
| Share_root -> "share_root"
| Etc -> "etc"
| Doc -> "doc"
| Stublibs -> "stublibs"
| Man -> "man"
| Misc -> "misc"
| Lib -> "lib"
| Lib_root -> "lib_root"
| Libexec -> "libexec"
| Libexec_root -> "libexec_root"
| Bin -> "bin"
| Sbin -> "sbin"
| Toplevel -> "toplevel"
| Share -> "share"
| Share_root -> "share_root"
| Etc -> "etc"
| Doc -> "doc"
| Stublibs -> "stublibs"
| Man -> "man"
| Misc -> "misc"

let of_string = function
| "lib" -> Some Lib
| "libexec" -> Some Libexec
| "bin" -> Some Bin
| "sbin" -> Some Sbin
| "toplevel" -> Some Toplevel
| "share" -> Some Share
| "share_root" -> Some Share_root
| "etc" -> Some Etc
| "doc" -> Some Doc
| "stublibs" -> Some Stublibs
| "man" -> Some Man
| "misc" -> Some Misc
| _ -> None
|"lib" -> Some Lib
|"lib_root" -> Some Lib_root
|"libexec" -> Some Libexec
|"libexec_root" -> Some Libexec_root
|"bin" -> Some Bin
|"sbin" -> Some Sbin
|"toplevel" -> Some Toplevel
|"share" -> Some Share
|"share_root" -> Some Share_root
|"etc" -> Some Etc
|"doc" -> Some Doc
|"stublibs" -> Some Stublibs
|"man" -> Some Man
|"misc" -> Some Misc
| _ -> None

let t =
let open Sexp.Of_sexp in
enum
[ "lib" , Lib
; "libexec" , Libexec
; "bin" , Bin
; "sbin" , Sbin
; "toplevel" , Toplevel
; "share" , Share
; "share_root" , Share_root
; "etc" , Etc
; "doc" , Doc
; "stublibs" , Stublibs
; "man" , Man
; "misc" , Misc
[ "lib" , Lib
; "lib_root" , Lib_root
; "libexec" , Libexec
; "libexec_root" , Libexec_root
; "bin" , Bin
; "sbin" , Sbin
; "toplevel" , Toplevel
; "share" , Share
; "share_root" , Share_root
; "etc" , Etc
; "doc" , Doc
; "stublibs" , Stublibs
; "man" , Man
; "misc" , Misc
]

let should_set_executable_bit = function
| Lib -> false
| Libexec -> true
| Bin -> true
| Sbin -> true
| Toplevel -> false
| Share -> false
| Share_root -> false
| Etc -> false
| Doc -> false
| Stublibs -> true
| Man -> false
| Misc -> false
| Lib
| Lib_root
| Toplevel
| Share
| Share_root
| Etc
| Doc
| Man
| Misc
-> false
| Libexec
| Libexec_root
| Bin
| Sbin
| Stublibs
-> true

module Paths = struct
type t =
{ lib : Path.t
; libexec : Path.t
; bin : Path.t
; sbin : Path.t
; toplevel : Path.t
; share : Path.t
; share_root : Path.t
; etc : Path.t
; doc : Path.t
; stublibs : Path.t
; man : Path.t
{ lib : Path.t
; lib_root : Path.t
; libexec : Path.t
; libexec_root : Path.t
; bin : Path.t
; sbin : Path.t
; toplevel : Path.t
; share : Path.t
; share_root : Path.t
; etc : Path.t
; doc : Path.t
; stublibs : Path.t
; man : Path.t
}

let make ~package ~destdir ?(libdir=Path.relative destdir "lib") () =
let package = Package.Name.to_string package in
{ bin = Path.relative destdir "bin"
; sbin = Path.relative destdir "sbin"
; toplevel = Path.relative libdir "toplevel"
; share_root = Path.relative libdir "share"
; stublibs = Path.relative libdir "lib/stublibs"
; man = Path.relative destdir "man"
; lib = Path.relative libdir package
; libexec = Path.relative libdir package
; share = Path.relative destdir ("share/" ^ package)
; etc = Path.relative destdir ("etc/" ^ package)
; doc = Path.relative destdir ("doc/" ^ package)
let lib_root = libdir in
let libexec_root = libdir in
let share_root = Path.relative destdir "share" in
let etc_root = Path.relative destdir "etc" in
let doc_root = Path.relative destdir "doc" in
{ lib_root
; libexec_root
; share_root
; bin = Path.relative destdir "bin"
; sbin = Path.relative destdir "sbin"
; man = Path.relative destdir "man"
; toplevel = Path.relative libdir "toplevel"
; stublibs = Path.relative libdir "stublibs"
; lib = Path.relative lib_root package
; libexec = Path.relative libexec_root package
; share = Path.relative share_root package
; etc = Path.relative etc_root package
; doc = Path.relative doc_root package
}

let get t section =
match section with
| Lib -> t.lib
| Libexec -> t.libexec
| Bin -> t.bin
| Sbin -> t.sbin
| Toplevel -> t.toplevel
| Share -> t.share
| Share_root -> t.share_root
| Etc -> t.etc
| Doc -> t.doc
| Stublibs -> t.stublibs
| Man -> t.man
| Misc -> invalid_arg "Install.Paths.get"
| Lib -> t.lib
| Lib_root -> t.lib_root
| Libexec -> t.libexec
| Libexec_root -> t.libexec_root
| Bin -> t.bin
| Sbin -> t.sbin
| Toplevel -> t.toplevel
| Share -> t.share
| Share_root -> t.share_root
| Etc -> t.etc
| Doc -> t.doc
| Stublibs -> t.stublibs
| Man -> t.man
| Misc -> invalid_arg"Install.Paths.get"
end
end

Expand Down
26 changes: 15 additions & 11 deletions src/install.mli
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ open Stdune
module Section : sig
type t =
| Lib
| Lib_root
| Libexec
| Libexec_root
| Bin
| Sbin
| Toplevel
Expand All @@ -27,17 +29,19 @@ module Section : sig
type section = t

type t =
{ lib : Path.t
; libexec : Path.t
; bin : Path.t
; sbin : Path.t
; toplevel : Path.t
; share : Path.t
; share_root : Path.t
; etc : Path.t
; doc : Path.t
; stublibs : Path.t
; man : Path.t
{ lib : Path.t
; lib_root : Path.t
; libexec : Path.t
; libexec_root : Path.t
; bin : Path.t
; sbin : Path.t
; toplevel : Path.t
; share : Path.t
; share_root : Path.t
; etc : Path.t
; doc : Path.t
; stublibs : Path.t
; man : Path.t
}

val make
Expand Down