source: EcnlProtoTool/trunk/asp3_dcre/utils/genrename.rb

Last change on this file was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 5.3 KB
Line 
1#!/usr/bin/env ruby
2# -*- coding: utf-8 -*-
3#
4# TOPPERS Software
5# Toyohashi Open Platform for Embedded Real-Time Systems
6#
7# Copyright (C) 2003 by Embedded and Real-Time Systems Laboratory
8# Toyohashi Univ. of Technology, JAPAN
9# Copyright (C) 2005-2017 by Embedded and Real-Time Systems Laboratory
10# Graduate School of Information Science, Nagoya Univ., JAPAN
11#
12# 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17# スコード中に含まれていること.
18# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21# の無保証規定を掲載すること.
22# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24# と.
25# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26# 作権表示,この利用条件および下記の無保証規定を掲載すること.
27# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28# 報告すること.
29# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33# 免責すること.
34#
35# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39# の責任を負わない.
40#
41# $Id$
42#
43
44Encoding.default_external = 'utf-8'
45
46#
47# 先頭につける文字列
48#
49def prefixString(sym)
50 if sym =~ /[a-z]/
51 return("_kernel_")
52 else
53 return("_KERNEL_")
54 end
55end
56
57#
58# リネーム定義を生成する
59#
60def generateDefine(outFile, sym, prefix)
61 outFile.print("#define #{prefix}#{sym}");
62 outFile.print("\t" * [(6 - (sym.length + prefix.length) / 4), 0].max);
63 outFile.print("\t#{prefix}#{prefixString(sym)}#{sym}\n");
64end
65
66#
67# リネーム解除を生成する
68#
69def generateUndef(outFile, sym, prefix)
70 outFile.print("#undef #{prefix}#{sym}\n");
71end
72
73#
74# コメントを生成する
75#
76def generateComment(outFile, comment)
77 outFile.print("/*\n")
78 outFile.print(" * #{comment}\n")
79 outFile.print(" */\n")
80end
81
82#
83# エラーチェック
84#
85if ARGV.length < 1
86 abort("Usage: ruby genrename.rb <prefix>")
87end
88
89#
90# 初期化
91#
92syms = []
93name = ARGV.shift
94NAME = name.upcase
95
96inFileName = name + "_rename.def"
97headerDefineSymbol = "TOPPERS_" + NAME + "_RENAME_H"
98
99#
100# シンボルリストを読み込む
101#
102begin
103 inFile = File.open(inFileName)
104rescue Errno::ENOENT, Errno::EACCES => ex
105 abort(ex.message)
106end
107
108inFile.each do |line|
109 syms.push(line.chomp)
110end
111
112#
113# ???_rename.h を生成する
114#
115begin
116 outFile = File.open(name + "_rename.h", "w")
117rescue Errno::ENOENT, Errno::EACCES => ex
118 abort(ex.message)
119end
120
121outFile.print <<EOS
122/* This file is generated from #{inFileName} by genrename. */
123
124#ifndef #{headerDefineSymbol}
125#define #{headerDefineSymbol}
126
127EOS
128
129includes = ""
130syms.each do |sym|
131 if /^#\s*(.*)$/ =~ sym
132 generateComment(outFile, $1)
133 elsif /^INCLUDE\s+(.*)$/ =~ sym
134 fileName = $1.sub(/([>"])$/, "_rename.h\\1")
135 includes += "#include #{fileName}\n"
136 elsif /^(_+)(.*)$/ =~ sym
137 generateDefine(outFile, $2, $1)
138 elsif sym != ""
139 generateDefine(outFile, sym, "")
140 else
141 outFile.print("\n")
142 end
143end
144
145outFile.print <<EOS
146
147#{includes}
148#endif /* #{headerDefineSymbol} */
149EOS
150
151#
152# ???_unrename.h を生成する
153#
154begin
155 outFile = File.open(name + "_unrename.h", "w")
156rescue Errno::ENOENT, Errno::EACCES => ex
157 abort(ex.message)
158end
159
160outFile.print <<EOS
161/* This file is generated from #{inFileName} by genrename. */
162
163/* This file is included only when #{name}_rename.h has been included. */
164#ifdef #{headerDefineSymbol}
165#undef #{headerDefineSymbol}
166
167EOS
168
169includes = ""
170syms.each do |sym|
171 if /^#\s*(.*)$/ =~ sym
172 generateComment(outFile, $1)
173 elsif /^INCLUDE\s+(.*)$/ =~ sym
174 fileName = $1.sub(/([>"])$/, "_unrename.h\\1")
175 includes += "#include #{fileName}\n"
176 elsif sym != ""
177 generateUndef(outFile, sym, "")
178 else
179 outFile.print("\n")
180 end
181end
182
183outFile.print <<EOS
184
185#{includes}
186#endif /* #{headerDefineSymbol} */
187EOS
Note: See TracBrowser for help on using the repository browser.