1
#!/usr/bin/env ruby
2
#
3
# Ruby script for generating Amarok tarball releases from KDE SVN
4
#
5
# (C) 2006-2007 Harald Sitter <sitter.harald@gmail.com>
6
# (C) 2005 Mark Kretschmann <kretschmann@kde.org>
7
# Some parts of this code taken from cvs2dist
8
# License: GNU General Public License V2
9
10
require 'fileutils'
11
12
tag             = nil
13
useStableBranch = false
14
15
# Ask whether using branch or trunk
16
location = `kdialog --combobox "Select checkout's place:" "Trunk" "Stable" "Tag"`.chomp()
17
if location == "Tag"
18
  tag = `kdialog --inputbox "Enter tag name: "`.chomp()
19
elsif location == "Stable"
20
  useStableBranch = true
21
end
22
23
# Ask user for targeted application version
24
if tag and not tag.empty?()
25
  version = tag
26
else
27
  version  = `kdialog --inputbox "Enter Amarok version: "`.chomp()
28
end
29
30
user     = `kdialog --inputbox "Your SVN user:"`.chomp()
31
protocol = `kdialog --radiolist "Do you use https or svn+ssh?" https https 0 "svn+ssh" "svn+ssh" 1`.chomp()
32
33
name         = "amarok"
34
folder       = "amarok-#{version}"
35
l10n_branch  = true
36
37
38
# Prevent using unsermake
39
oldmake = ENV["UNSERMAKE"]
40
ENV["UNSERMAKE"] = "no"
41
42
43
# Remove old folder, if exists
44
FileUtils.rm_rf( folder )
45
FileUtils.rm_rf( "#{folder}.tar.bz2" )
46
47
Dir.mkdir( folder )
48
Dir.chdir( folder )
49
50
branch="trunk"
51
52
if useStableBranch
53
  branch = "branches/stable"
54
  `svn co -N #{protocol}://#{user}@svn.kde.org/home/kde/#{branch}/extragear/multimedia/`
55
  Dir.chdir( "multimedia" )
56
elsif not tag.empty?()
57
  l10n = `kdialog --combobox "Get translation from:" "Trunk" "Stable" "Not at all"`.chomp()
58
  if l10n == "Trunk"
59
    l10n_branch = "trunk"
60
  elsif l10n == "Stable"
61
    l10n_branch = "branches/stable/"
62
  else
63
    l10n_branch = nil
64
  end
65
  `svn co -N #{protocol}://#{user}@svn.kde.org/home/kde/#{branch}/extragear/multimedia`
66
  Dir.chdir( "multimedia" )
67
else
68
  `svn co -N #{protocol}://#{user}@svn.kde.org/home/kde/trunk/extragear/multimedia`
69
  Dir.chdir( "multimedia" )
70
end
71
72
`svn up amarok`
73
`svn up -N doc`
74
`svn up doc/amarok`
75
`svn co #{protocol}://#{user}@svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin`
76
77
78
unless l10n_branch == nil
79
  unless l10n_branch == true
80
    branch = l10n_branch
81
  end
82
  puts "\n"
83
  puts "**** l10n ****"
84
  puts "\n"
85
86
  i18nlangs = `svn cat #{protocol}://#{user}@svn.kde.org/home/kde/#{branch}/l10n/subdirs`
87
  Dir.mkdir( "l10n" )
88
  Dir.chdir( "l10n" )
89
90
  # docs
91
  for lang in i18nlangs
92
    lang.chomp!()
93
    FileUtils.rm_rf( "../doc/#{lang}" )
94
    FileUtils.rm_rf( name )
95
    docdirname = "l10n/#{lang}/docs/extragear-multimedia/amarok"
96
    `svn co -q #{protocol}://#{user}@svn.kde.org/home/kde/#{branch}/#{docdirname} > /dev/null 2>&1`
97
    next unless FileTest.exists?( "amarok" )
98
    print "Copying #{lang}'s #{name} documentation over..  "
99
    `cp -R amarok/ ../doc/#{lang}`
100
101
    # we don't want KDE_DOCS = AUTO, cause that makes the
102
    # build system assume that the name of the app is the
103
    # same as the name of the dir the Makefile.am is in.
104
    # Instead, we explicitly pass the name..
105
    makefile = File.new( "../doc/#{lang}/Makefile.am", File::CREAT | File::RDWR | File::TRUNC )
106
    makefile << "KDE_LANG = #{lang}\n"
107
    makefile << "KDE_DOCS = #{name}\n"
108
    makefile.close()
109
110
    puts( "done.\n" )
111
  end
112
113
  Dir.chdir( ".." ) # multimedia
114
  puts "\n"
115
116
  $subdirs = false
117
  Dir.mkdir( "po" )
118
119
  for lang in i18nlangs
120
    lang.chomp!()
121
    pofilename = "l10n/#{lang}/messages/extragear-multimedia/amarok.po"
122
    `svn cat #{protocol}://#{user}@svn.kde.org/home/kde/#{branch}/#{pofilename} 2> /dev/null | tee l10n/amarok.po`
123
    next if FileTest.size( "l10n/amarok.po" ) == 0
124
125
    dest = "po/#{lang}"
126
    Dir.mkdir( dest )
127
    print "Copying #{lang}'s #{name}.po over ..  "
128
    FileUtils.mv( "l10n/amarok.po", dest )
129
    puts( "done.\n" )
130
131
    makefile = File.new( "#{dest}/Makefile.am", File::CREAT | File::RDWR | File::TRUNC )
132
    makefile << "KDE_LANG = #{lang}\n"
133
    makefile << "SUBDIRS  = $(AUTODIRS)\n"
134
    makefile << "POFILES  = AUTO\n"
135
    makefile.close()
136
137
    $subdirs = true
138
  end
139
140
  if $subdirs
141
    makefile = File.new( "po/Makefile.am", File::CREAT | File::RDWR | File::TRUNC )
142
    makefile << "SUBDIRS = $(AUTODIRS)\n"
143
    makefile.close()
144
    # Remove xx language
145
    FileUtils.rm_rf( "po/xx" )
146
  else
147
    FileUtils.rm_rf( "po" )
148
  end
149
150
  FileUtils.rm_rf( "l10n" )
151
end
152
153
puts "\n"
154
155
156
# Remove SVN data folder
157
`find -name ".svn" | xargs rm -rf`
158
159
# TODO: what is this supposed to do, why did we include it, and does the script
160
#       actually work without it?
161
# if useStableBranch
162
#     `svn co -N #{protocol}://#{user}@svn.kde.org/home/kde/trunk/extragear/multimedia`
163
#     `mv multimedia/* .`
164
#     FileUtils.rm_rf( "multimedia" )
165
# end
166
167
Dir.chdir( "amarok" )
168
169
# Move some important files to the root folder
170
FileUtils.mv( "AUTHORS", ".." )
171
FileUtils.mv( "ChangeLog", ".." )
172
FileUtils.mv( "COPYING", ".." )
173
FileUtils.mv( "COPYING.LIB", ".." )
174
FileUtils.mv( "COPYING-DOCS", ".." )
175
FileUtils.mv( "INSTALL", ".." )
176
FileUtils.mv( "README", ".." )
177
FileUtils.mv( "TODO", ".." )
178
179
# This stuff doesn't belong in the tarball
180
FileUtils.rm_rf( "release_scripts" )
181
FileUtils.rm_rf( "src/engine/gst10" ) #Removed for now
182
FileUtils.rm_rf( "supplementary_scripts" )
183
184
Dir.chdir( "src" )
185
186
# Exchange APP_VERSION string with targeted version
187
file = File.new( "amarok.h", File::RDWR )
188
str = file.read()
189
file.rewind()
190
file.truncate( 0 )
191
str.sub!( /APP_VERSION \".*\"/, "APP_VERSION \"#{version}\"" )
192
file << str
193
file.close()
194
195
196
Dir.chdir( ".." ) # amarok
197
Dir.chdir( ".." ) # multimedia
198
puts( "\n" )
199
200
`find | xargs touch`
201
puts "**** Generating Makefiles..  "
202
`make -f Makefile.cvs`
203
puts "done.\n"
204
205
FileUtils.rm_rf( "autom4te.cache" )
206
FileUtils.rm_rf( "stamp-h.in" )
207
208
209
puts "**** Compressing..  "
210
`mv * ..`
211
Dir.chdir( ".." ) # Amarok-foo
212
FileUtils.rm_rf( "multimedia" )
213
Dir.chdir( ".." ) # root folder
214
`tar -cf #{folder}.tar #{folder}`
215
`bzip2 #{folder}.tar`
216
FileUtils.rm_rf( folder )
217
puts "done.\n"
218
219
220
ENV["UNSERMAKE"] = oldmake
221
222
223
puts "\n"
224
puts "====================================================="
225
puts "Congratulations :) Amarok #{version} tarball generated.\n"
226
puts "Now follow the steps in the RELEASE_HOWTO, from\n"
227
puts "SECTION 3 onwards.\n"
228
puts "\n"
229
puts "Then drink a few pints and have some fun on #amarok\n"
230
puts "\n"
231
puts "MD5 checksum: " + `md5sum #{folder}.tar.bz2`
232
puts "\n"
233
puts "\n"