source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/utils/genrename.rb@ 337

Last change on this file since 337 was 337, checked in by coas-nagasima, 6 years ago

ASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 5.2 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-2016 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
44#
45# 先頭につける文字列
46#
47def prefixString(sym)
48 if sym =~ /[a-z]/
49 return("_kernel_")
50 else
51 return("_KERNEL_")
52 end
53end
54
55#
56# リネーム定義を生成する
57#
58def generateDefine(outFile, sym, prefix)
59 outFile.print("#define #{prefix}#{sym}");
60 outFile.print("\t" * [(6 - (sym.length + prefix.length) / 4), 0].max);
61 outFile.print("\t#{prefix}#{prefixString(sym)}#{sym}\n");
62end
63
64#
65# リネーム解除を生成する
66#
67def generateUndef(outFile, sym, prefix)
68 outFile.print("#undef #{prefix}#{sym}\n");
69end
70
71#
72# コメントを生成する
73#
74def generateComment(outFile, comment)
75 outFile.print("/*\n")
76 outFile.print(" * #{comment}\n")
77 outFile.print(" */\n")
78end
79
80#
81# エラーチェック
82#
83if ARGV.length < 1
84 abort("Usage: ruby genrename.rb <prefix>")
85end
86
87#
88# 初期化
89#
90syms = []
91name = ARGV.shift
92NAME = name.upcase
93
94inFileName = name + "_rename.def"
95headerDefineSymbol = "TOPPERS_" + NAME + "_RENAME_H"
96
97#
98# シンボルリストを読み込む
99#
100begin
101 inFile = File.open(inFileName)
102rescue Errno::ENOENT, Errno::EACCES => ex
103 abort(ex.message)
104end
105
106inFile.each do |line|
107 syms.push(line.chomp)
108end
109
110#
111# ???_rename.h を生成する
112#
113begin
114 outFile = File.open(name + "_rename.h", "w")
115rescue Errno::ENOENT, Errno::EACCES => ex
116 abort(ex.message)
117end
118
119outFile.print <<EOS
120/* This file is generated from #{inFileName} by genrename. */
121
122#ifndef #{headerDefineSymbol}
123#define #{headerDefineSymbol}
124
125EOS
126
127includes = ""
128syms.each do |sym|
129 if /^#\s*(.*)$/ =~ sym
130 generateComment(outFile, $1)
131 elsif /^INCLUDE\s+(.*)$/ =~ sym
132 fileName = $1.sub(/([>"])$/, "_rename.h\\1")
133 includes += "#include #{fileName}\n"
134 elsif sym != ""
135 generateDefine(outFile, sym, "")
136 else
137 outFile.print("\n")
138 end
139end
140
141outFile.print <<EOS
142
143#{includes}
144#endif /* #{headerDefineSymbol} */
145EOS
146
147#
148# ???_unrename.h を生成する
149#
150begin
151 outFile = File.open(name + "_unrename.h", "w")
152rescue Errno::ENOENT, Errno::EACCES => ex
153 abort(ex.message)
154end
155
156outFile.print <<EOS
157/* This file is generated from #{inFileName} by genrename. */
158
159/* This file is included only when #{name}_rename.h has been included. */
160#ifdef #{headerDefineSymbol}
161#undef #{headerDefineSymbol}
162
163EOS
164
165includes = ""
166syms.each do |sym|
167 if /^#\s*(.*)$/ =~ sym
168 generateComment(outFile, $1)
169 elsif /^INCLUDE\s+(.*)$/ =~ sym
170 fileName = $1.sub(/([>"])$/, "_unrename.h\\1")
171 includes += "#include #{fileName}\n"
172 elsif sym != ""
173 generateUndef(outFile, sym, "")
174 else
175 outFile.print("\n")
176 end
177end
178
179outFile.print <<EOS
180
181#{includes}
182#endif /* #{headerDefineSymbol} */
183EOS
Note: See TracBrowser for help on using the repository browser.