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

Errore Compilazione OCaml >= 4.04.0 #14

Open
iacopy opened this issue Jan 19, 2018 · 26 comments
Open

Errore Compilazione OCaml >= 4.04.0 #14

iacopy opened this issue Jan 19, 2018 · 26 comments

Comments

@iacopy
Copy link

iacopy commented Jan 19, 2018

Ciao! Ho provato a lanciare un make fallendo miseramente. Dove sbaglio?
Vi incollo l'errore. Sapreste indirizzarmi?

$ ocaml --version
The OCaml toplevel, version 4.06.0
$ ocamlopt --version
4.06.0
$ make
ocamlopt.opt -c -inline 23 -unsafe ver.ml -o ver.cmx
ocamlopt.opt -c -inline 23 -unsafe prelude.ml -o prelude.cmx
ocamlopt.opt -c -inline 23 -unsafe err.ml -o err.cmx
ocamlopt.opt -c -inline 23 -unsafe absyn.ml -o absyn.cmx
ocamlopt.opt -c -inline 23 -unsafe env.ml -o env.cmx
ocamlopt.opt -c -inline 23 -unsafe check.ml -o check.cmx
File "check.ml", line 40, characters 59-62:
Error: This expression has type elt -> Prelude.Prelude.symbol
       but an expression was expected of type elt -> elt
       Type Prelude.Prelude.symbol = string is not compatible with type
         elt = Prelude.Prelude.symbol * Err.loc option
make: *** [check.cmx] Error 2
@alvisespano
Copy link
Owner

alvisespano commented Jan 20, 2018 via email

@tajmone
Copy link
Collaborator

tajmone commented Jan 20, 2018

Riguardo a questo punto, secondo me varrebbe la pena creare un TAG per la 1.0.6, così che i codici sorgenti dell'ultima release ufficiale siano reperibili sul repo.

Basterebbe far sparire i sorgenti attuali, buttare dentro quelli vecchi e committare, e poi creare un tag; dopidiché ributtare quelli attuali e ricommittare. Questo rendrebbe disponibile il commit legato al tag della v1.0.6 anche nella pagina delle release (GitHub associa le release ai tag, automaticamente), e dipanerebbe la confusione riguardo lo stato attuale: chi volesse provare a compilare andrebbe quasi sicuramente a cercare tra i tag (via Git o via browser) o nella pagina delle release (per download manuale tramite zippato).

@alvisespano
Copy link
Owner

alvisespano commented Jan 20, 2018 via email

@tajmone
Copy link
Collaborator

tajmone commented Jan 20, 2018

Come preferisci. Che il tag lo si crei in una branch o un'altra non cambia, alla fine in Git un tag è un ref preciso ed è indipendente dalle branch. Il vantaggio su GitHub è che per ogni repository viene offrerto un dropdown per scegliere la branch o il tag di release (in realtà il tag e basta, ma in genere li si usa solo per released qui).

Ma in realtà tra qualche giorno riesco a mettermi e farò intanto la 1.0.7 con unicode.

Ottima notizia! 😃

È che ho perso tempo con vscode e tutti i casini di cygwin ecc.

hai fatto bene, vale la pena organizzare un buon ambiente di lavoro, sul lungo termine (ho scoperto a mie spese) si risparmia un sacco di tempo.

@iacopy
Copy link
Author

iacopy commented Jan 21, 2018

Grazie della pronta risposta! Anche se la fase è di precoce transizione/riesumazione, intanto se vi può essere utile vi riporto feedback lato Darwin.
Con la 1.0.6 l'errore che ho è questo:

$ make
ocamllex lexer.mll
67 states, 1471 transitions, table size 6286 bytes
ocamlyacc parser.mly
3 rules never reduced
1 shift/reduce conflict, 12 reduce/reduce conflicts.
ocamldep -native ver.ml prelude.ml err.ml absyn.ml env.ml check.ml pre.ml gen.ml fake.ml parser.ml lexer.ml io.ml main.ml parser.mli >.depend
File "parser.mli", line 1, characters 0-1:
Error: Syntax error
make: *** [.depend] Error 2

@alvisespano
Copy link
Owner

alvisespano commented Jan 21, 2018 via email

@alvisespano
Copy link
Owner

alvisespano commented Jan 23, 2018 via email

@tajmone
Copy link
Collaborator

tajmone commented Jan 23, 2018

Ottima notizia! Hai anche creato un tag per la release? Converrebbe farlo.

Però se vuoi attenerti alla SemVer, 1.0.6a non è una versione valida (1.0.6 sì).

Scusa il silenzio, non sono sparito! ... anzi, sto lavorando a un tool per PolyGen che è quasi pronto. Funziona già, ma voglio ripulirlo bene prima di pubblicarlo.

Alla fine come hai installato OCaml su Windows? Mi interesserebbe capire qual'è il modo migliore, senza intoppi. Magari, visti i problemi attuali con OCaml, varrebbe la pena buttare giù due appunti sul README di Win riguardo a OCaml su Win10.

@alvisespano
Copy link
Owner

alvisespano commented Jan 23, 2018 via email

@tajmone
Copy link
Collaborator

tajmone commented Jan 23, 2018

Non so come funzioni con SVN, ma in questo caso ti consiglio ti crearlo direttamente sul sito di GitHub dato che GitHub crea automaticamente anche una release, e puoi aggiungere del testo descrittivo e (volendo) anche allegare degli zippati con precompilati binari. Fatto ciò, sul repository verrà creato anche un tag di Git (avremmo potuto farlo da Git, ma c'è di mezzo la release GitHub).

È abbastanza intuitivo dato che il sito ti guida nel processo:

https://help.github.com/articles/creating-releases/

e non è una cosa irreversibile (lo si può modificare, cancellare, ecc.). Ovviamente è meglio non cancellare mai una release, ma piuttosto crearne una di rettifica.

@iacopy
Copy link
Author

iacopy commented Jan 23, 2018

Ho pullato il master, quindi la 1.0.6a. Su linux compila e va alla grande.
Su Mac ancora non arriva in fondo:

$ make all
ocamlopt -c -inline 23 -unsafe ver.ml -o ver.cmx
ocamlopt -c -inline 23 -unsafe prelude.ml -o prelude.cmx
ocamlopt -c -inline 23 -unsafe err.ml -o err.cmx
ocamlopt -c -inline 23 -unsafe absyn.ml -o absyn.cmx
ocamlopt -c -inline 23 -unsafe env.ml -o env.cmx
ocamlopt -c -inline 23 -unsafe check.ml -o check.cmx
File "check.ml", line 40, characters 59-62:
Error: This expression has type elt -> Prelude.Prelude.symbol
       but an expression was expected of type elt -> elt
       Type Prelude.Prelude.symbol = string is not compatible with type
         elt = Prelude.Prelude.symbol * Err.loc option
make: *** [check.cmx] Error 2

@alvisespano
Copy link
Owner

alvisespano commented Jan 24, 2018 via email

@iacopy
Copy link
Author

iacopy commented Jan 24, 2018

Ho provato a fare quanto sopra ma per ora ti devo confermare l'errore.

$ git show --stat
(HEAD -> master, origin/master, origin/HEAD)
Author: tajmone <[email protected]>
Date:   Wed Jan 24 11:45:11 2018 +0100

    Add PolyTools for Windows

    First release of PolyTools (currently,  only for Windows):
    - PolyEscapist v1.0.0: tool to convert Unicode strings to Polygen escape sequences

 PolyTools-windows_2018-01-24.zip | Bin 0 -> 39973 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

$ make clean
ocamllex lexer.mll
67 states, 1471 transitions, table size 6286 bytes
ocamlyacc parser.mly
3 rules never reduced
1 shift/reduce conflict, 12 reduce/reduce conflicts.
ocamldep -native ver.ml prelude.ml err.ml absyn.ml env.ml check.ml pre.ml gen.ml fake.ml parser.ml lexer.ml io.ml main.ml parser.mli >.depend
rm -f *.o *.cm* a.out *.bak *.obj *~ *.annot *.stackdump parser.ml lexer.ml parser.mli ver.ml
cat </dev/null >.depend
$ make cleandist
ocamllex lexer.mll
67 states, 1471 transitions, table size 6286 bytes
ocamlyacc parser.mly
3 rules never reduced
1 shift/reduce conflict, 12 reduce/reduce conflicts.
ocamldep -native ver.ml prelude.ml err.ml absyn.ml env.ml check.ml pre.ml gen.ml fake.ml parser.ml lexer.ml io.ml main.ml parser.mli >.depend
make: *** No rule to make target `cleandist'.  Stop.

$ make all
date +'%Y%m%d' >DATE
sed -e "s/%VERSION%/1.0.6a/" -e "s/%DATE%/20180124/" ver.ml.template >ver.ml
ocamlopt -c -inline 23 -unsafe ver.ml -o ver.cmx
ocamlopt -c -inline 23 -unsafe prelude.ml -o prelude.cmx
ocamlopt -c -inline 23 -unsafe err.ml -o err.cmx
ocamlopt -c -inline 23 -unsafe absyn.ml -o absyn.cmx
ocamlopt -c -inline 23 -unsafe env.ml -o env.cmx
ocamlopt -c -inline 23 -unsafe check.ml -o check.cmx
File "check.ml", line 40, characters 59-62:
Error: This expression has type elt -> Prelude.Prelude.symbol
       but an expression was expected of type elt -> elt
       Type Prelude.Prelude.symbol = string is not compatible with type
         elt = Prelude.Prelude.symbol * Err.loc option
make: *** [check.cmx] Error 2
 ~  github  Polygen  src  master  5✎  $  ocamlopt --version
4.06.0

@tajmone
Copy link
Collaborator

tajmone commented Jan 24, 2018

Anche io sto avendo problemi a compilare la v1.0.6 dimaster, su Windows WSL.

OCaml version 4.04.0, tramite Ubuntu in WSL:

tajmone@PKDick-HP:/mnt/d/GitHub/Polygen/Polygen/src$ make
ocamlbuild -use-ocamlfind main.native
Finished, 1 target (0 cached) in 00:00:00.
+ /home/tajmone/.opam/4.04.0/bin/ocamlyacc parser.mly
4 rules never reduced
1 shift/reduce conflict, 16 reduce/reduce conflicts.
+ ocamlfind ocamlc -c -o check.cmo check.ml
File "check.ml", line 40, characters 59-62:
Error: This expression has type elt -> Prelude.Prelude.symbol
       but an expression was expected of type elt -> elt
       Type Prelude.Prelude.symbol = string is not compatible with type
         elt = Prelude.Prelude.symbol * Err.loc option
Command exited with code 2.
Compilation unsuccessful after building 24 targets (0 cached) in 00:00:00.
makefile:9: recipe for target 'build' failed
make: *** [build] Error 10

Anche qui sembra piantarsi su type elt -> Prelude.Prelude.symbol, come per @iacopy.

Quanto al comando make all, mi da questo errore:

tajmone@PKDick-HP:/mnt/d/GitHub/Polygen/Polygen/src$ make all
make: *** No rule to make target 'all'.  Stop.

@alvisespano
Copy link
Owner

alvisespano commented Jan 25, 2018 via email

@tajmone
Copy link
Collaborator

tajmone commented Jan 25, 2018

Scusa, avevo capito male, stavo compilando la branch dev perché avevo visto i file di configurazione di VSCode.

Confermo, la versione in master compila bene con OCaml version 4.02.3 (WSL), solo qualche warning:

tajmone@PKDick-HP:/mnt/d/ocaml/polygen-master/src$ make all
ocamlopt -c -inline 23 -unsafe ver.ml -o ver.cmx
ocamlopt -c -inline 23 -unsafe prelude.ml -o prelude.cmx
ocamlopt -c -inline 23 -unsafe err.ml -o err.cmx
ocamlopt -c -inline 23 -unsafe absyn.ml -o absyn.cmx
ocamlopt -c -inline 23 -unsafe env.ml -o env.cmx
ocamlopt -c -inline 23 -unsafe check.ml -o check.cmx
ocamlopt -c -inline 23 -unsafe pre.ml -o pre.cmx
ocamlopt -c -inline 23 -unsafe gen.ml -o gen.cmx
ocamlopt -c -inline 23 -unsafe fake.ml -o fake.cmx
ocamlopt -c -inline 23 -unsafe parser.mli -o parser.cmi
ocamlopt -c -inline 23 -unsafe parser.ml -o parser.cmx
ocamlopt -c -inline 23 -unsafe lexer.ml -o lexer.cmx
ocamlopt -c -inline 23 -unsafe io.ml -o io.cmx
ocamlopt -c -inline 23 -unsafe main.ml -o main.cmx
ocamlopt unix.cmxa ver.cmx prelude.cmx err.cmx absyn.cmx env.cmx check.cmx pre.cmx gen.cmx fake.cmx parser.cmx lexer.cmx io.cmx main.cmx -o polygen

@alvisespano
Copy link
Owner

alvisespano commented Jan 25, 2018 via email

@tajmone
Copy link
Collaborator

tajmone commented Jan 25, 2018

Perdonami, avevo visto male.

@iacopy
Copy link
Author

iacopy commented Jan 25, 2018

io invece confermo l'errore su Mac OS X High Sierra, branch master allineato.

@tajmone
Copy link
Collaborator

tajmone commented Jan 26, 2018

Su Ubuntu 16.10 x64 (non tramite WSL) la v1.0.6a (master) compila bene.

Però ora sto cercando di crosscompilare a Win32. Il cross compilatore funziona, ho già compilato un piccolo esempio di helloworld da OCaml a eseguibile Win32, e l'ho poi testato su Win 10, tutto ok.

Però quando cerco di cross-compilare Polygen 1.0.6a mi imbatto nell'errore:

File "check.ml", line 40, characters 59-62:
Error: This expression has type elt -> Prelude.Prelude.symbol
       but an expression was expected of type elt -> elt
       Type Prelude.Prelude.symbol = string is not compatible with type
         elt = Prelude.Prelude.symbol * Err.loc option 
makefile:51: recipe for target 'check.cmx' failed
make: *** [check.cmx] Error 2

Ed è sempre lo stesso errore che ricompare più volte in questo thread.

Sto usando OCaml 4.04.0+32bit per cross compilare. Forse è un problema legato alla versione dato che anche qui nel thread si evince che i successi e gli insuccessi sono legati a versioni inferiori e superiori alla 4.04.0, rispettivamente.

Qualche idea di cosa causi questo errore con la 4.04.0?

Con OCaml 4.02.3 sembra non avere problemi. Il problema è che il cross compilatore che sto usando supporta solo la v4.04.0 (dev'essere nuovo, e non ci sono versioni precedenti).

A parte questo intoppo, sono riuscito a mettere su un ambiente di cross compilazione che funzionerebbe sia per Win 32/64 che Android e iOS.

Non sono però sicuro che possa funzionare con versioni inferiori. Però appena la tua nuova versione sarà pronta potrò compilarla per Windows (32 bit direi), direttamente su Ubuntu, e non avrà bisogno della cygwin.dll (o altre DLL) per funzionare, ma sarà completamente standalone.

@tajmone
Copy link
Collaborator

tajmone commented Jan 26, 2018

Ho ricontrollato il thread: gli errori sono sempre legati alla compilazione con OCaml >= 4.04.

Propongo di rinominare questo issue da:

Compilazione su OSX

a:

Errore Compilazione con OCaml >= 4.04

dato che il problema non è OSX ma la versione recente di OCaml, e l'issue è ancora utile dato che riguarda l'uso del cross compilatore opam-cross-windows:

@tajmone
Copy link
Collaborator

tajmone commented Jan 27, 2018

opam-cross-windows per OCaml 4.02.3

Mi sono informato, è disponibile opam-cross-windows per OCaml 4.02.3, in una branch:

https://github.com/ocaml-cross/opam-cross-windows/tree/ocaml-4.02.3

(vedi ocaml-cross/opam-cross-windows/issues/65)

cerco di capire come installarlo al posto della versione attuale e prova a cross-compilare Polygen 1.0.6a per Windows.

@tajmone tajmone changed the title Compilazione su OSX Errore Compilazione OCaml >= 4.04.0 Jan 27, 2018
@iacopy
Copy link
Author

iacopy commented Jan 27, 2018

Confermo.
4.03.0 👍
4.04.2 👎 (stesso errore)

@tassoman
Copy link

Come faccio a pullare la 1.0.6a che non è taggata nel branch master? Non riesco a compilare nemmeno io per amd64 su ubuntu bionic 18.4 :|

@alvisespano
Copy link
Owner

Dovrebbe compilare ora, fatemi sapere.

@tassoman
Copy link

Esatto, funziona, ho compilato per amd64. Si potrebbe taggare come versione funzionante 😃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants