[388] | 1 | # coding: utf-8
|
---|
| 2 | #
|
---|
| 3 | # TECS Generator
|
---|
| 4 | # Generator for TOPPERS Embedded Component System
|
---|
| 5 | #
|
---|
| 6 | # Copyright (C) 2008-2015 by TOPPERS Project
|
---|
| 7 | #--
|
---|
| 8 | # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
|
---|
| 9 | # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
---|
| 10 | # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
---|
| 11 | # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
---|
| 12 | # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
---|
| 13 | # スコード中に含まれていること.
|
---|
| 14 | # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
---|
| 15 | # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
---|
| 16 | # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
---|
| 17 | # の無保証規定を掲載すること.
|
---|
| 18 | # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
---|
| 19 | # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
---|
| 20 | # と.
|
---|
| 21 | # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
---|
| 22 | # 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
---|
| 23 | # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
---|
| 24 | # 報告すること.
|
---|
| 25 | # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
---|
| 26 | # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
---|
| 27 | # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
---|
| 28 | # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
---|
| 29 | # 免責すること.
|
---|
| 30 | #
|
---|
| 31 | # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
---|
| 32 | # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
---|
| 33 | # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
---|
| 34 | # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
---|
| 35 | # の責任を負わない.
|
---|
| 36 | #
|
---|
| 37 | # $Id$
|
---|
| 38 | #++
|
---|
| 39 |
|
---|
| 40 | # exerb 版で最初に読みこまれるファイル
|
---|
| 41 | # このファイルから generate.rb が読みこまれる
|
---|
| 42 |
|
---|
| 43 | $IN_EXERB=true
|
---|
| 44 |
|
---|
| 45 | # この変数は exerb 版のみ
|
---|
| 46 | $path = ENV[ 'PATH' ]
|
---|
| 47 |
|
---|
| 48 | #=== cygwin のパスを Windows パスに変換
|
---|
| 49 | # cygpath コマンドを探して、見つかれば変換する
|
---|
| 50 | # 変換できなかった、または変換後のパスが見つからない場合、default を返す
|
---|
| 51 | def cygpath( path, default = nil )
|
---|
| 52 | if ! $IN_EXERB then
|
---|
| 53 | return default
|
---|
| 54 | end
|
---|
| 55 | if File.exist? path then
|
---|
| 56 | return default
|
---|
| 57 | end
|
---|
| 58 |
|
---|
| 59 | found = false
|
---|
| 60 | $path.split( ";" ).each{ |path2|
|
---|
| 61 | cygpath_path = "#{path2}\\cygpath.exe"
|
---|
| 62 | if File.exist?( cygpath_path ) then
|
---|
| 63 | path3 = nil
|
---|
| 64 | dbgPrint "in_exerb: cygpath: found\n"
|
---|
| 65 | IO.popen( "cygpath -m #{path}", "r"){ |io|
|
---|
| 66 | path3 = io.gets.chomp!
|
---|
| 67 | }
|
---|
| 68 | dbgPrint "in_exerb: cygpath: '#{path}' => '#{path3}'\n"
|
---|
| 69 | # File.stat( path3.to_s )
|
---|
| 70 |
|
---|
| 71 | if File.exist?( path3 )
|
---|
| 72 | dbgPrint "in_exerb: cygpath: '#{path3}' found\n"
|
---|
| 73 | return path3
|
---|
| 74 | else
|
---|
| 75 | break
|
---|
| 76 | end
|
---|
| 77 | end
|
---|
| 78 | }
|
---|
| 79 | dbgPrint "cygpath '#{path}' not found\n"
|
---|
| 80 | return default
|
---|
| 81 | end
|
---|
| 82 |
|
---|
| 83 | # gcc のパスを設定する
|
---|
| 84 | # cygwin のあるバージョンでは gcc は gcc-3.exe または gcc-4.exe へのシンボリックリンクとなっている
|
---|
| 85 | # exerb 版ではシンボリックリンクを辿れないため gcc の exe を探す
|
---|
| 86 | # cygwin のリンクは、システム属性が付けられ、コマンドプロンプト上では dir /A:S を指定しないと表示されない
|
---|
| 87 | # (cygwin のバージョンで実装が異なるかもしれない)
|
---|
| 88 | # ファイルの先頭2バイトを読出し PE フォーマットのマジックに一致するか調べる
|
---|
| 89 | $gcc = "gcc"
|
---|
| 90 | $path.split( ";" ).each{ |path|
|
---|
| 91 | found = false
|
---|
| 92 | [ "gcc.exe", "gcc-3.exe", "gcc-4.exe" ].each{ |gcc|
|
---|
| 93 | gcc_path = "#{path}\\#{gcc}"
|
---|
| 94 | if File.exist?( gcc_path ) then
|
---|
| 95 | begin
|
---|
| 96 | magic = File.read( gcc_path, 2 )
|
---|
| 97 | if magic == "MZ" # マジックをチェック
|
---|
| 98 | $gcc = gcc
|
---|
| 99 | found = true
|
---|
| 100 | break
|
---|
| 101 | end
|
---|
| 102 | rescue
|
---|
| 103 | # magic の読出しに失敗。無視
|
---|
| 104 | end
|
---|
| 105 | end
|
---|
| 106 | }
|
---|
| 107 | break if found
|
---|
| 108 | }
|
---|
| 109 |
|
---|
| 110 | # cpp コマンドを設定する
|
---|
| 111 | $cpp = "#{$gcc} -E -D TECSGEN"
|
---|
| 112 |
|
---|
| 113 | # exerb 版 TECS ジェネレータの実行を開始
|
---|
| 114 | require "tecsgen.rb"
|
---|