summaryrefslogtreecommitdiffstats
path: root/bootstrap
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2003-05-15 13:35:16 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2003-05-15 13:35:16 (GMT)
commitb524f7573bcc09249006a529ba8c1e2aba8283f4 (patch)
treee04936c9840de13e70a7b978fca046bbbb17a121 /bootstrap
parent5a8b94034d083e273e72e72288278dd338db3928 (diff)
downloadCMake-b524f7573bcc09249006a529ba8c1e2aba8283f4.zip
CMake-b524f7573bcc09249006a529ba8c1e2aba8283f4.tar.gz
CMake-b524f7573bcc09249006a529ba8c1e2aba8283f4.tar.bz2
Several fixes before bootstrap is ready for prime-time:
1. Add --version flag to display version of CMake 2. Add comments to explain what is going on 3. Move CMAKE_ROOT_DIR and CMAKE_BOOTSTRAP to cmConfigure.h 4. Forward CC, CXX, and MAKE to cmake 5. Add more instructions
Diffstat (limited to 'bootstrap')
-rwxr-xr-xbootstrap73
1 files changed, 69 insertions, 4 deletions
diff --git a/bootstrap b/bootstrap
index 38a8041..caa19ec 100755
--- a/bootstrap
+++ b/bootstrap
@@ -34,6 +34,7 @@ cmake_source_dir=`(cd "${cmake_source_dir}";pwd)`
cmake_binary_dir=`pwd`
cmake_bootstrap_dir="${cmake_binary_dir}/Bootstrap.cmk"
+# Display CMake bootstrap usage
cmake_usage()
{
cat<<EOF
@@ -41,7 +42,11 @@ Usage: $0 [options]
Options: [defaults in brackets after descriptions]
Configuration:
--help print this message
+ --version only print version information
--verbose display more information
+ --parallel=n bootstrap cmake in parallel, where n is
+ number of nodes [1]
+
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
@@ -49,6 +54,20 @@ EOF
exit 10
}
+# Display CMake bootstrap usage
+cmake_version()
+{
+ # Get CMake version
+ CMAKE_VERSION=""
+ for a in MAJOR MINOR PATCH; do
+ CMake_VERSION=`cat "${cmake_source_dir}/CMakeLists.txt" | grep "SET(CMake_VERSION_${a} *[0-9]*)" | sed "s/SET(CMake_VERSION_${a} *\([0-9]*\))/\1/"`
+ CMAKE_VERSION="${CMAKE_VERSION}.${CMake_VERSION}"
+ done
+ CMAKE_VERSION=`echo $CMAKE_VERSION | sed "s/\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)/\1.\2-\3/"`
+ echo "CMake ${CMAKE_VERSION}, Copyright (c) 2002 Kitware, Inc., Insight Consortium"
+}
+
+# Display CMake bootstrap error, display the log file and exit
cmake_error()
{
echo "---------------------------------------------"
@@ -63,6 +82,7 @@ cmake_error()
exit 1
}
+# Write string into a file
cmake_report ()
{
FILE=$1
@@ -70,21 +90,26 @@ cmake_report ()
echo "$*" >> ${FILE}
}
+# Escape spaces in strings
cmake_escape ()
{
echo $1 | sed "s/ /\\\\ /g"
}
+# Write message to the log
cmake_log ()
{
echo "$*" >> cmake_bootstrap.log
}
+# Return temp file
cmake_tmp_file ()
{
echo "cmake_bootstrap_$$.test"
}
+# Run a compiler test. First argument is compiler, second one are compiler
+# flags, third one is test source file to be compiled
cmake_try_run ()
{
COMPILER=$1
@@ -116,6 +141,7 @@ cmake_try_run ()
return 0
}
+# Run a make test. First argument is the make interpreter.
cmake_try_make ()
{
MAKE_PROC=$1
@@ -140,6 +166,7 @@ cmake_try_make ()
return 0
}
+# Parse arguments
cmake_verbose=
cmake_parallel_make=
cmake_prefix_dir="/usr/local"
@@ -153,11 +180,16 @@ for a in "$@"; do
if echo $a | grep "^--help" > /dev/null 2> /dev/null; then
cmake_usage
fi
+ if echo $a | grep "^--version" > /dev/null 2> /dev/null; then
+ cmake_version
+ exit 2
+ fi
if echo $a | grep "^--verbose" > /dev/null 2> /dev/null; then
cmake_verbose=TRUE
fi
done
+# If verbose, display some information about bootstrap
if [ -n "${cmake_verbose}" ]; then
echo "---------------------------------------------"
echo "Source directory: ${cmake_source_dir}"
@@ -171,28 +203,35 @@ if [ -n "${cmake_verbose}" ]; then
fi
echo "---------------------------------------------"
+# Get CMake version
+echo "`cmake_version`"
+# Make bootstrap directory
[ -d "${cmake_bootstrap_dir}" ] || mkdir "${cmake_bootstrap_dir}"
if [ ! -d "${cmake_bootstrap_dir}" ]; then
cmake_error "Cannot create directory ${cmake_bootstrap_dir} to bootstrap CMake."
fi
cd "${cmake_bootstrap_dir}"
+# Delete all the bootstrap files
rm -f "${cmake_bootstrap_dir}/cmake_bootstrap.log"
rm -f "${cmake_bootstrap_dir}/cmConfigure.h"
+# If exist compiler flags, set them
cmake_c_flags=${CFLAGS}
cmake_cxx_flags=${CXXFLAGS}
# Test C compiler
cmake_c_compiler=
+# If CC is set, use that for compiler, otherwise use list of known compilers
if [ -n "${CC}" ]; then
cmake_c_compilers="${CC}"
else
cmake_c_compilers="${CMAKE_KNOWN_C_COMPILERS}"
fi
+# Check if C compiler works
TMPFILE=`cmake_tmp_file`
cat>"${TMPFILE}.c"<<EOF
#include<stdio.h>
@@ -217,12 +256,15 @@ echo "C compiler on this system is: ${cmake_c_compiler} ${cmake_c_flags}"
# Test CXX compiler
cmake_cxx_compiler=
+
+# If CC is set, use that for compiler, otherwise use list of known compilers
if [ -n "${CXX}" ]; then
cmake_cxx_compilers="${CXX}"
else
cmake_cxx_compilers="${CMAKE_KNOWN_CXX_COMPILERS}"
fi
+# Check if C++ compiler works
TMPFILE=`cmake_tmp_file`
cat>"${TMPFILE}.cxx"<<EOF
#include<iostream.h>
@@ -239,8 +281,6 @@ for a in ${cmake_cxx_compilers}; do
done
rm -f "${TMPFILE}.cxx"
-
-
if [ -z "${cmake_cxx_compiler}" ]; then
cmake_error "Cannot find apropriate C++ compiler on this system.
Please specify one using environment variable CXX."
@@ -250,6 +290,8 @@ echo "C++ compiler on this system is: ${cmake_cxx_compiler} ${cmake_cxx_flags}"
# Test Make
cmake_make_processor=
+
+# If MAKE is set, use that for make processor, otherwise use list of known make
if [ -n "${MAKE}" ]; then
cmake_make_processors="${MAKE}"
else
@@ -278,8 +320,11 @@ rm -rf "${cmake_bootstrap_dir}/${TMPFILE}"
echo "Make processor on this system is: ${cmake_make_processor}"
+# Ok, we have CC, CXX, and MAKE.
+
# Test C++ compiler features
+# If we are on IRIX, check for -LANG:std
if [ "x${cmake_system}" = "xIRIX64" ]; then
TMPFILE=`cmake_tmp_file`
cat>${TMPFILE}.cxx<<EOF
@@ -303,6 +348,7 @@ EOF
rm -f "${TMPFILE}.cxx"
fi
+# Test for STD namespace
if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_dir}/Modules/TestForSTDNamespace.cxx" >> cmake_bootstrap.log 2>&1; then
cmake_report cmConfigure.h "/* #undef CMAKE_NO_STD_NAMESPACE */"
echo "${cmake_cxx_compiler} has STD namespace"
@@ -311,6 +357,7 @@ else
echo "${cmake_cxx_compiler} does not have STD namespace"
fi
+# Test for ANSI stream headers
if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_dir}/Modules/TestForANSIStreamHeaders.cxx" >> cmake_bootstrap.log 2>&1; then
cmake_report cmConfigure.h "/* #undef CMAKE_NO_ANSI_STREAM_HEADERS */"
echo "${cmake_cxx_compiler} has ANSI stream headers"
@@ -319,6 +366,7 @@ else
echo "${cmake_cxx_compiler} does not have ANSI stream headers"
fi
+# Test for ansi string streams
TMPFILE=`cmake_tmp_file`
cat>${TMPFILE}.cxx<<EOF
#include <sstream>
@@ -333,6 +381,7 @@ else
fi
rm -f "${TMPFILE}.cxx"
+# Test for ansi FOR scope
if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags}" "${cmake_source_dir}/Modules/TestForAnsiForScope.cxx" >> cmake_bootstrap.log 2>&1; then
cmake_report cmConfigure.h "/* #undef CMAKE_NO_ANSI_FOR_SCOPE */"
echo "${cmake_cxx_compiler} has ANSI for scoping"
@@ -341,11 +390,13 @@ else
echo "${cmake_cxx_compiler} does not have ANSI for scoping"
fi
-# Get CMake version
+# Write CMake version
for a in MAJOR MINOR PATCH; do
CMake_VERSION=`cat "${cmake_source_dir}/CMakeLists.txt" | grep "SET(CMake_VERSION_${a} *[0-9]*)" | sed "s/SET(CMake_VERSION_${a} *\([0-9]*\))/\1/"`
cmake_report cmConfigure.h "#define CMake_VERSION_${a} ${CMake_VERSION}"
done
+cmake_report cmConfigure.h "#define CMAKE_ROOT_DIR \"${cmake_source_dir}\""
+cmake_report cmConfigure.h "#define CMAKE_BOOTSTRAP"
# Generate Makefile
dep="cmConfigure.h `cmake_escape \"${cmake_source_dir}\"`/Source/*.h"
@@ -353,7 +404,7 @@ objs=""
for a in ${CMAKE_SOURCES}; do
objs="${objs} ${a}.o"
done
-cmake_cxx_flags="${cmake_ansi_cxx_flags} ${cmake_cxx_flags} -DCMAKE_ROOT_DIR='\"${cmake_source_dir}\"' -DCMAKE_BOOTSTRAP -I`cmake_escape \"${cmake_source_dir}/Source\"` -I`cmake_escape \"${cmake_bootstrap_dir}\"`"
+cmake_cxx_flags="${cmake_ansi_cxx_flags} ${cmake_cxx_flags} -I`cmake_escape \"${cmake_source_dir}/Source\"` -I`cmake_escape \"${cmake_bootstrap_dir}\"`"
echo "cmake: ${objs}" > "${cmake_bootstrap_dir}/Makefile"
echo " ${cmake_cxx_compiler} ${LDFLAGS} ${cmake_cxx_flags} ${objs} -o cmake" >> "${cmake_bootstrap_dir}/Makefile"
for a in ${CMAKE_SOURCES}; do
@@ -367,6 +418,7 @@ echo "SET (CMAKE_CONFIGURE_INSTALL_PREFIX \"${cmake_prefix_dir}\" CACHE PATH \"I
echo "---------------------------------------------"
+# Run make to build bootstrap cmake
if [ "x${cmake_parallel_make}" != "x" ]; then
${cmake_make_processor} -j ${cmake_parallel_make}
else
@@ -377,7 +429,20 @@ if [ "${RES}" -ne "0" ]; then
cmake_error "Problem while bootstrapping CMake"
fi
cd "${cmake_binary_dir}"
+
+# Set C, CXX, and MAKE environment variables, so that real real cmake will be
+# build with same compiler and make
+CC="${cmake_c_compiler}"
+CXX="${cmake_cxx_compiler}"
+MAKE="${cmake_make_processor}"
+export CC
+export CXX
+export MAKE
+
+# Run bootstrap CMake to configure real CMake
"${cmake_bootstrap_dir}/cmake" "${cmake_source_dir}"
echo "---------------------------------------------"
+# And we are done. Now just run make
+echo "CMake ${CMAKE_VERSION} is configured. Now just run ${cmake_make_processor}."