irpack 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +193 -0
 - data/lib/irpack.rb +23 -7
 - data/lib/irpack/application.rb +69 -6
 - data/lib/irpack/entrypoint.rb +55 -11
 - data/test/test_application.rb +95 -0
 - data/test/test_entrypoint.rb +172 -4
 - metadata +17 -8
 
    
        data/README.rdoc
    ADDED
    
    | 
         @@ -0,0 +1,193 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            =irpack
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            irpack converts your IronRuby scripts to a standalone .exe file.
         
     | 
| 
      
 4 
     | 
    
         
            +
            Generated executable does not require IronRuby, but only .NET Framework or mono.
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ==Requirements
         
     | 
| 
      
 7 
     | 
    
         
            +
            IronRuby 1.1.3 or later.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ==Installation
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              $ igem install irpack
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            You need to use igem (gem command for IronRuby) instead of gem.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ==Usage
         
     | 
| 
      
 16 
     | 
    
         
            +
              $ irpack [options] ENTRYFILE [EMBEDFILES...]
         
     | 
| 
      
 17 
     | 
    
         
            +
                -b BASEDIR               Specify base directory. [base of ENTRYFILE]
         
     | 
| 
      
 18 
     | 
    
         
            +
                -o OUTPUTFILE            Specify output file name.
         
     | 
| 
      
 19 
     | 
    
         
            +
                    --window             Generate window app.
         
     | 
| 
      
 20 
     | 
    
         
            +
                    --console            Generate console app.[default]
         
     | 
| 
      
 21 
     | 
    
         
            +
                    --compress           Compress package.
         
     | 
| 
      
 22 
     | 
    
         
            +
                    --complete           Embed all standard libraries.
         
     | 
| 
      
 23 
     | 
    
         
            +
                    --no-embed           Do not embed IronRuby assemblies.
         
     | 
| 
      
 24 
     | 
    
         
            +
              Runtime options:
         
     | 
| 
      
 25 
     | 
    
         
            +
                -Idirectory              specify $LOAD_PATH directory (may be used more than once)
         
     | 
| 
      
 26 
     | 
    
         
            +
                -rlibrary                require the library, before executing your script
         
     | 
| 
      
 27 
     | 
    
         
            +
                -d                       set debugging flags (set $DEBUG to true)
         
     | 
| 
      
 28 
     | 
    
         
            +
                -D                       emit debugging information (PDBs) for Visual Studio debugger
         
     | 
| 
      
 29 
     | 
    
         
            +
                -v                       print version number, then turn on verbose mode
         
     | 
| 
      
 30 
     | 
    
         
            +
                -w                       turn warnings on for your script
         
     | 
| 
      
 31 
     | 
    
         
            +
                -W[level]                set warning level; 0=silence, 1=medium (default), 2=verbose
         
     | 
| 
      
 32 
     | 
    
         
            +
                    --trace              enable support for set_trace_func
         
     | 
| 
      
 33 
     | 
    
         
            +
                    --profile            enable support for 'pi = IronRuby::Clr.profile { block_to_profile }'
         
     | 
| 
      
 34 
     | 
    
         
            +
                    --exception-detail   enable ExceptionDetail mode
         
     | 
| 
      
 35 
     | 
    
         
            +
                    --no-adaptive-compilation
         
     | 
| 
      
 36 
     | 
    
         
            +
                                         disable adaptive compilation - all code will be compiled
         
     | 
| 
      
 37 
     | 
    
         
            +
                    --compilation-threshold THRESHOLD
         
     | 
| 
      
 38 
     | 
    
         
            +
                                         the number of iterations before the interpreter starts compiling
         
     | 
| 
      
 39 
     | 
    
         
            +
                    --pass-exceptions    do not catch exceptions that are unhandled by script code
         
     | 
| 
      
 40 
     | 
    
         
            +
                    --private-binding    enable binding to private members
         
     | 
| 
      
 41 
     | 
    
         
            +
                    --show-clr-exceptions
         
     | 
| 
      
 42 
     | 
    
         
            +
                                         display CLS Exception information
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            Specify rb file on ENTRYFILE to generate exe. Executables includes ENTRYFILE and
         
     | 
| 
      
 45 
     | 
    
         
            +
            IronRuby dlls in their resource.
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            When runtime, script can open EMBEDFILES with relative path from BASEDIR.
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            for example:
         
     | 
| 
      
 50 
     | 
    
         
            +
              $ irpack -o hoge/fuga.exe -d foo bar/entry.rb foo/hello.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            hoge/fuga.exe runs embedded bar/entry.rb.
         
     | 
| 
      
 53 
     | 
    
         
            +
            To load foo/hello.rb, require 'hello' (relative path from BASEDIR 'foo').
         
     | 
| 
      
 54 
     | 
    
         
            +
            A real file is used if hello.rb exists in both embedded and real filesystem in
         
     | 
| 
      
 55 
     | 
    
         
            +
            same directory as executable.
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            To specify exe icon, embed ico file.
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            To generate application which has no console window use '--window' option.
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            '--no-embed' option exclude IronRuby dlls from embedded files. A generated
         
     | 
| 
      
 62 
     | 
    
         
            +
            executable requires IronRuby dlls.
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            If scripts use any standard libraries, embed them too. '--complete' embeds
         
     | 
| 
      
 65 
     | 
    
         
            +
            all of standard libraries into exe.
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            Executable file is compacted by '--compress' option that compresses embedded
         
     | 
| 
      
 68 
     | 
    
         
            +
            files. To load compressed file costs extra time.
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            Runtime options are passed to script engine when generated executable started
         
     | 
| 
      
 71 
     | 
    
         
            +
            as well as ir.exe.
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            ==Limitations
         
     | 
| 
      
 74 
     | 
    
         
            +
            Embedded native dlls and mixed (C++/CLI) assemblies are not loadable.
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            =irpack
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            irpackはIronRubyのスクリプトを単体で動く.exeファイルに変換するアプリケーションで
         
     | 
| 
      
 79 
     | 
    
         
            +
            す。生成した実行ファイルは.NET FrameworkやmonoさえあればIronRubyをインストールし
         
     | 
| 
      
 80 
     | 
    
         
            +
            ていない環境でも動かすことができます。
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            ==動作環境
         
     | 
| 
      
 83 
     | 
    
         
            +
            IronRuby 1.1.3以降。
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            ==インストール
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              $ igem install irpack
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            IronRubyでしか動かないのでigem (IronRubyのgemコマンド)を使ってインストールしてく
         
     | 
| 
      
 90 
     | 
    
         
            +
            ださい。
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            ==使い方
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
              $ irpack [options] ENTRYFILE [EMBEDFILES...]
         
     | 
| 
      
 95 
     | 
    
         
            +
                -b BASEDIR               埋め込み基準のディレクトリを指定します。[ENTRYFILEのあるディレクトリ]
         
     | 
| 
      
 96 
     | 
    
         
            +
                -o OUTPUTFILE            出力ファイル名を指定します。[ENTRYFILEの拡張子を.exeにしたもの]
         
     | 
| 
      
 97 
     | 
    
         
            +
                    --window             ウィンドウアプリを生成します。
         
     | 
| 
      
 98 
     | 
    
         
            +
                    --console            コンソールアプリを生成します。[default]
         
     | 
| 
      
 99 
     | 
    
         
            +
                    --compress           パッケージの圧縮をします。
         
     | 
| 
      
 100 
     | 
    
         
            +
                    --complete           全ての標準ライブラリを埋め込みます。
         
     | 
| 
      
 101 
     | 
    
         
            +
                    --no-embed           IronRubyの埋め込みを行いません。
         
     | 
| 
      
 102 
     | 
    
         
            +
              実行時オプション:
         
     | 
| 
      
 103 
     | 
    
         
            +
                -Idirectory              $LOAD_PATHディレクトリを指定します。(複数回指定できます。)
         
     | 
| 
      
 104 
     | 
    
         
            +
                -rlibrary                スクリプト実行前にlibraryを読み込みます。
         
     | 
| 
      
 105 
     | 
    
         
            +
                -d                       デバッグフラグを設定します。($DEBUGをtrueに設定します。)
         
     | 
| 
      
 106 
     | 
    
         
            +
                -D                       Visual Studioデバッガ用にデバッグ情報(PDB)を生成します。
         
     | 
| 
      
 107 
     | 
    
         
            +
                -v                       バージョン番号を出力し、冗長モードを有効にします。
         
     | 
| 
      
 108 
     | 
    
         
            +
                -w                       スクリプトの警告を有効します。
         
     | 
| 
      
 109 
     | 
    
         
            +
                -W[level]                警告レベルを設定します: 0=無し, 1=普通(デフォルト), 2=冗長
         
     | 
| 
      
 110 
     | 
    
         
            +
                    --trace              set_trace_funcサポートを有効にします。
         
     | 
| 
      
 111 
     | 
    
         
            +
                    --profile            CLRプロファイラを有効にします。次のように使います
         
     | 
| 
      
 112 
     | 
    
         
            +
                                         'pi = IronRuby::Clr.profile { block_to_profile }'
         
     | 
| 
      
 113 
     | 
    
         
            +
                    --exception-detail   例外詳細モードを有効にします。
         
     | 
| 
      
 114 
     | 
    
         
            +
                    --no-adaptive-compilation
         
     | 
| 
      
 115 
     | 
    
         
            +
                                         適応型コンパイルを無効にします。全てのコードがコンパイルされます。
         
     | 
| 
      
 116 
     | 
    
         
            +
                    --compilation-threshold THRESHOLD
         
     | 
| 
      
 117 
     | 
    
         
            +
                                         インタプリタがコンパイル開始するまでの繰り返し回数を指定します。
         
     | 
| 
      
 118 
     | 
    
         
            +
                    --pass-exceptions    スクリプトで処理されなかった例外をcatchしないようにします。
         
     | 
| 
      
 119 
     | 
    
         
            +
                    --private-binding    privateメンバへのバインディングを有効にします。
         
     | 
| 
      
 120 
     | 
    
         
            +
                    --show-clr-exceptions
         
     | 
| 
      
 121 
     | 
    
         
            +
                                         CLS例外情報を表示します。
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
            ENTRYFILEに起動するrbファイルを指定するとexeファイルが生成されます。exeファイル
         
     | 
| 
      
 124 
     | 
    
         
            +
            にはENTRYFILEとIronRubyのdllが埋め込まれるので.NET Frameworkやmonoが入っている環
         
     | 
| 
      
 125 
     | 
    
         
            +
            境でIronRubyのインストール無しに実行することができます。
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
            ENTRYFILEに続けてファイルを指定することによって他のファイルもexeに埋め込むことが
         
     | 
| 
      
 128 
     | 
    
         
            +
            できます。
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            埋め込まれたファイルはスクリプト中からは「実行ファイルのディレクトリ/基準ディレク
         
     | 
| 
      
 131 
     | 
    
         
            +
            トリからの相対パス」に存在するように見えます。
         
     | 
| 
      
 132 
     | 
    
         
            +
            たとえば、
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
              $ irpack -o hoge/fuga.exe -d foo bar/entry.rb foo/hello.rb
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
            としたときにfuga.exeの実行中(bar/entry.rb)からはfoo/hello.rbはhoge/hello.rb
         
     | 
| 
      
 137 
     | 
    
         
            +
            (fuga.exeのあるディレクトリhoge)にあるように見えます。
         
     | 
| 
      
 138 
     | 
    
         
            +
            もしhoge/hello.rbが本当にファイルとして存在した場合はそちらが優先して開かれます。
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            EMBEDFILESにアイコン(.ico)ファイルを指定するとexeのアイコンとして使用します。
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            '--console'や'--window'オプションでコンソールアプリを生成するかウィンドウアプリを
         
     | 
| 
      
 143 
     | 
    
         
            +
            生成するか指定できます。省略時はコンソールアプリになります。ウィンドウアプリの場
         
     | 
| 
      
 144 
     | 
    
         
            +
            合はコンソールウィンドウが開かなくなりますが、標準入出力は使用できません。また例
         
     | 
| 
      
 145 
     | 
    
         
            +
            外が捕捉されずに落ちた場合のメッセージは標準エラー出力に出るようになっていますが、
         
     | 
| 
      
 146 
     | 
    
         
            +
            ウィンドウアプリの場合はそれも表示されません。
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            '--no-embed'オプションを指定するとIronRuby.dllなどをexeに埋め込みません。配布する
         
     | 
| 
      
 149 
     | 
    
         
            +
            場合は実行環境にIronRubyがインストールするかIronRuby.dllなどの必要なdllを同じディ
         
     | 
| 
      
 150 
     | 
    
         
            +
            レクトリに置いて実行してください。
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
            標準ライブラリを使用する場合は、使用するライブラリも埋め込まなければいけません。
         
     | 
| 
      
 153 
     | 
    
         
            +
            '--complete'オプションを指定すると標準ライブラリを全て埋め込みます。実行ファイル
         
     | 
| 
      
 154 
     | 
    
         
            +
            サイズはその分大きくなります。
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
            '--compress'オプションは埋め込んだファイルを圧縮します。実行ファイルのサイズが小さ
         
     | 
| 
      
 157 
     | 
    
         
            +
            くなりますが、読み込みに時間がかかるようになります。
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
            実行時オプションは生成した実行ファイルの起動時にスクリプトエンジンに渡されます。
         
     | 
| 
      
 160 
     | 
    
         
            +
            ir.exeに指定するのと同じものです。
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
            ==制限
         
     | 
| 
      
 163 
     | 
    
         
            +
            C++/CLIの混合アセンブリやネイティブdllは埋め込めません。
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
            生成したexeは生成に使用したIronRubyと同じバージョンの.NET Frameworkかそれに対応
         
     | 
| 
      
 166 
     | 
    
         
            +
            するmonoが必要です。
         
     | 
| 
      
 167 
     | 
    
         
            +
            .NET Framework 4のir.exeを使って生成したexeを実行するには.NET Framework4か
         
     | 
| 
      
 168 
     | 
    
         
            +
            mono 2.8以降が必要ということです。
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
            ==License
         
     | 
| 
      
 171 
     | 
    
         
            +
            zlib/libpng License.
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                Copyright (c) 2010-2011 Ryuichi Sakamoto.
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                This software is provided 'as-is', without any express or implied
         
     | 
| 
      
 176 
     | 
    
         
            +
                warranty. In no event will the authors be held liable for any damages
         
     | 
| 
      
 177 
     | 
    
         
            +
                arising from the use of this software.
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                Permission is granted to anyone to use this software for any purpose,
         
     | 
| 
      
 180 
     | 
    
         
            +
                including commercial applications, and to alter it and redistribute it
         
     | 
| 
      
 181 
     | 
    
         
            +
                freely, subject to the following restrictions:
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                    1. The origin of this software must not be misrepresented; you must not
         
     | 
| 
      
 184 
     | 
    
         
            +
                    claim that you wrote the original software. If you use this software
         
     | 
| 
      
 185 
     | 
    
         
            +
                    in a product, an acknowledgment in the product documentation would be
         
     | 
| 
      
 186 
     | 
    
         
            +
                    appreciated but is not required.
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                    2. Altered source versions must be plainly marked as such, and must not be
         
     | 
| 
      
 189 
     | 
    
         
            +
                    misrepresented as being the original software.
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
                    3. This notice may not be removed or altered from any source
         
     | 
| 
      
 192 
     | 
    
         
            +
                    distribution.
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
    
        data/lib/irpack.rb
    CHANGED
    
    | 
         @@ -33,6 +33,7 @@ module IRPack 
     | 
|
| 
       33 
33 
     | 
    
         
             
                Microsoft.Dynamic
         
     | 
| 
       34 
34 
     | 
    
         
             
                Microsoft.Scripting
         
     | 
| 
       35 
35 
     | 
    
         
             
                Microsoft.Scripting.Core
         
     | 
| 
      
 36 
     | 
    
         
            +
                Microsoft.Scripting.Metadata
         
     | 
| 
       36 
37 
     | 
    
         
             
                IronRuby
         
     | 
| 
       37 
38 
     | 
    
         
             
                IronRuby.Libraries
         
     | 
| 
       38 
39 
     | 
    
         
             
                IronRuby.Libraries.Yaml
         
     | 
| 
         @@ -77,14 +78,29 @@ module IRPack 
     | 
|
| 
       77 
78 
     | 
    
         
             
                res
         
     | 
| 
       78 
79 
     | 
    
         
             
              end
         
     | 
| 
       79 
80 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
              def pack(output_file, files, entry_file, opts={})
         
     | 
| 
      
 81 
     | 
    
         
            +
              def pack(output_file, files, entry_file, opts={}, runtime_options={})
         
     | 
| 
       81 
82 
     | 
    
         
             
                opts = {
         
     | 
| 
       82 
     | 
    
         
            -
                  : 
     | 
| 
       83 
     | 
    
         
            -
                  : 
     | 
| 
       84 
     | 
    
         
            -
                  : 
     | 
| 
       85 
     | 
    
         
            -
                  : 
     | 
| 
       86 
     | 
    
         
            -
                  : 
     | 
| 
      
 83 
     | 
    
         
            +
                  target:           :exe,
         
     | 
| 
      
 84 
     | 
    
         
            +
                  compress:         false,
         
     | 
| 
      
 85 
     | 
    
         
            +
                  complete:         false,
         
     | 
| 
      
 86 
     | 
    
         
            +
                  embed_references: true,
         
     | 
| 
      
 87 
     | 
    
         
            +
                  seach_paths:      [],
         
     | 
| 
      
 88 
     | 
    
         
            +
                  module_name:      path_to_module_name(output_file),
         
     | 
| 
       87 
89 
     | 
    
         
             
                }.update(opts)
         
     | 
| 
      
 90 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 91 
     | 
    
         
            +
                  DebugMode:             false,
         
     | 
| 
      
 92 
     | 
    
         
            +
                  PrivateBinding:        false,
         
     | 
| 
      
 93 
     | 
    
         
            +
                  NoAdaptiveCompilation: false,
         
     | 
| 
      
 94 
     | 
    
         
            +
                  CompilationThreshold:  -1,
         
     | 
| 
      
 95 
     | 
    
         
            +
                  ExceptionDetail:       false,
         
     | 
| 
      
 96 
     | 
    
         
            +
                  ShowClrExceptions:     false,
         
     | 
| 
      
 97 
     | 
    
         
            +
                  Profile:               false,
         
     | 
| 
      
 98 
     | 
    
         
            +
                  Verbosity:             1,
         
     | 
| 
      
 99 
     | 
    
         
            +
                  DebugVariable:         false,
         
     | 
| 
      
 100 
     | 
    
         
            +
                  EnableTracing:         false,
         
     | 
| 
      
 101 
     | 
    
         
            +
                  RequiredPaths:         [],
         
     | 
| 
      
 102 
     | 
    
         
            +
                  SearchPaths:           [],
         
     | 
| 
      
 103 
     | 
    
         
            +
                }.update(runtime_options)
         
     | 
| 
       88 
104 
     | 
    
         
             
                output_file = File.expand_path(output_file)
         
     | 
| 
       89 
105 
     | 
    
         
             
                basename    = File.basename(output_file, '.*')
         
     | 
| 
       90 
106 
     | 
    
         
             
                module_name = opts[:module_name]
         
     | 
| 
         @@ -101,7 +117,7 @@ module IRPack 
     | 
|
| 
       101 
117 
     | 
    
         | 
| 
       102 
118 
     | 
    
         
             
                Dir.mktmpdir(File.basename($0,'.*')) do |tmp_path|
         
     | 
| 
       103 
119 
     | 
    
         
             
                  entry_dll = File.join(tmp_path, module_name+'.EntryPoint.dll')
         
     | 
| 
       104 
     | 
    
         
            -
                  EntryPoint.compile(entry_dll, module_name, entry_file, references)
         
     | 
| 
      
 120 
     | 
    
         
            +
                  EntryPoint.compile(entry_dll, module_name, entry_file, references, runtime_options)
         
     | 
| 
       105 
121 
     | 
    
         
             
                  pack_files[entry_dll] = File.basename(entry_dll)
         
     | 
| 
       106 
122 
     | 
    
         | 
| 
       107 
123 
     | 
    
         
             
                  package_file = File.join(tmp_path, basename+'.pkg')
         
     | 
    
        data/lib/irpack/application.rb
    CHANGED
    
    | 
         @@ -33,6 +33,7 @@ module IRPack 
     | 
|
| 
       33 
33 
     | 
    
         
             
                  :compress,
         
     | 
| 
       34 
34 
     | 
    
         
             
                  :complete,
         
     | 
| 
       35 
35 
     | 
    
         
             
                  :embed_references,
         
     | 
| 
      
 36 
     | 
    
         
            +
                  :runtime_options,
         
     | 
| 
       36 
37 
     | 
    
         
             
                  :entry_file,
         
     | 
| 
       37 
38 
     | 
    
         
             
                  :files) do
         
     | 
| 
       38 
39 
     | 
    
         
             
                  def self.parse!(argv)
         
     | 
| 
         @@ -45,7 +46,21 @@ module IRPack 
     | 
|
| 
       45 
46 
     | 
    
         
             
                    args.embed_references = true
         
     | 
| 
       46 
47 
     | 
    
         
             
                    args.entry_file  = nil
         
     | 
| 
       47 
48 
     | 
    
         
             
                    args.files = {}
         
     | 
| 
       48 
     | 
    
         
            -
                     
     | 
| 
      
 49 
     | 
    
         
            +
                    args.runtime_options = {
         
     | 
| 
      
 50 
     | 
    
         
            +
                      DebugMode:             false,
         
     | 
| 
      
 51 
     | 
    
         
            +
                      PrivateBinding:        false,
         
     | 
| 
      
 52 
     | 
    
         
            +
                      NoAdaptiveCompilation: false,
         
     | 
| 
      
 53 
     | 
    
         
            +
                      CompilationThreshold:  -1,
         
     | 
| 
      
 54 
     | 
    
         
            +
                      ExceptionDetail:       false,
         
     | 
| 
      
 55 
     | 
    
         
            +
                      ShowClrExceptions:     false,
         
     | 
| 
      
 56 
     | 
    
         
            +
                      Profile:               false,
         
     | 
| 
      
 57 
     | 
    
         
            +
                      Verbosity:             1,
         
     | 
| 
      
 58 
     | 
    
         
            +
                      DebugVariable:         false,
         
     | 
| 
      
 59 
     | 
    
         
            +
                      EnableTracing:         false,
         
     | 
| 
      
 60 
     | 
    
         
            +
                      RequiredPaths:         [],
         
     | 
| 
      
 61 
     | 
    
         
            +
                      SearchPaths:           [],
         
     | 
| 
      
 62 
     | 
    
         
            +
                    }
         
     | 
| 
      
 63 
     | 
    
         
            +
                    opt = OptionParser.new("Usage: #{$0} [options] ENTRYFILE [EMBEDFILES...]", 24, '  ')
         
     | 
| 
       49 
64 
     | 
    
         
             
                    opt.on('-b BASEDIR',    'Specify base directory. [base of ENTRYFILE]') {|v| basedir = v }
         
     | 
| 
       50 
65 
     | 
    
         
             
                    opt.on('-o OUTPUTFILE', 'Specify output file name.') {|v| args.output_file = v }
         
     | 
| 
       51 
66 
     | 
    
         
             
                    opt.on('--window',      'Generate window app.') { args.target = :winexe }
         
     | 
| 
         @@ -53,7 +68,52 @@ module IRPack 
     | 
|
| 
       53 
68 
     | 
    
         
             
                    opt.on('--compress',    'Compress package.') { args.compress = true }
         
     | 
| 
       54 
69 
     | 
    
         
             
                    opt.on('--complete',    'Embed all standard libraries.') { args.complete = true }
         
     | 
| 
       55 
70 
     | 
    
         
             
                    opt.on('--no-embed',    'Do not embed IronRuby assemblies.') {|v| args.embed_references = v }
         
     | 
| 
       56 
     | 
    
         
            -
                    opt. 
     | 
| 
      
 71 
     | 
    
         
            +
                    opt.separator('Runtime options:')
         
     | 
| 
      
 72 
     | 
    
         
            +
                    opt.on('-Idirectory', 'specify $LOAD_PATH directory (may be used more than once)') {|v|
         
     | 
| 
      
 73 
     | 
    
         
            +
                      args.runtime_options[:SearchPaths] << v
         
     | 
| 
      
 74 
     | 
    
         
            +
                    }
         
     | 
| 
      
 75 
     | 
    
         
            +
                    opt.on('-rlibrary', 'require the library, before executing your script') {|v|
         
     | 
| 
      
 76 
     | 
    
         
            +
                      args.runtime_options[:RequiredPaths] << v
         
     | 
| 
      
 77 
     | 
    
         
            +
                    }
         
     | 
| 
      
 78 
     | 
    
         
            +
                    opt.on('-d', 'set debugging flags (set $DEBUG to true)') {|v|
         
     | 
| 
      
 79 
     | 
    
         
            +
                      args.runtime_options[:DebugVariable] = v
         
     | 
| 
      
 80 
     | 
    
         
            +
                    }
         
     | 
| 
      
 81 
     | 
    
         
            +
                    opt.on('-D', 'emit debugging information (PDBs) for Visual Studio debugger') {|v|
         
     | 
| 
      
 82 
     | 
    
         
            +
                      args.runtime_options[:DebugMode] = v
         
     | 
| 
      
 83 
     | 
    
         
            +
                    }
         
     | 
| 
      
 84 
     | 
    
         
            +
                    opt.on('-v', 'print version number, then turn on verbose mode') {|v|
         
     | 
| 
      
 85 
     | 
    
         
            +
                      args.runtime_options[:Verbosity] = 2
         
     | 
| 
      
 86 
     | 
    
         
            +
                    }
         
     | 
| 
      
 87 
     | 
    
         
            +
                    opt.on('-w', 'turn warnings on for your script') {|v|
         
     | 
| 
      
 88 
     | 
    
         
            +
                      args.runtime_options[:Verbosity] = 2
         
     | 
| 
      
 89 
     | 
    
         
            +
                    }
         
     | 
| 
      
 90 
     | 
    
         
            +
                    opt.on('-W[level]', 'set warning level; 0=silence, 1=medium (default), 2=verbose', Integer) {|v|
         
     | 
| 
      
 91 
     | 
    
         
            +
                      args.runtime_options[:Verbosity] = (v || 2).to_i
         
     | 
| 
      
 92 
     | 
    
         
            +
                    }
         
     | 
| 
      
 93 
     | 
    
         
            +
                    opt.on('--trace', 'enable support for set_trace_func') {|v|
         
     | 
| 
      
 94 
     | 
    
         
            +
                      args.runtime_options[:EnableTracing] = v
         
     | 
| 
      
 95 
     | 
    
         
            +
                    }
         
     | 
| 
      
 96 
     | 
    
         
            +
                    opt.on('--profile', "enable support for 'pi = IronRuby::Clr.profile { block_to_profile }'") {|v|
         
     | 
| 
      
 97 
     | 
    
         
            +
                      args.runtime_options[:Profile] = v
         
     | 
| 
      
 98 
     | 
    
         
            +
                    }
         
     | 
| 
      
 99 
     | 
    
         
            +
                    opt.on('--exception-detail', 'enable ExceptionDetail mode') {|v|
         
     | 
| 
      
 100 
     | 
    
         
            +
                      args.runtime_options[:ExceptionDetail] = v
         
     | 
| 
      
 101 
     | 
    
         
            +
                    }
         
     | 
| 
      
 102 
     | 
    
         
            +
                    opt.on('--no-adaptive-compilation', 'disable adaptive compilation - all code will be compiled') {|v|
         
     | 
| 
      
 103 
     | 
    
         
            +
                      args.runtime_options[:NoAdaptiveCompilation] = true
         
     | 
| 
      
 104 
     | 
    
         
            +
                    }
         
     | 
| 
      
 105 
     | 
    
         
            +
                    opt.on('--compilation-threshold THRESHOLD', 'the number of iterations before the interpreter starts compiling', Integer) {|v|
         
     | 
| 
      
 106 
     | 
    
         
            +
                      args.runtime_options[:CompilationThreshold] = v.to_i
         
     | 
| 
      
 107 
     | 
    
         
            +
                    }
         
     | 
| 
      
 108 
     | 
    
         
            +
                    opt.on('--pass-exceptions', 'do not catch exceptions that are unhandled by script code') {|v|
         
     | 
| 
      
 109 
     | 
    
         
            +
                      args.runtime_options[:PassExceptions] = v
         
     | 
| 
      
 110 
     | 
    
         
            +
                    }
         
     | 
| 
      
 111 
     | 
    
         
            +
                    opt.on('--private-binding', 'enable binding to private members') {|v|
         
     | 
| 
      
 112 
     | 
    
         
            +
                      args.runtime_options[:PrivateBinding] = v
         
     | 
| 
      
 113 
     | 
    
         
            +
                    }
         
     | 
| 
      
 114 
     | 
    
         
            +
                    opt.on('--show-clr-exceptions', 'display CLS Exception information') {|v|
         
     | 
| 
      
 115 
     | 
    
         
            +
                      args.runtime_options[:ShowClrExceptions] = v
         
     | 
| 
      
 116 
     | 
    
         
            +
                    }
         
     | 
| 
       57 
117 
     | 
    
         
             
                    opt.parse!(argv)
         
     | 
| 
       58 
118 
     | 
    
         | 
| 
       59 
119 
     | 
    
         
             
                    if argv.size<1 then
         
     | 
| 
         @@ -80,10 +140,13 @@ module IRPack 
     | 
|
| 
       80 
140 
     | 
    
         
             
                    args.output_file,
         
     | 
| 
       81 
141 
     | 
    
         
             
                    args.files,
         
     | 
| 
       82 
142 
     | 
    
         
             
                    args.entry_file,
         
     | 
| 
       83 
     | 
    
         
            -
                     
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
      
 143 
     | 
    
         
            +
                    {
         
     | 
| 
      
 144 
     | 
    
         
            +
                      target:   args.target,
         
     | 
| 
      
 145 
     | 
    
         
            +
                      compress: args.compress,
         
     | 
| 
      
 146 
     | 
    
         
            +
                      complete: args.complete,
         
     | 
| 
      
 147 
     | 
    
         
            +
                      embed_references: args.embed_references,
         
     | 
| 
      
 148 
     | 
    
         
            +
                    },
         
     | 
| 
      
 149 
     | 
    
         
            +
                    args.runtime_options)
         
     | 
| 
       87 
150 
     | 
    
         
             
                  return 0
         
     | 
| 
       88 
151 
     | 
    
         
             
                end
         
     | 
| 
       89 
152 
     | 
    
         
             
              end
         
     | 
    
        data/lib/irpack/entrypoint.rb
    CHANGED
    
    | 
         @@ -176,19 +176,46 @@ module IRPack 
     | 
|
| 
       176 
176 
     | 
    
         
             
                      var entry_file = Path.Combine(entry_path, "<%= entry_file %>");
         
     | 
| 
       177 
177 
     | 
    
         
             
                      var runtime_setup = new ScriptRuntimeSetup();
         
     | 
| 
       178 
178 
     | 
    
         
             
                      runtime_setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup());
         
     | 
| 
       179 
     | 
    
         
            -
                      runtime_setup. 
     | 
| 
       180 
     | 
    
         
            -
                      runtime_setup. 
     | 
| 
      
 179 
     | 
    
         
            +
                      runtime_setup.DebugMode      = <%= options[:DebugMode] %>; 
         
     | 
| 
      
 180 
     | 
    
         
            +
                      runtime_setup.PrivateBinding = <%= options[:PrivateBinding] %>; 
         
     | 
| 
      
 181 
     | 
    
         
            +
                      runtime_setup.Options["NoAdaptiveCompilation"] = <%= options[:NoAdaptiveCompilation] %>;
         
     | 
| 
      
 182 
     | 
    
         
            +
                      runtime_setup.Options["CompilationThreshold"]  = <%= options[:CompilationThreshold] %>;
         
     | 
| 
      
 183 
     | 
    
         
            +
                      runtime_setup.Options["ExceptionDetail"]       = <%= options[:ExceptionDetail] %>; 
         
     | 
| 
      
 184 
     | 
    
         
            +
                      runtime_setup.Options["ShowClrExceptions"]     = <%= options[:ShowClrExceptions] %>; 
         
     | 
| 
      
 185 
     | 
    
         
            +
                      runtime_setup.Options["Profile"]       = <%= options[:Profile] %>;
         
     | 
| 
      
 186 
     | 
    
         
            +
                      runtime_setup.Options["Verbosity"]     = <%= options[:Verbosity] %>;
         
     | 
| 
      
 187 
     | 
    
         
            +
                      runtime_setup.Options["DebugVariable"] = <%= options[:DebugVariable] %>;
         
     | 
| 
      
 188 
     | 
    
         
            +
                      runtime_setup.Options["EnableTracing"] = <%= options[:EnableTracing] %>;
         
     | 
| 
      
 189 
     | 
    
         
            +
                      runtime_setup.Options["RequiredPaths"] = new string[] {
         
     | 
| 
      
 190 
     | 
    
         
            +
                        <%= options[:RequiredPaths].collect {|v| '@"' + v + '"'}.join(", ") %>
         
     | 
| 
      
 191 
     | 
    
         
            +
                      };
         
     | 
| 
      
 192 
     | 
    
         
            +
                      var search_paths = new string[] {
         
     | 
| 
      
 193 
     | 
    
         
            +
                        <%= options[:SearchPaths].collect   {|v| '@"' + v + '"'}.join(", ") %>
         
     | 
| 
      
 194 
     | 
    
         
            +
                      };
         
     | 
| 
      
 195 
     | 
    
         
            +
                      for (int i=0; i<search_paths.Length; i++) {
         
     | 
| 
      
 196 
     | 
    
         
            +
                        if (!Path.IsPathRooted(search_paths[i])) {
         
     | 
| 
      
 197 
     | 
    
         
            +
                          search_paths[i] = Path.GetFullPath(Path.Combine(entry_path, search_paths[i]));
         
     | 
| 
      
 198 
     | 
    
         
            +
                        }
         
     | 
| 
      
 199 
     | 
    
         
            +
                      }
         
     | 
| 
      
 200 
     | 
    
         
            +
                      runtime_setup.Options["SearchPaths"]     = search_paths;
         
     | 
| 
      
 201 
     | 
    
         
            +
                      runtime_setup.Options["MainFile"]        = entry_file;
         
     | 
| 
      
 202 
     | 
    
         
            +
                      runtime_setup.Options["Arguments"]       = args;
         
     | 
| 
       181 
203 
     | 
    
         
             
                      runtime_setup.Options["ApplicationBase"] = entry_path;
         
     | 
| 
       182 
     | 
    
         
            -
                       
     | 
| 
      
 204 
     | 
    
         
            +
                      var stdlib = "<%= options[:StandardLibrary] %>";
         
     | 
| 
      
 205 
     | 
    
         
            +
                      if (Path.IsPathRooted(stdlib)) {
         
     | 
| 
      
 206 
     | 
    
         
            +
                        runtime_setup.Options["StandardLibrary"] = stdlib;
         
     | 
| 
      
 207 
     | 
    
         
            +
                      }
         
     | 
| 
      
 208 
     | 
    
         
            +
                      else {
         
     | 
| 
      
 209 
     | 
    
         
            +
                        runtime_setup.Options["StandardLibrary"] = Path.GetFullPath(Path.Combine(entry_path, stdlib));
         
     | 
| 
      
 210 
     | 
    
         
            +
                      }
         
     | 
| 
       183 
211 
     | 
    
         
             
                      runtime_setup.HostType = typeof(IRHost);
         
     | 
| 
       184 
212 
     | 
    
         
             
                      runtime_setup.HostArguments = new object[] { package };
         
     | 
| 
       185 
213 
     | 
    
         
             
                      var engine = IronRuby.Ruby.GetEngine(IronRuby.Ruby.CreateRuntime(runtime_setup));
         
     | 
| 
      
 214 
     | 
    
         
            +
                      <% if options[:PassExceptions] then %>
         
     | 
| 
      
 215 
     | 
    
         
            +
                      return engine.CreateScriptSourceFromFile(entry_file).ExecuteProgram();
         
     | 
| 
      
 216 
     | 
    
         
            +
                      <% else %>
         
     | 
| 
       186 
217 
     | 
    
         
             
                      try {
         
     | 
| 
       187 
     | 
    
         
            -
                        engine. 
     | 
| 
       188 
     | 
    
         
            -
                        return 0;
         
     | 
| 
       189 
     | 
    
         
            -
                      }
         
     | 
| 
       190 
     | 
    
         
            -
                      catch (IronRuby.Builtins.SystemExit e) {
         
     | 
| 
       191 
     | 
    
         
            -
                        return e.Status;
         
     | 
| 
      
 218 
     | 
    
         
            +
                        return engine.CreateScriptSourceFromFile(entry_file).ExecuteProgram();
         
     | 
| 
       192 
219 
     | 
    
         
             
                      }
         
     | 
| 
       193 
220 
     | 
    
         
             
                      catch (Exception e) {
         
     | 
| 
       194 
221 
     | 
    
         
             
                        var thread_abort = e as System.Threading.ThreadAbortException;
         
     | 
| 
         @@ -197,17 +224,34 @@ module IRPack 
     | 
|
| 
       197 
224 
     | 
    
         
             
                        }
         
     | 
| 
       198 
225 
     | 
    
         
             
                        return -1;
         
     | 
| 
       199 
226 
     | 
    
         
             
                      }
         
     | 
| 
      
 227 
     | 
    
         
            +
                      <% end %>
         
     | 
| 
       200 
228 
     | 
    
         
             
                    }
         
     | 
| 
       201 
229 
     | 
    
         
             
                  }
         
     | 
| 
       202 
230 
     | 
    
         
             
                }
         
     | 
| 
       203 
231 
     | 
    
         
             
            CS
         
     | 
| 
       204 
232 
     | 
    
         
             
                module_function
         
     | 
| 
       205 
     | 
    
         
            -
                 
     | 
| 
      
 233 
     | 
    
         
            +
                DefaultOptions = {
         
     | 
| 
      
 234 
     | 
    
         
            +
                  DebugMode:             false,
         
     | 
| 
      
 235 
     | 
    
         
            +
                  PrivateBinding:        false,
         
     | 
| 
      
 236 
     | 
    
         
            +
                  NoAdaptiveCompilation: false,
         
     | 
| 
      
 237 
     | 
    
         
            +
                  CompilationThreshold:  -1,
         
     | 
| 
      
 238 
     | 
    
         
            +
                  ExceptionDetail:       false,
         
     | 
| 
      
 239 
     | 
    
         
            +
                  ShowClrExceptions:     false,
         
     | 
| 
      
 240 
     | 
    
         
            +
                  Profile:               false,
         
     | 
| 
      
 241 
     | 
    
         
            +
                  Verbosity:             1,
         
     | 
| 
      
 242 
     | 
    
         
            +
                  DebugVariable:         false,
         
     | 
| 
      
 243 
     | 
    
         
            +
                  EnableTracing:         false,
         
     | 
| 
      
 244 
     | 
    
         
            +
                  RequiredPaths:         [],
         
     | 
| 
      
 245 
     | 
    
         
            +
                  SearchPaths:           [],
         
     | 
| 
      
 246 
     | 
    
         
            +
                  StandardLibrary:       'stdlib',
         
     | 
| 
      
 247 
     | 
    
         
            +
                }
         
     | 
| 
      
 248 
     | 
    
         
            +
                def source(module_name, entry_file, options={})
         
     | 
| 
      
 249 
     | 
    
         
            +
                  options = DefaultOptions.merge(options)
         
     | 
| 
       206 
250 
     | 
    
         
             
                  ERB.new(Source).result(binding)
         
     | 
| 
       207 
251 
     | 
    
         
             
                end
         
     | 
| 
       208 
252 
     | 
    
         | 
| 
       209 
     | 
    
         
            -
                def compile(output_file, module_name, entry_file, references)
         
     | 
| 
       210 
     | 
    
         
            -
                  src = source(module_name, entry_file)
         
     | 
| 
      
 253 
     | 
    
         
            +
                def compile(output_file, module_name, entry_file, references, options={})
         
     | 
| 
      
 254 
     | 
    
         
            +
                  src = source(module_name, entry_file, options)
         
     | 
| 
       211 
255 
     | 
    
         
             
                  sysasm = IRPack::CSCompiler.system_assemblies.collect {|asm|
         
     | 
| 
       212 
256 
     | 
    
         
             
                    IRPack::CSCompiler.assembly_location(asm)
         
     | 
| 
       213 
257 
     | 
    
         
             
                  }
         
     | 
    
        data/test/test_application.rb
    CHANGED
    
    | 
         @@ -46,6 +46,17 @@ class TC_ApplicationArguments < Test::Unit::TestCase 
     | 
|
| 
       46 
46 
     | 
    
         
             
                assert_equal('entry.rb', args.entry_file)
         
     | 
| 
       47 
47 
     | 
    
         
             
                assert_equal(1, args.files.size)
         
     | 
| 
       48 
48 
     | 
    
         
             
                assert_equal('entry.rb', args.files[File.expand_path('entry.rb')])
         
     | 
| 
      
 49 
     | 
    
         
            +
                assert(!args.runtime_options[:DebugVariable])
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert(!args.runtime_options[:DebugMode])
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal(1, args.runtime_options[:Verbosity])
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert(!args.runtime_options[:EnableTracing])
         
     | 
| 
      
 53 
     | 
    
         
            +
                assert(!args.runtime_options[:Profile])
         
     | 
| 
      
 54 
     | 
    
         
            +
                assert(!args.runtime_options[:ExceptionDetail])
         
     | 
| 
      
 55 
     | 
    
         
            +
                assert(!args.runtime_options[:NoAdaptiveCompilation])
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert_equal(-1, args.runtime_options[:CompilationThreshold])
         
     | 
| 
      
 57 
     | 
    
         
            +
                assert(!args.runtime_options[:PassExceptions])
         
     | 
| 
      
 58 
     | 
    
         
            +
                assert(!args.runtime_options[:PrivateBinding])
         
     | 
| 
      
 59 
     | 
    
         
            +
                assert(!args.runtime_options[:ShowClrExceptions])
         
     | 
| 
       49 
60 
     | 
    
         
             
              end
         
     | 
| 
       50 
61 
     | 
    
         | 
| 
       51 
62 
     | 
    
         
             
              def test_parse_output_file
         
     | 
| 
         @@ -101,5 +112,89 @@ class TC_ApplicationArguments < Test::Unit::TestCase 
     | 
|
| 
       101 
112 
     | 
    
         
             
                assert_equal('hoge.rb', args.files[File.expand_path('foo/bar/hoge.rb')])
         
     | 
| 
       102 
113 
     | 
    
         
             
                assert_equal('hoge/fuga.rb', args.files[File.expand_path('foo/bar/hoge/fuga.rb')])
         
     | 
| 
       103 
114 
     | 
    
         
             
              end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
              def test_parse_debug_variable
         
     | 
| 
      
 117 
     | 
    
         
            +
                argv = ['-d', 'entry.rb']
         
     | 
| 
      
 118 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 119 
     | 
    
         
            +
                assert(args.runtime_options[:DebugVariable])
         
     | 
| 
      
 120 
     | 
    
         
            +
              end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
              def test_parse_debug_mode
         
     | 
| 
      
 123 
     | 
    
         
            +
                argv = ['-D', 'entry.rb']
         
     | 
| 
      
 124 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 125 
     | 
    
         
            +
                assert(args.runtime_options[:DebugMode])
         
     | 
| 
      
 126 
     | 
    
         
            +
              end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
              def test_parse_verbose
         
     | 
| 
      
 129 
     | 
    
         
            +
                argv = ['-v', 'entry.rb']
         
     | 
| 
      
 130 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 131 
     | 
    
         
            +
                assert_equal(2, args.runtime_options[:Verbosity])
         
     | 
| 
      
 132 
     | 
    
         
            +
              end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
              def test_parse_warn
         
     | 
| 
      
 135 
     | 
    
         
            +
                argv = ['-w', 'entry.rb']
         
     | 
| 
      
 136 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 137 
     | 
    
         
            +
                assert_equal(2, args.runtime_options[:Verbosity])
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
              def test_parse_warning
         
     | 
| 
      
 141 
     | 
    
         
            +
                argv = ['-W', 'entry.rb']
         
     | 
| 
      
 142 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 143 
     | 
    
         
            +
                assert_equal(2, args.runtime_options[:Verbosity])
         
     | 
| 
      
 144 
     | 
    
         
            +
              end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
              def test_parse_warning0
         
     | 
| 
      
 147 
     | 
    
         
            +
                argv = ['-W0', 'entry.rb']
         
     | 
| 
      
 148 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 149 
     | 
    
         
            +
                assert_equal(0, args.runtime_options[:Verbosity])
         
     | 
| 
      
 150 
     | 
    
         
            +
              end
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
              def test_parse_trace
         
     | 
| 
      
 153 
     | 
    
         
            +
                argv = ['--trace', 'entry.rb']
         
     | 
| 
      
 154 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 155 
     | 
    
         
            +
                assert(args.runtime_options[:EnableTracing])
         
     | 
| 
      
 156 
     | 
    
         
            +
              end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
              def test_parse_profile
         
     | 
| 
      
 159 
     | 
    
         
            +
                argv = ['--profile', 'entry.rb']
         
     | 
| 
      
 160 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 161 
     | 
    
         
            +
                assert(args.runtime_options[:Profile])
         
     | 
| 
      
 162 
     | 
    
         
            +
              end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
              def test_parse_exception_detail
         
     | 
| 
      
 165 
     | 
    
         
            +
                argv = ['--exception-detail', 'entry.rb']
         
     | 
| 
      
 166 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 167 
     | 
    
         
            +
                assert(args.runtime_options[:ExceptionDetail])
         
     | 
| 
      
 168 
     | 
    
         
            +
              end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
              def test_parse_no_adaptive_compilation
         
     | 
| 
      
 171 
     | 
    
         
            +
                argv = ['--no-adaptive-compilation', 'entry.rb']
         
     | 
| 
      
 172 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 173 
     | 
    
         
            +
                assert(args.runtime_options[:NoAdaptiveCompilation])
         
     | 
| 
      
 174 
     | 
    
         
            +
              end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
              def test_parse_compilation_threshold
         
     | 
| 
      
 177 
     | 
    
         
            +
                argv = ['--compilation-threshold', '8192', 'entry.rb']
         
     | 
| 
      
 178 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 179 
     | 
    
         
            +
                assert_equal(8192, args.runtime_options[:CompilationThreshold])
         
     | 
| 
      
 180 
     | 
    
         
            +
              end
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
              def test_parse_pass_exceptions
         
     | 
| 
      
 183 
     | 
    
         
            +
                argv = ['--pass-exceptions', 'entry.rb']
         
     | 
| 
      
 184 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 185 
     | 
    
         
            +
                assert(args.runtime_options[:PassExceptions])
         
     | 
| 
      
 186 
     | 
    
         
            +
              end
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
              def test_parse_private_binding
         
     | 
| 
      
 189 
     | 
    
         
            +
                argv = ['--private-binding', 'entry.rb']
         
     | 
| 
      
 190 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 191 
     | 
    
         
            +
                assert(args.runtime_options[:PrivateBinding])
         
     | 
| 
      
 192 
     | 
    
         
            +
              end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
              def test_parse_show_clr_exceptions
         
     | 
| 
      
 195 
     | 
    
         
            +
                argv = ['--show-clr-exceptions', 'entry.rb']
         
     | 
| 
      
 196 
     | 
    
         
            +
                args = IRPack::Application::Arguments.parse!(argv)
         
     | 
| 
      
 197 
     | 
    
         
            +
                assert(args.runtime_options[:ShowClrExceptions])
         
     | 
| 
      
 198 
     | 
    
         
            +
              end
         
     | 
| 
       104 
199 
     | 
    
         
             
            end
         
     | 
| 
       105 
200 
     | 
    
         | 
    
        data/test/test_entrypoint.rb
    CHANGED
    
    | 
         @@ -33,8 +33,9 @@ class TC_IRPack_EntryPoint < Test::Unit::TestCase 
     | 
|
| 
       33 
33 
     | 
    
         
             
                module_name = 'TestModule'
         
     | 
| 
       34 
34 
     | 
    
         
             
                entry_file = 'foo.rb'
         
     | 
| 
       35 
35 
     | 
    
         
             
                references = ironruby_assemblies
         
     | 
| 
      
 36 
     | 
    
         
            +
                runtime_options = {}
         
     | 
| 
       36 
37 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                assert_equal(output_file, IRPack::EntryPoint.compile(output_file, module_name, entry_file, references))
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal(output_file, IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options))
         
     | 
| 
       38 
39 
     | 
    
         
             
                assert(File.exist?(output_file))
         
     | 
| 
       39 
40 
     | 
    
         
             
                asm = nil
         
     | 
| 
       40 
41 
     | 
    
         
             
                assert_nothing_raised do
         
     | 
| 
         @@ -55,8 +56,9 @@ class TC_IRPack_EntryPoint < Test::Unit::TestCase 
     | 
|
| 
       55 
56 
     | 
    
         
             
                module_name = 'TestModule'
         
     | 
| 
       56 
57 
     | 
    
         
             
                entry_file = 'main.rb'
         
     | 
| 
       57 
58 
     | 
    
         
             
                references = ironruby_assemblies
         
     | 
| 
      
 59 
     | 
    
         
            +
                runtime_options = {}
         
     | 
| 
       58 
60 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references)
         
     | 
| 
      
 61 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
       60 
62 
     | 
    
         
             
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
       61 
63 
     | 
    
         
             
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
       62 
64 
     | 
    
         
             
                assert_not_nil(main)
         
     | 
| 
         @@ -74,8 +76,9 @@ class TC_IRPack_EntryPoint < Test::Unit::TestCase 
     | 
|
| 
       74 
76 
     | 
    
         
             
                module_name = 'TestModule'
         
     | 
| 
       75 
77 
     | 
    
         
             
                entry_file = 'main.rb'
         
     | 
| 
       76 
78 
     | 
    
         
             
                references = ironruby_assemblies
         
     | 
| 
      
 79 
     | 
    
         
            +
                runtime_options = {}
         
     | 
| 
       77 
80 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references)
         
     | 
| 
      
 81 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
       79 
82 
     | 
    
         
             
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
       80 
83 
     | 
    
         
             
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
       81 
84 
     | 
    
         
             
                assert_not_nil(main)
         
     | 
| 
         @@ -101,8 +104,9 @@ class TC_IRPack_EntryPoint < Test::Unit::TestCase 
     | 
|
| 
       101 
104 
     | 
    
         
             
                module_name = 'TestModule'
         
     | 
| 
       102 
105 
     | 
    
         
             
                entry_file = 'main.rb'
         
     | 
| 
       103 
106 
     | 
    
         
             
                references = ironruby_assemblies
         
     | 
| 
      
 107 
     | 
    
         
            +
                runtime_options = {}
         
     | 
| 
       104 
108 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references)
         
     | 
| 
      
 109 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
       106 
110 
     | 
    
         
             
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
       107 
111 
     | 
    
         
             
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
       108 
112 
     | 
    
         
             
                assert_not_nil(main)
         
     | 
| 
         @@ -115,5 +119,169 @@ class TC_IRPack_EntryPoint < Test::Unit::TestCase 
     | 
|
| 
       115 
119 
     | 
    
         
             
                  end
         
     | 
| 
       116 
120 
     | 
    
         
             
                end
         
     | 
| 
       117 
121 
     | 
    
         
             
              end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
              def test_search_paths
         
     | 
| 
      
 124 
     | 
    
         
            +
                output_file = tempfilename('.dll')
         
     | 
| 
      
 125 
     | 
    
         
            +
                module_name = 'TestModule'
         
     | 
| 
      
 126 
     | 
    
         
            +
                entry_file = 'main.rb'
         
     | 
| 
      
 127 
     | 
    
         
            +
                references = ironruby_assemblies
         
     | 
| 
      
 128 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 129 
     | 
    
         
            +
                  SearchPaths: [
         
     | 
| 
      
 130 
     | 
    
         
            +
                    'foo',
         
     | 
| 
      
 131 
     | 
    
         
            +
                    '../bar',
         
     | 
| 
      
 132 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 133 
     | 
    
         
            +
                }
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
      
 136 
     | 
    
         
            +
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
      
 137 
     | 
    
         
            +
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
      
 138 
     | 
    
         
            +
                assert_not_nil(main)
         
     | 
| 
      
 139 
     | 
    
         
            +
                main_rb = <<-RB
         
     | 
| 
      
 140 
     | 
    
         
            +
                if $:.any? {|path| /foo$/=~path } and
         
     | 
| 
      
 141 
     | 
    
         
            +
                   $:.any? {|path| /bar$/=~path } then
         
     | 
| 
      
 142 
     | 
    
         
            +
                  exit 0
         
     | 
| 
      
 143 
     | 
    
         
            +
                else
         
     | 
| 
      
 144 
     | 
    
         
            +
                  exit 1
         
     | 
| 
      
 145 
     | 
    
         
            +
                end
         
     | 
| 
      
 146 
     | 
    
         
            +
                RB
         
     | 
| 
      
 147 
     | 
    
         
            +
                create_package('main.rb' => main_rb) do |package|
         
     | 
| 
      
 148 
     | 
    
         
            +
                  res = main.invoke(nil, System::Array[System::Object].new([package, System::Array[System::String].new(0)]))
         
     | 
| 
      
 149 
     | 
    
         
            +
                  assert_equal(0, res)
         
     | 
| 
      
 150 
     | 
    
         
            +
                end
         
     | 
| 
      
 151 
     | 
    
         
            +
              end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
              def test_required_paths
         
     | 
| 
      
 154 
     | 
    
         
            +
                output_file = tempfilename('.dll')
         
     | 
| 
      
 155 
     | 
    
         
            +
                module_name = 'TestModule'
         
     | 
| 
      
 156 
     | 
    
         
            +
                entry_file = 'main.rb'
         
     | 
| 
      
 157 
     | 
    
         
            +
                references = ironruby_assemblies
         
     | 
| 
      
 158 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 159 
     | 
    
         
            +
                  RequiredPaths: [
         
     | 
| 
      
 160 
     | 
    
         
            +
                    'stringio',
         
     | 
| 
      
 161 
     | 
    
         
            +
                    'date',
         
     | 
| 
      
 162 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 163 
     | 
    
         
            +
                  StandardLibrary: '../Lib',
         
     | 
| 
      
 164 
     | 
    
         
            +
                }
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
      
 167 
     | 
    
         
            +
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
      
 168 
     | 
    
         
            +
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
      
 169 
     | 
    
         
            +
                assert_not_nil(main)
         
     | 
| 
      
 170 
     | 
    
         
            +
                main_rb = <<-RB
         
     | 
| 
      
 171 
     | 
    
         
            +
                required_constants = [:StringIO, :DateTime]
         
     | 
| 
      
 172 
     | 
    
         
            +
                if required_constants.all? {|const| Object.constants.include?(const) } then
         
     | 
| 
      
 173 
     | 
    
         
            +
                  exit 0
         
     | 
| 
      
 174 
     | 
    
         
            +
                else
         
     | 
| 
      
 175 
     | 
    
         
            +
                  exit 1
         
     | 
| 
      
 176 
     | 
    
         
            +
                end
         
     | 
| 
      
 177 
     | 
    
         
            +
                RB
         
     | 
| 
      
 178 
     | 
    
         
            +
                create_package('main.rb' => main_rb) do |package|
         
     | 
| 
      
 179 
     | 
    
         
            +
                  res = main.invoke(nil, System::Array[System::Object].new([package, System::Array[System::String].new(0)]))
         
     | 
| 
      
 180 
     | 
    
         
            +
                  assert_equal(0, res)
         
     | 
| 
      
 181 
     | 
    
         
            +
                end
         
     | 
| 
      
 182 
     | 
    
         
            +
              end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
              def test_debug_variable
         
     | 
| 
      
 185 
     | 
    
         
            +
                output_file = tempfilename('.dll')
         
     | 
| 
      
 186 
     | 
    
         
            +
                module_name = 'TestModule'
         
     | 
| 
      
 187 
     | 
    
         
            +
                entry_file = 'main.rb'
         
     | 
| 
      
 188 
     | 
    
         
            +
                references = ironruby_assemblies
         
     | 
| 
      
 189 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 190 
     | 
    
         
            +
                  DebugVariable: true,
         
     | 
| 
      
 191 
     | 
    
         
            +
                }
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
      
 194 
     | 
    
         
            +
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
      
 195 
     | 
    
         
            +
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
      
 196 
     | 
    
         
            +
                assert_not_nil(main)
         
     | 
| 
      
 197 
     | 
    
         
            +
                main_rb = <<-RB
         
     | 
| 
      
 198 
     | 
    
         
            +
                exit($DEBUG ? 0 : 1)
         
     | 
| 
      
 199 
     | 
    
         
            +
                RB
         
     | 
| 
      
 200 
     | 
    
         
            +
                create_package('main.rb' => main_rb) do |package|
         
     | 
| 
      
 201 
     | 
    
         
            +
                  res = main.invoke(nil, System::Array[System::Object].new([package, System::Array[System::String].new(0)]))
         
     | 
| 
      
 202 
     | 
    
         
            +
                  assert_equal(0, res)
         
     | 
| 
      
 203 
     | 
    
         
            +
                end
         
     | 
| 
      
 204 
     | 
    
         
            +
              end
         
     | 
| 
      
 205 
     | 
    
         
            +
             
     | 
| 
      
 206 
     | 
    
         
            +
              def test_profile
         
     | 
| 
      
 207 
     | 
    
         
            +
                output_file = tempfilename('.dll')
         
     | 
| 
      
 208 
     | 
    
         
            +
                module_name = 'TestModule'
         
     | 
| 
      
 209 
     | 
    
         
            +
                entry_file = 'main.rb'
         
     | 
| 
      
 210 
     | 
    
         
            +
                references = ironruby_assemblies
         
     | 
| 
      
 211 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 212 
     | 
    
         
            +
                  Profile: true,
         
     | 
| 
      
 213 
     | 
    
         
            +
                }
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
      
 216 
     | 
    
         
            +
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
      
 217 
     | 
    
         
            +
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
      
 218 
     | 
    
         
            +
                assert_not_nil(main)
         
     | 
| 
      
 219 
     | 
    
         
            +
                main_rb = <<-RB
         
     | 
| 
      
 220 
     | 
    
         
            +
                begin
         
     | 
| 
      
 221 
     | 
    
         
            +
                  IronRuby::Clr.profile { 1 + 1 }
         
     | 
| 
      
 222 
     | 
    
         
            +
                  exit 0
         
     | 
| 
      
 223 
     | 
    
         
            +
                rescue SystemCallError
         
     | 
| 
      
 224 
     | 
    
         
            +
                  exit 1
         
     | 
| 
      
 225 
     | 
    
         
            +
                end
         
     | 
| 
      
 226 
     | 
    
         
            +
                RB
         
     | 
| 
      
 227 
     | 
    
         
            +
                create_package('main.rb' => main_rb) do |package|
         
     | 
| 
      
 228 
     | 
    
         
            +
                  res = main.invoke(nil, System::Array[System::Object].new([package, System::Array[System::String].new(0)]))
         
     | 
| 
      
 229 
     | 
    
         
            +
                  assert_equal(0, res)
         
     | 
| 
      
 230 
     | 
    
         
            +
                end
         
     | 
| 
      
 231 
     | 
    
         
            +
              end
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
              def test_enable_tracing
         
     | 
| 
      
 234 
     | 
    
         
            +
                output_file = tempfilename('.dll')
         
     | 
| 
      
 235 
     | 
    
         
            +
                module_name = 'TestModule'
         
     | 
| 
      
 236 
     | 
    
         
            +
                entry_file = 'main.rb'
         
     | 
| 
      
 237 
     | 
    
         
            +
                references = ironruby_assemblies
         
     | 
| 
      
 238 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 239 
     | 
    
         
            +
                  EnableTracing: true,
         
     | 
| 
      
 240 
     | 
    
         
            +
                }
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
      
 243 
     | 
    
         
            +
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
      
 244 
     | 
    
         
            +
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
      
 245 
     | 
    
         
            +
                assert_not_nil(main)
         
     | 
| 
      
 246 
     | 
    
         
            +
                main_rb = <<-RB
         
     | 
| 
      
 247 
     | 
    
         
            +
                begin
         
     | 
| 
      
 248 
     | 
    
         
            +
                  set_trace_func(proc { nil })
         
     | 
| 
      
 249 
     | 
    
         
            +
                  exit 0
         
     | 
| 
      
 250 
     | 
    
         
            +
                rescue System::NotSupportedException
         
     | 
| 
      
 251 
     | 
    
         
            +
                  exit 1
         
     | 
| 
      
 252 
     | 
    
         
            +
                end
         
     | 
| 
      
 253 
     | 
    
         
            +
                RB
         
     | 
| 
      
 254 
     | 
    
         
            +
                create_package('main.rb' => main_rb) do |package|
         
     | 
| 
      
 255 
     | 
    
         
            +
                  res = main.invoke(nil, System::Array[System::Object].new([package, System::Array[System::String].new(0)]))
         
     | 
| 
      
 256 
     | 
    
         
            +
                  assert_equal(0, res)
         
     | 
| 
      
 257 
     | 
    
         
            +
                end
         
     | 
| 
      
 258 
     | 
    
         
            +
              end
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
              def test_pass_exceptions
         
     | 
| 
      
 261 
     | 
    
         
            +
                output_file = tempfilename('.dll')
         
     | 
| 
      
 262 
     | 
    
         
            +
                module_name = 'TestModule'
         
     | 
| 
      
 263 
     | 
    
         
            +
                entry_file = 'main.rb'
         
     | 
| 
      
 264 
     | 
    
         
            +
                references = ironruby_assemblies
         
     | 
| 
      
 265 
     | 
    
         
            +
                runtime_options = {
         
     | 
| 
      
 266 
     | 
    
         
            +
                  PassExceptions: true,
         
     | 
| 
      
 267 
     | 
    
         
            +
                }
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
                IRPack::EntryPoint.compile(output_file, module_name, entry_file, references, runtime_options)
         
     | 
| 
      
 270 
     | 
    
         
            +
                asm = System::Reflection::Assembly.load_from(output_file)
         
     | 
| 
      
 271 
     | 
    
         
            +
                main = asm.get_type("#{module_name}.EntryPoint").get_method('Main')
         
     | 
| 
      
 272 
     | 
    
         
            +
                assert_not_nil(main)
         
     | 
| 
      
 273 
     | 
    
         
            +
                main_rb = <<-RB
         
     | 
| 
      
 274 
     | 
    
         
            +
                raise System::ApplicationException, 'Exception Test'
         
     | 
| 
      
 275 
     | 
    
         
            +
                RB
         
     | 
| 
      
 276 
     | 
    
         
            +
                create_package('main.rb' => main_rb) do |package|
         
     | 
| 
      
 277 
     | 
    
         
            +
                  assert_raise(System::ApplicationException) do
         
     | 
| 
      
 278 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 279 
     | 
    
         
            +
                      main.invoke(nil, System::Array[System::Object].new([package, System::Array[System::String].new(0)]))
         
     | 
| 
      
 280 
     | 
    
         
            +
                    rescue System::Reflection::TargetInvocationException => e
         
     | 
| 
      
 281 
     | 
    
         
            +
                      raise e.InnerException
         
     | 
| 
      
 282 
     | 
    
         
            +
                    end
         
     | 
| 
      
 283 
     | 
    
         
            +
                  end
         
     | 
| 
      
 284 
     | 
    
         
            +
                end
         
     | 
| 
      
 285 
     | 
    
         
            +
              end
         
     | 
| 
       118 
286 
     | 
    
         
             
            end
         
     | 
| 
       119 
287 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            name: irpack
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
4 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       5 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 5 
     | 
    
         
            +
              version: 0.2.5
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors: 
         
     | 
| 
       8 
8 
     | 
    
         
             
            - kumaryu
         
     | 
| 
         @@ -10,7 +10,7 @@ autorequire: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            date: 2011- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2011-11-09 00:00:00 +09:00
         
     | 
| 
       14 
14 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
         @@ -23,8 +23,8 @@ executables: 
     | 
|
| 
       23 
23 
     | 
    
         
             
            - irpack
         
     | 
| 
       24 
24 
     | 
    
         
             
            extensions: []
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
            extra_rdoc_files:  
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 26 
     | 
    
         
            +
            extra_rdoc_files: 
         
     | 
| 
      
 27 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
       28 
28 
     | 
    
         
             
            files: 
         
     | 
| 
       29 
29 
     | 
    
         
             
            - bin/irpack
         
     | 
| 
       30 
30 
     | 
    
         
             
            - lib/irpack/application.rb
         
     | 
| 
         @@ -42,13 +42,15 @@ files: 
     | 
|
| 
       42 
42 
     | 
    
         
             
            - test/test_missing.rb
         
     | 
| 
       43 
43 
     | 
    
         
             
            - test/test_packager.rb
         
     | 
| 
       44 
44 
     | 
    
         
             
            - test/utils.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
       45 
46 
     | 
    
         
             
            has_rdoc: true
         
     | 
| 
       46 
47 
     | 
    
         
             
            homepage: http://github.com/kumaryu/irpack
         
     | 
| 
       47 
48 
     | 
    
         
             
            licenses: []
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
       49 
50 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       50 
     | 
    
         
            -
            rdoc_options:  
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
            rdoc_options: 
         
     | 
| 
      
 52 
     | 
    
         
            +
            - --main
         
     | 
| 
      
 53 
     | 
    
         
            +
            - README.rdoc
         
     | 
| 
       52 
54 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       53 
55 
     | 
    
         
             
            - lib
         
     | 
| 
       54 
56 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
         @@ -70,5 +72,12 @@ rubygems_version: 1.6.2 
     | 
|
| 
       70 
72 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       71 
73 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       72 
74 
     | 
    
         
             
            summary: Generate a standalone executable file from IronRuby scripts.
         
     | 
| 
       73 
     | 
    
         
            -
            test_files:  
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
      
 75 
     | 
    
         
            +
            test_files: 
         
     | 
| 
      
 76 
     | 
    
         
            +
            - test/test_application.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - test/test_bootloader.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - test/test_cscompiler.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - test/test_entrypoint.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - test/test_irpack.rb
         
     | 
| 
      
 81 
     | 
    
         
            +
            - test/test_missing.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - test/test_packager.rb
         
     | 
| 
      
 83 
     | 
    
         
            +
            - test/utils.rb
         
     |