diff options
author | unknown <lenz@mysql.com> | 2003-02-03 20:39:48 +0100 |
---|---|---|
committer | unknown <lenz@mysql.com> | 2003-02-03 20:39:48 +0100 |
commit | 46318870b042cfcd2449eef58c3a9519c00d409d (patch) | |
tree | 91b8500ad29cd9ee0cd23ebf67de2c56b7c16f39 /support-files/MacOSX | |
parent | 39f46988e80efa85731b1127f20cac60cf17b4a3 (diff) | |
download | mariadb-git-46318870b042cfcd2449eef58c3a9519c00d409d.tar.gz |
- added support-files/MacOSX to include files specific for building
MacOSX packages using PackageMaker
- renamed support-files/PKG -> support-files/SCO (PKG is used in MacOS X
terminology as well)
support-files/SCO/INSTALL.sh:
mvdir
support-files/SCO/compile.sh:
mvdir
support-files/SCO/doc.sh:
mvdir
support-files/SCO/mkpkg.sh:
mvdir
support-files/SCO/patch:
mvdir
support-files/SCO/pkginfo.ini:
mvdir
support-files/SCO/postinstall:
mvdir
support-files/SCO/preinstall:
mvdir
support-files/SCO/preremove:
mvdir
support-files/SCO/prototype.ini:
mvdir
support-files/SCO/version:
mvdir
support-files/MacOSX/make_mysql_pkg.pl:
Rename: support-files/make_mysql_pkg.pl -> support-files/MacOSX/make_mysql_pkg.pl
configure.in:
- added support-files/MacOSX
support-files/Makefile.am:
- added MacOSX subdirectory
Diffstat (limited to 'support-files/MacOSX')
-rw-r--r-- | support-files/MacOSX/Description.plist.sh | 14 | ||||
-rw-r--r-- | support-files/MacOSX/Info.plist.sh | 38 | ||||
-rw-r--r-- | support-files/MacOSX/Makefile.am | 37 | ||||
-rw-r--r-- | support-files/MacOSX/make_mysql_pkg.pl | 475 |
4 files changed, 564 insertions, 0 deletions
diff --git a/support-files/MacOSX/Description.plist.sh b/support-files/MacOSX/Description.plist.sh new file mode 100644 index 00000000000..4f388235eee --- /dev/null +++ b/support-files/MacOSX/Description.plist.sh @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IFPkgDescriptionDeleteWarning</key> + <string></string> + <key>IFPkgDescriptionDescription</key> + <string>This package provides a binary installation of MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X.</string> + <key>IFPkgDescriptionTitle</key> + <string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X</string> + <key>IFPkgDescriptionVersion</key> + <string>@VERSION@@MYSQL_SERVER_SUFFIX@</string> + </dict> +</plist> diff --git a/support-files/MacOSX/Info.plist.sh b/support-files/MacOSX/Info.plist.sh new file mode 100644 index 00000000000..c8e4eb1c2d4 --- /dev/null +++ b/support-files/MacOSX/Info.plist.sh @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleGetInfoString</key> + <string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@</string> + <key>CFBundleIdentifier</key> + <string>com.mysql.mysql</string> + <key>CFBundleName</key> + <string>MySQL</string> + <key>CFBundleShortVersionString</key> + <string>@VERSION@</string> + <key>IFMajorVersion</key> + <integer>4</integer> + <key>IFMinorVersion</key> + <integer>0</integer> + <key>IFPkgFlagAllowBackRev</key> + <false/> + <key>IFPkgFlagAuthorizationAction</key> + <string>RootAuthorization</string> + <key>IFPkgFlagDefaultLocation</key> + <string>/usr/local</string> + <key>IFPkgFlagInstallFat</key> + <false/> + <key>IFPkgFlagIsRequired</key> + <false/> + <key>IFPkgFlagRelocatable</key> + <false/> + <key>IFPkgFlagRestartAction</key> + <string>NoRestart</string> + <key>IFPkgFlagRootVolumeOnly</key> + <false/> + <key>IFPkgFlagUpdateInstalledLanguages</key> + <false/> + <key>IFPkgFormatVersion</key> + <real>0.10000000149011612</real> +</dict> +</plist> diff --git a/support-files/MacOSX/Makefile.am b/support-files/MacOSX/Makefile.am new file mode 100644 index 00000000000..0702d104e7e --- /dev/null +++ b/support-files/MacOSX/Makefile.am @@ -0,0 +1,37 @@ +# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +# MA 02111-1307, USA + +## Process this file with automake to create Makefile.in + +EXTRA_DIST = Info.plist.sh Description.plist.sh + +pkgdata_DATA = Info.plist Description.plist + +CLEANFILES = Info.plist Description.plist + +SUFFIXES = .sh + +.sh: + @RM@ -f $@ $@-t + @SED@ \ + -e 's!@''VERSION''@!@VERSION@!' \ + -e 's!@''MYSQL_SERVER_SUFFIX''@!@MYSQL_SERVER_SUFFIX@!' \ + $< > $@-t + @MV@ $@-t $@ + +# Don't update the files from bitkeeper +%::SCCS/s.% diff --git a/support-files/MacOSX/make_mysql_pkg.pl b/support-files/MacOSX/make_mysql_pkg.pl new file mode 100644 index 00000000000..22283d57098 --- /dev/null +++ b/support-files/MacOSX/make_mysql_pkg.pl @@ -0,0 +1,475 @@ +#!/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 +# 2001-11-18 Marc Liyanage Improved configure directory options +# + +use strict; +use DirHandle; + +my $data = {}; + +$data->{PREFIX_DIR} = "/usr/local/mysql"; +$data->{CONFIG} = join(" ", + "--prefix=$data->{PREFIX_DIR}", + "--localstatedir=$data->{PREFIX_DIR}/data", + "--libdir=$data->{PREFIX_DIR}/lib", + "--includedir=$data->{PREFIX_DIR}/include", + "--with-named-z-libs=/usr/local/libz.a", + "--with-innodb", + "--with-server-suffix='-entropy.ch'", + "--with-comment='http://www.entropy.ch/software/macosx/mysql/'", + "--with-mysqld-user=mysql", + "--enable-assembler", + "CFLAGS=\"-DHAVE_BROKEN_REALPATH -lncurses\"", +); + + + + + +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 + # + # 2001-02-13: we no longer use symlinks for the binaries, we + # use small dummy scripts instead because the + # mysql scripts do a lot of guesswork with their + # own path and that will not work when called via the symlink + # +# symlink("../mysql/bin/$_", "$_") foreach (grep {$_ !~ /^\.+$/} DirHandle->new("../mysql/bin")->read()); + + chdir("bin"); + + foreach my $command (grep {$_ !~ /^\.+$/} DirHandle->new("../mysql/bin")->read()) { + + my $scriptcode = qq+#!/bin/sh\n# Part of the entropy.ch mysql package\ncd /usr/local/mysql/\nexec ./bin/$command "\$\@"\n+; + open(SCRIPTFILE, ">$command") or die "Unable to write open $command\n"; + print SCRIPTFILE $scriptcode; + close(SCRIPTFILE); + chmod(0755, $command); + + } + + + + + + + + # 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. [outdated, was fixed by MySQL!] + # 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->{PAXROOT_DIR}/mysql"); + 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 man$section"); + chdir("man$section"); + + foreach my $manpage (@{$man_sections{$section}}) { + + symlink("../../../mysql/man/$manpage", $manpage) + + } + + chdir(".."); + + } + + + + # Fix up the library and lib directories. They are packed up wrong in the + # binary distribution tarball. + # + # (no longer needed as of 3.23.47) + # (oops, still needed because 3.23.47 is broken...) + # +# if (-d "$data->{PAXROOT_DIR}/mysql/lib/mysql") { +# abort($data, "$data->{PAXROOT_DIR}/mysql/lib/mysql exists, layout has changed!"); +# } +# chdir("$data->{PAXROOT_DIR}/mysql/lib/"); +# system("mkdir -p mysql"); +# system("mv * mysql"); + +# if (-d "$data->{PAXROOT_DIR}/mysql/include/mysql") { +# abort($data, "$data->{PAXROOT_DIR}/mysql/include/mysql exists, layout has changed!"); +# } +# chdir("$data->{PAXROOT_DIR}/mysql/include/"); +# system("mkdir -p mysql"); +# system("mv * mysql"); + + + + + + + + + +} + + + +# 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-$data->{VERSION}-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 |