Libelektra: Cara memasukkan plugin pemeriksa ketik ke kdb

Dibuat pada 13 Agu 2018  ·  29Komentar  ·  Sumber: ElektraInitiative/libelektra

Saya tidak bisa menjalankan plugin pemeriksa ketik.

Saya dulu

mkdir build;
cd build
ccmake ..
#deleted experimental and added "typechecker". (see screenshot)
cmake ..
make

typechecker

Apa yang saya lakukan salah?

help wanted

Semua 29 komentar

Sejauh yang saya tahu tidak ada typechecker mengikat. Anda memerlukan plugin typechecker , yang memerlukan pengikatan haskell . Sebagai contoh, tentang cara menjalankan sesuatu di macOS (langkah-langkah di Linux harus kurang lebih sama), silakan lihat pekerjaan build 🍏 Haskell di .travis.yml .

Iya. Anda memerlukan pengikatan haskell (Ini memiliki beberapa deps: https://www.libelektra.org/bindings/haskell), lalu plugin haskell (sekali lagi deps: https://www.libelektra.org/plugins/haskell) jadi bahwa Anda akhirnya dapat mengaktifkan plugin pemeriksa ketik.

@ e1528532 Dapatkah Anda memutakhirkan dokumen pemeriksa ketik bagian mana yang diperlukan agar dapat berfungsi? Dan mengapa infos/needs dalam kontrak diduplikasi?

Proses instalasi ini sangat merepotkan, terutama untuk linux. Anda membutuhkan GHC (Glasgow Haskell Compiler) > 8.0.1 && < 8.4 . Manajer paket hanya memiliki 7.x, tumpukan sudah memberi Anda 8.4.3.
Setelah menandai versi tertentu saya masih menerima kesalahan ...

1) Di berbagai tempat saya mendapatkan bug:

CMake Error at cmake/Modules/FindHaskell.cmake:61 (string):
  string sub-command REPLACE requires at least four arguments.
Call Stack (most recent call first):
  src/plugins/typechecker/CMakeLists.txt:7 (find_package)

2)
-- Exclude Binding haskell because ghc: found, but 8.0.1 required
Ketika saya menjalankan ghc --version saya menerima The Glorious Glasgow Haskell Compilation System, version 8.2.2

3)

-- Exclude Plugin typechecker because GHC_RTS_LIB not found

Apa ini? Dimana saya bisa menemukannya?


Versi cmake saya: cmake version 3.5.1

Linux apa yang Anda gunakan yang masih hanya memiliki 7.x? Mungkinkah Anda memiliki beberapa versi ghc yang diinstal dan cmake itu memilih yang salah? Bug pertama yang Anda gambarkan mungkin benar-benar sebuah bug, saya rasa versi ghc yang lebih lama tidak menampilkan sesuatu untuk parameter baris perintah --print-target-platform dan dengan demikian menggantikan keluhan. akan memperbaiki. Masalah kedua juga menunjukkan bahwa itu mungkin mengambil beberapa versi ghc lama yang tidak mendukung kata kunci yang saya butuhkan, bahkan bukan yang mengambil nomor versinya. Apa yang terjadi jika Anda menambahkan sesuatu seperti message "Used ghc at ${GHC_EXECUTABLE}" ke FindHaskell.cmake dan memeriksa ghc apa yang sebenarnya digunakannya? Apakah benar-benar 8.2.2 (saya juga menggunakannya di macOS)?

Saya setuju bahwa <8.4 tidak didukung mengganggu tetapi versi pustaka yang lebih baru yang digunakan tidak didukung pada 8.0.1 karena https://github.com/mvdan/hint/pull/63 jadi sampai ini diperbaiki saya tidak dapat mendukung versi yang lebih baru sayangnya.

Linux Mint 18.2 yang menggunakan repositori ubuntu xenial.

Mungkinkah Anda memiliki beberapa versi ghc yang diinstal dan cmake itu memilih yang salah?

Ya, benar. Ia mencoba menggunakan opt/ghc/7.10.3/bin/ghc yang diinstal melalui manajer paket.
Setelah dibersihkan, masih digunakan oleh cmake. Saya menginstal versi yang lebih baru melalui stack dan mengatur PATH di zshrc saya untuk menggunakan yang benar.

ok saya akan mencoba meningkatkan file cmake untuk mendeteksi versi 7.x dan memberikan petunjuk yang sesuai dalam kasus itu. Sejauh yang saya tahu cmake cache program yang ditemukannya sehingga bisa menjadi alasan mengapa ia kembali menggunakan 7.x.

Setelah membersihkan direktori build, itu berfungsi.

Tapi sekarang saat memanggil make gagal:

Scanning dependencies of target haskell
[ 21%] Generating libHShaskell-ghc8.2.2.so
cabal: Error: some packages failed to install:
libelektra-haskell-0.8.23-LGvezP3EsDCKBrt9zZKeXV failed during the final
install step. The exception was:
ExitFailure 1

setup: Encountered missing dependencies:
libelektra-haskell ==0.8.23
src/plugins/haskell/CMakeFiles/haskell.dir/build.make:64: recipe for target 'src/plugins/haskell/libHShaskell-ghc8.2.2.so' failed
make[2]: *** [src/plugins/haskell/libHShaskell-ghc8.2.2.so] Error 1
CMakeFiles/Makefile2:4033: recipe for target 'src/plugins/haskell/CMakeFiles/haskell.dir/all' failed
make[1]: *** [src/plugins/haskell/CMakeFiles/haskell.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

Saya berasumsi Anda telah menginstal kotak pasir dengan dependensi? apa yang terjadi jika Anda cd ke build/src/bindings/haskell dan memanggil cabal build , atau jika gagal, cabal install --only-dependencies ?

Saya berasumsi Anda telah menginstal kotak pasir dengan dependensi?

Iya

itu tidak gagal. itu menulis

Preprocessing library for libelektra-haskell-0.8.23..
Building library for libelektra-haskell-0.8.23..

Oke, saya menelepon cabal install sendiri sekarang di build/src/bindings/haskell dan sekarang berfungsi dan membangun keseluruhan proyek. Saya tidak tahu mengapa ini berhasil

PS: Saya perlu melakukan hal yang sama di src / plugins / typechecker

Baiklah ... ini masalahmu selanjutnya ...

Scanning dependencies of target elektra-type
[ 44%] Building CXX object src/plugins/type/CMakeFiles/elektra-type.dir/type.cpp.o
[ 44%] Linking CXX shared module ../../../lib/libelektra-type.so
[ 44%] Built target elektra-type
[ 44%] Built target typechecker-ghc-plugin
[ 44%] Built target typechecker
[ 44%] Building C object src/plugins/typechecker/CMakeFiles/elektra-typechecker-objects.dir/haskell.c.o
/media/wespe/extended/repository/piankero-libelektra/build/src/plugins/typechecker/haskell.c:12:30: fatal error: Typechecker_stub.h: No such file or directory
compilation terminated.
src/plugins/typechecker/CMakeFiles/elektra-typechecker-objects.dir/build.make:62: recipe for target 'src/plugins/typechecker/CMakeFiles/elektra-typechecker-objects.dir/haskell.c.o' failed
make[2]: *** [src/plugins/typechecker/CMakeFiles/elektra-typechecker-objects.dir/haskell.c.o] Error 1
CMakeFiles/Makefile2:8408: recipe for target 'src/plugins/typechecker/CMakeFiles/elektra-typechecker-objects.dir/all' failed
make[1]: *** [src/plugins/typechecker/CMakeFiles/elektra-typechecker-objects.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

Oke, sepertinya binding dibuat dengan benar. Langkah selanjutnya dalam debugging ini: Apa output dari cabal install --only-dependencies di folder build/srcu/plugins/haskell/ ? Dan apa yang ditampilkan cabal sandbox hc-pkg list dalam folder yang sama? Tampaknya menjadi semacam masalah ketergantungan dan saya tidak yakin mengapa itu terjadi, mungkin karena kesalahan awal.

Some add-source dependencies have been modified. They will be reinstalled...
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] next goal: typechecker (user goal)
[__0] rejecting: typechecker-1.0.8.23/installed-9qb... (package is broken)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: typechecker
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.

File itu harus dibuat dalam build/src/plugins/typechecker/dist/build/Elektra . Apa yang ada di folder itu? Bagi saya sepertinya kesalahan awal mengacaukan cmake entah bagaimana dan meninggalkan build dalam keadaan rusak. Sayangnya cukup sulit untuk mengawinkan cmake dan komplotan rahasia sehingga pemasangannya mungkin sedikit merepotkan.

Solusi yang tidak memerlukan pengulangan semuanya akan menghapus hal-hal yang berhubungan dengan haskell dari direktori build, jadi rm -rf build/src/libs/typesystem && rm -rf build/src/plugins/haskell && rm -rf build/src/plugins/typechecker && rm -rf build/src/plugins/regexdispatcher && rm -rf build/src/bindings/haskell , lalu panggil cmake . lagi dan kompilasi.

Dan apa yang ditampilkan oleh daftar cabal sandbox hc-pkg di folder yang sama?

/home/wespe/.stack/programs/x86_64-linux/ghc-8.2.2/lib/ghc-8.2.2/package.conf.d
    Cabal-2.0.1.0
    array-0.5.2.0
    base-4.10.1.0
    binary-0.8.5.1
    bytestring-0.10.8.2
    containers-0.5.10.2
    deepseq-1.4.3.0
    directory-1.3.0.2
    filepath-1.4.1.2
    ghc-8.2.2
    ghc-boot-8.2.2
    ghc-boot-th-8.2.2
    ghc-compact-0.1.0.0
    ghc-prim-0.5.1.1
    ghci-8.2.2
    haskeline-0.7.4.0
    hoopl-3.10.2.2
    hpc-0.6.0.3
    integer-gmp-1.0.1.0
    pretty-1.1.3.3
    process-1.6.1.0
    rts-1.0
    template-haskell-2.12.0.0
    terminfo-0.4.1.0
    time-1.8.0.2
    transformers-0.5.2.0
    unix-2.7.2.2
    xhtml-3000.2.2
/media/wespe/extended/misc/cabal_sandbox/.cabal-sandbox/x86_64-linux-ghc-8.2.2-packages.conf.d
    HUnit-1.6.0.0
    QuickCheck-2.11.3
    ansi-terminal-0.8.0.4
    auto-update-0.1.4
    call-stack-0.1.0
    case-insensitive-1.2.0.11
    clock-0.7.2
    colour-2.3.4
    cpphs-1.20.8
    easy-file-0.2.2
    exceptions-0.8.3
    fast-logger-2.4.11
    ghc-paths-0.1.0.9
    hashable-1.2.7.0
    haskell-src-exts-1.20.2
    hint-0.7.0
    hspec-2.5.5
    hspec-core-2.5.5
    hspec-discover-2.5.5
    hspec-expectations-0.8.2
    integer-logarithms-1.0.2.1
    libelektra-haskell-0.8.23
    libfa-1.0.8.23
    megaparsec-6.5.0
    mtl-2.2.2
    old-locale-1.0.0.7
    old-time-1.1.0.3
    parser-combinators-1.0.0
    polyparse-1.12
    primitive-0.6.4.0
    quickcheck-io-0.2.0
    random-1.1
    scientific-0.3.6.2
    setenv-0.1.1.3
    simple-logger-0.0.4
    specelektra-1.0.8.23
    spectranslator-1.0.8.23
    stm-2.4.5.0
    temporary-1.3
    text-1.2.3.0
    tf-random-0.5
    transformers-compat-0.6.2
    typechecker-1.0.8.23
    unix-time-0.3.8

File itu harus dibuat di build / src / plugins / typechecker / dist / build / Elektra. Apa yang ada di folder itu?

Typechecker.dyn_hi Typechecker.dyn_o Typechecker.hi Typechecker.o Typechecker_stub.h

Masih menerima kesalahan

[ 44%] Generating libHStypechecker-ghc8.2.2.so
In order, the following would be installed:
libelektra-haskell-0.8.23 (via: spectranslator-1.0.8.23) (reinstall)
libfa-1.0.8.23 (via: spectranslator-1.0.8.23 specelektra-1.0.8.23) (reinstall)
specelektra-1.0.8.23 (via: spectranslator-1.0.8.23) (reinstall)
spectranslator-1.0.8.23 (reinstall)
cabal: The following packages are likely to be broken by the reinstalls:
typechecker-1.0.8.23
Use --force-reinstalls if you want to install anyway.

cabal: Could not resolve dependencies:
[__0] next goal: typechecker (user goal)
[__0] rejecting: typechecker-1.0.8.23/installed-9qb... (package is broken)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: typecheckerNote: when using a sandbox,
all packages are required to have consistent dependencies. Try
reinstalling/unregistering the offending packages or recreating the sandbox.

Bisakah kita mereproduksi masalah ini dalam gambar buruh pelabuhan? Akan menyenangkan juga untuk mendapatkan lebih banyak distro ke dalam server build kami, sepertinya ada beberapa perbedaan penting, setidaknya di Haskell.

@ e1528532 kemajuan apa pun di sini? Sebenarnya kami bahkan memiliki image Docker untuk xenial: scripts / docker / ubuntu / xenial / Dockerfile jadi Anda hanya perlu menambahkan barang-barang Haskell.

@Piankero sudahkah Anda mencoba saran saya dengan menghapus hal-hal haskell di folder build setiap memanggil cmake lagi? Apakah itu membantu?

@ markus2330 saya dapat mencoba mengatur haskell pada xenial ya, tetapi saya perlu menggunakan versi ghc yang berbeda jika xenial hanya memberikan 7.x. Saya perlu menggunakan 8.0 atau lebih tinggi karena 7.x tidak memiliki ekstensi yang diperlukan, tidak didukung oleh sejumlah pustaka seperti hint juga, dan tampaknya tidak memiliki sejumlah baris perintah yang saya gunakan di cmake.

@ e1528532 menggunakan kompilator yang sama dengan @Piankero yang digunakan.

@Piankero dapatkah Anda lebih spesifik versi mana yang Anda gunakan, perintah apa yang Anda ketikkan, dan sebagainya.

sudahkah Anda mencoba saran saya dengan menghapus hal-hal haskell di folder build setiap memanggil cmake lagi? Apakah itu membantu?

Tidak, itu tidak membantu. Saya bahkan menghapus seluruh folder build dan mencobanya lagi tanpa hasil.

Scanning dependencies of target haskell
[ 20%] Generating libHShaskell-ghc8.2.2.so
cabal: Could not resolve dependencies:
[__0] trying: haskell-1.0.8.24 (user goal)
[__1] trying: libelektra-haskell-0.8.24 (user goal)
[__2] next goal: typechecker (user goal)
[__2] rejecting: typechecker-1.0.8.23/installed-9qb... (conflict:
libelektra-haskell==0.8.24, typechecker =>
libelektra-haskell==0.8.23/installed-LGv...)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: libelektra-haskell, haskell,
typechecker
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.

setup: Encountered missing dependencies:
libelektra-haskell ==0.8.24
src/plugins/haskell/CMakeFiles/haskell.dir/build.make:64: recipe for target 'src/plugins/haskell/libHShaskell-ghc8.2.2.so' failed
make[2]: *** [src/plugins/haskell/libHShaskell-ghc8.2.2.so] Error 1
CMakeFiles/Makefile2:4033: recipe for target 'src/plugins/haskell/CMakeFiles/haskell.dir/all' failed
make[1]: *** [src/plugins/haskell/CMakeFiles/haskell.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

dapatkah Anda lebih spesifik versi mana yang Anda gunakan, perintah apa yang Anda ketikkan dan sebagainya.

mkdir build && cd build
ccmake ..
#Added `;haskell` to BINDING
#Added `;haskell;typechecker;` to PLUGIN
cmake ..
make

versi mana yang Anda gunakan

Masih belum dijawab. Versi komplotan rahasia, ... mungkin menarik. Dan dari mana Anda mendapatkan GHC? Sepertinya Xenial hanya memiliki GHC 7? Mereproduksi dalam citra buruh pelabuhan sepertinya cara terbaik ke depan. Ada banyak hal yang mungkin rusak secara lokal (mis. HASKELL_SHARED_SANDBOX dapat disetel dan berisi sampah?)

Benar ini juga mungkin. Jika Anda membuat HASKELL_SHARED_SANDBOX sebelumnya dengan ghc7, saya dapat membayangkan bahwa ada beberapa ketidakcocokan dengan ghc8. Sejauh yang saya mengerti Anda menginstal ghc8.2.2 secara manual kemudian di xenial? Jika demikian, saya akan mencoba mengatur gambar buruh pelabuhan yang menggunakan versi itu dan membangun proyek pada gambar xenial kami juga.

Juga, versi komplotan rahasia yang digunakan adalah penting menurut saya, tidak yakin apakah versi yang dikirim dengan ghc7 berfungsi dengan baik, saya berasumsi 8.0.1 hadir pada peregangan sebagai minimum yang sesuai dengan komplotan rahasia 1.24.1.0 seperti yang dinyatakan dalam dependensi pengikatan haskell.

apa saja versi alex, c2hs dan happy? Jika Anda menginstalnya melalui cabal, pastikan ghc8 digunakan (dan versi cabal yang sesuai)

Menarik, mencoba pengaturan Anda di kontainer buruh pelabuhan (xenial dengan ghc7.10) dan ketika saya mengkonfigurasi proyek saya mendapatkan:
- Kecualikan Binding haskell karena ghc: 7.10.3 ditemukan, tetapi diperlukan 8.0.1
- Kecualikan Plugin haskell karena GHC_BASE_LIB tidak ditemukan

saya tidak dapat memeriksa pengecualian binding di plugin dengan cara yang baik. Akan sangat bagus jika saya dapat memiliki plugin yang bergantung pada binding, tetapi saya tidak suka bekerja dengan cmake;) sebagai solusinya, saya telah menambahkan pemeriksaan versi ke LibAddHaskellPlugin juga.

CMake Error at cmake/Modules/FindHaskell.cmake:61 (string): string sub-command REPLACE requires at least four arguments.

Sayangnya tidak dapat mereproduksi ini, tetapi saya telah menambahkan solusi (buta) ke cabang xenial

Versi:

  • komplotan rahasia: 2.2.0.0
  • alex: 3.1.6
  • c2hs: 0.27.1 Eternal Sunshine, 29 November 2015
    platform build adalah "x86_64-linux" <1, True, True, 1>
  • senang: 1.19.5

Jika Anda menginstalnya melalui cabal, pastikan ghc8 digunakan

Saya tidak menginstal melalui cabal karena tutorial Anda menyatakan itu harus diinstal melalui manajer paket.

Saya mengunduh ghc8.2 melalui stack dan mengatur PATH saya di zshrc ke biner. Hal yang sama untuk HASKELL_SHARED_SANDBOX .

Ok terima kasih, ternyata ini juga versi yang lebih lama dari yang pernah saya uji. Jadi bisa jadi misalnya versi c2hs yang lebih lama tidak mengkompilasi binding dengan benar, yang menyebabkan kesalahan dependensi hilang yang Anda temui.
Saya pikir mungkin lebih baik menginstalnya ke kotak pasir dalam versi yang sesuai daripada untuk menghindari paket OS yang ketinggalan zaman. Kotak pasir digunakan untuk menjadi independen mungkin dari apa pun yang dipasang di sistem target. Versi komplotan rahasia tampaknya bagus.

Mari kita lihat apa yang terjadi di PR yang menambahkan ghc ke gambar buruh pelabuhan xenial.

Saya membuat ulang seluruh sandbox, menginstal happy / c2hs / alex melalui cabal untuk memiliki versi yang lebih baru dan secara manual mengatur jalur ke direktori bin sandbox cabal.

Saya masih menerima kesalahan.
Pertama, dia mengeluh

setup: Encountered missing dependencies:
libelektra-haskell ==0.8.24

src/plugins/haskell/CMakeFiles/haskell.dir/build.make:64: recipe for target 'src/plugins/haskell/libHShaskell-ghc8.2.2.so' failed
make[2]: *** [src/plugins/haskell/libHShaskell-ghc8.2.2.so] Error 1
CMakeFiles/Makefile2:4033: recipe for target 'src/plugins/haskell/CMakeFiles/haskell.dir/all' failed
make[1]: *** [src/plugins/haskell/CMakeFiles/haskell.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

Saya secara manual masuk ke direktori build / src / plugin / haskell dan memanggil cabal install sana. Kemudian setidaknya saya memiliki ketergantungan itu.

Setelah membersihkan direktori build lagi, saya sekarang terjebak di sini:

Scanning dependencies of target c2hs_haskell
[ 20%] Generating libHSlibelektra-haskell-ghc8.2.2.so
cabal: Could not resolve dependencies:
[__0] next goal: haskell (user goal)
[__0] rejecting: haskell-1.0.8.24/installed-HvL... (package is broken)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: haskellNote: when using a sandbox, all
packages are required to have consistent dependencies. Try
reinstalling/unregistering the offending packages or recreating the sandbox.

Saved package config file is outdated:
• the Cabal version changed from Cabal-2.0.1.0 to Cabal-2.2.0.1
Re-run the 'configure' command.
src/bindings/haskell/CMakeFiles/c2hs_haskell.dir/build.make:75: recipe for target 'src/bindings/haskell/libHSlibelektra-haskell-ghc8.2.2.so' failed
make[2]: *** [src/bindings/haskell/libHSlibelektra-haskell-ghc8.2.2.so] Error 1
CMakeFiles/Makefile2:12336: recipe for target 'src/bindings/haskell/CMakeFiles/c2hs_haskell.dir/all' failed
make[1]: *** [src/bindings/haskell/CMakeFiles/c2hs_haskell.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

Plugin pemeriksa ketik ini benar-benar mengganggu ...

Saya merasakan Anda, mendapatkan seluruh kompilasi ini dengan komplotan rahasia dan cmake itu / sangat menyebalkan. saya masih mempertimbangkan untuk beralih ke tumpukan daripada komplotan rahasia, meskipun ini menyiratkan alat tambahan yang menurut saya dapat membantu membuat ini lebih stabil.

saya benar-benar bertanya-tanya apa perbedaan besar dalam pengaturan Anda. image buruh pelabuhan xenial berhasil mengkompilasi semuanya sehingga seharusnya tidak mustahil dengan pengaturan itu. Tetapi untuk saat ini saya sarankan Anda membiarkannya saya mencoba mencari solusi yang baik.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mpranj picture mpranj  ·  3Komentar

markus2330 picture markus2330  ·  3Komentar

markus2330 picture markus2330  ·  4Komentar

markus2330 picture markus2330  ·  4Komentar

sanssecours picture sanssecours  ·  3Komentar