Ocsigen Start: How to really get up and running in 5 minutes?

$ man opam-pin

The -n prevents immediate reinstallation of the package (and all its reverse dependencies).

I do not understand why the pin commands failed in your case. This failure is the reason for the subsequent errors you encountered.

That won’t be necessary as the packages in question have now been updated on the opam repository and should be installable out of the box. Therefore it won’t be necessary anymore to pin them. You can unpin them by running
$ opam unpin <package-name>.

The perfect place to publish information on package compatibilities is the opam file of package releases. Once a pull request has been created on opam-repository, releases are generally published reasonable quickly, more often than within the day. In this case multiple packages that hadn’t been maintained for months had to be updated consequtively, which is why whole matter took a bit longer than usual.

I sincerely hope that the packages in question will not fall again into the state of disrepair that you had to witness. In any case, I will henceforth do my best to publish releases frequently and will ask the rest of the ocsigen team to do so as well.

Regards,
Jan

Maybe it is doable to create an opam package with Ocsigen Start and let CI to check regularaly that something broken…

What do you mean with “check …that something broken”?

As I said above, we need at least (from any package author) a proof that it compiles well (such set of packages with other related files and build setup). To be able to reproduce it.

If the package manager adds its own issues, we should be able to tweak it to get the result expected,
Or at last even do the build by hand if necessary (thats’ only about 20 packages + depext).

A few days ago, I’ve done a test with building ocsigen-start 1.0.0 “as-is” on opam repository with opam 2.0.2 but I could not compile it entirely (just one package, js_of_ocaml, I don’t remember it’s name)

I wanted to say that for project like this not only compilation should be checked by CI but also functional testing is required (to be sure that HelloWorld behaves like HelloWorld).

This proof comes in a the form of package dependency version bounds. No additional proof is required.

The rigour used in determining and maximising valid version bounds however is a different question. I’m repeating myself in saying that in my opinion the solution consists of:

  • a common package versioning policy (such as https://pvp.haskell.org/) adopted by all package maintainers
  • automated testing that determines whether upper version bounds of existing packages can be raised to new releases of package dependencies

I am trying to opam install eliom and getting such an error report

    ┌─ The following actions failed
    │ λ build deriving   0.8.1
    │ λ build lwt_camlp4 1.0.0
    │ λ build pcre       7.3.5
    └─ 

With the following log:

**Processing actions** 

[ERROR] The compilation of lwt_camlp4 failed at

"/Users/ulugbekna/.opam/opam-init/hooks/sandbox.sh build jbuilder build

-p lwt_camlp4 -j 4".

[ERROR] The compilation of pcre failed at

"/Users/ulugbekna/.opam/opam-init/hooks/sandbox.sh build dune build -p

pcre -j 4".

[ERROR] The compilation of deriving failed at

"/Users/ulugbekna/.opam/opam-init/hooks/sandbox.sh build make".

#=== **ERROR** **while compiling pcre.7.3.5** =========================================#

# context 2.0.1 | macos/x86_64 | base-bigarray.base base-threads.base base-unix.base ocaml-system.4.07.1 | https://opam.ocaml.org/#3a0ca7cb

# path ~/.opam/system/.opam-switch/build/pcre.7.3.5

# command ~/.opam/opam-init/hooks/sandbox.sh build dune build -p pcre -j 4

# exit-code 1

# env-file ~/.opam/log/pcre-53707-b1a82b.env

# output-file ~/.opam/log/pcre-53707-b1a82b.out

### output ###

# ocamlc src/pcre_stubs.o (exit 2)

# (cd _build/default/src &amp;&amp; /usr/local/bin/ocamlc.opt -g -ccopt -I/usr/local/include -ccopt -g -ccopt -O2 -ccopt -fPIC -ccopt -DPIC -o pcre_stubs.o pcre_stubs.c)

# pcre_stubs.c:57:10: fatal error: 'pcre.h' file not found

# #include &lt;pcre.h&gt;

#  ^~~~~~~~

# 1 error generated.

#=== **ERROR** **while compiling lwt_camlp4.1.0.0** ===================================#

# context 2.0.1 | macos/x86_64 | base-bigarray.base base-threads.base base-unix.base ocaml-system.4.07.1 | https://opam.ocaml.org/#3a0ca7cb

# path ~/.opam/system/.opam-switch/build/lwt_camlp4.1.0.0

# command ~/.opam/opam-init/hooks/sandbox.sh build jbuilder build -p lwt_camlp4 -j 4

# exit-code 1

# env-file ~/.opam/log/lwt_camlp4-53707-f0f09f.env

# output-file ~/.opam/log/lwt_camlp4-53707-f0f09f.out

### output ###

# File "_unknown_", line 1, characters 0-0:

# Warning: File META.lwt_camlp4 is both generated by a rule and present in the source tree.

# As a result, the rule is currently ignored, however this will become an error in the future.

# Delete file META.lwt_camlp4 to get rid of this warning.

# ocamlc src/camlp4/options/.lwt_camlp4_options.objs/pa_lwt_options.{cmi,cmo,cmt} (exit 2)

# (cd _build/default &amp;&amp; /usr/local/bin/ocamlc.opt -w -40 -g -bin-annot -I src/camlp4/options/.lwt_camlp4_options.objs -I src/camlp4/options/.lwt_camlp4_options.objs/.private -I /usr/local/lib/ocaml/camlp4 -no-alias-deps -o src/camlp4/options/.lwt_camlp4_options.objs/pa_lwt_options.cmo -c -impl src/camlp4/options/pa_lwt_options.ml)

# File "src/camlp4/options/pa_lwt_options.ml", line 1:

# Error: /usr/local/lib/ocaml/camlp4/camlp4.cmi

# is not a compiled interface for this version of OCaml.

# It seems to be for an older version of OCaml.

#=== **ERROR** **while compiling deriving.0.8.1** =====================================#

# context 2.0.1 | macos/x86_64 | base-bigarray.base base-threads.base base-unix.base ocaml-system.4.07.1 | https://opam.ocaml.org/#3a0ca7cb

# path ~/.opam/system/.opam-switch/build/deriving.0.8.1

# command ~/.opam/opam-init/hooks/sandbox.sh build make

# exit-code 2

# env-file ~/.opam/log/deriving-53707-736596.env

# output-file ~/.opam/log/deriving-53707-736596.out

### output ###

# [...]

# ocamlfind: Package `wikidoc' not found

# /Users/ulugbekna/.opam/system/bin/ocamlfind ocamldep -syntax camlp4o -syntax camlp4o -syntax camlp4o -package camlp4.quotations.o -package camlp4.extend -package camlp4 -package bytes -modules syntax/common/id.ml &gt; syntax/common/id.ml.depends

# /Users/ulugbekna/.opam/system/bin/ocamlfind ocamldep -syntax camlp4o -syntax camlp4o -syntax camlp4o -package camlp4.quotations.o -package camlp4.extend -package camlp4 -package bytes -modules syntax/common/utils.mli &gt; syntax/common/utils.mli.depends

# /Users/ulugbekna/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -syntax camlp4o -syntax camlp4o -syntax camlp4o -package camlp4.quotations.o -package camlp4.extend -package camlp4 -package bytes -I syntax/common -o syntax/common/utils.cmi syntax/common/utils.mli

# + /Users/ulugbekna/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -syntax camlp4o -syntax camlp4o -syntax camlp4o -package camlp4.quotations.o -package camlp4.extend -package camlp4 -package bytes -I syntax/common -o syntax/common/utils.cmi syntax/common/utils.mli

# File "syntax/common/utils.mli", line 1:

# Error: /usr/local/lib/ocaml/camlp4/camlp4.cmi

# is not a compiled interface for this version of OCaml.

# It seems to be for an older version of OCaml.

# Command exited with code 2.

# E: Failure("Command ''/Users/ulugbekna/.opam/system/bin/ocamlbuild' syntax/common/pa_deriving_common.cma syntax/common/pa_deriving_common.cmxa syntax/common/pa_deriving_common.a syntax/common/pa_deriving_common.cmxs syntax/std/pa_deriving_std.cma syntax/std/pa_deriving_std.cmxa syntax/std/pa_deriving_std.a syntax/std/pa_deriving_std.cmxs syntax/classes/pa_deriving_classes.cma syntax/classes/p[...]

# make: *** [build] Error 1

I have ocaml version 4.07.1. I am not sure what the problem is. Could anybody help?

Which version of eliom are you installing?
It should be eliom.6.5.0.
If not, do opam update && opam install eliom and tell us.

As a tweak for ocsigen.1.0.0 (that uses eliom.6.2.0), I had to explicitely install ocaml-compiler-libs.v0.11.0 before capml4 to be able to install camlp4-related stuff. That may explain your trouble with lwt_campl4.

eliom.6.5.0 is a dependency of ocsigen-start.1.3.0 which has been (ocsigen) recently released with additional small installation script bug fixed 2-3 days ago. I could eventually successfully install ocsigen.1.3.0 .

EDIT: can you show us what gives opam list in the related opam switch?

opam install eliom

The following actions will be performed:
  ∗ install pcre          7.3.5  [required by ocsigenserver]
  ∗ install lwt_camlp4    1.0.0  [required by eliom]
  ∗ install deriving      0.8.1  [required by eliom]
  ∗ install ocamlnet      4.1.6  [required by ocsigenserver]
  ∗ install ocsigenserver 2.11.0 [required by eliom]
  ∗ install eliom         6.5.0
===== ∗ 6 =====
Do you want to continue? [Y/n] y

I already have ocaml-compiler-libs.v0.11.0 installed, so I uninstalled camlp4 and installed again. It didn’t work.

My opam list:

# Name                        # Installed # Synopsis
async                         v0.11.0     Monadic concurrency library
async_extra                   v0.11.1     Monadic concurrency library
async_kernel                  v0.11.1     Monadic concurrency library
async_rpc_kernel              v0.11.0     Platform-independent core of Async RPC library
async_unix                    v0.11.0     Monadic concurrency library
base                          v0.11.1     Full standard library replacement for OCaml
base-bigarray                 base
base-bytes                    base        Bytes library distributed with the OCaml compiler
base-threads                  base
base-unix                     base
base64                        2.3.0       Base64 encoding for OCaml
bin_prot                      v0.11.0     A binary protocol generator
biniou                        1.2.0       Binary data format designed for speed, safety, ease of use and backward compatibility as pro
calendar                      2.04        Library for handling dates and times in your program
camlp4                        4.07+system Camlp4 is a system for writing extensible parsers for programming languages
camomile                      1.0.1       A Unicode library
cmdliner                      1.0.3       Declarative definition of command line interfaces for OCaml
cohttp                        1.2.0       An OCaml library for HTTP clients and servers
conf-dbm                      1.0.0       Virtual package relying on gdbm
conf-emacs                    1           Virtual package to install the Emacs editor
conf-gmp                      1           Virtual package relying on a GMP lib system installation
conf-gmp-powm-sec             1           Virtual package relying on a GMP lib with constant-time modular exponentiation
conf-libpcre                  1           Virtual package relying on a libpcre system installation
conf-m4                       1           Virtual package relying on m4
conf-openssl                  1           Virtual package relying on an OpenSSL system installation
conf-perl                     1           Virtual package relying on perl
conf-pkg-config               1.1         Virtual package relying on pkg-config installation
conf-which                    1           Virtual package relying on which
conf-zlib                     1           Virtual package relying on zlib
configurator                  v0.11.0     Helper library for gathering system configuration
core                          v0.11.3     Industrial strength alternative to OCaml's standard library
core_bench                    v0.11.0     Benchmarking library
core_extended                 v0.11.0     Extra components that are not as closely vetted or as stable as Core
core_kernel                   v0.11.1     Industrial strength alternative to OCaml's standard library
cppo                          1.6.5       Equivalent of the C preprocessor for OCaml programs
cppo_ocamlbuild               1.6.0       ocamlbuild support for cppo, OCaml-friendly source preprocessor
cryptokit                     1.13        A library of cryptographic primitives.
csv                           2.2         A pure OCaml library to read and write CSV files
dbm                           1.2         Binding to the NDBM/GDBM Unix "databases"
dune                          1.6.3       Fast, portable and opinionated build system
easy-format                   1.3.1       High-level and functional interface to the Format module of the OCaml standard library
fieldslib                     v0.11.0     Syntax extension to define first class values representing record fields, to get and set rec
ipaddr                        3.0.0       A library for manipulation of IP (and MAC) address representations
jane-street-headers           v0.11.0     Jane Street C header files
jbuilder                      transition  This is a transition package, jbuilder is now named dune. Use the dune
js_of_ocaml                   3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-compiler          3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-lwt               3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-ocamlbuild        3.1.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-ppx               3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-ppx_deriving_json 3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-tyxml             3.3.0       Compiler from OCaml bytecode to Javascript
jsonm                         1.0.1       Non-blocking streaming JSON codec for OCaml
lambda-term                   1.13        Terminal manipulation library for OCaml
lwt                           4.1.0       Promises, concurrency, and parallelized I/O
lwt_log                       1.1.0       Lwt logging library (deprecated)
lwt_ppx                       1.2.1       PPX syntax for Lwt, providing something similar to async/await from JavaScript
lwt_react                     1.1.1       Helpers for using React with Lwt
lwt_ssl                       1.1.2       OpenSSL binding with concurrent I/O
macaddr                       3.0.0       A library for manipulation of MAC address representations
menhir                        20181113    An LR(1) parser generator
merlin                        3.2.2       Installation with Opam
merlin-extend                 0.3         A protocol to provide custom frontend to Merlin
num                           1.1         The legacy Num library for arbitrary-precision integer and rational arithmetic
oasis                         0.4.11      Tooling for building OCaml libraries and applications
ocaml                         4.07.1      The OCaml compiler (virtual package)
ocaml-compiler-libs           v0.11.0     OCaml compiler libraries repackaged
ocaml-config                  1           OCaml Switch Configuration
ocaml-migrate-parsetree       1.1.0
ocaml-system                  4.07.1      The OCaml compiler (system version, from outside of opam)
ocamlbuild                    0.12.0      OCamlbuild is a build system with builtin rules to easily build most OCaml projects.
ocamlfind                     1.8.0       A library manager for OCaml
ocamlify                      0.0.1       Include files in OCaml code
ocamlmod                      0.0.9       Generate OCaml modules from source files
ocp-indent                    1.7.0       A simple tool to indent OCaml programs
ocsigen-i18n                  3.3.0       I18n made easy for web sites written with eliom.
octavius                      1.2.0       Ocamldoc comment syntax parser
parsexp                       v0.11.0     S-expression parsing library
ppx_assert                    v0.11.0     Assert-like extension nodes that raise useful errors on failure
ppx_ast                       v0.11.0     Deprecated: use ppxlib instead
ppx_base                      v0.11.0     Base set of ppx rewriters
ppx_bench                     v0.11.0     Syntax extension for writing in-line benchmarks in ocaml code
ppx_bin_prot                  v0.11.0     Generation of bin_prot readers and writers from types
ppx_compare                   v0.11.0     Generation of comparison functions from types
ppx_core                      v0.11.0     Deprecated: use ppxlib instead
ppx_custom_printf             v0.11.0     Printf-style format-strings for user-defined string conversion
ppx_derivers                  1.0         Shared [@@deriving] plugin registry
ppx_deriving                  4.2.1       Type-driven code generation for OCaml >=4.02
ppx_driver                    v0.11.0     Deprecated: use ppxlib instead
ppx_enumerate                 v0.11.0     Generate a list containing all values of a finite type
ppx_expect                    v0.11.1     Cram like framework for OCaml
ppx_fail                      v0.11.0     Add location to calls to failwiths
ppx_fields_conv               v0.11.0     Generation of accessor and iteration functions for ocaml records
ppx_hash                      v0.11.0     A ppx rewriter that generates hash functions from type expressions and definitions
ppx_here                      v0.11.0     Expands [%here] into its location
ppx_inline_test               v0.11.0     Syntax extension for writing in-line tests in ocaml code
ppx_jane                      v0.11.0     Standard Jane Street ppx rewriters
ppx_js_style                  v0.11.0     Code style checker for Jane Street Packages
ppx_let                       v0.11.0     Monadic let-bindings
ppx_metaquot                  v0.11.0     Deprecated: use ppxlib instead
ppx_optcomp                   v0.11.0     Optional compilation for OCaml
ppx_optional                  v0.11.0     Pattern matching on flat options
ppx_pipebang                  v0.11.0     A ppx rewriter that inlines reverse application operators `|>` and `|!`
ppx_sexp_conv                 v0.11.1     Generation of S-expression conversion functions from type definitions
ppx_sexp_message              v0.11.0     A ppx rewriter for easy construction of s-expressions
ppx_sexp_value                v0.11.0     A ppx rewriter that simplifies building s-expressions from ocaml values
ppx_tools                     5.1+4.06.0  Tools for authors of ppx rewriters and other syntactic tools
ppx_tools_versioned           5.2.1       A variant of ppx_tools based on ocaml-migrate-parsetree
ppx_traverse                  v0.11.0     Deprecated: use ppxlib instead
ppx_traverse_builtins         v0.11.0     Deprecated: use ppxlib instead
ppx_type_conv                 v0.11.0     Deprecated: use ppxlib instead
ppx_typerep_conv              v0.11.0     Generation of runtime types from type declarations
ppx_variants_conv             v0.11.0     Generation of accessor and iteration functions for ocaml variant types
ppxlib                        0.2.2       A comprehensive toolbox for ppx development. It features:
protocol_version_header       v0.11.0     Protocol versioning
re                            1.8.0       RE is a regular expression library for OCaml
re2                           v0.11.0     OCaml bindings for RE2, Google's regular expression library
react                         1.2.1       Declarative events and signals for OCaml
reactiveData                  0.2.2       Declarative events and signals for OCaml
reason                        3.3.7       Reason: Syntax & Toolchain for OCaml
resource-pooling              0.5.2       Library for pooling resources like connections, threads, or similar
result                        1.3         Compatibility Result module
safepass                      3.0         Facilities for the safe storage of user passwords
seq                           base        Compatibility package for OCaml's standard iterator type starting from 4.07.
sexplib                       v0.11.0     Library for serializing OCaml values to and from S-expressions
sexplib0                      v0.11.0     Library containing the definition of S-expressions and some base converters
spawn                         v0.12.0     Spawning sub-processes
splittable_random             v0.11.0     PRNG that can be split into independent streams
ssl                           0.5.7       Bindings for OpenSSL
stdio                         v0.11.0     Standard IO library for OCaml
stringext                     1.5.0       Extra string functions for OCaml
textutils                     v0.11.0     Text output utilities
textutils_kernel              v0.11.0     Text output utilities
topkg                         1.0.0       The transitory OCaml software packager
tuareg                        2.2.0       OCaml mode for GNU Emacs and XEmacs.
typerep                       v0.11.0     typerep is a library for runtime types.
tyxml                         4.3.0       TyXML is a library for building correct HTML and SVG documents
uchar                         0.0.2       Compatibility library for OCaml's Uchar module
uri                           2.1.0       An RFC3986 URI/URL parsing library
user-setup                    0.7         Helper for the configuration of editors for the use of OCaml tools
utop                          2.2.0       Universal toplevel for OCaml
uutf                          1.0.1       Non-blocking streaming Unicode codec for OCaml
variantslib                   v0.11.0     Part of Jane Street's Core library
xml-light                     2.4         Xml-Light is a minimal XML parser & printer for OCaml
yojson                        1.5.0       Yojson is an optimized parsing and printing library for the JSON format
zarith                        1.7         Implements arithmetic and logical operations over arbitrary-precision integers
zed                           1.6         Abstract engine for text edition in OCaml

From scratch, I’ve just done this to get eliom.6.5.0 installed, using the same tweak I used for eliom.6.2.0 :

$ opam switch create 4.07.1 ocaml-base-compiler.4.07.1
$ eval $(opam env)
$ opam init
$ opam install eliom

<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
┌─ The following actions failed
│ λ build deriving   0.8.1
│ λ build lwt_camlp4 1.0.0
└─ 

$ opam install ocaml-compiler-libs.v0.11.0
∗ installed ocaml-compiler-libs.v0.11.0

$ opam remove camlp4
⊘ removed   camlp4.4.07+1

$ opam install camlp4
∗ installed camlp4.4.07+1

$ opam install eliom
∗ installed deriving.0.8.1
∗ installed lwt_camlp4.1.0.0
∗ installed eliom.6.5.0

Can you do exactly the following and tell us?

$ opam update

$ opam remove camlp4
$ opam remove ocaml-compiler-libs.v0.11.0

$ opam install ocaml-compiler-libs.v0.11.0
∗ installed ocaml-compiler-libs.v0.11.0

$ opam install camlp4  # AFTER ocaml-compiler-libs v0.11.0
∗ installed camlp4.4.07+1

$ opam install eliom

I you are still into trouble, can you try with a fresh switch as described above?

I don’t know what to say about the suffix system in your camlp4 setup camlp4 4.07+system. I always use fresh switches and not the system one. But I see no reason why it should be causing you a problem.

All this is discussed assuming that no other libs interfere (async, core, etc.)

EDIT:
I could also install ocsigen-start in one command:

$ opam install ocsigen-start
∗ installed eliom.6.5.0
∗ installed ocsigen-toolkit.2.0.0
∗ installed resource-pooling.0.5.2
∗ installed safepass.3.0
∗ installed ocsigen-start.1.3.0
Done.

Side note:
Discussion with Opam and Ocaml experts (at least @Vincent_Balat for eliom and @AltGr for opam) about this “ocaml-compiler-libs v0.11.0 story”:
If I observed that behavior and found that workaround, this OCaml&Opam behavior is still weird for me.
Why must we manually install ocaml-compiler-libs v0.11.0, then campl4 to be eventually able to install lwt_camlp4?
Is there another way to do that?
And how can we get Opam to do this for us?
Thanks.

So I tried both with and without switch. Without switch, nothing changed, but with switch two of the three packages installed, so now I have:

┌─ The following actions failed

│ λ build **pcre** 7.3.5

└─

That’s weird, frankly.

Nearly fine!

On your fresh switch, can you try to do

$ opam remove conf-libpcre
$ opam update  # yes, I know... 
# opam should inform us that some of the packages we are installing 
# have been updated upstream and ask us to confirm that YES we can!
$ opam install pcre
$ opam install eliom # if pcre has been installed. Or do directly eliom as you wish. 

So I did as instructed but I’m anyway getting an error installing pcre
<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><> :camel:

┌─ The following actions failed

│ λ build **pcre** 7.3.5

└─ 

┌─ The following changes have been performed

│ ∗ install **conf-libpcre** 1

└─

I checked the switch, it is on the fresh ocaml-base-compiler (btw, what’s the difference between system and base compilers?)

Including my opam list just in case:

# Packages matching: installed
# Name                        # Installed # Synopsis
base                          v0.11.1     Full standard library replacement for OCaml
base-bigarray                 base
base-bytes                    base        Bytes library distributed with the OCaml compiler
base-threads                  base
base-unix                     base
biniou                        1.2.0       Binary data format designed for speed, safety, ease of use and backward compatibility as pro
calendar                      2.04        Library for handling dates and times in your program
camlp4                        4.07+1      Camlp4 is a system for writing extensible parsers for programming languages
cmdliner                      1.0.3       Declarative definition of command line interfaces for OCaml
conf-dbm                      1.0.0       Virtual package relying on gdbm
conf-gmp                      1           Virtual package relying on a GMP lib system installation
conf-gmp-powm-sec             1           Virtual package relying on a GMP lib with constant-time modular exponentiation
conf-libpcre                  1           Virtual package relying on a libpcre system installation
conf-m4                       1           Virtual package relying on m4
conf-openssl                  1           Virtual package relying on an OpenSSL system installation
conf-perl                     1           Virtual package relying on perl
conf-pkg-config               1.1         Virtual package relying on pkg-config installation
conf-which                    1           Virtual package relying on which
conf-zlib                     1           Virtual package relying on zlib
cppo                          1.6.5       Equivalent of the C preprocessor for OCaml programs
cppo_ocamlbuild               1.6.0       ocamlbuild support for cppo, OCaml-friendly source preprocessor
cryptokit                     1.13        A library of cryptographic primitives.
csv                           2.2         A pure OCaml library to read and write CSV files
dbm                           1.2         Binding to the NDBM/GDBM Unix "databases"
deriving                      0.8.1       Extension to OCaml for deriving functions from type declarations
dune                          1.6.3       Fast, portable and opinionated build system
easy-format                   1.3.1       High-level and functional interface to the Format module of the OCaml standard library
ipaddr                        3.0.0       A library for manipulation of IP (and MAC) address representations
jbuilder                      transition  This is a transition package, jbuilder is now named dune. Use the dune
js_of_ocaml                   3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-camlp4            3.1.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-compiler          3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-lwt               3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-ocamlbuild        3.1.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-ppx               3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-ppx_deriving_json 3.3.0       Compiler from OCaml bytecode to Javascript
js_of_ocaml-tyxml             3.3.0       Compiler from OCaml bytecode to Javascript
lwt                           4.1.0       Promises, concurrency, and parallelized I/O
lwt_camlp4                    1.0.0       Camlp4 syntax extension for Lwt (deprecated)
lwt_log                       1.1.0       Lwt logging library (deprecated)
lwt_ppx                       1.2.1       PPX syntax for Lwt, providing something similar to async/await from JavaScript
lwt_react                     1.1.1       Helpers for using React with Lwt
lwt_ssl                       1.1.2       OpenSSL binding with concurrent I/O
macaddr                       3.0.0       A library for manipulation of MAC address representations
macaque                       0.7.4       Macaque (Macros for Caml Queries) is a DSL for OCaml, which produces
num                           1.1         The legacy Num library for arbitrary-precision integer and rational arithmetic
oasis                         0.4.11      Tooling for building OCaml libraries and applications
ocaml                         4.07.1      The OCaml compiler (virtual package)
ocaml-base-compiler           4.07.1      Official release 4.07.1
ocaml-config                  1           OCaml Switch Configuration
ocaml-migrate-parsetree       1.2.0       Convert OCaml parsetrees between different versions
ocamlbuild                    0.12.0      OCamlbuild is a build system with builtin rules to easily build most OCaml projects.
ocamlfind                     1.8.0       A library manager for OCaml
ocamlify                      0.0.1       Include files in OCaml code
ocamlmod                      0.0.9       Generate OCaml modules from source files
ocsigen-i18n                  3.3.0       I18n made easy for web sites written with eliom.
pgocaml                       2.3         Interface to PostgreSQL databases
ppx_derivers                  1.0         Shared [@@deriving] plugin registry
ppx_deriving                  4.2.1       Type-driven code generation for OCaml >=4.02
ppx_tools                     5.1+4.06.0  Tools for authors of ppx rewriters and other syntactic tools
ppx_tools_versioned           5.2.1       A variant of ppx_tools based on ocaml-migrate-parsetree
re                            1.8.0       RE is a regular expression library for OCaml
react                         1.2.1       Declarative events and signals for OCaml
reactiveData                  0.2.2       Declarative events and signals for OCaml
resource-pooling              0.5.2       Library for pooling resources like connections, threads, or similar
result                        1.3         Compatibility Result module
safepass                      3.0         Facilities for the safe storage of user passwords
seq                           base        Compatibility package for OCaml's standard iterator type starting from 4.07.
sexplib0                      v0.11.0     Library containing the definition of S-expressions and some base converters
ssl                           0.5.7       Bindings for OpenSSL
topkg                         1.0.0       The transitory OCaml software packager
tyxml                         4.3.0       TyXML is a library for building correct HTML and SVG documents
uchar                         0.0.2       Compatibility library for OCaml's Uchar module
uutf                          1.0.1       Non-blocking streaming Unicode codec for OCaml
xml-light                     2.4         Xml-Light is a minimal XML parser & printer for OCaml
yojson                        1.5.0       Yojson is an optimized parsing and printing library for the JSON format
zarith                        1.7         Implements arithmetic and logical operations over arbitrary-precision integers

Two things:

1/ you’re only stuck because of pcre, but it could/should also be useful to add eliom depext (for ocsigen it’s mandatory). So try:

$ opam install depext  # to manage dependecies external to opam
$ opam depext eliom
Just a check:
$ opam depext eliom
debianutils
libgdbm-dev
libgmp-dev
libpcre3-dev
libssl-dev
m4
perl
pkg-config
zlib1g-de

Hey! there is a libpcre3-dev depext.
I don’t have your pcre build log but it could be your solution.

2/ I don’t see ocaml-compiler-libs in your opam list/ I still don’t know why this workaround did the job for me, but it did.
Do 1/. If it still fails, pls. remove then install again camlp4 and ocaml-compiler-libs.v0.11.0 .

1 Like

It worked! Yeay :smile: thank you so much! I wouldn’t be able to make it without you. Also, mentioning depext in ocsigen docs would be very nice; it seems to be a very nice tool.

edit: installing depext solved the problem

opam - camlp4 :

Camlp4 was part of the official OCaml distribution until its version 4.01.0. Since then it has been replaced by a simpler system which is easier to maintain and to learn: ppx rewriters and extension points.

opam installed 4.07+system on you machine.
I don’t know if it caused trouble or not.
4.07+1 is also available.
I don’t know much more.

Unfortunately it’s not in the landing page http://ocsigen.org/ocsigen-start/1.1.0/manual/intro . But this page (Installation section) references the README.md page which gives the depext command.
Now you can go ahead.
The scripts have been improved a few days ago to fix the problems we had in december. So it should avoid you headaches.
Follow strictly the DB sequence (init/create/schema).

Pls. let me/us know if you have problem when executing the make test.byte. Because in the fresh ocsigen-start installation I’ve just encountered the same problem in Makefile.options I had before it was fixed.
Locally, I still have lwt_log in CLIENT_PACKAGES whereas it’s no longer in Makefile.options (master is ocsigen 1.3.0 as of today).
I don’t understand why opam update&& opam upgrade didn’t pull the file more recent Makefile.options file.
I’m currently looking for the reason why this happened.

EDIT:
$ ll ./lib/eliom/templates/os.pgocaml/Makefile.options
Jan 11 16:29 ./lib/eliom/templates/os.pgocaml/Makefile.options
while
ocsigen-start/template.distillery at master · ocsigen/ocsigen-start · GitHub indicates “2 days ago” so Jan 9.

I don’t know if it’s because the ocsigen team did not put a “correct” opam file or if opam failed in downloading the available packages because it already installed them the same day within an hour.

@Jean_Dutier and @AltGr: How can you explain that behavior?
Wich rules does opam use to decide to download a package? (date? version?)
Anyway, how can we be 100% sure that opam downloads the packages that are available at the moment of the installation?

EDIT2
@Jean_Dutier
I’ve removed and installed eliom and ocsigen-startdone twice, with checked removal of files (in ./lib/eliom/templates/os.pgocaml/ etc.)

I confirm that opam correctly downloaded the files from branch 1.3 (as specified by the opam file) but these files date back to Dec 26, 2018 while the commit with last fixes is in ‘master’ (January 9, 2019 )
See:
https://github.com/ocsigen/ocsigen-start/blob/1.3.0/template.distillery/Makefile.options
https://github.com/ocsigen/ocsigen-start/blob/master/template.distillery/Makefile.options
Lines 27 and 33: lwt_log is still in 1.3

Can you pls. fix that?
Thanks

In between the following does the job (just tested):

$ opam pin add ocsigen-start https://github.com/ocsigen/ocsigen-start.git#master
$ opam install depext  # to manage dependecies external to opam
$ opam depext eliom

I just filed a pull request to include these instructions in the ocsigen tutorial: https://github.com/ocsigen/tuto/pull/6
Thanks!

Shortly there will be a new release 1.4 including the mentioned fixes: Package ocsigen-start.1.4.0 by jrochel · Pull Request #13259 · ocaml/opam-repository · GitHub

Beware that this updated page (https://ocsigen.org/tuto/6.0/manual/how-to-install-ocsigen) is lost in the middle of the left menu. I even never saw it before today.

I think the first places to put these installation instructions are (at least) the following landing pages:
https://ocsigen.org/tuto/6.0/manual/start (Installation)
https://ocsigen.org/ocsigen-start/1.1.0/manual/intro (Installation)

Can you consider changing the left menu? (on all the website…)
Its height is too small to see the items and moreover it’s resetted to its top position each time you select a new page, which is not at all usable.
Being simply on the left in fixed position is enough and necessary.
Thanks.

There is someone (leovalais) reworking the ocsigen documentation right now. We also came to the conclusion that the installation instructions too scattered and need to be centralised, so this issue will be addressed. If I’m not mistaken the reworked documentation will be released soon. Concerning the other issues I will forward your post to him.