source: EcnlProtoTool/trunk/asp3_dcre/utils/makerelease.rb@ 439

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

ASP3, TINET, mbed を更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 6.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) 2006-2019 by Embedded and Real-Time Systems Laboratory
8# Graduate School of Information Science, Nagoya Univ., JAPAN
9#
10# 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
11# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15# スコード中に含まれていること.
16# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19# の無保証規定を掲載すること.
20# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22# と.
23# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24# 作権表示,この利用条件および下記の無保証規定を掲載すること.
25# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26# 報告すること.
27# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31# 免責すること.
32#
33# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37# の責任を負わない.
38#
39# $Id$
40#
41
42require "optparse"
43require "fileutils"
44require "shell"
45
46#
47# オプションの定義
48#
49# -e <dirname> アーカイブファイルを展開して削除する.dirname
50# は展開するディレクトリ名(省略可能).
51
52#
53# オプションの処理
54#
55OptionParser.new("Usage: makerelease.rb [options] MANIFEST-FILE") do |opt|
56 opt.on("-e [dirname]", "expand archive file and delete") do |val|
57 $expandDirname = val
58 end
59 opt.parse!(ARGV)
60end
61
62#
63# ".."を含むパスの整形
64#
65# 例)"yyy/../zzz" → "zzz"
66# 例)"xxx/yyy/../zzz" → "xxx/zzz"
67#
68def canonicalPath(path)
69 while path.sub!(/([^\/]+\/\.\.\/)/, "") do end
70 return(path)
71end
72
73#
74# ファイルの読み込み
75#
76def readFile(inFileName)
77 baseDirectory = File.dirname(inFileName)
78 if (baseDirectory == ".")
79 baseDirectory = ""
80 else
81 baseDirectory += "/"
82 end
83
84 begin
85 inFile = File.open(inFileName)
86 rescue Errno::ENOENT, Errno::EACCES => ex
87 abort(ex.message)
88 end
89
90 inFile.each do |line|
91 line.chomp!
92 line.sub!(/\s*\#.*$/, "")
93 next if /^\s*$/ =~ line
94
95 if /^E_PACKAGE[ \t]+(.*)$/ =~ line
96 if $package != ""
97 abort("Duplicated E_PACKAGE directive.")
98 else
99 $package = $1
100 $e_package = 1
101 end
102 elsif /^PACKAGE[ \t]+(.*)$/ =~ line
103 if $package != ""
104 if !$e_package && $package != $1
105 abort("Inconsistent PACKAGE directive.")
106 end
107 else
108 $package = $1
109 end
110 elsif /^VERSION[ \t]+(.*)$/ =~ line
111 if $version != ""
112 if !$e_package && $version != $1
113 abort("Inconsistent VERSION directive.")
114 end
115 else
116 $version = $1
117 if /%date/ =~ $version
118 currentTime = Time.now.localtime
119 vdate = sprintf("%04d%02d%02d", currentTime.year,
120 currentTime.month, currentTime.day)
121 $version.sub!(/%date/, vdate)
122 end
123 end
124 elsif /^INCLUDE[ \t]+(.*)$/ =~ line
125 readFile(canonicalPath(baseDirectory + $1))
126 else
127 fileName = $prefix + "/" + canonicalPath(baseDirectory + line)
128 if !File.file?("../" + fileName) && !File.directory?("../" + fileName)
129 abort("#{fileName} is not a file or a directory.")
130 elsif $fileList.index(fileName)
131 abort("#{fileName} is duplicated.")
132 else
133 $fileList.push(fileName)
134 end
135 end
136 end
137end
138
139#
140# 初期化
141#
142$package = ""
143$e_package = 0
144$version = ""
145$fileList = []
146
147#
148# プリフィックス(./カレントディレクトリ名)の取り出し
149#
150cwd = Shell.new.cwd
151$prefix = "./" + File.basename(cwd)
152
153#
154# パラメータの取り出し
155#
156if ARGV.length >= 1
157 arg = ARGV.shift.dup
158 arg.sub!(/\/$/, "/MANIFEST")
159 arg.sub!(/^\.\//, "")
160else
161 arg = "MANIFEST"
162end
163
164#
165# ファイルの読み込み
166#
167readFile(arg)
168if $package == ""
169 abort("PACKAGE/E_PACKAGE directive not found.")
170end
171if $version == ""
172 abort("VERSION directive not found.")
173end
174
175#
176# RELEASEディレクトリの作成
177#
178if !File.directory?("RELEASE")
179 Dir.mkdir("RELEASE")
180end
181
182#
183# アーカイブ(.tar.gz)の作成
184#
185archiveName = $package + "-" + $version + ".tar.gz"
186fileListStr = $fileList.join(" ")
187command = "tar cvfz RELEASE/#{archiveName} -C .. #{fileListStr}";
188system(command)
189puts("== RELEASE/#{archiveName} is generated. ==")
190
191#
192# アーカイブファイルの展開と削除
193#
194if defined?($expandDirname)
195 command = "tar xf RELEASE/#{archiveName}; rm RELEASE/#{archiveName}";
196 system(command)
197
198 dirname = $expandDirname || $prefix
199 if File.exist?(dirname)
200 File.rename(dirname, dirname + ".bak")
201 puts("== '#{dirname}' is renamed to '#{dirname}.bak'. ==")
202 end
203 if !$expandDirname.nil?
204 File.rename($prefix, $expandDirname)
205 end
206 puts("== RELEASE/#{archiveName} is expanded to '#{dirname}'. ==")
207 puts("== RELEASE/#{archiveName} is deleted. ==")
208end
Note: See TracBrowser for help on using the repository browser.