#---------------------------------------------------------------------------- # Rules.mk -> ${ROOT}/include/Rules.mk # # Makefiles for managing a Java project consisting of multiple packages. # (see ${ROOT}/etc/Makefile.README) # Daishi Harada (daishi@cs.berkeley.edu) #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Implicit Make Rule for Java # Note that if there are any .class files which are out of date, then # all source (.java) files in the package must be recompiled together. .SUFFIXES: .java .class .java.class: CLASSPATH=${SRC_ROOT}:${CLASSPATH}; \ export CLASSPATH; \ ${JAVAC} ${JAVAC_OPTS} ${JAVA_FILES}; #---------------------------------------------------------------------------- all: ${CLASS_FILES} install: ${INSTALL} -d ${CLASS_DIR}/${PACKAGE_DIR} ifneq (${CLASS_FILES},) # Following change required since there isn't a 1-1 mapping between # .java files and .class files # ${INSTALL} ${CLASS_FILES} ${CLASS_DIR}/${PACKAGE_DIR} ${INSTALL} *.class ${CLASS_DIR}/${PACKAGE_DIR} endif clean: ${CLEAN} ${GARBUFT} depend: ${CLEAN} ${TMP_FILE} grep import *.java | \ sed -e "s/[[:alnum:]_.:]\+ //g" -e "s/;$$//g" -e "s/\.\*$$//g" \ -e "s/\./\//g" -e "s/\/[A-Z][[:alnum:]_]\+//g" | \ sort | uniq > ${TMP_FILE} for dep in `cat ${TMP_FILE}`; do \ if [ -d ${SRC_ROOT}/`echo $${dep} | cut -f 1 -d '/'` ]; then \ pushd ${SRC_ROOT}/$${dep}; \ ${MAKE} pkgall; \ popd; \ fi; \ done ${CLEAN} ${TMP_FILE} name: ${CLEAN} ${PKGNAME_FILE} echo ${PACKAGE} > ${PKGNAME_FILE} chmod 444 ${PKGNAME_FILE} for file in ${JAVA_FILES}; do \ mv $${file} ${TMP_FILE}; \ sed -e "s/^package [.[:alnum:]]\+/package ${PACKAGE}/" ${TMP_FILE} > $${file}; \ ${CLEAN} ${TMP_FILE}; \ done beans: ${CLEAN} ${BEANS_FILE} ifneq (${JAVABEANS},) for bean in ${JAVABEANS}; do \ echo $${bean} >> ${BEANS_FILE}; \ done chmod 444 ${BEANS_FILE} endif #---------------------------------------------------------------------------- suball: for dir in ${SUBPACKAGES}; do \ cd $${dir}; \ ${MAKE} fullall; \ cd ..; \ done subinstall: for dir in ${SUBPACKAGES}; do \ cd $${dir}; \ ${MAKE} fullinstall; \ cd ..; \ done subclean: for dir in ${SUBPACKAGES}; do \ cd $${dir}; \ ${MAKE} fullclean; \ cd ..; \ done subname: for dir in ${SUBPACKAGES}; do \ cd $${dir}; \ ${MAKE} fullname; \ cd ..; \ done subbeans: for dir in ${SUBPACKAGES}; do \ cd $${dir}; \ ${MAKE} fullbeans; \ cd ..; \ done #---------------------------------------------------------------------------- fullall: all suball fullinstall: install subinstall fullclean: clean subclean fullname: name subname fullbeans: beans subbeans