⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pack

📁 Linux下VB解释器
💻
字号:
#!/usr/bin/perl## Pack and check a new distribution of yabasic#use IPC::Open3;use Time::Local;use File::Copy;# Variables, that can be configured$sourcedir="/home/ihm/yabmain";$appname="yabasic";$yabexe="yabasic";$yabsrc="configure.in";$yabdoku="yabasic.htm";$from_linux="/mnt/usb-drive/from_linux/yabasic";$from_windows="/mnt/usb-drive/from_windows/yabasic";# name of rpm specfile$specfile="yabasic.spec";# enhance path$ENV{PATH}.=":/usr/local/bin";# files to copy from usb-drive@fromlist=("function.c",	   "graphic.c",	   "io.c",	   "main.c",	   "symbol.c",	   "yabasic.h");# files to copy to usb-drive, name of tarfile and rpmfile will be pushed below@tolist=("$sourcedir/function.c",	 "$sourcedir/graphic.c",	 "$sourcedir/io.c",	 "$sourcedir/main.c",	 "$sourcedir/symbol.c",	 "$sourcedir/yabasic.h",	 "$sourcedir/bison.c",	 "$sourcedir/bison.h",	 "$sourcedir/config.h",	 "$sourcedir/flex.c",	 "$sourcedir/yabasic.htm",	 "$sourcedir/yabasic.bison",	 "$sourcedir/demo.yab",	 "$sourcedir/NEWS",	 "$sourcedir/yabasic.flex",	 );# list of files, that need to be renamed %torename=("yabasic.flex"=>"flex.txt",	   "yabasic.bison"=>"bison.txt",	   "NEWS"=>"news.txt",	   "yabasic.tar.Z"=>"yab.tar.Z");# list binary files%binary=("yabasic.tar.Z"=>1); # rpm-file will be added below# Autoflush stdout$|=1;$stages=$ARGV[0];$stages="123" if !$stages;if (index($stages,"1")>=0) {## Check date of files#    print "\nCopying files from usb-drive ($from_windows) ...\n";    for $name (@fromlist) {	my $sname=$name;	$sname=~s/.*\///;	$totime=stime($name);	$fromtime=stime("$from_windows/$name");	if (!$fromtime) {	    print "  WARNING: Can't find $name on usb-drive !\n";	    next;	}		unless (-s "$name") {	    print "  WARNING: $name has zero size \n";	    next;	}	if ($fromtime>$totime+120) {	    $diff=$fromtime-$totime;	    $difft=$diff." sec";	    $difft=sprintf("%.2g",($diff/60))." min" if ($diff>60*2);	    $difft=sprintf("%.2g",($diff/3600))." hours" if ($diff>3600*2);	    $difft=sprintf("%.2g",($diff/86400))." days" if ($diff>86400*2);	    print "$sname is $difft newer on usb-drive, need to copy ... ";	    	    if (copy("$name",".")) {		print "done.\n";		$copied++;	    } else {		print "ERROR: $!\n";		endit();	    }	}    }    if ($copied) {	print "\nCopied $copied file(s), you better check ...\n\n";	endit();    }    print "All files are up to date.\n";}if (index($stages,"2")>=0) {## crosscheck Versions#    print "\nChecking versions:\n";    open3(*WRT,*RDR,*ERR,"./$yabexe -?") || die "Can't open $yabexe\n";    while(<ERR>) {	if (/yabasic\s+version\s+(\d\.\d+)/i) {	    $exever=$1;	    print "  $exever ($yabexe)\n";	    last;	}    }    die "Can't get version from $yabexe\n" if !defined($exever);        open(RDR,$yabsrc) || die "Can't open $yabsrc\n";    while(<RDR>) {	if (/\s*AM_INIT_AUTOMAKE\s*\(\s*yabasic\s*,\s*(\d\.\d+)\s*\)/) {	    $sourcever=$1;	    print "  $sourcever ($yabsrc)\n";	    last;	}	    }    die "Can't get version from $yabsrc\n" if !defined($sourcever);        open(RDR,$yabdoku) || die "Can't open $yabdoku\n";    while(<RDR>) {	if (/(2\.\d{1,2})/) {	    $dokuver=$1;	    print "  $dokuver ($yabdoku)\n";	    last;	}    }    die "Can't get version from $yabdoku\n" if !defined($dokuver);        if (abs($exever-$dokuver)<=0.009 && $exever==$sourcever) {	print "Okay.\n";    } else {	print "Mismatch !\n";	die "Better go and bring them in line\n";    }        if ($>) {die "Need to be root (not $>) to create rpm-file !\n";}    ## create, compress and copy sourcepack for rpm#    $spackfile="yabasic-$exever.tar.gz";    my $command="make dist-gzip 2>&1";    open COMMAND,"$command |" or die "Could not start '$command': $!\n";    print "Creating tar archive with sources ";    $out="";    while(<COMMAND>) {	print ".";	$out.="  >> $_";    }    close COMMAND;    die "\nERROR !\n\nCommand '$command' returned:\n$out\n" if $?;    print " done.\n";    $command="cp -f $spackfile /usr/src/packages/SOURCES 2>/dev/null";    die "Can't move $spackfile ! Command: $command\n" if system($command);    push @tolist,"$sourcedir/$spackfile";#    # create rpm package#    print "Putting version into $specfile ... ";    open(SPEC,$specfile) || die "Can't open $specfile\n";    @spec=<SPEC>;    close(SPEC);    open(SPEC,"> $specfile") || die "Can't open $specfile\n";    while($line=shift(@spec)) {	if ($line=~/Version:\s*\d\.\d+/) {	    print SPEC "Version: $exever\n";	} elsif ($line=~/Source:/) {	    print SPEC "Source: yabasic-$exever.tar.gz\n";	} else {	    print SPEC $line;	}    }    close(SPEC);    print "done.\n";        print "Creating rpm-package with linux binaries ";    $command="rpmbuild -bb --clean yabasic.spec --buildroot /usr/src/packages/BUILD/yabasic";    die "Couldn't execute $command\n" if (!open(RPM,"$command 2>&1|"));    while(<RPM>) {	push @rpmout,$_;	if (/^Wrote:\s*(\S*)\s*$/ && !$wrote) {print " done.\n\n$_";$wrote=$1;}	$lcount++;	print "." if (!$wrote && !($lcount%5));    }    close(RPM);    if (!$wrote) {	print " something went wrong,\nrpm output:\n    ";	print join "   ",@rpmout;	die "\n";    }        $command="rpm -i yabasic";    die "Couldn't execute $command\n" if (!open(RPM,"$command 2>&1|"));    undef @rpmout;    print "\nTrying to install ... ";    if ($out=qx(rpm -i --force --nodeps $wrote 2>&1)) {	print "Error !\n";	print "rpm returned: $out\n";	endit();    } else {	print "done.\n";    }## add rpm file to lists#    push @tolist,$wrote;    $short=substr($wrote,rindex($wrote,"/")+1);    $binary{$short}=1;}if (index($stages,"3")>=0) {## copy selected files to usb-drive#    print "\nDeleting previous versions from usb-drive ($from_linux) ... ";    for $f (glob("$from_linux/*")) {	unlink $f or warn "Could not delete $f: $!\n";    }    print "done.\n";    print "\nCopying files to usb-drive ($from_linux) ...\n";    for $toname (@tolist) {	$rename="";	$sopt="";	$pos=rindex($toname,"/");        if ($pos>0) {	    $shortname=substr($toname,$pos+1);	} else {	    $shortname=$toname;	}        if (exists($torename{$shortname})) {	    $rename=$torename{$shortname};        } else {	    $rename=$shortname;        }	$toname="../$toname" if substr($toname,0,1) ne "/";	if (copy("$toname","$from_linux/$rename")) {	    print " $shortname";	    print " as $rename" if $rename ne $shortname;	    print "\n";	    if ($binary{$shortname}) {		print "Skipping recode of $toname .\n";###		system("recode ..pc/ $toname") && warn "Could not execute 'recode ..pc/ $toname' ($!) !\n"; 	    }	} else {	    print "  WARNING: Couldn not copy $toname to $from_linux/$rename ($!) !\n";	}    }    print "done.\n";    print "\nCreating backup ... ";    $command="cp -rp * /opt/yabasic";    if (system($command)) {	print "error !\n"; 	print "Command has been:\n\n$command\n\n";	endit();    }    print "done.\n";        endit();}endit();## return modification time in seconds since epoch#sub stime {    $name=shift;    my $time=(stat($name))[9];    return $time;}sub endit {    system("chown -R ihm:users ~ihm/yabmain") unless $>;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -