e3b5136a693b38d20fb3e15dbf4d71e6d8163407
chmalee
  Tue Aug 18 08:51:21 2026 -0700
userAppMulti.mk: fix broken install target, build shared objects first

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

diff --git src/inc/userAppMulti.mk src/inc/userAppMulti.mk
index d37bef1f13e..f7b96b92542 100644
--- src/inc/userAppMulti.mk
+++ src/inc/userAppMulti.mk
@@ -1,55 +1,55 @@
 ########################################################################
 # Additional rules to use when build multiple programs with userApps.mk
 #
 # Due the way many rules do use patterns, it is necessary to recursively
 # call make to build multiple user apps or CGI loaders in the same directory.
 # Do this using this idiom:
 #
 #   kentSrc = ../..
 #   ifeq $({PROGS},)
 #   PROGS = one two three
 #   include ${kentSrc}/inc/userAppMulti.mk
 #   else
 #   A = ${PROG}
 #   include ${kentSrc}/inc/userApp.mk
 #   endif
 
 
 # Note MAKECMDGOALS is used to set variables, so
 # can not any make magic to combine these names
 
 default:: ${PROGS:%=%_default}
 %_default: sharedObjectsBuilt
 	${MAKE} default PROG=$*
 compile:: ${PROGS:%=%_compile}
 %_compile: sharedObjectsBuilt
 	${MAKE} compile PROG=$*
 clean:: ${PROGS:%=%_clean}
 %_clean::
 	${MAKE} clean PROG=$*
-install: ${PROGS:%=%_}
-%_install:
+install:: ${PROGS:%=%_install}
+%_install: sharedObjectsBuilt
 	${MAKE} install PROG=$*
 cgi::  ${PROGS:%=%_cgi}
 %_cgi: sharedObjectsBuilt
 	${MAKE} cgi PROG=$*
 alpha:: ${PROGS:%=%_alpha}
 %_alpha: sharedObjectsBuilt
 	${MAKE} alpha PROG=$*
 beta::  ${PROGS:%=%_beta}
 %_beta: sharedObjectsBuilt
 	${MAKE} beta PROG=$*
 
 # When the programs share a compiled object (an extraObjects entry used by more
 # than one program), build it once here before the per-program sub-makes fan
 # out. Otherwise parallel make lets two sub-makes compile the same object at
 # once, and one truncates the .o while the other links it.
 # Set sharedObjects in the PROGS branch of the directory makefile.
 sharedObjectsBuilt:
 ifneq (${sharedObjects},)
 	${MAKE} ${sharedObjects} PROG=$(firstword ${PROGS})
 endif
 
 # fake name useds to get pass recurise ifeq
 test::
 	${MAKE} test PROG=testing