summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mwagner@here.mwagner.org>2005-02-07 01:29:10 -0600
committerunknown <mwagner@here.mwagner.org>2005-02-07 01:29:10 -0600
commit8ebc448783e578bdcab490ce02a25e40c4f23d44 (patch)
tree04d00a13cb5ffd8f763e6fe442bdc46ff5f838e8
parent16eb7e7b6cd22cbc2c0ee992c79e2ce9f2f4f6a0 (diff)
parentd3a6f130e212d3a306c624ee777704b30f9ceef8 (diff)
downloadmariadb-git-8ebc448783e578bdcab490ce02a25e40c4f23d44.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into here.mwagner.org:/Users/mwagner/work/bk/mysql-4.1
-rw-r--r--Build-tools/Do-solaris-pkg181
1 files changed, 181 insertions, 0 deletions
diff --git a/Build-tools/Do-solaris-pkg b/Build-tools/Do-solaris-pkg
new file mode 100644
index 00000000000..374113b28a1
--- /dev/null
+++ b/Build-tools/Do-solaris-pkg
@@ -0,0 +1,181 @@
+#!/usr/bin/perl
+#
+# Script to create Solaris packages
+#
+$INTERACTIVE= 0;
+$hostname= `hostname`;
+$find = "/usr/bin/find";
+$pkgproto = "/usr/bin/pkgproto";
+$pkgmk = "/usr/bin/pkgmk -o";
+$pkgtrans = "/usr/bin/pkgtrans";
+$temp = "/tmp/prototype$$";
+$prototype = "prototype";
+$pkginfo = "pkginfo";
+($gid ,$pkg ,$uid ,$userInfo ,$email ,$quota ,$group ,$passwd
+,$category ,$userHome ,$vendor ,$loginShell ,$pstamp ,$basedir)=();
+
+$fullname = shift @ARGV;
+$fullname or die "No package name was specified";
+-d $fullname or die "That directory is not present!";
+
+$fullname =~ s,/+$,,; # Remove ending slash if any
+
+$pkgdir= `cd ../$hostname; pwd`;
+$pwd = `pwd`;
+if ($pwd =~ '\/usr\/local') {
+ $pwd = $`;
+}
+die "Wrong location, please cd to <PKGBASE>/usr/local/ and run again.\n"
+ if ($pwd eq "");
+
+system ("$find . -print | $pkgproto > $temp");
+open (PREPROTO,"<$temp") or die "Unable to read prototype information ($!)\n";
+open (PROTO,">$prototype") or die "Unable to write file prototype ($!)\n";
+print PROTO "i pkginfo=./$pkginfo\n";
+while (<PREPROTO>) {
+ # Read the prototype information from /tmp/prototype$$
+ chomp;
+ $thisline = $_;
+ if ($thisline =~ " prototype "
+ or $thisline =~ " pkginfo ") {
+ # We don't need that line
+ } elsif ($thisline =~ "^[fd] ") {
+ # Change the ownership for files and directories
+ ($dir, $none, $file, $mode, $user, $group) = split / /,$thisline;
+ print PROTO "$dir $none $file $mode bin bin\n";
+ } else {
+ # Symlinks and other stuff should be printed as well ofcourse
+ print PROTO "$thisline\n";
+ }
+}
+close PROTO;
+close PREPROTO;
+
+# Clean up
+unlink $temp or warn "Unable to remove tempfile ($!)\n";
+
+# Now we can start building the package
+#
+# First get some info
+
+$fullname =~ /^((mysql)-.+)-([\d\.]+)-.+$/
+ or die "This name is not what I expected - \"$fullname\"";
+
+$default{"name"}= $2;
+$default{"version"}= $3;
+$default{"pkg"}= $1;
+$default{"arch"} = `uname -m`;
+chomp $default{"arch"};
+$default{"category"}= "application";
+$default{"vendor"}= "MySQL AB";
+$default{"email"}= "build\@mysql.com";
+$default{"pstamp"}= "MySQL AB Build Engineers";
+$os = `uname -r`;
+$os =~ '\.';
+$os = "sol$'";
+chomp $os;
+$default{"basedir"}= "/usr/local";
+$default{"packagename"}= $fullname . '.pkg';
+
+# Check for correctness of guessed values by userinput
+
+%questions = (
+ pkg => "Please give the name for this package",
+ name => "Now enter the real name for this package",
+ arch => "What architecture did you build the package on?",
+ version => "Enter the version number of the package",
+ category => "What category does this package belong to?",
+ vendor => "Who is the vendor of this package?",
+ email => "Enter the email adress for contact",
+ pstamp => "Enter your own name",
+ basedir => "What is the basedir this package will install into?",
+ packagename => "How should I call the packagefile?",
+);
+
+@vars = qw(pkg name arch version category vendor email pstamp basedir
+ packagename);
+foreach $varname (@vars) {
+ getvar_noq($varname);
+}
+
+if ($INTERACTIVE) {
+ while (!&chkvar()) {
+ print "\n";
+ foreach $varname (@vars) {
+ getvar($varname);
+ }
+ @vars = qw(pkg name arch version category vendor email pstamp basedir
+ packagename);
+ }
+}
+$classes = "none";
+
+# Create the pkginfo file
+
+print "\nNow creating $pkginfo file\n";
+open (PKGINFO,">$pkginfo") || die "Unable to open $pkginfo for writing ($!)\n";
+print PKGINFO "PKG=\"$pkg\"\n";
+print PKGINFO "NAME=\"$name\"\n";
+print PKGINFO "ARCH=\"$arch\"\n";
+print PKGINFO "VERSION=\"$version\"\n";
+print PKGINFO "CATEGORY=\"$category\"\n";
+print PKGINFO "VENDOR=\"$vendor\"\n";
+print PKGINFO "EMAIL=\"$email\"\n";
+print PKGINFO "PSTAMP=\"$pstamp\"\n";
+print PKGINFO "BASEDIR=\"$basedir\"\n";
+print PKGINFO "CLASSES=\"$classes\"\n";
+close PKGINFO;
+print "Done.\n";
+
+# Build and zip the package
+
+print "Building package\n";
+system ("$pkgmk -r `pwd`");
+system ("(cd /var/spool/pkg; $pkgtrans -s -o `pwd` /tmp/$packagename $pkg)");
+system ("gzip /tmp/$packagename");
+
+# Clean-up the spool area
+system ("(cd /var/spool/pkg; rm -rf $pkg)");
+unlink $pkginfo;
+unlink $prototype;
+system ("mv /tmp/${packagename}.gz $pkgdir");
+print "Done. (~/$hostname/$packagename.gz)\n";
+# The subroutines
+sub chkvar {
+ print "\n";
+
+ print "PKG=$pkg\n";
+ print "NAME=$name\n";
+ print "ARCH=$arch\n";
+ print "VERSION=$version\n";
+ print "CATEGORY=$category\n";
+ print "VENDOR=$vendor\n";
+ print "EMAIL=$email\n";
+ print "PSTAMP=$pstamp\n";
+ print "BASEDIR=$basedir\n";
+ print "PACKAGENAME=$packagename\n";
+
+
+ print "\nIs this information correct? [Y/n]: ";
+ my $answer= <STDIN>;
+ chomp $answer;
+ $answer= 'Y' if ($answer eq "");
+ $answer= uc $answer;
+ my $res= ($answer eq 'Y')? 1 : 0;
+ return($res);
+}
+
+sub getvar_noq {
+ my $questionname = "@_";
+ $$questionname = $default{$questionname};
+}
+
+sub getvar {
+ my $questionname = "@_";
+ my $ucquestionname= uc $questionname;
+ print "$ucquestionname: $questions{$questionname} [$default{\"$questionname\"}]: ";
+ my $answer = <STDIN>;
+ chomp $answer;
+ $$questionname = $answer;
+ $$questionname = $default{$questionname} if ($$questionname eq "");
+}