#!/bin/bash # # $Id$ # set -e # TEMPORARY VARIABLES.. development use only declare MKFILE=Makefile declare PREV_PACKAGE="" declare BUILD_SCRIPTS=scripts declare TRACKING_DIR=tracking-dir HEADER="# This file is automatically generated by gen-makefile.sh # YOU MAY NEED TO EDIT THIS FILE MANUALLY # # Generated on `date \"+%F %X %Z\"`" #----------------------------------# __wrt_target() { # Create target and initialize log file #----------------------------------# local i=$1 local PREV=$2 ( cat << EOF $i: $PREV @\$(call echo_message, Building) @./progress_bar.sh \$@ \$\$PPID & EOF ) >> $MKFILE.tmp } #----------------------------------# __write_build_cmd() { # #----------------------------------# ( cat << EOF @source ../envars.conf && ${BUILD_SCRIPTS}/\$@ >logs/\$@ 2>&1 EOF ) >> $MKFILE.tmp } #----------------------------------# __wrt_touch() { # #----------------------------------# local pkg_name=$1 local pkg_ver=$2 local alsa_ver=$(grep "^alsa[[:space:]]" ../packages | cut -f3) local kde_core_ver=$(grep "^kde-core[[:space:]]" ../packages | cut -f3) local xorg7_ver=$(grep "^xorg7[[:space:]]" ../packages | cut -f3) if [[ -n "$pkg_ver" ]] ; then ( cat << EOF @rm -f \$(TRACKING_DIR)/${pkg_name#*-?-}-{0..9}* && \\ touch \$(TRACKING_DIR)/${pkg_name#*-?-}-${pkg_ver} EOF ) >> $MKFILE.tmp fi case $pkg_name in *-alsa-lib ) #this the unique mandatory package for ALSA support. ( cat << EOF @rm -f \$(TRACKING_DIR)/alsa-{0..9}* && \\ touch \$(TRACKING_DIR)/alsa-${alsa_ver} EOF ) >> $MKFILE.tmp ;; *-kdebase ) ( cat << EOF @rm -f \$(TRACKING_DIR)/kde-core-{0..9}* && \\ touch \$(TRACKING_DIR)/kde-core-${kde_core_ver} EOF ) >> $MKFILE.tmp ;; *-xorg7-driver ) # xtrerm2 and rman are optional ( cat << EOF @rm -f \$(TRACKING_DIR)/xorg7-{0..9}* && \\ touch \$(TRACKING_DIR)/xorg7-${xorg7_ver} EOF ) >> $MKFILE.tmp ;; esac ( cat << EOF @touch \$@ && \\ sleep .25 && \\ echo -e "\n\n "\$(BOLD)Target \$(BLUE)\$@ \$(BOLD)OK && \\ echo --------------------------------------------------------------------------------\$(WHITE) EOF ) >> $MKFILE.tmp } #----------------------------# __write_entry() { # #----------------------------# local script_name=$1 local pkg_ver=$2 echo -n "${tab_}${tab_} entry for <$script_name>" #--------------------------------------------------------------------# # >>>>>>>> START BUILDING A Makefile ENTRY <<<<<<<< # #--------------------------------------------------------------------# # # Drop in the name of the target on a new line, and the previous target # as a dependency. Also call the echo_message function. __wrt_target "${script_name}" "$PREV_PACKAGE" __write_build_cmd # Include a touch of the target name so make can check # if it's already been made. __wrt_touch "${script_name}" "${pkg_ver}" # #--------------------------------------------------------------------# # >>>>>>>> END OF Makefile ENTRY <<<<<<<< # #--------------------------------------------------------------------# echo " .. OK" } #----------------------------# __write_meta_pkg_touch() { # #----------------------------# local meta_pkg=$1 local pkg_ver=$(grep "^${meta_pkg}[[:space:]]" ../packages | cut -f3) local gnome_core_ver=$(grep "^gnome-core[[:space:]]" ../packages | cut -f3) local kde_full_ver=$(grep "^kde-full[[:space:]]" ../packages | cut -f3) ( cat << EOF 999-z-$meta_pkg: $PREV_PACKAGE @rm -f \$(TRACKING_DIR)/${meta_pkg}-{0..9}* && \\ touch \$(TRACKING_DIR)/${meta_pkg}-${pkg_ver} EOF ) >> $MKFILE.tmp case $meta_pkg in gnome-full ) ( cat << EOF @rm -f \$(TRACKING_DIR)/gnome-core-{0..9}* && \\ touch \$(TRACKING_DIR)/gnome-core-${gnome_core_ver} EOF ) >> $MKFILE.tmp ;; kde-koffice ) ( cat << EOF @rm -f \$(TRACKING_DIR)/kde-full-{0..9}* && \\ touch \$(TRACKING_DIR)/kde-full-${kde_full_ver} EOF ) >> $MKFILE.tmp ;; esac ( cat << EOF @touch \$@ EOF ) >> $MKFILE.tmp } #----------------------------# generate_Makefile () { # #----------------------------# echo "${tab_}Creating Makefile... ${BOLD}START${OFF}" # Start with a clean files >$MKFILE >$MKFILE.tmp for package_script in scripts/* ; do this_script=`basename $package_script` pkg_ver=$(grep "^${this_script#*-?-}[[:space:]]" ../packages | cut -f3) pkg_list="$pkg_list ${this_script}" __write_entry "${this_script}" "${pkg_ver}" PREV_PACKAGE=${this_script} done PACKAGE=$(basename $PWD) # alsa, kde-core and xorg7 are also available dependencies, thus handled # in another way. case $PACKAGE in gnome-core | \ gnome-full | \ kde-full | \ kde-koffice ) pkg_list="$pkg_list 999-z-${PACKAGE}" __write_meta_pkg_touch "${PACKAGE}" ;; esac # Add a header, some variables and include the function file # to the top of the real Makefile. ( cat << EOF $HEADER PACKAGE= $PACKAGE TRACKING_DIR= $TRACKING_DIR BOLD= "" RED= "" GREEN= "" ORANGE= "" BLUE= "" WHITE= "" define echo_message @echo \$(BOLD) @echo -------------------------------------------------------------------------------- @echo \$(BOLD)\$(1) target \$(BLUE)\$@\$(BOLD) @echo \$(WHITE) endef define fin_message @echo \$(BOLD) @echo -------------------------------------------------------------------------------- @echo \$(BOLD) Build complete for the package \$(BLUE)\$(PACKAGE)\$(BOLD) and its dependencies @echo \$(WHITE) endef all : $pkg_list @\$(call fin_message ) EOF ) > $MKFILE cat $MKFILE.tmp >> $MKFILE echo "${tab_}Creating Makefile... ${BOLD}DONE${OFF}" rm $MKFILE.tmp } if [[ -e Config.in ]] ; then echo -e "${BOLD}This script must be run from inside the target package directory.${WHITE}" exit 1 fi if [[ ! -d scripts ]] ; then echo -e "\n\tNo ./scripts/ directory has been found.\n" exit 1 fi generate_Makefile cp ../progress_bar.sh . mkdir -p logs