summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrien Nader <adrien@notk.org>2015-01-04 09:28:59 +0100
committerAdrien Nader <adrien@notk.org>2015-01-04 09:28:59 +0100
commit3cb2d45ee196d486929cc3e389909f4b825febc1 (patch)
tree348961141aa86fa9c957d94e6ba705b965cba8f2
parent197ad3c9653a97c9f02deab601d92abd9e329bb6 (diff)
libtheora: build cross-compiled an executable it then tried to run.
John L. Poole on the mailing-list had an issue with rebuilding libtheora. Turns out it was failing in several places but went unnoticed because of the lack of "set -e". John's issue was caused by an old automake on his system and the lack of "set -e" made the build fail only quite long after the actual issue. Adding it uncovered other issues. "make" failed but for a rule about doc/examples and "make install" went far enough to provide the files needed for build and running. Fixing this requires the ax_proc_cc_for_build.m4 file which provides the machinery needed to detect (but not build) a compiler suitable for the build machine and we also need to patch doc/spec/Makefile.am.
-rw-r--r--l/libtheora/ax_prog_cc_for_build.m4125
-rwxr-xr-xl/libtheora/libtheora.SlackBuild29
2 files changed, 142 insertions, 12 deletions
diff --git a/l/libtheora/ax_prog_cc_for_build.m4 b/l/libtheora/ax_prog_cc_for_build.m4
new file mode 100644
index 0000000..77fd346
--- /dev/null
+++ b/l/libtheora/ax_prog_cc_for_build.m4
@@ -0,0 +1,125 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PROG_CC_FOR_BUILD
+#
+# DESCRIPTION
+#
+# This macro searches for a C compiler that generates native executables,
+# that is a C compiler that surely is not a cross-compiler. This can be
+# useful if you have to generate source code at compile-time like for
+# example GCC does.
+#
+# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything
+# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD).
+# The value of these variables can be overridden by the user by specifying
+# a compiler with an environment variable (like you do for standard CC).
+#
+# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object
+# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if
+# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are
+# substituted in the Makefile.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 8
+
+AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
+AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_CPP])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+dnl Use the standard macros, but make them use other variable names
+dnl
+pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
+pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
+pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
+pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
+pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
+pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl
+pushdef([ac_cv_objext], ac_cv_build_objext)dnl
+pushdef([ac_exeext], ac_build_exeext)dnl
+pushdef([ac_objext], ac_build_objext)dnl
+pushdef([CC], CC_FOR_BUILD)dnl
+pushdef([CPP], CPP_FOR_BUILD)dnl
+pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
+pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
+pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
+pushdef([host], build)dnl
+pushdef([host_alias], build_alias)dnl
+pushdef([host_cpu], build_cpu)dnl
+pushdef([host_vendor], build_vendor)dnl
+pushdef([host_os], build_os)dnl
+pushdef([ac_cv_host], ac_cv_build)dnl
+pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
+pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
+pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
+pushdef([ac_cv_host_os], ac_cv_build_os)dnl
+pushdef([ac_cpp], ac_build_cpp)dnl
+pushdef([ac_compile], ac_build_compile)dnl
+pushdef([ac_link], ac_build_link)dnl
+
+save_cross_compiling=$cross_compiling
+save_ac_tool_prefix=$ac_tool_prefix
+cross_compiling=no
+ac_tool_prefix=
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_EXEEXT
+
+ac_tool_prefix=$save_ac_tool_prefix
+cross_compiling=$save_cross_compiling
+
+dnl Restore the old definitions
+dnl
+popdef([ac_link])dnl
+popdef([ac_compile])dnl
+popdef([ac_cpp])dnl
+popdef([ac_cv_host_os])dnl
+popdef([ac_cv_host_vendor])dnl
+popdef([ac_cv_host_cpu])dnl
+popdef([ac_cv_host_alias])dnl
+popdef([ac_cv_host])dnl
+popdef([host_os])dnl
+popdef([host_vendor])dnl
+popdef([host_cpu])dnl
+popdef([host_alias])dnl
+popdef([host])dnl
+popdef([LDFLAGS])dnl
+popdef([CPPFLAGS])dnl
+popdef([CFLAGS])dnl
+popdef([CPP])dnl
+popdef([CC])dnl
+popdef([ac_objext])dnl
+popdef([ac_exeext])dnl
+popdef([ac_cv_objext])dnl
+popdef([ac_cv_exeext])dnl
+popdef([ac_cv_prog_cc_g])dnl
+popdef([ac_cv_prog_cc_cross])dnl
+popdef([ac_cv_prog_cc_works])dnl
+popdef([ac_cv_prog_gcc])dnl
+popdef([ac_cv_prog_CPP])dnl
+
+dnl Finally, set Makefile variables
+dnl
+BUILD_EXEEXT=$ac_build_exeext
+BUILD_OBJEXT=$ac_build_objext
+AC_SUBST(BUILD_EXEEXT)dnl
+AC_SUBST(BUILD_OBJEXT)dnl
+AC_SUBST([CFLAGS_FOR_BUILD])dnl
+AC_SUBST([CPPFLAGS_FOR_BUILD])dnl
+AC_SUBST([LDFLAGS_FOR_BUILD])dnl
+])
diff --git a/l/libtheora/libtheora.SlackBuild b/l/libtheora/libtheora.SlackBuild
index e43a719..5aeab0d 100755
--- a/l/libtheora/libtheora.SlackBuild
+++ b/l/libtheora/libtheora.SlackBuild
@@ -25,18 +25,10 @@ PKGNAM=libtheora
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
BUILD=${BUILD:-1}
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) export ARCH=i486 ;;
- arm*) export ARCH=arm ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$( uname -m ) ;;
- esac
-fi
-
NUMJOBS=${NUMJOBS:-" -j7 "}
+set -e
+
CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-${PKGNAM}
@@ -55,7 +47,20 @@ chmod -R u+w,go+r-w,a-s .
find . -iname '*.def' -exec sed -i 's/\r//' {} +
#! PATCH
-autoreconf -fiv
+cp ${CWD}/ax_prog_cc_for_build.m4 m4
+sed -i '/^AC_PROG_CC$/ a AC_PROG_CC_FOR_BUILD' configure.ac
+sed -i \
+ -e '/^noinst_PROGRAMS = vp3huff$/ d' \
+ -e '/^vp3huff_SOURCES = vp3huff.c$/ d' \
+ -e '/^\t.\/vp3huff > $@$/ a vp3huff$(EXEEXT_FOR_BUILD):\n\t$(CC_FOR_BUILD) -o vp3huff$(EXEEXT_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) vp3huff.c' \
+ doc/spec/Makefile.am
+# Also need to add EXEEXT_FOR_BUILD in './vp3huff > $@' but no use for now and
+# we have no need for it, better make a patch to upstream
+
+#! PATCH
+# The configure file has syntax errors which disappear after re-generation.
+# Moreover it's needed for the patch above.
+autoreconf -fiv -I m4
# Configure:
CFLAGS="-O2" \
@@ -65,7 +70,7 @@ CFLAGS="-O2" \
--disable-static \
--disable-examples \
--host=${HOST_TRIPLET} \
- --build=$ARCH-slackware-linux
+ --build=${BUILD_TRIPLET}
# Build and install:
make $NUMJOBS || make || exit 1