summaryrefslogtreecommitdiffstats
path: root/arduino-cmake/configure
diff options
context:
space:
mode:
Diffstat (limited to 'arduino-cmake/configure')
-rwxr-xr-xarduino-cmake/configure249
1 files changed, 249 insertions, 0 deletions
diff --git a/arduino-cmake/configure b/arduino-cmake/configure
new file mode 100755
index 0000000..ca7c4c3
--- /dev/null
+++ b/arduino-cmake/configure
@@ -0,0 +1,249 @@
+#!/usr/bin/env bash
+
+#==============================================================================#
+# #
+# Author : QueezyTheGreat #
+# Description: Build configuration script #
+# #
+# Makes sure that we don't execute cmake or ccmake in the source #
+# directory(we like prestine sources) #
+# #
+# If we execute this script in the sources directory, a build directory #
+# will be created from where the actual build configuration will be executed. #
+# #
+# If we aren't in the source directory everything works normally. #
+# #
+# By default cmake is used to configure the build system, but you can also #
+# chose from the ncurses version (ccmake) and the GUI version (cmake-gui). #
+# #
+#==============================================================================#
+
+
+# Find executable path
+function path_locate {
+ local EXECUTABLE_NAME
+ local PATH_OUTPUT_VARIABLE_NAME
+ local EXECUTABLE_PATH
+
+ # Check if we have required arguments
+ if [ "${#}" -lt 2 ]; then
+ echo "Insuficient amount of arguments..."
+ echo "locate_path EXECUTABLE_NAME PATH_OUTPUT_VARIABLE_NAME"
+ exit 1
+ fi
+
+ EXECUTABLE_NAME="$1"
+ PATH_OUTPUT_VAR="$2"
+
+ if [ "${EXECUTABLE_NAME}X" = "X" ]; then
+ echo "Missing executable name"
+ echo "locate_path EXECUTABLE_NAME PATH_OUTPUT_VARIABLE_NAME"
+ exit 1
+ fi
+ if [ "${PATH_OUTPUT_VAR}X" = "X" ]; then
+ echo "Missing path output variable name"
+ echo "locate_path EXECUTABLE_NAME PATH_OUTPUT_VARIABLE_NAME"
+ exit 1
+ fi
+
+ # Try to find full path
+ EXECUTABLE_PATH="$(type -p ${EXECUTABLE_NAME})"
+
+ # Setting executable path
+ eval "${PATH_OUTPUT_VAR}"=${EXECUTABLE_PATH}
+}
+
+# Find executable path, exit if not found
+function require {
+ local EXECUTABLE_NAME
+ local PATH_OUTPUT_VARIABLE_NAME
+ local EXECUTABLE_PATH
+
+ # Check if we have required arguments
+ if [ "${#}" -lt 2 ]; then
+ echo "Insuficient amount of arguments..."
+ echo "require EXECUTABLE_NAME PATH_OUTPUT_VARIABLE_NAME"
+ exit 1
+ fi
+
+ EXECUTABLE_NAME="$1"
+ PATH_OUTPUT_VAR="$2"
+
+ if [ "${EXECUTABLE_NAME}X" = "X" ]; then
+ echo "Missing executable name"
+ echo "require EXECUTABLE_NAME PATH_OUTPUT_VARIABLE_NAME"
+ exit 1
+ fi
+ if [ "${PATH_OUTPUT_VAR}X" = "X" ]; then
+ echo "Missing path output variable name"
+ echo "require EXECUTABLE_NAME PATH_OUTPUT_VARIABLE_NAME"
+ exit 1
+ fi
+
+ # Try to find full path
+ EXECUTABLE_PATH="$(type -p ${EXECUTABLE_NAME})"
+
+ if [ "${EXECUTABLE_PATH}X" = "X" ]; then
+ # No path was found.... failing
+ echo "${EXECUTABLE_NAME} is not available"
+ echo "Aborting..."
+
+ exit -1
+ fi
+
+ if [ ! -x "${EXECUTABLE_PATH}" ]; then
+ echo "${EXECUTABLE_NAME} is not executable"
+ echo "Aborting..."
+
+ exit -1
+ fi
+
+ # Setting executable path
+ eval "${PATH_OUTPUT_VAR}"=${EXECUTABLE_PATH}
+}
+
+
+# Executable names
+CMAKE_NAME="cmake"
+CCMAKE_NAME="ccmake"
+CMAKEGUI_NAME="cmake-gui"
+
+# Find executable paths
+require ${CMAKE_NAME} CMAKE_PATH
+path_locate ${CCMAKE_NAME} CCMAKE_PATH
+path_locate ${CMAKEGUI_NAME} CMAKEGUI_PATH
+
+# Warning file
+WARNING_PATH="${HOME}/.configure_warning"
+
+# Detect where we are and where the sources are
+CONFIG_BASE_PATH=$(cd "$(dirname "$0")"; pwd)
+CURRENT_PATH=$(pwd)
+
+IN_BASE="$(echo ${CURRENT_PATH}| grep ${CONFIG_BASE_PATH})"
+IN_BUILD="$(echo ${CURRENT_PATH}| grep ${CONFIG_BASE_PATH}/build)"
+
+# Set the default cmake executable
+# to be used
+CMAKE_EXECUTABLE="${CMAKE_PATH}"
+
+# Check for command line arguments
+case $1 in
+ "-h")
+ echo "$0 [-h|-x|-c] [cmake_args...]"
+ echo
+ echo " -h Display this help message"
+ echo " -x Run GUI version of CMake"
+ echo " -c Run Curses version of CMake"
+ echo
+ echo " cmake_args CMake arguments that will be passed"
+ echo " to the chosen CMake binary, by default"
+ echo " cmake is used (if -x or -c not used)"
+ echo
+
+ exit 1
+ ;;
+ "-x")
+ if [ ! -e "${CMAKEGUI_PATH}" ]; then
+ echo "${CMAKEGUI_NAME} is not available"
+ echo "Aborting...'"
+
+ exit -1
+ fi
+
+ # Setting executable to cmake-gui
+ CMAKE_EXECUTABLE="${CMAKEGUI_PATH}"
+
+ # Shift argument list, getting rid of script name
+ # and first command line argument
+ shift
+ ;;
+ "-c")
+ if [ ! -e "${CCMAKE_PATH}" ]; then
+ echo "${CCMAKE_NAME} is not available"
+ echo "Aborting...'"
+
+ exit -1
+
+ fi
+
+ # Setting executable to ccmake
+ CMAKE_EXECUTABLE="${CCMAKE_PATH}"
+
+ # Shift argument list, getting rid of script name
+ # and first command line argument
+ shift
+ ;;
+esac
+
+
+echo
+echo Project Sources: ${CONFIG_BASE_PATH}
+echo CMake Executable: ${CMAKE_EXECUTABLE}
+echo
+
+
+# Check if we are in source directory
+if [ "${IN_BASE}X" != "X" ]; then
+ # We are within the source directory
+ if [ "${IN_BUILD}X" != "X" ]; then
+ # We are in the build directory
+ echo 'Building within build directory'
+ # Running chosen cmake executable
+ ${CMAKE_EXECUTABLE} ${*} ${CONFIG_BASE_PATH}
+ else
+ # We are in the source directory
+ # but not within the build directory
+ if [ ! -f "${WARNING_PATH}" ]; then
+ echo
+ echo
+ echo "Running CMake within the source directory is HIGHLY discouraged."
+ echo "You should either build the project outside the source directory"
+ echo "or create a directory called build within the root of the project"
+ echo
+ echo
+ echo "This warning will only apear once..."
+ echo
+ echo
+ echo
+ echo -n "Continuing in 15"
+ for COUNT in 14 13 12 11 10 9 8 7 6 5 4 3 2 1; do
+ sleep 1
+ echo -n "..${COUNT}"
+ done
+ echo
+
+ # Removing waring
+ touch "${WARNING_PATH}"
+ fi
+
+ if [ ! -d "${CONFIG_BASE_PATH}/build" ]; then
+ echo "Creating build directory: ${CONFIG_BASE_PATH}/build"
+ mkdir "${CONFIG_BASE_PATH}/build"
+ fi
+
+ # Changing to build directory
+ echo "Changing to build directory: ${CONFIG_BASE_PATH}/build"
+ cd "${CONFIG_BASE_PATH}/build"
+
+ # Running chosen cmake executable in new build directory
+ ${CMAKE_EXECUTABLE} ${*} ${CONFIG_BASE_PATH}
+
+ fi
+else
+ # We are outside of the source directory
+ # Running chosen cmake executable
+ ${CMAKE_EXECUTABLE} ${*} ${CONFIG_BASE_PATH}
+fi
+
+if [ "${?}" -eq 0 ]; then
+ echo
+ echo "To build project: make"
+ echo "To install project: make install"
+ echo "Generate packages: make package"
+ echo
+
+ exit 0
+else
+ exit 1
+fi