--- buildman/bm	2025/01/20 22:40:23	1.1
+++ buildman/bm	2025/03/10 17:14:32	1.7
@@ -44,16 +44,17 @@ then
     exit 1
 fi
 
-if [ $EUID -ne ${BUILDMAN_UID} ]
-then
-    echo "${PROGN} error:  must be run as user \"${BUILDMAN_USER}\""
-    exit 1
-fi
+#if [ $EUID -ne ${BUILDMAN_UID} ]
+#then
+#    echo "${PROGN} error:  must be run as user \"${BUILDMAN_USER}\""
+#    exit 1
+#fi
 
 ACTION=""
 PROJECT=""
 BUILD_HOST=""
 OS=`uname`
+PYES="no"
 
 if [ "$OS" = "SCO_SV" ] ; then
     THOST=`hostname -s`
@@ -70,11 +71,14 @@ fi
 tmphost=`echo ${THOST} | cut -d. -f1`
 THOST="${tmphost}"
 
-
-while getopts ':p:h:a:bl:o:' OPTION
+while getopts ':p:h:a:bl:o:y' OPTION
 do
     case $OPTION in
 
+        y)
+            PYES="yes"
+            ;;
+        
         l)
             ACTION="list"
             TOLIST="${OPTARG}"
@@ -104,10 +108,16 @@ do
     esac
 done
 
+if [ "${ACTION}" = "" ]
+then
+    echo "${PROGN}:  no action specified"
+    exit 1
+fi
+
 if [ ! -z "${PROJECT}" ]
 then
     PROJECT_BASE="${BUILDMAN_BASE}/projects/${PROJECT}"
-    if [ "${ACTION}" == "add" -a ! -d ${PROJECT_BASE} ]
+    if [ "${ACTION}" = "add" -a ! -d ${PROJECT_BASE} ]
     then
         echo "$PROGN:  creating ${PROJECT} in ${PROJECT_BASE}..."
         mkdir -p "${PROJECT_BASE}"
@@ -115,7 +125,7 @@ then
 
     if [ ! -d "${PROJECT_BASE}" ]
     then
-        echo "$PROGN error:  project ${PROJECT} not defined"
+        echo "$PROGN error:  project ${PROJECT} not defined [${PROJECT_BASE}]"
         exit 1
     fi
 fi
@@ -130,7 +140,11 @@ case $ACTION in
                 ;;
 
             h|hosts)
-                ls -l "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"
+                BHOSTS=`ls -1 "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"`
+                for BHOST in ${BHOSTS}
+                do
+                    echo ${BHOST}
+                done
                 ;;
 
             *)
@@ -159,7 +173,7 @@ case $ACTION in
 
                 echo "$PROGN:  creating directory structure for project \"${PROJECT}\""
                 mkdir -p "${PBASE}/hosts"
-                
+                mkdir -p "${PBASE}/scripts"                
                 ;;
             
 
@@ -171,6 +185,7 @@ case $ACTION in
                 fi
 
                 PBASE="${BUILDMAN_BASE}/projects/${PROJECT}"
+
                 if [ ! -d "${PBASE}" ]
                 then
                     echo "$PROGN error:  project \"${PROJECT}\" does not exist"
@@ -190,14 +205,62 @@ case $ACTION in
                     exit 1
                 fi
 
+                if [ -z "${OPTIONS}" ]
+                then
+                    echo "$PROGN error:  must pass -o \"os:version:arch\""
+                    exit 1
+                fi
+
+                PLSTR="${BUILD_HOST}:${OPTIONS}:buildman::"
+                H_PLATFORM=`echo ${PLSTR} | cut -d: -f2`
+                H_VERSION=`echo ${PLSTR} | cut -d: -f3`
+                H_ARCH=`echo ${PLSTR} | cut -d: -f4`                
+                
+                if [ "${PYES}" = "no" ]
+                then
+                    echo
+                    echo "Host Details"
+                    echo "============"
+                    echo "Project:        ${PROJECT}"
+                    echo "Hostname:       ${BUILD_HOST}"
+                    echo "Platform:       ${H_PLATFORM}"
+                    echo "Version:        ${H_VERSION}"
+                    echo "Architecture:   ${H_ARCH}"
+                    echo
+                    
+                    read -n 1 -p "OK to create? (y/n) " YORN
+                    echo
+                    
+                    if [ "${YORN}" = "y" -o "${YORN}" = "Y" ]
+                    then
+                        CONF=1
+                    else
+                        echo "$PROGN:  aborted"
+                        exit 2
+                    fi
+                fi
+                    
                 echo "$PROGN:  adding host \"${BUILD_HOST}\" to project \"${PROJECT}\""
                 mkdir -p "${HBASE}"
+                mkdir -p "${HBASE}/jobs"
+                mkdir -p "${HBASE}/logs"
+                
+                PFILE="${PBASE}/${H_PLATFORM}-platform.list"
+                echo
+                echo "=================================================="
+                echo " Don't forget to add the BuildMan cron job"
+                echo " to ${BUILDMAN_USER}@${BUILD_HOST}"
+                echo "=================================================="
+                echo                
+                echo "${PLSTR}" >> "${PFILE}"                
+                cd ${PBASE}
+                ls -1 *-platform.list | cut -d- -f1 | sort | uniq > platforms.list                
                 ;;
 
         esac
         ;;
-            
                 
+
     
     build)
         if [ -z "${BUILD_HOST}" ]
@@ -206,28 +269,55 @@ case $ACTION in
             exit 1
         fi
 
-        BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}"
+        if [ "${BUILD_HOST}" != '*' ]
+        then        
+            BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}"
+
+            if [ ! -d "${BUILD_BASE}" ]
+            then
+                echo "$PROGN error:  build host ${BUILD_HOST} not configured"
+                exit 1
+            fi
+            
+            BUILD_WANTED="${PROJECT_BASE}/hosts/${BUILD_HOST}/build-wanted"
 
-        if [ ! -d "${BUILD_BASE}" ]
-        then
-            echo "$PROGN error:  build host ${BUILD_HOST} not configured"
-            exit 1
-        fi
-        
-        BUILD_WANTED="${PROJECT_BASE}/${HOST}/build-wanted"
+            if [ -f "${BUILD_WANTED}" ]
+            then
+                echo "$PROGN error:  build already requested on host ${BUILD_HOST}"
+                exit 1
+            fi
 
-        if [ -f "${BUILD_WANTED}" ]
-        then
-            echo "$PROGN error:  build already requested"
-            exit 1
+            touch "${BUILD_WANTED}"
+            echo "$PROGN:  build of project ${PROJECT} requested on ${BUILD_HOST}"
+        else
+            BHOSTS=`ls -1 "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"`
+            for BUILD_HOST in ${BHOSTS}
+            do
+                BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}"
+                
+                if [ ! -d "${BUILD_BASE}" ]
+                then
+                    echo "$PROGN error:  build host ${BUILD_HOST} not configured"
+                    exit 1
+                fi
+                
+                BUILD_WANTED="${PROJECT_BASE}/hosts/${BUILD_HOST}/build-wanted"
+                
+                if [ -f "${BUILD_WANTED}" ]
+                then
+                    echo "$PROGN error:  build already requested on ${BUILD_HOST}"
+                    exit 1
+                fi
+                
+                touch "${BUILD_WANTED}" > /dev/null 2>&1
+                if [ $? = 0 ]
+                then
+                    echo "$PROGN:  build of project ${PROJECT} requested on build host ${BUILD_HOST}"
+                else
+                    echo "$PROGN:  error requesting build of ${PROJECT} on build host ${BUILD_HOST}"
+                fi
+            done           
         fi
-
-        touch "${BUILD_WANTED}"
-        echo "$PROGN:  build of project ${PROJECT} requested on build host ${HOST}"
         ;;
 
 esac
-        
-
-    
-