summaryrefslogtreecommitdiffstats
path: root/remote/setup_tools
diff options
context:
space:
mode:
authorSimon Rettberg2013-02-26 15:50:50 +0100
committerSimon Rettberg2013-02-26 15:50:50 +0100
commit6192918205e74ce1fde46817447ab6addd77df61 (patch)
treeff4e1fcbc29ff5761018217a3f9eaf561531be42 /remote/setup_tools
parentfix library discovery for base (fixes dbus loop) (diff)
downloadtm-scripts-6192918205e74ce1fde46817447ab6addd77df61.tar.gz
tm-scripts-6192918205e74ce1fde46817447ab6addd77df61.tar.xz
tm-scripts-6192918205e74ce1fde46817447ab6addd77df61.zip
Added dependency system for modules (REQUIRED_MODULES var in *.conf of module, for an example, see policykit.conf)
Diffstat (limited to 'remote/setup_tools')
-rwxr-xr-xremote/setup_tools116
1 files changed, 68 insertions, 48 deletions
diff --git a/remote/setup_tools b/remote/setup_tools
index 74cc1c78..4c7d65e2 100755
--- a/remote/setup_tools
+++ b/remote/setup_tools
@@ -1,10 +1,13 @@
#!/bin/bash
-MODULE_DIR=${ROOT_DIR}/remote
+MODULE_DIR="${ROOT_DIR}/remote"
#Create tools directory if not exists
-TOOL_DIR=${MODULE_DIR}/tools
-INIT_DIR=${MODULE_DIR}/stage3.2
+TOOL_DIR="${MODULE_DIR}/tools"
+INIT_DIR="${MODULE_DIR}/stage3.2"
+
+# Keep track of processed modules
+PROCESSED_MODULES=""
initial_checks ()
{
@@ -18,6 +21,12 @@ initial_checks ()
read_config ()
{
+ unset REQUIRED_BINARIES
+ unset REQUIRED_LIBRARIES
+ unset REQUIRED_DIRECTORIES
+ unset REQUIRED_FILES
+ unset REQUIRED_MODULES
+
local TOOL_CONFIG="${TOOL_DIR}/${TOOL}/${TOOL}.conf"
[ ! -e "${TOOL_CONFIG}" ] && perror "Config for '$TOOL' not found."
@@ -153,10 +162,6 @@ copyfileswithdependencies ()
pinfo "Copying $CLISTCOUNT files to stage 3.2 target directory."
tarcopy "$(cat ${COPYFILES_LIST}|sort -u)" "${INIT_DIR}"
fi
- unset REQUIRED_BINARIES
- unset REQUIRED_LIBRARIES
- unset REQUIRED_DIRECTORIES
- unset REQUIRED_FILES
}
get_basic_libs () {
@@ -190,58 +195,74 @@ generate_stage32 () {
fi
# now iterate over given tools and copy them
- cd "${TOOL_DIR}"
while (( "$#" )); do
- TOOL=$1
- TOOL_STR=""
- pinfo ">>>>>>>>>>>>>>>>> Processing module [ $TOOL ]"
- TOOL_STR="[${TOOL}]"
- if [ -d ${TOOL} ];
- then
-
- #[ "x$DEBUG" != "x1" ] \
- # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \
- # && exec 6>&1 > ${TOOL_DIR}/${TOOL}/stage32.log
- # TODO: Make above work with the new logging system (add function to logging.inc to switch logfile)
- cd "${TOOL}"
- pinfo "## Reading config"
- read_config
- pinfo "## Reading build"
- read_build
- pinfo "## Installing dependencies"
- install_dependencies
- pinfo "## Fetching source"
- fetch_source
- pinfo "## Building"
- build
- # remove *.la files as they might confuse libtool/linker of other tool packages
- find "${TOOL_DIR}/${TOOL}/build" -name '*.la' -exec rm -f {} \;
- pinfo "## Copying files with dependencies"
- copyfileswithdependencies
- pinfo "## Post copy"
- post_copy
- cd ${TOOL_DIR}
-
- # reset pipes
- #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&-
- # TODO
- pinfo "## ## Module completed ## ##"
- else
- perror "Tool directory for '$TOOL' not found."
- # maybe make this a warning instead of error?
- fi
+ process_module "$1"
shift
done
TOOL_STR=""
}
+process_module() {
+ [ "$#" -ne "1" ] && perror "process_module: want 1 param."
+ local TOOL="$1"
+ [[ "$PROCESSED_MODULES" == *"!${TOOL}!"* ]] && return # Already processed this module
+ PROCESSED_MODULES="${PROCESSED_MODULES}!${TOOL}!"
+ local TOOL_STR=""
+ pinfo ">>>>>>>>>>>>>>>>> Processing module [ $TOOL ]"
+ TOOL_STR="[${TOOL}]"
+ if [ -d "${TOOL_DIR}/${TOOL}" ];
+ then
+
+ #[ "x$DEBUG" != "x1" ] \
+ # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \
+ # && exec 6>&1 > ${TOOL_DIR}/${TOOL}/stage32.log
+ # TODO: Make above work with the new logging system (add function to logging.inc to switch logfile)
+ cd "${TOOL_DIR}/${TOOL}" || perror "Tool dir '${TOOL_DIR}/${TOOL}' seems to exist, but cd to it failed."
+ pinfo "## Reading config"
+ read_config
+ # Check if this module has a dependency that wasn't built yet:
+ if [ ! -z "$REQUIRED_MODULES" ]; then
+ pinfo "$TOOL depends on ${REQUIRED_MODULES}...."
+ for DEP in $REQUIRED_MODULES; do
+ #[[ "$DESIRED_MODULES" != *"!${DEP}!"* ]] && perror "$TOOL has dependency $DEP, but $DEP is not in current profile."
+ process_module "$DEP"
+ done
+ # Read old config again, as it got overwritten by the deps
+ cd "${TOOL_DIR}/${TOOL}" || perror "Tool dir '${TOOL_DIR}/${TOOL}' seems to exist, but cd to it failed (after building deps)."
+ read_config
+ pinfo "<<<<<<<<<<<<<<<<< Dependency modules processed, back to module [ $TOOL ]"
+ fi
+ pinfo "## Reading build"
+ read_build
+ pinfo "## Installing dependencies"
+ install_dependencies
+ pinfo "## Fetching source"
+ fetch_source
+ pinfo "## Building"
+ build
+ # remove *.la files as they might confuse libtool/linker of other tool packages
+ find "${TOOL_DIR}/${TOOL}/build" -name '*.la' -exec rm -f {} \;
+ pinfo "## Copying files with dependencies"
+ copyfileswithdependencies
+ pinfo "## Post copy"
+ post_copy
+
+ # reset pipes
+ #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&-
+ # TODO
+ pinfo "Module completed."
+ else
+ perror "Tool directory for '$TOOL' not found."
+ # maybe make this a warning instead of error?
+ fi
+}
+
clean_tools() {
if [ "x$1" = "x" -o "x$1" = "xall" ]; then
#clean all
if [ -d ${INIT_DIR} ]; then
pinfo "Cleaning ${INIT_DIR}..."
rm -rf "${INIT_DIR}" || perror "Error deleting $INIT_DIR"
- pinfo "done."
fi
for TOOL in $(ls ${TOOL_DIR}); do
clean_tool $TOOL
@@ -276,7 +297,6 @@ clean_tool() {
if [ -e ${TOOLDIR}/list_binaries_and_files ]; then
rm "${TOOLDIR}/list_binaries_and_files" || perror "Could not delete list_binaries_and_files"
fi
- pinfo "done."
}
#generate_stage32 $@