diff options
Diffstat (limited to 'make')
-rwxr-xr-x | make/cross_check_erl | 147 | ||||
-rwxr-xr-x | make/install_bin | 702 | ||||
-rw-r--r-- | make/otp.mk.in | 36 | ||||
-rw-r--r-- | make/otp_ded.mk.in | 44 | ||||
-rw-r--r-- | make/otp_release_targets.mk | 55 | ||||
-rw-r--r-- | make/otp_subdir.mk | 20 | ||||
-rwxr-xr-x | make/unexpected_use | 29 |
7 files changed, 986 insertions, 47 deletions
diff --git a/make/cross_check_erl b/make/cross_check_erl new file mode 100755 index 0000000000..cb9dadfb32 --- /dev/null +++ b/make/cross_check_erl @@ -0,0 +1,147 @@ +#!/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 diff --git a/make/install_bin b/make/install_bin new file mode 100755 index 0000000000..0d3e82266e --- /dev/null +++ b/make/install_bin @@ -0,0 +1,702 @@ +#!/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 +# + +# +# NOTE! This script needs to be portable since it is run on all platforms +# (besides win32). Keep this in mind when updating it. +# + +## set `INST_BIN_DEBUG=true' in environment when debugging the script to +## avoid removing, and creating stuff etc... + +## +## We do not reset these variables, since values may be passed either via +## environment, or command line arguments. +## +#bindir= +#exec_prefix= +#erlang_bindir= +#DESTDIR= +#EXTRA_PREFIX= +#BINDIR_SYMLINKS= +#LN_S= +tst= + +# +# When this script communicates with the user it talks of the parameters +# as they are given to configure if such exist (currently --bindir, and +# --exec-prefix); otherwise, as the variable names used in the top +# Makefile (which calls this script). +# + +path_variables="DESTDIR EXTRA_PREFIX exec_prefix bindir erlang_bindir" +DQ= + +dbg= +test "$INST_BIN_DEBUG" != "true" || dbg=true + +while [ $# -gt 1 ]; do + case "$1" in + --bindir) bindir="$2";; + --exec-prefix) exec_prefix="$2";; + --erlang-bindir) erlang_bindir="$2";; + --destdir) DESTDIR="$2";; + --extra-prefix) EXTRA_PREFIX="$2";; + --bindir-symlinks) BINDIR_SYMLINKS="$2";; + --ln_s) LN_S="$2";; + --test-file) tst="$2";; + *) break;; + esac + shift + shift +done + + +test $# -gt 0 || { + echo " ERROR: Missing files to install" 1>&2 + test "$tst" = "" || echo "{error,{arg,missing_files}}." > $tst + exit 1; +} +test "$bindir" != "" || { + echo " ERROR: Missing --bindir" 1>&2 + test "$tst" = "" || echo "{error,{arg,missing_bindir}}." > $tst + exit 1 +} +test "$exec_prefix" != "" || { + echo " ERROR: Missing --exec-prefix" 1>&2 + test "$tst" = "" || echo "{error,{arg,missing_exec_prefix}}." > $tst + exit 1 +} +test "$erlang_bindir" != "" || { + echo " ERROR: Missing erlang_bindir" 1>&2 + test "$tst" = "" || echo "{error,{arg,missing_erlang_bindir}}." > $tst + exit 1 +} + +# Make sure all paths are absolute +for dir_var in $path_variables; do + eval "dir_path=\"\$$dir_var\"" + + case "$dir_path" in + /*) ;; + "") + # Empty DESTDIR or EXTRA_PREFIX which is ok + case $dir_var in + DESTDIR|EXTRA_PREFIX) ;; + *) + echo " ERROR: Internal error: \$$dir_var is empty" 1>&2 + test "$tst" = "" || echo "{error,{empty,$dir_var}}." > $tst + exit 1;; + esac + continue;; + *) + case $dir_var in + bindir) flag="--bindir=";; + exec_prefix) flag="--exec-prefix=";; + erlang_bindir) flag="erlang_bindir=";; + DESTDIR) flag="DESTDIR=";; + EXTRA_PREFIX) flag="EXTRA_PREFIX=";; + *) flag="";; # Need to update the script... + esac + cat 1>&2 <<EOF + ERROR: Found path to a directory which was not absolute. All paths needs to + be absolute. + + $flag"$dir_path" +EOF + test "$tst" = "" || echo "{error,{not_abs,'$dir_var'}}." > $tst + exit 1;; + esac + case "$dir_path" in + *[!A-Za-z0-9/=_.-]*) DQ="\"";; + *) ;; + esac +done + +# We place temporary check files in the source dir and the target dir. These +# can later be used to verify that our modifications of the paths are +# successful. + +test "$dbg" = "true" || { + bchk_file="tmp-erlang-install-bin.$$" + ebchk_file="tmp-erlang-install-erl-bin.$$" + bchk="$DESTDIR$EXTRA_PREFIX$bindir/$bchk_file" + ebchk="$DESTDIR$EXTRA_PREFIX$erlang_bindir/$ebchk_file" + chk_txt="Temporary Erlang/OTP install file." + chk_err=no + + # Make sure we haven't got any old ones... + rm -f "$bchk" "$ebchk" + + { { echo "$chk_txt" > "$ebchk"; } 2>/dev/null && test -r "$ebchk"; } || { + cat 1>&2 <<EOF + ERROR: Cannot create files in 'erlang_bindir'. + +EOF + chk_err=no_create_erlang_bindir + } + + { { echo "$chk_txt" > "$bchk"; } 2>/dev/null && test -r "$bchk"; } || { + cat 1>&2 <<EOF + ERROR: Cannot create files in '--bindir'. + +EOF + chk_err=no_create_bindir + } + + + { test $chk_err != no || + test ! -f "$DESTDIR$EXTRA_PREFIX$bindir/$ebchk_file"; } || { + # Refuse to install in the same directory as the source... + cat 1>&2 <<EOF + ERROR: '--bindir' and 'erlang_bindir' both points to the same directory. This + can be due to symbolic directory links. + +EOF + chk_err=target_and_source_same_dir + } + + test $chk_err = no || { + cat 1>&2 <<EOF + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" + + Note that all absolute directory paths are prefixed by + \$DESTDIR\$EXTRA_PREFIX when accessed. +EOF + rm -f "$bchk" "$ebchk" + test "$tst" = "" || echo "{error,$chk_err}." > $tst + exit 1 + } +} + +dirty=no + +# Make all paths look good (remove all `.' dirs, `//', and trailing `/'). +for dir_var in $path_variables; do + eval "dir_path=\"\$$dir_var\"" + test "$dir_path" != "" || continue + + ndp= + save_IFS=$IFS + IFS=/ + for dir in $dir_path; do + case "$dir" in + "" | ".") continue;; + "..") + case $dir_var in + bindir|erlang_bindir|exec_prefix) dirty=yes;; + *) ;; + esac;; + *) ;; + esac + ndp="$ndp/$dir" + done + IFS=$save_IFS + test "$ndp" != "" || ndp="/" + eval "$dir_var=\"$ndp\"" +done + +iprfx="$DESTDIR$EXTRA_PREFIX" + +# Make sure we didn't mess up +{ $dbg test -f "$iprfx$bindir/$bchk_file" && + $dbg test -f "$iprfx$erlang_bindir/$ebchk_file"; } || { + cat 1>&2 <<EOF + ERROR: Internal error: Unsuccessfully trimmed the paths + + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + --exec-prefix="$exec_prefix" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" +EOF + $dbg rm -f "$bchk" "$ebchk" + test "$tst" = "" || echo "{error,bad_trim}." > $tst + exit 1 +} + +# Now all paths look good... + + +# $ln_s should be either 'ln -s', 'ln', or 'cp -p'. We don't want to +# maks hard links, so make sure we got 'ln -s'; otherwise, use 'cp -p' + +# This is the fallback if we haven't got 'ln -s' +ln_s="cp -p" +type=copy +paths=absolute +abspath_reason=no_ln_s +src_dir="$iprfx$erlang_bindir" + +case "X${LN_S}X" in + Xln[\ \ ]*X|X*[\ \ ]ln[\ \ ]*X) + # Got `ln'; check that we also got `-s' flag + case "X${LN_S}X" in + X*[\ \ ]-sX|X*[\ \ ]-s[\ \ ]*X) + # Ok; seems like we got `ln -s' + ln_s="ln -s" + type=link + paths="$BINDIR_SYMLINKS" + test "$BINDIR_SYMLINKS" = "absolute" && abspath_reason=request + # $DESTDIR should *not* be part of src_dir when linking + src_dir="$EXTRA_PREFIX$erlang_bindir" + ;; + *) ;; + esac;; + *) ;; +esac + +case "$paths" in + absolute|relative) ;; + *) paths=undetermined;; +esac + +# Determine if we should use absolute or relative paths for links +test $paths != absolute && { + # If $paths is undetermined, use absolute paths unless both $bindir + # and $erlang_bindir are prefixed by $exec_prefix (which is the normal + # case) + test $paths = relative || paths=absolute + abspath_reason=not_prefix + resolved_bindir="$bindir" + resolved_erlang_bindir="$erlang_bindir" + resolved_exec_prefix="$exec_prefix" + case "$bindir" in + "$exec_prefix"*) + case "$erlang_bindir" in + "$exec_prefix"*) paths=relative;; + *) ;; + esac;; + *);; + esac + # Now paths=absolute|relative + + # If we got dirty paths (contains ..) and are going for relative links, + # we need to resolve the paths + test $dirty-$paths = yes-relative && { + # Need to resolve $bindir and $erlang_bindir paths + for dir_var in bindir erlang_bindir exec_prefix; do + eval "dir_path=\"\$$dir_var\"" + + ndp="/" + save_IFS=$IFS + IFS=/ + for dir in $dir_path; do + case "$dir" in + "") ;; + "..") + test "$ndp" != "/" || { + IFS=$save_IFS + paths=absolute + abspath_reason=unreasonable_path + break 2 + } + ndp=`dirname "$ndp" 2>/dev/null` || { + IFS=$save_IFS + paths=absolute + abspath_reason=dirname_failed + break 2 + };; + *) + if test "$ndp" = "/"; then + ndp="/$dir" + else + ndp="$ndp/$dir" + fi;; + esac + done + IFS=$save_IFS + test "$ndp" != "" || ndp="/" + eval "resolved_$dir_var=\"$ndp\"" + done + } + + # If we still are going for relative and relative symbolic links have + # not been explicitly requested check that the resolved paths still + # are prefixed by exec_prefix + test $paths = relative && test "$BINDIR_SYMLINKS" != "relative" && { + paths=absolute + abspath_reason=not_prefix + case "$resolved_bindir" in + "$resolved_exec_prefix"*) + case "$resolved_erlang_bindir" in + "$resolved_exec_prefix"*) + paths=relative;; + *) ;; + esac;; + *) ;; + esac + } + + # If we still are going for relative check that resolved paths are + # reachable (might not be if the directory structure contains symbolic + # directory links). + test $paths = relative && { + ($dbg test -r "$iprfx$resolved_bindir/$bchk_file" && + $dbg test -r "$iprfx$resolved_erlang_bindir/$ebchk_file" && + $dbg cd "$iprfx$resolved_bindir" && + $dbg test -r "./$bchk_file" && + $dbg cd "$iprfx$resolved_erlang_bindir" && + $dbg test -r "./$ebchk_file") || { + paths=absolute + abspath_reason=unreachable_absolute + } + } + + + # If we still are going for relative, calculate the relative path from + # $resolved_bindir to $resolved_erlang_bindir and verify that we + # can reach $erlang_bindir from $bindir via calculated relative path + test $paths = relative && { + relpath= + common= + + save_IFS=$IFS + IFS=/ + + build=false + for dir in $resolved_erlang_bindir; do + test "$dir" != "" || continue + test $build = false || { relpath="$relpath/$dir"; continue; } + cand="${common}/$dir" + case "$resolved_bindir" in + "$cand"*) common="$cand";; + *) relpath="$dir"; build=true;; + esac + done + + check= + build=false + test "$common" != "" || build=true + + for dir in $resolved_bindir; do + test "$dir" != "" || continue + test $build = true || { + check="${check}/$dir" + test "$check" != "$common" || build=true + continue + } + if test "$relpath" = ""; then + relpath=".." + else + relpath="../$relpath" + fi + done + + IFS=$save_IFS + + test "$relpath" != "" || { + cat 1>&2 <<EOF + ERROR: Internal error: Computed relative path: . + + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + --exec-prefix="$exec_prefix" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" + BINDIR_SYMLINKS="$BINDIR_SYMLINKS" +EOF + $dbg rm -f "$bchk" "$ebchk" + test "$tst" = "" || echo "{error,empty_relpath}." > $tst + exit 1 + } + + # Verify that it works otherwise go for absolute links + if ($dbg cd "$iprfx$bindir" 2>/dev/null && \ + $dbg test -r "$relpath/$ebchk_file"); then + src_dir="$relpath" + else + abspath_reason=unreachable_relative + paths=absolute + fi + } +} + +# Don't need the temporary check files anymore +$dbg rm -f "$bchk" "$ebchk" + +# If we reverted to absolute paths we may have to abort or notify the user +# about this... +case "$paths-$BINDIR_SYMLINKS" in + absolute-absolute) # User requested absolute and got it + case "$abspath_reason" in + no_ln_s) + cat <<EOF + ERROR: Cannot install absolute symbolic links in the '--bindir' directory, + since 'ln -s' does not work. If you want to install using 'cp -p' + invoke 'make install' without setting BINDIR_SYMLINKS. + + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + --exec-prefix="$exec_prefix" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" + BINDIR_SYMLINKS="$BINDIR_SYMLINKS" + + Note that all absolute directory paths are prefixed by + \$DESTDIR\$EXTRA_PREFIX when accessed. +EOF + test "$tst" = "" || echo "{error,$abspath_reason}." > $tst + exit 1;; # Abort... + *) + ;; + esac;; + + absolute-relative) # User forced relative symbolic links, but we need + # to revert to absolute symbolic links. Print error + # message and abort. + + case "$abspath_reason" in + no_ln_s) + cat 1>&2 <<EOF + ERROR: Cannot install relative symbolic links in the '--bindir' directory, + since 'ln -s' does not work. If you want to install using 'cp -p' do + not set BINDIR_SYMLINKS, and invoke 'make install' again. + +EOF + ;; + not_prefix) + cat 1>&2 <<EOF + ERROR: Internal error: Should not have reverted to absolute paths just + because '--exec-prefix' was not a prefix of '--bindir' and/or + 'erlang_bindir' since relative symbolic links were forced. + +EOF + ;; + unreasonable_path) + cat 1>&2 <<EOF + ERROR: Refusing to install relative symbolic links, since the relative path + potentially could go via \$DESTDIR\$EXTRA_PREFIX/. Make your install + paths a bit more reasonable (preferably) or, do not invoke + 'make install' with 'BINDIR_SYMLINKS=relative'. + +EOF + ;; + unreachable_absolute) + cat 1>&2 <<EOF + ERROR: Could not find '--bindir' and/or 'erlang_bindir' after resolving paths. + The directory structure probably consists of symbolic directory links. + Refusing to install obviously incorrect relative symbolic links. In + order to install absolute symbolic links, invoke 'make install' without + 'BINDIR_SYMLINKS=relative'. + +EOF + ;; + unreachable_relative) + cat 1>&2 <<EOF + ERROR: Could not find 'erlang_bindir' from '--bindir' via computed relative + path. This probably due to symbolic directory links. Refusing to install + obviously incorrect relative symbolic links. In order to install + absolute symbolic links, invoke 'make install' without + 'BINDIR_SYMLINKS=relative'. + + Computed relative path="$relpath" +EOF + ;; + dirname_failed) + cat 1>&2 <<EOF + ERROR: Cannot install relative symbolic links since the 'dirname' command + failed while computing the relative path. The 'dirname' command is only + needed when '--bindir', 'erlang_bindir', and/or '--exec-prefix' contain + relative parts, i.e., '..' parts. If you modify your install paths, it + may be possible to install relative symbolic links. In order to install + absolute symbolic links, invoke 'make install' without + 'BINDIR_SYMLINKS=relative'. + +EOF + ;; + *) + cat 1>&2 <<EOF + ERROR: Refusing to install relative symbolic links. The error description for + \"$abspath_reason\" is however missing. + +EOF + ;; + esac + cat 1>&2 <<EOF + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + --exec-prefix="$exec_prefix" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" + BINDIR_SYMLINKS="$BINDIR_SYMLINKS" + + Note that all absolute directory paths are prefixed by + \$DESTDIR\$EXTRA_PREFIX when accessed. +EOF + test "$tst" = "" || echo "{error,$abspath_reason}." > $tst + exit 1;; # Abort... + + absolute-*) # Notify the user that we reverted to absolute symbolic links + cat <<EOF +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +EOF + case "$abspath_reason" in + no_ln_s) + cat <<EOF + NOTE: Cannot install symbolic links in the '--bindir' directory, since + 'ln -s' does not work. Will create copies using 'cp -p' instead. + +EOF + ;; + not_prefix) + cat <<EOF + NOTE: Installing absolute symbolic links in the '--bindir' directory to the + 'erlang_bindir' directory instead of relative ones. This since at least + one of these directories is not prefixed by '--exec-prefix'. It is + possible to force relative symbolic links if you want that by invoking + the install as 'make BINDIR_SYMLINKS=relative install'. + +EOF + ;; + + unreasonable_path) + cat <<EOF + NOTE: Installing absolute symbolic links in the '--bindir' directory to the + 'erlang_bindir' directory instead of relative ones. This since it + potentially would pass outside of '\$DESTDIR\$EXTRA_PREFIX/'. + +EOF + ;; + unreachable_absolute) + cat <<EOF + NOTE: Installing absolute symbolic links in the '--bindir' directory to the + 'erlang_bindir' instead of relative ones. This since at least one of + these directory could not be found after resolving paths. This is + probably due to symbolic directory links. + +EOF + ;; + unreachable_relative) + cat <<EOF + NOTE: Installing absolute symbolic links in the '--bindir' directory to the + 'erlang_bindir' directory instead of relative ones. This since the + 'erlang_bindir' directory could not be found from the '--bindir' + directory using the computed relative path. This is probably due + to symbolic directory links. + + Computed relative path="$relpath" +EOF + ;; + dirname_failed) + cat 1>&2 <<EOF + NOTE: Installing absolute symbolic links in the '--bindir' directory to the + 'erlang_bindir' directory instead of relative ones. This since the + 'dirname' command failed while computing the relative path. The + 'dirname' command is only needed when '--bindir', 'erlang_bindir', + and/or '--exec-prefix' contain relative parts, i.e., '..' parts. If + you modify your install paths, it may be possible to install relative + symbolic links. + +EOF + ;; + *) + cat 1>&2 <<EOF + NOTE: Installing absolute symbolic links in the '--bindir' directory + to the 'erlang_bindir' instead of relative ones. The notification + description for "$abspath_reason" is however missing. + +EOF + ;; + esac + + cat <<EOF + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + --exec-prefix="$exec_prefix" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" + BINDIR_SYMLINKS="$BINDIR_SYMLINKS" + + Note that all absolute directory paths are prefixed by + \$DESTDIR\$EXTRA_PREFIX when accessed. +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +EOF + ;; + + *) # relative links + ;; +esac + +# Now paths=absolute|relative and src_dir is correct (relative bindir) + +# cd into "$iprfx$bindir" and do it from there... +echo cd "$DQ$iprfx$bindir$DQ" +$dbg cd "$iprfx$bindir" || { + test "$tst" = "" || echo "{error,cd_bin_failed}." > $tst + exit 1 +} + +# Verify that the source files actually exist (done in a separate pass +# before we modify anything, so we leave it untouched if it should fail). +# Note that we will not find them under $src_dir if we use absolute symbolic +# links and $DESTDIR != "". In this case (actually all cases) they can then +# be found under $iprfx$erlang_bindir +test_src_dir="$src_dir" +test "$paths-$type" != "absolute-link" || test_src_dir="$iprfx$erlang_bindir" + +for file in "$@"; do + test "$file" != "" || continue + src_file="$test_src_dir/$file" + $dbg test -f "$src_file" || { + cat 1>&2 <<EOF + ERROR: Missing source file: $src_file + + --bindir="$bindir" + erlang_bindir="$erlang_bindir" + --exec-prefix="$exec_prefix" + EXTRA_PREFIX="$EXTRA_PREFIX" + DESTDIR="$DESTDIR" + BINDIR_SYMLINKS="$BINDIR_SYMLINKS" + + Note that all absolute directory paths are prefixed by + \$DESTDIR\$EXTRA_PREFIX when accessed. +EOF + test "$tst" = "" || echo "{error,{no_srcfile,\"$src_file\"}}." > $tst + exit 1 + } +done + +# Remove after possible old install (done in a separate pass since I think +# the output looks nicer than if mixed). Note that we cannot test for existance +# in a portable way, so force remove. +for file in "$@"; do + test "$file" != "" || continue + echo rm -f "$file" + $dbg rm -f "$file" +done + +# do it +for file in "$@"; do + echo $ln_s "$DQ$src_dir/$file$DQ" "$file" + $dbg $ln_s "$src_dir/$file" "$file" || { + test "$tst" = "" || echo "{error,{$type,\"$file\",failed}}." > $tst + exit 1 + } +done + +test "$tst" = "" || echo "{ok,{$paths,\"$iprfx$bindir\",\"$src_dir\"}}." > $tst + +exit 0 # Done diff --git a/make/otp.mk.in b/make/otp.mk.in index bcf9bd85a4..9f0486a609 100644 --- a/make/otp.mk.in +++ b/make/otp.mk.in @@ -3,20 +3,20 @@ # Make include file for otp # # %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2009. All Rights Reserved. -# +# +# Copyright Ericsson AB 1997-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: Lars Thorsen @@ -53,6 +53,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_DATA = @INSTALL_DATA@ CC = @CC@ +GCC = @GCC@ HCC = @HCC@ CC32 = @CC32@ CFLAGS32 = @CFLAGS32@ @@ -235,33 +236,44 @@ DOCGEN=$(ERL_TOP)/lib/erl_docgen $(MAN1DIR)/%.1:: %.xml date=`date +"%B %e %Y"`; \ - xsltproc --output "$@" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< $(MAN2DIR)/%.2:: %.xml date=`date +"%B %e %Y"`; \ - xsltproc --output "$@" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< $(MAN3DIR)/%.3:: %.xml date=`date +"%B %e %Y"`; \ - xsltproc --output "$@" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< +# left for compatability $(MAN4DIR)/%.4:: %.xml date=`date +"%B %e %Y"`; \ - xsltproc --output "$@" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< +$(MAN4DIR)/%.5:: %.xml + date=`date +"%B %e %Y"`; \ + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + +# left for compatability $(MAN6DIR)/%.6:: %_app.xml date=`date +"%B %e %Y"`; \ - xsltproc --output "$@" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + +$(MAN6DIR)/%.7:: %_app.xml + date=`date +"%B %e %Y"`; \ + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< $(MAN9DIR)/%.9:: %.xml date=`date +"%B %e %Y"`; \ - xsltproc --output "$@" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< + xsltproc --output "$@" --stringparam company "Ericsson AB" --stringparam docgen "$(DOCGEN)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_man_entities $(DOCGEN)/priv/xsl/db_man.xsl $< .xmlsrc.xml: - $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@ + escript $(DOCGEN)/priv/bin/codeline_preprocessing.escript $< $@ .fo.pdf: $(FOP) -fo $< -pdf $@ + diff --git a/make/otp_ded.mk.in b/make/otp_ded.mk.in index 0a91a42df5..e719312473 100644 --- a/make/otp_ded.mk.in +++ b/make/otp_ded.mk.in @@ -1,22 +1,48 @@ #-*-makefile-*- ; force emacs to enter makefile-mode # ---------------------------------------------------- -# Make include file for otp +# %CopyrightBegin% # -# Copyright (C) 1996, Ericsson Telecommunications -# Author: Lars Thorsen +# Copyright Ericsson AB 2009-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% + +# The version. +# +# Note that it is important that the version is +# explicitly expressed here. Some applications need to +# be able to check this value *before* configure has +# been run and generated otp_ded.mk +DED_MK_VSN = 1 +# ---------------------------------------------------- +# Variables needed for building Dynamic Erlang Drivers # ---------------------------------------------------- DED_CC = @CC@ +DED_GCC = @GCC@ DED_LD = @DED_LD@ DED_LDFLAGS = @DED_LDFLAGS@ -DED__NOWARN_CFLAGS = @DED_CFLAGS@ -DED_CFLAGS = @WFLAGS@ @DED_CFLAGS@ +DED__NOWARN_NOTHR_CFLAGS = @DED_CFLAGS@ +DED__NOTHR_CFLAGS = @WFLAGS@ @DED_CFLAGS@ +DED__NOWARN_CFLAGS = @DED_EMU_THR_DEFS@ @DED_CFLAGS@ +DED_THR_DEFS = @DED_THR_DEFS@ +DED_EMU_THR_DEFS = @DED_EMU_THR_DEFS@ +DED_WARN_FLAGS = @WFLAGS@ +DED_CFLAGS = @WFLAGS@ @DED_EMU_THR_DEFS@ @DED_CFLAGS@ DED_LIBS = @LIBS@ +DED_EXT = @DED_EXT@ ERLANG_OSTYPE = @ERLANG_OSTYPE@ -TARGET = @host@ PRIVDIR = ../priv OBJDIR = $(PRIVDIR)/obj/$(TARGET) LIBDIR = $(PRIVDIR)/lib/$(TARGET) -DED_SYS_INCLUDE = -I$(ERL_TOP)/erts/emulator/beam \ - -I$(ERL_TOP)/erts/emulator/sys/$(ERLANG_OSTYPE) - +DED_SYS_INCLUDE = @DED_SYS_INCLUDE@ DED_INCLUDES = $(DED_SYS_INCLUDE) diff --git a/make/otp_release_targets.mk b/make/otp_release_targets.mk index b6e1f4195e..7d433e738c 100644 --- a/make/otp_release_targets.mk +++ b/make/otp_release_targets.mk @@ -1,24 +1,21 @@ -# ``The contents of this file are subject to the Erlang Public License, +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-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 via the world wide web at http://www.erlang.org/. -# +# 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. -# -# The Initial Developer of the Original Code is Ericsson Utvecklings AB. -# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings -# AB. All Rights Reserved.'' -# -# $Id$ - -# ---------------------------------------------------- -# Target for building only the files needed by the Book generation -# ---------------------------------------------------- -#texmake: $(TEX_FILES) $(PSFIG_FILES) +# +# %CopyrightEnd% +# # ---------------------------------------------------- # Targets for the new documentation support @@ -48,8 +45,33 @@ $(HTMLDIR)/users_guide.html: $(XML_FILES) -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_html_entities $(DOCGEN)/priv/xsl/db_pdf.xsl book.xml > $@ + +# ------------------------------------------------------------------------ +# The following targets just exist in the documentation directory +# ------------------------------------------------------------------------ +ifneq ($(XML_FILES),) + +# ---------------------------------------------------- +# Generation of application index data +# ---------------------------------------------------- +$(HTMLDIR)/$(APPLICATION).eix: $(XML_FILES) + date=`date +"%B %e %Y"`; \ + $(XSLTPROC) --stringparam docgen "$(DOCGEN)" \ + --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" --stringparam appver "$(VSN)" --xinclude \ + -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_html_entities $(DOCGEN)/priv/xsl/db_eix.xsl book.xml > $@ + +docs: $(HTMLDIR)/$(APPLICATION).eix + +# ---------------------------------------------------- +# Local documentation target for testing +# ---------------------------------------------------- local_docs: TOPDOCDIR=. -local_docs: docs +local_docs: local_copy_of_topdefs docs + +local_html: TOPDOCDIR=. +local_html: local_copy_of_topdefs html + +local_copy_of_topdefs: $(INSTALL) $(DOCGEN)/priv/css/otp_doc.css $(HTMLDIR) $(INSTALL) $(DOCGEN)/priv/images/erlang-logo.png $(HTMLDIR) $(INSTALL) $(DOCGEN)/priv/images/erlang-logo.gif $(HTMLDIR) @@ -59,6 +81,7 @@ local_docs: docs $(DOCGEN)/priv/js/flipmenu/flip_static.gif \ $(DOCGEN)/priv/js/flipmenu/flipmenu.js $(HTMLDIR)/js/flipmenu +endif # ---------------------------------------------------- # Standard release target @@ -73,6 +96,6 @@ release release_docs release_tests release_html: else release release_docs release_tests release_html: - $(MAKE) $(MFLAGS) RELEASE_PATH=$(TESTROOT) $(TARGET_MAKEFILE) $@_spec + $(MAKE) $(MFLAGS) RELEASE_PATH=$(TESTROOT) $(TARGET_MAKEFILE) $@_spec endif diff --git a/make/otp_subdir.mk b/make/otp_subdir.mk index 46c61c9e54..bfbd9997a1 100644 --- a/make/otp_subdir.mk +++ b/make/otp_subdir.mk @@ -1,30 +1,30 @@ -# ``The contents of this file are subject to the Erlang Public License, +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. 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 via the world wide web at http://www.erlang.org/. +# 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. # -# The Initial Developer of the Original Code is Ericsson Utvecklings AB. -# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings -# AB. All Rights Reserved.'' -# -# $Id$ -# +# %CopyrightEnd% # # Make include file for otp -.PHONY: debug opt release local_docs docs release_docs tests release_tests \ +.PHONY: debug opt release docs release_docs tests release_tests \ clean depend valgrind # # Targets that don't affect documentation directories # -debug opt release local_docs docs release_docs tests release_tests clean depend valgrind: +opt debug release docs release_docs tests release_tests clean depend valgrind: @set -e ; \ app_pwd=`pwd` ; \ if test -f vsn.mk; then \ diff --git a/make/unexpected_use b/make/unexpected_use new file mode 100755 index 0000000000..d7543a7d83 --- /dev/null +++ b/make/unexpected_use @@ -0,0 +1,29 @@ +#!/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% +# + +prog=`basename "$0"` || prog="$0" + +cat 1>&2 <<EOF +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + ERROR: Unexpected use of '$prog' in 'install', or 'release' phase. +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +EOF + +exit 1 |