#!/usr/bin/env ruby # # Ruby script for generating tarball releases from SVN # # (c) 2005 Mark Kretschmann # modified by Carsten Niehaus # Some parts of this code taken from cvs2dist # License: GPL V2 require 'getoptlong' opts = GetoptLong.new( [ "--noi18n", "-i", GetoptLong::NO_ARGUMENT ], [ "--nogpg", "-g", GetoptLong::NO_ARGUMENT ], [ "--libtdeedu", "-l", GetoptLong::NO_ARGUMENT ], [ "--widgets", "-w", GetoptLong::NO_ARGUMENT ], [ "--appname", "-a", GetoptLong::REQUIRED_ARGUMENT ], [ "--help", "-h", GetoptLong::NO_ARGUMENT ] ) doi18n = "yes" dogpg = "yes" packlibtdeedu = "no" packwidgets = "no" name = "" #check if there are arguments opts.each do |opt, arg| if opt == "--noi18n" doi18n = "no" elsif opt == "--nogpg" dogpg = "no" elsif opt == "--libtdeedu" packlibtdeedu = "yes" elsif opt == "--widgets" packwidgets = "yes" elsif opt == "--appname" name = arg elsif opt == "--help" puts "Usage:\n Optional:\n --noi18n to disable the packaging of translations and documentation\n --nogpg to disable signing with GnuPG\n --libtdeedu to enable packing libtdeedu\n --widgets to enable packing the KDEEDU-Widgets" exit() end end if name.empty? name = `kdialog --combobox "Select an application:" Kalzium KBruch KHangMan Kig Kiten KPercentage KMessedWords KmPlot KStars KTouch KTurtle KVerbos KVoctrain KWordQuiz`.chomp!.downcase end if name.empty? exit() end version = `kdialog --title "Version number" --inputbox "Enter the version number"`.chomp! if version.empty? version = "preview" end puts "Start packing #{name}".center(40, " - ") folder = "#{name}-#{version}" # Some helper methods def svn( command, dir ) `svn #{command} svn://anonsvn.kde.org/home/kde/#{dir}` end # Prevent using unsermake oldmake = ENV["UNSERMAKE"] ENV["UNSERMAKE"] = "no" # Remove old folder, if exists `rm -rf #{folder} 2> /dev/null` `rm -rf folder.tar.bz2 2> /dev/null` Dir.mkdir( folder ) Dir.chdir( folder ) if packlibtdeedu == "yes" svn( "co -N", "/trunk/KDE/tdeedu/" ) Dir.chdir( "tdeedu") puts "Checking out libtdeedu".center(40, " - ") `svn up libtdeedu` end if packwidgets == "yes" svn( "co -N", "/trunk/playground/edu/" ) Dir.chdir( "playground/edu") puts "Checking out the tdeedu-widgets".center(40, " - ") svn( "co", "/trunk/playground/edu/widgets/") end puts "Checking out #{name}".center(40," - ") `svn up #{name}` puts "Checking out kde-commons/admin".center(40, " - ") svn( "co", "/trunk/KDE/kde-common/admin") # we check out kde-l10n... if doi18n == "yes" puts "\n" puts "l10n".center(40, " - ") puts "\n" Dir.mkdir( "doc" ) i18nlangs = `svn cat https://svn.kde.org/home/kde/trunk/l10n/subdirs` Dir.mkdir( "l10n" ) Dir.chdir( "l10n" ) # docs for lang in i18nlangs lang.chomp! `rm -rf ../doc/#{lang}` `rm -rf #{name}` docdirname = "l10n/#{lang}/docs/tdeedu/#{name}" `svn co -q https://svn.kde.org/home/kde/trunk/#{docdirname} > /dev/null 2>&1` next unless FileTest.exists?( "#{name}" ) `cp -R #{name}/ ../doc/#{lang}` # we don't want KDE_DOCS = AUTO, cause that makes the # build system assume that the name of the app is the # same as the name of the dir the Makefile.am is in. # Instead, we explicitly pass the name.. makefile = File.new( "../doc/#{lang}/Makefile.am", File::CREAT | File::RDWR | File::TRUNC ) makefile << "KDE_LANG = #{lang}\n" makefile << "KDE_DOCS = #{name}\n" makefile.close() puts( "#{lang} done.\n" ) end #now create the Makefile.am so that the docs will be build makefile = File.new( "../doc/Makefile.am", File::CREAT | File::RDWR | File::TRUNC ) makefile << "KDE_LANG = en\n" makefile << "KDE_DOCS = AUTO\n" makefile << "SUBDIRS = $(AUTODIRS)\n" makefile.close() Dir.chdir( ".." ) # multimedia puts "\n" $subdirs = false Dir.mkdir( "po" ) for lang in i18nlangs lang.chomp! pofilename = "l10n/#{lang}/messages/tdeedu/#{name}.po" `svn cat https://svn.kde.org/home/kde/trunk/#{pofilename} 2> /dev/null | tee l10n/#{name}.po` next if FileTest.size( "l10n/#{name}.po" ) == 0 dest = "po/#{lang}" Dir.mkdir( dest ) print "Copying #{lang}'s #{name}.po over .. " `mv l10n/#{name}.po #{dest}` puts( "done.\n" ) makefile = File.new( "#{dest}/Makefile.am", File::CREAT | File::RDWR | File::TRUNC ) makefile << "KDE_LANG = #{lang}\n" makefile << "SUBDIRS = $(AUTODIRS)\n" makefile << "POFILES = AUTO\n" makefile.close() $subdirs = true end if $subdirs makefile = File.new( "po/Makefile.am", File::CREAT | File::RDWR | File::TRUNC ) makefile << "SUBDIRS = $(AUTODIRS)\n" makefile.close() else puts "Removing po-subdirectory" `rm -Rf po` end `rm -rf l10n` end puts "\n" puts "Removing svn-history files" `find -name ".svn" | xargs rm -rf` Dir.chdir( "#{name}" ) `rm -rf debian` Dir.chdir( ".." ) # tdeedu puts( "\n" ) `find | xargs touch` puts "Generating Makefiles".center(40, " - ") `make -f Makefile.cvs` puts "done.\n" `rm -rf autom4te.cache` `rm stamp-h.in` puts "Compressing".center(40, " - ") `mv * ..` Dir.chdir( ".." ) `rm -rf kde-common` `rm -rf tdeedu` # after the moving of the directory this is empty Dir.chdir( ".." ) # root folder `tar -cf #{folder}.tar #{folder}` `bzip2 #{folder}.tar` `rm -rf #{folder}` puts "done.\n" ENV["UNSERMAKE"] = oldmake if dogpg == "yes" puts "Signing with your GnuPG-key".center(40, " - ") `gpg --detach-sign #{folder}.tar.bz2` end puts "\n" puts "=====================================================" puts "Congratulations :) #{name} #{version} tarball generated.\n" puts "\n" puts "MD5 checksum: " + `md5sum #{folder}.tar.bz2` if dogpg == "yes" puts "The user can verify this package with " puts "\n" puts "gpg --verify #{folder}.tar.bz2.sig #{folder}.tar.bz2" end puts "\n" puts "\n"