summaryrefslogtreecommitdiff
path: root/scripts/make_binary_distribution.sh
diff options
context:
space:
mode:
authorJoerg Bruehe <joerg@mysql.com>2009-06-26 11:58:19 +0200
committerJoerg Bruehe <joerg@mysql.com>2009-06-26 11:58:19 +0200
commit4bcab578af7a90536070663de13e2ec7aeed0138 (patch)
treed80808f406538b7fba0a3cbdc39e16df08753101 /scripts/make_binary_distribution.sh
parent46f95f0b8283999574b37438626d09e86fafa077 (diff)
downloadmariadb-git-4bcab578af7a90536070663de13e2ec7aeed0138.tar.gz
This is a fix for bug#37808
"make_binary_distribution" does not always generate correct names Originally, we solved deficiencies of the predefined "autoconf" macros (at least on OS X 10.5, they do not correctly differ between "x86" and "x86_64") by providing explicit "--platform" arguments. With this patch, "make_binary_distribution" evaluates CFLAGS, so it "just works" because CFLAGS contains information about the target CPU. This patch is accompanied by a change in our build tools that drops the setting of "--platform" arguments. scripts/make_binary_distribution.sh: This is a fix for bug#37808 "make_binary_distribution" does not always generate correct names Our platform names are the combination of operating system, architecture (CPU), and a possible suffix (typically "64bit", if a CPU is available in 32 bit too). We get these values from some predefined "autoconf" macros. However, these macros are not perfect, especially on OS X 10.5 they do not differ correctly between x86 (32 bit) and x86_64 (64 bit). Originally, we solved that by providing an explicit "--platform" argument, but it is better to get rid of that and ensure the script "just works". The best indication we have about the CPU is the "CFLAGS" value provided with "configure" and used in "make": It describes for which CPU the binaries are generated, not just which one was running the build. This approach should work even if we implement cross-compilation. So this patch evaluates CFLAGS and extracts its "-arch XYZ" part. When touching the file, I also replaced some tab characters by blanks.
Diffstat (limited to 'scripts/make_binary_distribution.sh')
-rw-r--r--scripts/make_binary_distribution.sh50
1 files changed, 45 insertions, 5 deletions
diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh
index f156ea3b986..1be5d253e2f 100644
--- a/scripts/make_binary_distribution.sh
+++ b/scripts/make_binary_distribution.sh
@@ -28,6 +28,12 @@ SOURCE=`pwd`
CP="cp -p"
MV="mv"
+# There are platforms, notably OS X on Intel (x86 + x86_64),
+# for which "uname" does not provide sufficient information.
+# The value of CFLAGS as used during compilation is the most exact info
+# we can get - after all, we care about _what_ we built, not _where_ we did it.
+cflags="@CFLAGS@"
+
STRIP=1
DEBUG=0
SILENT=0
@@ -71,10 +77,44 @@ system=`echo $system | sed -e 's/linux-gnu/linux/g'`
system=`echo $system | sed -e 's/solaris2.\([0-9]*\)/solaris\1/g'`
system=`echo $system | sed -e 's/sco3.2v\(.*\)/openserver\1/g'`
+# Get the "machine", which really is the CPU architecture (including the size).
+# The precedence is:
+# 1) use an explicit argument, if given;
+# 2) use platform-specific fixes, if there are any (see bug#37808);
+# 3) stay with the default (determined during "configure", using predefined macros).
if [ x"$MACHINE" != x"" ] ; then
machine=$MACHINE
+else
+ case $system in
+ osx* )
+ # Extract "XYZ" from CFLAGS "... -arch XYZ ...", or empty!
+ cflag_arch=`echo "$cflags" | sed -n -e 's=.* -arch \([^ ]*\) .*=\1=p'`
+ case "$cflag_arch" in
+ i386 ) case $system in
+ osx10.4 ) machine=i686 ;; # Used a different naming
+ * ) machine=x86 ;;
+ esac ;;
+ x86_64 ) machine=x86_64 ;;
+ ppc ) ;; # No treatment needed with PPC
+ ppc64 ) ;;
+ * ) # No matching compiler flag? "--platform" is needed
+ if [ x"$PLATFORM" != x"" ] ; then
+ : # See below: "$PLATFORM" will take precedence anyway
+ elif [ "$system" = "osx10.3" -a -z "$cflag_arch" ] ; then
+ : # Special case of OS X 10.3, which is PPC-32 only and doesn't use "-arch"
+ else
+ echo "On system '$system' only specific '-arch' values are expected."
+ echo "It is taken from the 'CFLAGS' whose value is:"
+ echo "$cflags"
+ echo "'-arch $cflag_arch' is unexpected, and no '--platform' was given: ABORT"
+ exit 1
+ fi ;;
+ esac # "$cflag_arch"
+ ;;
+ esac # $system
fi
+# Combine OS and CPU to the "platform". Again, an explicit argument takes precedence.
if [ x"$PLATFORM" != x"" ] ; then
platform="$PLATFORM"
else
@@ -117,10 +157,10 @@ which_1 ()
do
for file in $d/$cmd
do
- if [ -x $file -a ! -d $file ] ; then
- echo $file
- exit 0
- fi
+ if [ -x $file -a ! -d $file ] ; then
+ echo $file
+ exit 0
+ fi
done
done
done
@@ -354,7 +394,7 @@ if [ $BASE_SYSTEM = "netware" ] ; then
$BASE/support-files/mysql-log-rotate \
$BASE/support-files/binary-configure \
$BASE/support-files/build-tags \
- $BASE/support-files/MySQL-shared-compat.spec \
+ $BASE/support-files/MySQL-shared-compat.spec \
$BASE/support-files/ndb-config-2-node.ini \
$BASE/INSTALL-BINARY
fi