#!/bin/sh # # %CopyrightBegin% # # Copyright Ericsson AB 2010. All Rights Reserved. # # The contents of this file are subject to the Erlang Public License, # Version 1.1, (the "License"); you may not use this file except in # compliance with the License. You should have received a copy of the # Erlang Public License along with this software. If not, it can be # retrieved online at http://www.erlang.org/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # %CopyrightEnd% # # Author: Rickard Green # target= build_otp= erl_top= force=no while [ $# -gt 0 ]; do case "$1" in -target) shift test $# -gt 0 || { echo "$0: Missing target" 1>&2; exit 1; } target="$1";; -otp) shift test $# -gt 0 || { echo "$0: Missing otp release" 1>&2; exit 1; } build_otp="$1";; -erl_top) shift test $# -gt 0 || { echo "$0: Missing erl top" 1>&2; exit 1; } erl_top="$1";; -force) shift test $# -gt 0 || { echo "$0: Missing force value" 1>&2; exit 1; } force=$1;; *) echo "$0: Bad argument: $1" 1>&2 exit 1;; esac shift done test "X$target" != "X" || { echo "$0: Missing target" 1>&2; exit 1; } test "X$build_otp" != "X" || { echo "$0: Missing otp release" 1>&2; exit 1; } test "X$erl_top" != "X" || { echo "$0: Missing erl top" 1>&2; exit 1; } test "X$force" != "X" || { echo "$0: Missing force value" 1>&2; exit 1; } cd $erl_top cat > cross_check_erl.erl <<\EOF % % Copyright Ericsson AB 2010. All Rights Reserved. % % The contents of this file are subject to the Erlang Public License, % Version 1.1, (the "License"); you may not use this file except in % compliance with the License. You should have received a copy of the % Erlang Public License along with this software. If not, it can be % retrieved online at http://www.erlang.org/. % % Software distributed under the License is distributed on an "AS IS" % basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See % the License for the specific language governing rights and limitations % under the License. % -module(cross_check_erl). -export([start/0]). start() -> OTP = case catch erlang:system_info(otp_release) of {'EXIT', _} -> "OTP"; Rel -> "OTP-" ++ Rel end, io:format("~s~n", [OTP]), init:stop(). EOF erlc cross_check_erl.erl 2>/dev/null \ && used_otp=`erl -noshell -noinput -pa . -run cross_check_erl 2>/dev/null` res=$? rm -f cross_check_erl.erl cross_check_erl.beam test $res -eq 0 || { cat 1>&2 <<EOF * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ERROR: No usable Erlang/OTP system for the build machine found! Cannot * cross compile without such a system. * * Either build a bootstrap system for the build machine, or provide * an Erlang/$build_otp system in the \$PATH, and try again. For more * information on cross compiling Erlang/$build_otp, see the * \$ERL_TOP/xcomp/README file. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EOF exit 1 } test "X$build_otp" = "X$used_otp" || { test $force = yes || { cat 1>&2 <<EOF * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ERROR: Trying to cross compile an Erlang/$build_otp system with a different * Erlang/$used_otp system. When cross compiling you should compile * with an Erlang/OTP system of the same release. It is possible, * however not recomended, to force the cross compilation even though * the wrong Erlang/OTP system is used. For more information on this, * and cross compiling Erlang/$build_otp in general, see the * \$ERL_TOP/xcomp/README file. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EOF exit 1 } cat <<EOF * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * WARNING: Cross compiling an Erlang/$build_otp system with a different * Erlang/$used_otp system. When cross compiling you should compile * with an Erlang/OTP system of the same release. This build might * fail, or silently produce suboptimal code. For more information on * cross compiling Erlang/$build_otp, see the \$ERL_TOP/xcomp/README * file. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EOF } cat <<EOF * * Cross compiling Erlang/$build_otp for: $target * EOF exit 0