2016-10-21 24 views
4

Windows上に本当に移植可能なHaskellインストールを持つことは可能ですか?それで、Haskell関連のすべてが単一のディレクトリの下で行われるようになります。私は、USBスティックにHaskellをインストールして他のWindowsコンピュータに接続するだけでいいので、接続するだけです。Windows上に本当に移植可能なHaskellインストール

これは、cabal install somePackageということは、 USBドライブに異なるドライブ文字が割り当てられている可能性があります)。どんなWindowsコンピュータでもcabal install somePackageを実行したいと思います。また、USBスティックの内容をローカルのハードディスクにコピーできても、そこからはうまくいきます(一部のWindowsマシンでは、USBスティックは読み取り専用にマウントされています)。

私は以下の関連するStackOverflow質問herehereを知っています。キャバルの設定ファイルを相対パスを使用するように設定できますか?他のHaskellツール(winghciなど)はどうですか?

どうすればいいですか? Haskell Platformをポータブルモードでインストールしてから何をしますか?

+3

あなたの最善の策は、おそらく 'スタックを使用するようになります'これはかなりうまく整理されているようだ。しかし、私はあなたに*どのように*あなたに伝えるか分かりません。 – dfeuer

+2

@dfeuersの提案に同意します。グローバルなプロジェクト設定を見つけることなく、スタックは 'STACK_ROOT'のために環境をチェックし、全てのものをそのディレクトリに入れます。スクリプトのディレクトリを探し、 'STACK_ROOT'を適切に設定するシンプルなシェルスクリプトを書くことができます。これはウィンドウなので、バッチを使用する必要があると思います(これは私の専門知識が終わるところです)。スクリプトが実際に存在するディレクトリを探している場合、このスクリプトをコピーすることは理論的にはまだ機能します。しかし、私が知っているHaskellのインストールはありません。 – user2407038

+0

@ user2407038とdfeuerの計画は合理的なもののように聞こえる。 [このブログの記事では](http://christiaanb.github.io/posts/relocatable-sandboxes/)で提案されているように、* stack *ではなく* cabal-install * sandboxで同様の効果を得ることができるようです。私は実際にそれをやってみることは決してありませんでした。 – duplode

答えて

2

後述するように、プロセスは、次のとおり

  1. 使用ポータブル例えば内Haskell Platformをインストールするをインストールh:\dev\hpショートカットを作成しないでくださいを選択してください。 Haskell Stack Setupの場合は、宛先フォルダとしてh:\dev\hp\local\binを選択します。 De選択ユーザーに追加%PATH%

  2. あなたは、次の(最初のレベル)のディレクトリ構造を取得する必要があります

    dev 
        hp 
        8.0.1 
        local 
         bin (this where stack.exe gets installed) 
    
  3. は、追加のサブフォルダを作成します。

    mkdir projects 
    mkdir user 
    cd user 
    mkdir AppData 
    mkdir AppData\Roaming 
    
    dev 
        hp 
        projects 
        user 
         AppData 
         Roaming 
    
  4. ダウンロードしてuserフォルダ内のjunctionユーティリティを抽出します。以下の内容のuser\create-symlink.batを作成してください。その後、それを実行します。

    %~dp0junction -nobanner -accepteula -d "%~dp0Application Data" 
    %~dp0junction -nobanner -accepteula "%~dp0Application Data" %~dp0AppData\Roaming 
    junction "Application Data" AppData\Roaming 
    
  5. 次の内容のh:\dev\hpフォルダにhaskell.batを作成します。

    @ECHO OFF 
    set HSROOT=%~dp08.0.1 
    SET USERPROFILE=%~dp0user 
    SET Path=%HSROOT%\bin;%HSROOT%\winghci;%~dp0local\bin;%HSROOT%\mingw\bin;%HSROOT%\msys\usr\bin;%HSROOT%\lib;%HSROOT%\lib\extralibs\bin;%Path% 
    CMD /k "cd %~dp0projects" 
    
  6. 実行haskell.batと、コマンドラインでこれらのコマンドを入力します。これは徒党のconfigファイル(user\AppData\Roaming\cabal\config)再配置可能にするためにuser\AppData\Roaming

    cabal update 
    cabal user-config init 
    stack setup 
    
  7. の下に追加のフォルダ構造を作成する必要があり、それを編集し、次のようにタグを変更します。お好みのテキストエディタを使用して

    remote-repo-cache: $prefix\..\..\user\AppData\Roaming\cabal\packages 
    world-file: $prefix\..\..\user\AppData\Roaming\cabal\world 
    extra-prog-path: $prefix\..\msys\usr\bin 
    extra-lib-dirs: $prefix\..\mingw\lib 
    extra-include-dirs: $prefix\..\mingw\include 
    build-summary: $prefix\..\..\user\AppData\Roaming\cabal\logs\build.log 
    
  8. は、マルチやります-file検索して次のファイルを置き換えます。user\AppData\Roaming\ghc\i386-mingw32-8.0.1\package.conf.d\*.conf

    • 絶対パスと彼らは$topdir(それは8.0.1の下のディレクトリに評価すると、私はそれがh:\dev\hp\8.0.1\libだと思う)を使用して置き換えます。たとえば、h:\\dev\\hp\user\\Application Dataが表示されている場合は、$topdir\\..\\..\\user\\AppData\\Roamingに置き換えてください。または、h:\dev\hp\8.0.1が表示されている場合は、$topdir\..に置き換えます。
  9. スタックのスナップショットフォルダ内の同じ検索と置換処理を行います。 user\AppData\Roaming\stack\snapshots\XXX\pkgdb

  10. 更新グローバルユーザーおよびスタックパッケージキャッシュ:

    `ghc-pkg recache --global` 
    `ghc-pkg recache --user` 
    `ghc-pkg recache --package-db="h:\dev\hp\user\AppData\Roaming\stack\snapshots\XXX\pkgdb"` 
    
  11. 新しいパッケージをインストールする場合は、ステップを置き換える検索&を繰り返す必要があります。または、cabal install --enable-relocatable <package>を試して、その代わりに動作するかどうかを確認してください。

  12. インストールフォルダの名前を変更したり、同じマシンの新しい場所にコピーしたり、別のマシンにコピーしたりすることができます。ちょうどあなたが実行できるようになり、そこからコマンドプロンプトを環境を設定し、取得するためにhaskell.batを使用ghccabalstackwinghciなど

  13. まだ残りの1つの問題があります。あなたが構築するgccを必要とするパッケージをインストールしようとは、次のエラーを取得する可能性があります:

    Configuring network-2.6.3.1... 
    bash.exe: warning: could not find /tmp, please create! 
    configure: WARNING: unrecognized options: --with-compiler 
    checking build system type... bash.exe: warning: could not find /tmp, please create! 
    bash.exe: warning: could not find /tmp, please create! 
    i686-pc-mingw32 
    checking host system type... i686-pc-mingw32 
    checking for gcc... h:\dev\hp\80227D~1.1Ăé´ÉŐĂőýŽÇ┬ćýŁŻ┬îŃąÇĂéňżö┬łŃŽ«ĂéŃąÇĂéň庤ťO 
    checking whether the C compiler works... no 
    configure: error: in `/cygdrive/c/DOCUME~1/UserName/LOCALS~1/Temp/stack4268/network-2.6.3.1': 
    configure: error: C compiler cannot create executables 
    See `config.log' for more details 
    

    理由はconfigureスクリプトがgcch:\dev\hp\80227D~1.1Ăé´ÉŐĂőýŽÇ┬ćýŁŻ┬îŃąÇĂéňżö┬łŃŽ«ĂéŃąÇĂéň庤ťO)に間違ったパスを渡されるということです。私は、問題のあるパッケージmanuallyを構築する方法を知っているが、それをインストールする方法がわからない:

    stack unpack network-2.6.3.1 
    cd network-2.6.3.1 
    stack init 
    # edit `configure` script and put `CC=` on the first line to kill system supplied path to `gcc` 
    stack build 
    
-1

試してみてください。

penultimo :: [Int] -> Int 
penultimo l = head(tail(reverse l)) 
関連する問題