summaryrefslogtreecommitdiff
path: root/Build-tools
diff options
context:
space:
mode:
authorunknown <lenz@mysql.com>2005-01-20 12:07:44 +0100
committerunknown <lenz@mysql.com>2005-01-20 12:07:44 +0100
commit89a24f933537f550844862d936ed57b44ec16069 (patch)
tree46b56365f852602a4ca028a9e81f42e3e14441a2 /Build-tools
parent803774958cb576e04213fd9ab14e78d1b588f8fd (diff)
downloadmariadb-git-89a24f933537f550844862d936ed57b44ec16069.tar.gz
- Improved Do-rpm to perform RPM builds inside of a chrooted build
environment (using "build" on SUSE Linux) Build-tools/Do-rpm: - added functionality to perform RPM builds inside of a chrooted build environment (using "build" on SUSE Linux) - see "--help" for more details
Diffstat (limited to 'Build-tools')
-rwxr-xr-xBuild-tools/Do-rpm244
1 files changed, 159 insertions, 85 deletions
diff --git a/Build-tools/Do-rpm b/Build-tools/Do-rpm
index da06e1f58e4..23602debfb1 100755
--- a/Build-tools/Do-rpm
+++ b/Build-tools/Do-rpm
@@ -22,7 +22,6 @@ use Getopt::Long;
Getopt::Long::Configure ("bundling");
use Sys::Hostname;
-$opt_nobuild = undef;
$opt_cc= undef;
$opt_cflags= undef;
$opt_clean= undef;
@@ -33,6 +32,9 @@ $opt_help= undef;
$opt_log= undef;
$opt_mail= "";
$opt_verbose= undef;
+$opt_susebuild= undef;
+$opt_susebuildroot= undef;
+$opt_suserpms= undef;
# Set a dummy version until we know the correct one
$VERSION= "x.y.z";
@@ -49,7 +51,9 @@ GetOptions(
"help|h",
"log|l:s",
"mail|m=s",
- "nobuild",
+ "susebuild|s",
+ "susebuildroot|r=s",
+ "suserpms=s",
"verbose|v",
) || &print_help;
@@ -57,6 +61,20 @@ GetOptions(
defined($SPECFILE=$ARGV[0]) || print_help("Please provide the spec file name!");
+&print_help("Please define the location of the RPM repository!") if $opt_susebuild && !($opt_suserpms || $ENV{BUILD_RPMS});
+
+unless ($opt_susebuildroot)
+{
+ if ($ENV{BUILD_ROOT})
+ {
+ $opt_susebuildroot= $ENV{BUILD_ROOT};
+ }
+ else
+ {
+ $opt_susebuildroot="/var/tmp/build-root";
+ }
+}
+
# Include helper functions
$PWD= cwd();
$LOGGER= "$PWD/logger.pm";
@@ -72,7 +90,7 @@ else
$subject= "RPM build for $SPECFILE failed" if $opt_mail;
# Open the spec file and extract the version number
-open(SPEC, $SPECFILE) or &abort("Unable to open \"$ARGV[0]\": $!");
+open(SPEC, $SPECFILE) or die "Unable to open \"$ARGV[0]\": $!";
@spec= <SPEC>;
close SPEC;
@@ -94,7 +112,7 @@ $HOST= hostname();
$HOST=~ /^([^.-]*)/;
$HOST= $1;
$LOGFILE= "$PWD/Logs/Do-rpm-$HOST-$MAJOR.$MINOR.log";
-&logger("Using spec file for version: $VERSION");
+&logger("Logging to $LOGFILE");
#
# Override predefined Log file name
@@ -114,103 +132,149 @@ if (defined $opt_log)
}
}
-#
-# Newer RPM versions ship with a separate tool "rpmbuild" to build RPMs
-#
-if (-x "/usr/bin/rpmbuild")
+&logger("Using spec file for version: $VERSION");
+
+if ($opt_susebuild)
{
- $RPM= "/usr/bin/rpmbuild";
- $RMSOURCE= "--rmsource --rmspec";
+ &susebuild;
}
else
-{
- $RPM= "/bin/rpm";
- $RMSOURCE= "--rmspec";
+{
+ &rpmbuild;
}
-if ($RPM)
-{
- &logger("Found rpm binary: $RPM");
-}
-else
+&logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run);
+exit 0;
+
+#
+# Build using SUSE's "build" script
+#
+sub susebuild
{
- &abort("Unable to find RPM binary!");
+ $BUILD= "/usr/bin/build";
+ ( -x $BUILD) ? &logger("$BUILD found, proceeding.") : &abort("$BUILD could not be found!");
+ $command= "sudo $BUILD --clean";
+ $command.= " --root=$opt_susebuildroot";
+ $command.= " --rpms=$opt_suserpms" if $opt_suserpms;
+ $command.= " $SPECFILE";
+ &logger("Building RPMs using SUSE build.");
+ &run_command($command, "Error while running the SUSE RPM build!");
+
+ #
+ # Move the resulting RPMs into the pwd - we can use broad globs here
+ # as the build root has been cleaned up before so there should not be
+ # any residuals from previous build runs
+ #
+ $command= "cp";
+ $command.= " -v " if ($opt_verbose);
+ $command.= " $opt_susebuildroot/usr/src/packages/SRPMS/MySQL*.src.rpm $PWD";
+ &logger("Copying source RPM to current dir.");
+ &run_command($command, "Error moving source RPM!");
+
+ $command= "cp";
+ $command.= " -v " if ($opt_verbose);
+ $command.= " $opt_susebuildroot/usr/src/packages/RPMS/*/MySQL*.rpm $PWD";
+ &logger("Copying binary RPMs to current dir.");
+ &run_command($command, "Error moving binary RPMs!");
}
#
-# determine some RPM settings for this host
+# Build using "plain" RPM
#
-chomp($RPMARCH= `$RPM --eval "%{_arch}" 2> /dev/null`);
-chomp($RPMDIR= `$RPM --eval "%{_rpmdir}" 2> /dev/null`);
-chomp($SOURCEDIR= `$RPM --eval "%{_sourcedir}" 2> /dev/null`);
-chomp($SPECDIR= `$RPM --eval "%{_specdir}" 2> /dev/null`);
-chomp($SRCRPMDIR= `$RPM --eval "%{_srcrpmdir}" 2> /dev/null`);
-
-$SOURCEFILE= glob "mysql*-$VERSION.tar.gz";
+sub rpmbuild
+{
-unless($opt_nobuild) {
+ #
+ # Newer RPM versions ship with a separate tool "rpmbuild" to build RPMs
+ #
+ if (-x "/usr/bin/rpmbuild")
+ {
+ $RPM= "/usr/bin/rpmbuild";
+ $RMSOURCE= "--rmsource --rmspec";
+ }
+ else
+ {
+ $RPM= "/bin/rpm";
+ $RMSOURCE= "--rmspec";
+ }
- &logger("Starting RPM build of MySQL-$VERSION on $HOST");
+ if ($RPM)
+ {
+ &logger("Found rpm binary: $RPM");
+ }
+ else
+ {
+ &abort("Unable to find RPM binary!");
+ }
- foreach $file ($SOURCEFILE, $SPECFILE)
- {
- &abort("Unable to find $file!") unless (-f "$file");
- }
+ #
+ # determine some RPM settings for this host
+ #
+ chomp($RPMARCH= `$RPM --eval "%{_arch}" 2> /dev/null`);
+ chomp($RPMDIR= `$RPM --eval "%{_rpmdir}" 2> /dev/null`);
+ chomp($SOURCEDIR= `$RPM --eval "%{_sourcedir}" 2> /dev/null`);
+ chomp($SPECDIR= `$RPM --eval "%{_specdir}" 2> /dev/null`);
+ chomp($SRCRPMDIR= `$RPM --eval "%{_srcrpmdir}" 2> /dev/null`);
-#
-# Install source and spec file
-#
- &logger("Copying SOURCE and SPEC file to build directories.");
- unless ($opt_dry_run)
- {
- copy($SOURCEFILE, $SOURCEDIR)
- or &abort("Unable to copy $SOURCEFILE to $SOURCEDIR!");
- copy($SPECFILE, $SPECDIR)
- or &abort("Unable to copy $SPECFILE to $SPECDIR!");
- }
+ $SOURCEFILE= glob "mysql*-$VERSION.tar.gz";
-#
-# Set environment variables - these are being used in the
-# official MySQL RPM spec file
-#
- &logger("Setting special build environment variables")
- if ($opt_cc) or ($opt_cflags) or ($opt_cxxflags) or ($opt_cxx);
- $ENV{MYSQL_BUILD_CC}=$opt_cc if ($opt_cc);
- $ENV{MYSQL_BUILD_CFLAGS}=$opt_cflags if ($opt_cflags);
- $ENV{MYSQL_BUILD_CXXFLAGS}=$opt_cxxflags if ($opt_cxxflags);
- $ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx);
+ &logger("Starting RPM build of MySQL-$VERSION on $HOST");
-#
-# Build the RPMs
-#
- $command= "$RPM";
- $command.= " -v" if ($opt_verbose);
- $command.= " -ba";
- $command.= " --clean $RMSOURCE" if $opt_clean;
- $command.= " $SPECDIR/";
- $command.= basename($SPECFILE);
- &logger("Building RPM.");
- &run_command($command, "Error while building the RPMs!");
-}
+ foreach $file ($SOURCEFILE, $SPECFILE)
+ {
+ &abort("Unable to find $file!") unless (-f "$file");
+ }
-#
-# Move the resulting RPMs into the pwd
-#
-$command= "mv";
-$command.= " -v " if ($opt_verbose);
-$command.= " $SRCRPMDIR/MySQL*$VERSION_SRPM*.src.rpm $PWD";
-&logger("Moving source RPM to current dir.");
-&run_command($command, "Error moving source RPM!");
-
-$command= "mv";
-$command.= " -v " if ($opt_verbose);
-# $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION*.$RPMARCH.rpm $PWD";
-$command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION_SRPM*.$RPMARCH.rpm $PWD";
-&logger("Moving binary RPMs to current dir.");
-&run_command($command, "Error moving binary RPMs!");
+ #
+ # Install source and spec file
+ #
+ &logger("Copying SOURCE and SPEC file to build directories.");
+ unless ($opt_dry_run)
+ {
+ copy($SOURCEFILE, $SOURCEDIR)
+ or &abort("Unable to copy $SOURCEFILE to $SOURCEDIR!");
+ copy($SPECFILE, $SPECDIR)
+ or &abort("Unable to copy $SPECFILE to $SPECDIR!");
+ }
-&logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run);
-exit 0;
+ #
+ # Set environment variables - these are being used in the
+ # official MySQL RPM spec file
+ #
+ &logger("Setting special build environment variables")
+ if ($opt_cc) or ($opt_cflags) or ($opt_cxxflags) or ($opt_cxx);
+ $ENV{MYSQL_BUILD_CC}=$opt_cc if ($opt_cc);
+ $ENV{MYSQL_BUILD_CFLAGS}=$opt_cflags if ($opt_cflags);
+ $ENV{MYSQL_BUILD_CXXFLAGS}=$opt_cxxflags if ($opt_cxxflags);
+ $ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx);
+
+ #
+ # Build the RPMs
+ #
+ $command= "$RPM";
+ $command.= " -v" if ($opt_verbose);
+ $command.= " -ba";
+ $command.= " --clean $RMSOURCE" if $opt_clean;
+ $command.= " $SPECDIR/";
+ $command.= basename($SPECFILE);
+ &logger("Building RPM.");
+ &run_command($command, "Error while building the RPMs!");
+
+ #
+ # Move the resulting RPMs into the pwd
+ #
+ $command= "mv";
+ $command.= " -v " if ($opt_verbose);
+ $command.= " $SRCRPMDIR/MySQL*$VERSION_SRPM*.src.rpm $PWD";
+ &logger("Moving source RPM to current dir.");
+ &run_command($command, "Error moving source RPM!");
+
+ $command= "mv";
+ $command.= " -v " if ($opt_verbose);
+ $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION_SRPM*.$RPMARCH.rpm $PWD";
+ &logger("Moving binary RPMs to current dir.");
+ &run_command($command, "Error moving binary RPMs!");
+}
sub print_help
{
@@ -218,7 +282,7 @@ sub print_help
if ($message ne "")
{
print "\n";
- print "ERROR: $message\n\n}";
+ print "ERROR: $message\n\n";
}
print <<EOF;
@@ -241,12 +305,22 @@ Options:
-t, --dry-run Dry run without executing
-h, --help Print this help
-l, --log[=<filename>] Write a log file [to <filename>]
- (default is "$LOGFILE")
-m, --mail=<address> Mail a failure report to the given address
(and include a log file snippet, if logging
is enabled)
Note that the \@-Sign needs to be quoted!
Example: --mail=user\\\@domain.com
+-s, --susebuild Use the SUSE "build" script instead of RPM
+ directly (requires sudo privileges to run the
+ /usr/bin/build command)
+-r, --susebuildroot=<root> Use <root> as the build root directory for the
+ SUSE "build" (default is /var/tmp/build-root
+ or defined by the BUILD_ROOT environment
+ variable)
+--suserpms=<path> Path to the SUSE RPM repository to build up
+ the build root (mandatory option when using
+ --susebuild and the BUILD_RPMS environment
+ variable is not set.)
-v, --verbose Verbose execution
Example: