Commit d8ae9669 authored by unknown's avatar unknown

merge


Docs/manual.texi:
  Auto merged
extra/perror.c:
  Auto merged
include/my_base.h:
  Auto merged
include/mysql.h:
  Auto merged
scripts/make_binary_distribution.sh:
  Auto merged
sql/ha_berkeley.cc:
  Auto merged
sql/handler.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
client/mysqltest.c:
  Auto merged
parents 9f939ecc 9d62e4a0
......@@ -47117,6 +47117,9 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.43
@itemize @bullet
@item
Added unique error message when one gets a DEADLOCK during a transaction with
BDB tables.
@item
Fixed problem with @code{BDB} tables and @code{UNIQUE} columns defined
as @code{NULL}.
@item
......@@ -1366,6 +1366,10 @@ int read_line(char* buf, int size)
*p = 0;
return 0;
}
else if (c == '\'')
state = R_Q1;
else if (c == '"')
state = R_Q2;
else
state = R_NORMAL;
break;
......
......@@ -67,6 +67,10 @@ static HA_ERRORS ha_errlist[]=
{ 143,"Conflicting table definition between MERGE and mapped table"},
{ 144,"Table is crashed and last repair failed"},
{ 145,"Table was marked as crashed and should be repaired"},
{ 146,"Lock timed out; Retry transaction"},
{ 147,"Lock table is full; Restart program with a larger locktable"},
{ 148,"Updates are not allowed under a read only transactions"},
{ 149,"Lock deadlock; Retry transaction"},
{ 0,NullS },
};
......
......@@ -217,6 +217,7 @@ enum ha_base_keytype {
#define HA_ERR_LOCK_WAIT_TIMEOUT 146
#define HA_ERR_LOCK_TABLE_FULL 147
#define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */
#define HA_ERR_LOCK_DEADLOCK 149
/* Other constants */
......
......@@ -34,6 +34,9 @@ extern "C" {
#ifndef _global_h /* If not standard header */
#include <sys/types.h>
#ifdef __LCC__
#include <winsock.h> /* For windows */
#endif
typedef char my_bool;
#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__)
#define __WIN__
......
......@@ -213,11 +213,12 @@
#define ER_WRONG_ARGUMENTS 1210
#define ER_NO_PERMISSION_TO_CREATE_USER 1211
#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
#define ER_CONNECT_TO_MASTER 1213
#define ER_QUERY_ON_MASTER 1214
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1215
#define ER_WRONG_USAGE 1216
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1217
#define ER_CANT_UPDATE_WITH_READLOCK 1218
#define ER_MIXING_NOT_ALLOWED 1219
#define ER_ERROR_MESSAGES 220
#define ER_LOCK_DEADLOCK 1213
#define ER_CONNECT_TO_MASTER 1214
#define ER_QUERY_ON_MASTER 1215
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1216
#define ER_WRONG_USAGE 1217
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1218
#define ER_CANT_UPDATE_WITH_READLOCK 1219
#define ER_MIXING_NOT_ALLOWED 1220
#define ER_ERROR_MESSAGES 221
......@@ -359,6 +359,7 @@ buf_pool_create(
for (i = BUF_FLUSH_LRU; i <= BUF_FLUSH_LIST; i++) {
buf_pool->n_flush[i] = 0;
buf_pool->init_flush[i] = FALSE;
buf_pool->no_flush[i] = os_event_create(NULL);
}
......
......@@ -613,6 +613,7 @@ log_init(void)
log_sys->archiving_state = LOG_ARCH_ON;
log_sys->archived_lsn = log_sys->lsn;
log_sys->next_archived_lsn = ut_dulint_zero;
log_sys->n_pending_archive_ios = 0;
......
......@@ -15,3 +15,21 @@ drop table foo;
save_master_pos;
connection slave;
sync_with_master;
connection master;
set SQL_LOG_BIN=1;
CREATE TABLE t1 (
a int not null
) TYPE=MyISAM MAX_ROWS=4000 CHECKSUM=1;
INSERT INTO t1 VALUES (1);
save_master_pos;
connection slave;
sync_with_master;
drop table t1;
load table t1 from master;
check table t1;
connection master;
drop table t1;
save_master_pos;
connection slave;
sync_with_master;
......@@ -50,7 +50,7 @@ mkdir $BASE $BASE/bin $BASE/data $BASE/data/mysql $BASE/data/test \
$BASE/include $BASE/lib $BASE/support-files $BASE/share $BASE/share/mysql \
$BASE/tests $BASE/scripts $BASE/sql-bench $BASE/mysql-test \
$BASE/mysql-test/t $BASE/mysql-test/r \
$BASE/mysql-test/include $BASE/mysql-test/std_data
$BASE/mysql-test/include $BASE/mysql-test/std_data $BASE/man
chmod o-rwx $BASE/data $BASE/data/*
......@@ -101,6 +101,7 @@ rm $BASE/include/Makefile*; rm $BASE/include/*.in
$CP tests/*.res tests/*.tst tests/*.pl $BASE/tests
$CP support-files/* $BASE/support-files
$CP man/*.? $BASE/man
$CP -r sql/share/* $BASE/share/mysql
rm -f $BASE/share/mysql/Makefile* $BASE/share/mysql/*/*.OLD
......
......@@ -1996,6 +1996,12 @@ longlong ha_berkeley::get_auto_increment()
return nr;
}
void ha_berkeley::print_error(int error, myf errflag)
{
if (error == DB_LOCK_DEADLOCK)
error=HA_ERR_LOCK_DEADLOCK;
handler::print_error(error,errflag);
}
/****************************************************************************
Analyzing, checking, and optimizing tables
......
......@@ -162,6 +162,7 @@ class ha_berkeley: public handler
pthread_mutex_unlock(&share->mutex);
}
longlong get_auto_increment();
void print_error(int error, myf errflag);
};
extern bool berkeley_skip, berkeley_shared_data;
......
......@@ -216,7 +216,7 @@ class handler :public Sql_alloc
int ha_open(const char *name, int mode, int test_if_locked);
void update_timestamp(byte *record);
void update_auto_increment();
void print_error(int error, myf errflag);
virtual void print_error(int error, myf errflag);
uint get_dup_key(int error);
void change_table_ptr(TABLE *table_arg) { table=table_arg; }
virtual double scan_time()
......
......@@ -2367,7 +2367,7 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused)))
if (!(test_flags & TEST_BLOCKING))
fcntl(sock, F_SETFL, flags);
#endif
if (new_sock < 0)
if (new_sock == INVALID_SOCKET)
{
if ((error_count++ & 255) == 0) // This can happen often
sql_perror("Error in accept");
......
......@@ -223,6 +223,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -217,6 +217,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -220,6 +220,7 @@
"Foutieve parameters voor %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -206,7 +206,7 @@
"Could not create slave thread, check system resources",
"User %-.64s has already more than 'max_user_connections' active connections",
"You may only use constant expressions with SET",
"Lock wait timeout exceeded",
"Lock wait timeout exceeded; Try restarting transaction",
"The total number of locks exceeds the lock table size",
"Update locks cannot be acquired during a READ UNCOMMITTED transaction",
"DROP DATABASE not allowed while thread is holding global read lock",
......@@ -214,6 +214,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -218,6 +218,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -214,6 +214,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -217,6 +217,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -214,6 +214,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -216,6 +216,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -214,6 +214,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -216,6 +216,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -214,6 +214,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -216,6 +216,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -216,6 +216,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -218,6 +218,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -214,6 +214,7 @@
"Argumentos errados para %s",
"Não é permitido a %-.32s@%-.64s criar novos usuários",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -218,6 +218,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -217,6 +217,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -222,6 +222,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
......@@ -215,6 +215,7 @@
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error de coneccion a master: %-128s",
"Error executando el query en master: %-128%",
"Error de %s: %-128%",
......
......@@ -206,7 +206,7 @@
"Kunde inte starta en tråd för replikering",
"Användare '%-.64s' har redan 'max_user_connections' aktiva inloggningar",
"Man kan endast använda konstant-uttryck med SET",
"Fick inte ett lås i tid",
"Fick inte ett lås i tid ; Försök att starta om transaktionen",
"Antal lås överskrider antalet reserverade lås",
"Updaterings-lås kan inte göras när man använder READ UNCOMMITTED",
"DROP DATABASE är inte tillåtet när man har ett globalt läs-lås",
......@@ -214,6 +214,7 @@
"Felaktiga argument till %s",
"%-.32s@%-.64s har inte rättighet att skapa nya användare",
"Felaktig tabell definition: Alla tabeller i en MERGE tabell måste vara i samma databas",
"Fick 'DEADLOCK' vid låsförsök av block/rad; Försök att starta om transaktionen",
"Fick fel vid anslutning till master: %-.128s",
"Fick fel vid utförande av command på mastern: %-.128s",
"Fick fel vid utförande av %s: %-.128s",
......
......@@ -219,6 +219,7 @@
" %s",
" %-.32s@%-.64s ަ",
"Incorrect table definition; All MERGE tables must be in the same database",
"Deadlock found when trying to get lock; Try restarting transaction",
"Error connecting to master: %-.128s",
"Error running query on master: %-.128s",
"Error when executing command %s: %-.128s",
......
#!/usr/bin/perl -w
#
#
# make_mysql_pkg.pl
#
# This script creates a Mac OS X installation package
# of MySQL for Apple's Installer application.
#
# To use it:
#
# 1.) Unpack the mysql source tarball and cd into the directory
# 2.) execute this script
#
#
# Written by Marc Liyanage (http://www.entropy.ch)
#
# History:
#
# When Who What
# -------------------------------------------------------------
# 2001-09-16 Marc Liyanage First version
use strict;
use DirHandle;
my $data = {};
$data->{PREFIX_DIR} = "/usr/local";
$data->{CONFIG} = "--prefix=$data->{PREFIX_DIR} --with-innodb";
prepare($data);
configure_source($data);
make($data);
make_binary_distribution($data);
create_pax_root($data);
create_package($data);
cleanup($data);
print "Package $data->{PACKAGE_TARBALL_FILENAME} created\n";
# Subroutines follow here...
# Prepares data in the global $data hash, like version numbers,
# directory names etc. Also makes sure that no old stuff
# is in our way.
#
sub prepare {
my ($data) = @_;
# Keep the current wd for reference
#
$data->{OLDWD} = `pwd`;
chomp($data->{OLDWD});
# Look for configure script
#
unless (-f "configure") {
abort($data, "Unable to find 'configure', make sure you're in the MySQL source toplevel directory!");
}
# Try to find version number there
#
my $mysql_version_h = `cat configure`;
($data->{VERSION}) = $mysql_version_h =~ /^VERSION=(.+?)$/m;
unless ($data->{VERSION} =~ /\d+/) {
abort($data, "Unable to find MySQL version number!");
}
debug($data, "found MySQL version number $data->{VERSION}");
# PAXROOT_DIR is where we will build our own little
# fake /usr/local directory. Make sure it doesn't exist,
# then try to create it.
#
$data->{PAXROOT_DIR} = "/tmp/mysql-$data->{VERSION}-paxroot";
if (-e $data->{PAXROOT_DIR}) {
abort($data, "$data->{PAXROOT_DIR} exists, please remove first");
}
if (system("mkdir $data->{PAXROOT_DIR}")) {
abort($data, "Unable to mkdir $data->{PAXROOT_DIR}, please make sure you have the right permissions!");
}
# PACKAGE_DIR is where we will build the package directory
# hierarchy, according to the standard .pkg layout.
#
$data->{PACKAGE_NAME} = "mysql-$data->{VERSION}.pkg";
$data->{PACKAGE_DIR} = "/tmp/$data->{PACKAGE_NAME}";
if (-e $data->{PACKAGE_DIR}) {
abort($data, "$data->{PACKAGE_DIR} exists, please remove first");
}
if (system("mkdir $data->{PACKAGE_DIR}")) {
abort($data, "Unable to mkdir $data->{PACKAGE_DIR}, please make sure you have the right permissions!");
}
}
# Configure the MySQL source with our options
#
sub configure_source {
my ($data) = @_;
if (system("./configure $data->{CONFIG}")) {
abort($data, "Unable to configure!");
}
}
# Build the software
#
sub make {
my ($data) = @_;
if (system("make")) {
abort($data, "Unable to make!");
}
}
# We don't ever install the software, but instead we use an
# included script to create a binary distribution
# tarball.
#
sub make_binary_distribution {
my ($data) = @_;
if (system("./scripts/make_binary_distribution > make_binary_distribution.out")) {
abort($data, "Unable to make_binary_distribution!");
}
my @output = `cat make_binary_distribution.out`;
my $last_line = $output[-1];
unlink("make_binary_distribution.out");
my ($tarball_filename, $tarball_directory) = $last_line =~ /^((.+)\.tar\.gz) created/i;
unless ($tarball_filename and -f $tarball_filename) {
abort($data, "Unable determine the output filename of scripts/make_binary_distribution!");
}
$data->{BINARY_TARBALL_FILENAME} = $tarball_filename;
$data->{BINARY_TARBALL_DIRECTORY} = $tarball_directory;
}
# Now we build a fake /usr/local directory hierarchy.
# This will be fed to the pax tool to create
# the archive.
#
sub create_pax_root {
my ($data) = @_;
# Go there and try to extract the binary distribution
# tarball which we created in the previous step.
#
chdir($data->{PAXROOT_DIR});
my $tarfile = "$data->{OLDWD}/$data->{BINARY_TARBALL_FILENAME}";
if(system("tar -xzf $tarfile")) {
abort($data, "Unable to extract $tarfile inside $data->{PAXROOT_DIR}");
}
# Rename it to what we want it to be in the
# installed /usr/local directory later on, i.e.
# mysql-<version>. Then create a symlink from
# mysql to mysql-<version>
#
rename($data->{BINARY_TARBALL_DIRECTORY}, "mysql-$data->{VERSION}");
symlink("mysql-$data->{VERSION}", "mysql");
# We create a bunch of symlinks in /usr/local/bin and
# /usr/local/share/man so that the end-user will not
# have to adjust PATH and MANPATH to include the
# /usr/local/mysql/bin and man directories.
#
system("mkdir -p $_") foreach qw(bin share/man);
# First create the symlinks in the bin directory
#
chdir("bin");
symlink("../mysql/bin/$_", "$_") foreach (grep {$_ !~ /^\.+$/} DirHandle->new("../mysql/bin")->read());
# Now include the man pages. Two problems here:
# 1.) the make_binary_distribution script does not seem
# to include the man pages, so we have to copy them over
# now.
# 2.) The man pages could be in different sections, so
# we have to recursively copy *and* symlink them.
#
# First find out what's there in the source distribution.
# Store the names of the manpages in anonymous
# arrays which in turn will be stored in a hash, using
# the section numbers as hash keys.
#
chdir($data->{OLDWD});
my %man_sections;
foreach my $manpage (grep {$_ =~ /^.+\.(\d+)$/} DirHandle->new("man")->read()) {
my ($section) = $manpage =~ /\.(\d+)$/;
$man_sections{$section} ||= [];
push @{$man_sections{$section}}, "$manpage";
}
# Now iterate through the sections and man pages,
# and copy/symlink the man pages
#
chdir("$data->{PAXROOT_DIR}/share/man/");
foreach my $section (keys(%man_sections)) {
system("mkdir -p $data->{PAXROOT_DIR}/mysql/man/man$section/");
system("mkdir -p man$section");
chdir("man$section");
foreach my $manpage (@{$man_sections{$section}}) {
system("cp $data->{OLDWD}/man/$manpage $data->{PAXROOT_DIR}/mysql/man/man$section/");
symlink("../../../mysql/man/man$section/$manpage", $manpage)
}
chdir("..");
}
}
# Take the pax root directory, create a few auxiliary
# files and then pack everything up into a tarball
#
sub create_package {
my ($data) = @_;
# Create the resources directory in which all
# interesting files for this package will be stored
#
$data->{PKG_RESOURCES_DIR} = "$data->{PACKAGE_DIR}/Contents/Resources";
if (system("mkdir -p $data->{PKG_RESOURCES_DIR}")) {
abort("Unable to create package resources dir $data->{PKG_RESOURCES_DIR}");
}
# Create the big archive with all the files using
# the pax tool
#
chdir($data->{PAXROOT_DIR});
if(system("pax -w . | gzip -c > $data->{PKG_RESOURCES_DIR}/mysql-$data->{VERSION}.pax.gz")) {
abort("Unable to create package pax file");
}
# Create the "Bill Of Materials" (bom) file.
#
if(system("mkbom . $data->{PKG_RESOURCES_DIR}/mysql-$data->{VERSION}.bom")) {
abort("Unable to create package bom file");
}
# Create the ".sizes" file with some information about the package
#
my $size_uncompressed = `du -sk $data->{PAXROOT_DIR} | cut -f 1`;
chomp($size_uncompressed);
my $size_compressed = `du -sk $data->{PACKAGE_DIR} | cut -f 1`;
chomp($size_compressed);
my $numfiles = `find /tmp/mysql-3.23.42-paxroot/ | wc -l`;
$numfiles--;
open(SIZESFILE, ">$data->{PKG_RESOURCES_DIR}/mysql-$data->{VERSION}.sizes") or abort("Unable to write open sizes file $data->{PKG_RESOURCES_DIR}/mysql-$data->{VERSION}.sizes");
print SIZESFILE "NumFiles $numfiles\n";
print SIZESFILE "InstalledSize $size_uncompressed\n";
print SIZESFILE "CompressedSize $size_compressed\n";
close(SIZESFILE);
# Create the ".info" file with more information abou the package.
#
open(INFOFILE, ">$data->{PKG_RESOURCES_DIR}/mysql-$data->{VERSION}.info") or abort("Unable to write open sizes file $data->{PKG_RESOURCES_DIR}/mysql-$data->{VERSION}.info");
my $infodata = join("", <DATA>);
$infodata =~ s/<%(.+?)%>/$data->{$1}/eg;
abort("Unable to get info file data from __DATA__!") unless ($infodata =~ /\w+/);
print INFOFILE $infodata;
close(INFOFILE);
# Finally, create the .tar.gz file for the package,
# this is our end result
#
chdir($data->{PACKAGE_DIR});
chdir("..");
$data->{PACKAGE_TARBALL_FILENAME} = "$data->{PACKAGE_NAME}.tar.gz";
if(system("tar -czf $data->{OLDWD}/$data->{PACKAGE_TARBALL_FILENAME} $data->{PACKAGE_NAME}")) {
abort("Unable to create package tar file $data->{OLDWD}/$data->{PACKAGE_TARBALL_FILENAME}");
}
}
# Abort with an error message
#
sub abort {
my ($data, $errormessage) = @_;
my ($caller) = (caller(1))[3];
$caller =~ s/^main:://;
print "*** Error: $caller(): $errormessage\n";
exit 1;
}
# Output informative messages
#
sub debug {
my ($data, $message) = @_;
my ($caller) = (caller(1))[3];
$caller =~ s/^main:://;
print "*** Info: $caller(): $message\n";
}
# Remove temporary items
#
sub cleanup {
my ($data) = @_;
chdir($data->{OLDWD});
system("rm -rf $data->{PACKAGE_DIR}");
system("rm -rf $data->{PAXROOT_DIR}");
system("rm $data->{BINARY_TARBALL_FILENAME}");
}
__DATA__
Title MySQL
Version <%VERSION%>
Description The MySQL database server in a convenient Mac OS X package. Some additional configuration is necessary, please see http://www.entropy.ch/software/macosx/mysql/
DefaultLocation /usr/local
Diskname (null)
DeleteWarning
NeedsAuthorization YES
DisableStop NO
UseUserMask NO
Application NO
Relocatable NO
Required NO
InstallOnly NO
RequiresReboot NO
InstallFat NO
\ No newline at end of file
#!/bin/sh
#
# make_mysql_pkg.sh
#
# This script creates a Mac OS X installation package
# for Apple's Installer application.
#
# To use it:
#
# 1.) unpack the MySQL source tarball
# 2.) cd to into the resulting directory and stay there for the next steps
# 3.) "configure" the source (preferably with --mandir=/usr/local/share/man)
# 4.) "make" the package
# 5.) invoke this script with superuser privileges (sudo or in a root shell)
#
# Written by Marc Liyanage (http://www.entropy.ch)
#
# History:
#
# When Who What
# -------------------------------------------------------------
# 2001-09-13 Marc Liyanage First version
# Find the version number of this particular MySQL build
#
OLDWD=`pwd`
VERSION_H_FILE=$OLDWD/include/mysql_version.h
if [ ! -e $VERSION_H_FILE ]
then
echo $VERSION_H_FILE not found, make sure you are in the mysql source dir
exit 1
fi
MYSQLVERSION=`egrep 'MYSQL_SERVER_VERSION' $VERSION_H_FILE | perl -e '$_ = <>; $_ =~ /"(.+?)"/; print $1'`
# We will temporarily rename /usr/local to this name
# and then mkdir a new, empty /usr/local
#
LOCAL_TMPDIR=/usr/local.tmp
# At the end, we'll keep our temporary /usr/local
# to this name
#
LOCAL_BACKUPDIR=/usr/local.mysql-package
# Where do we create the package directory
#
PKG_DIR=/tmp/mysql-$MYSQLVERSION.pkg
# Where is the resources directory within the
# package directory
#
PKG_RESOURCES_DIR=$PKG_DIR/Contents/Resources
# Check if old stuff is in our way
#
if [ -e $LOCAL_BACKUPDIR ]
then
echo $LOCAL_BACKUPDIR exists, please remove first...
exit 1
fi
if [ -e $LOCAL_TMPDIR ]
then
echo $LOCAL_TMPDIR exists, please remove first...
exit 1
fi
if [ -e $PKG_DIR ]
then
echo $PKG_DIR exists, please remove first...
exit 1
fi
# Now create the package dir
#
mkdir -p $PKG_RESOURCES_DIR
# Move the existing /usr/local out of our way
#
mv /usr/local $LOCAL_TMPDIR
# Now create our new empty temporary /usr/local
#
mkdir /usr/local
# And install MySQL there
#
make install
# cd there so the next few commands will use it
# as base directory
#
cd /usr/local
# First, create the gzipped pax archive file
# which contains the actual files
#
pax -w . | gzip -c > $PKG_RESOURCES_DIR/mysql-$MYSQLVERSION.pax.gz
# Create the bom ("Bill Of Materials") file
#
mkbom . $PKG_RESOURCES_DIR/mysql-$MYSQLVERSION.bom
# Create the sizes file with the package space
# requirement numbers and file count
#
SIZE_UNCOMPRESSED=`du -sk /usr/local | cut -f 1`
SIZE_COMPRESSED=`du -sk $PKG_DIR | cut -f 1`
NUMFILES=`find /usr/local | wc -l | perl -e '$_ = <>; $_ =~ /\s+(\d+)/; print $1 - 1'`
echo NumFiles $NUMFILES >> $PKG_RESOURCES_DIR/mysql-$MYSQLVERSION.sizes
echo InstalledSize $SIZE_UNCOMPRESSED >> $PKG_RESOURCES_DIR/mysql-$MYSQLVERSION.sizes
echo CompressedSize $SIZE_COMPRESSED >> $PKG_RESOURCES_DIR/mysql-$MYSQLVERSION.sizes
# Finally create the info file which drives the "Installer" application
#
cat >$PKG_RESOURCES_DIR/mysql-$MYSQLVERSION.info <<- EOF
Title MySQL
Version $MYSQLVERSION
Description The MySQL database server in a convenient Mac OS X package. Some additional configuration is necessary, please see http://www.entropy.ch/software/macosx/mysql/
DefaultLocation /usr/local
Diskname (null)
DeleteWarning
NeedsAuthorization YES
DisableStop NO
UseUserMask NO
Application NO
Relocatable NO
Required NO
InstallOnly NO
RequiresReboot NO
InstallFat NO
EOF
# Create a .tar.gz file for the package directory
#
cd $PKG_DIR
cd ..
DIRNAME=`dirname $PKG_DIR`
BASENAME=`basename $PKG_DIR`
FILENAME=$BASENAME.tar.gz
tar -cvzf $FILENAME $BASENAME
# Move our temporary /usr/local out of the way
# and the original one back
#
mv /usr/local $LOCAL_BACKUPDIR
mv $LOCAL_TMPDIR /usr/local
echo output package is in $DIRNAME/$FILENAME
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment