# $Id: makefile 1.41 05/05/13 13:04:57-05:00 sarich@zorak.(none) $ # # This is the makefile for installing TAO. See the file # docs/installation.html for directions on installing TAO. # See also bmake/common for additional commands. # ALL: all DIRS = src include docs include ${TAO_DIR}/bmake/packages include ${TAO_DIR}/bmake/tao_common # # Basic targets to build TAO libraries. # all : builds the C/C++ and Fortran libraries all : info tao_chkcxx tao_chklib_dir tao_deletelibs tao_build_c tao_build_fortran tao_shared # # Prints information about the system and version of TAO being compiled # info: -@echo "==========================================" -@echo " " -@echo "See docs/troubleshooting.html and docs/bugreporting.html" -@echo "for help with installation problems. Please send EVERYTHING" -@echo "printed out below when reporting problems." -@echo " " -@echo "To subscribe to the TAO users mailing list, send mail to " -@echo "majordomo@mcs.anl.gov with the message: " -@echo "subscribe tao-news" -@echo " " -@echo "==========================================" -@echo On `date` on `hostname` -@echo Machine characteristics: `uname -a` -@echo "-----------------------------------------" -@echo "Using PETSc directory: ${PETSC_DIR}" -@echo "Using PETSc arch: ${PETSC_ARCH}" -@echo "Using TAO directory: ${TAO_DIR}" -@echo "-----------------------------------------" -@grep "define PETSC_VERSION" ${PETSC_DIR}/include/petscversion.h | ${SED} "s/........//" -@grep TAO_VERSION_NUMBER include/tao_version.h | sed "s/........//" -@echo "-----------------------------------------" -@echo "Using include paths: ${TAO_INCLUDE}" -@echo "------------------------------------------" -@echo "Using C/C++ compiler: ${CC} ${CC_FLAGS} ${COPTFLAGS} ${CFLAGS}" -@echo "C/C++ Compiler version: " `${CCV}` -@if [ "${FC}" != "" ]; then \ echo "Using Fortran compiler: ${FC} ${FC_FLAGS} ${FFLAGS} ${FPP_FLAGS}";\ echo "Fortran Compiler version: " `${FCV}`;\ fi -@echo "-----------------------------------------" -@echo "Using C/C++ linker: ${CC_LINKER}" -@if [ "${FC}" != "" ]; then \ echo "Using Fortran linker: ${FC_LINKER}";\ fi -@echo "-----------------------------------------" -@echo "Using libraries: ${TAO_LIB}" -@echo "------------------------------------------" -@echo "Using mpirun: ${MPIRUN}" -@echo "==========================================" # # Builds the TAO libraries # This target also builds fortran77 and f90 interface # files (except compiling *.F files). # tao_build_c: -@echo "BEGINNING TO COMPILE TAO LIBRARIES IN ALL DIRECTORIES" -@echo "=========================================" -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} ACTION=libfast tree ${RANLIB} ${TAO_LIB_DIR}/*.a -@echo "Completed building TAO libraries" -@echo "=========================================" # # Builds TAO Fortran source # Note: tao_libfast cannot run on .F files on certain machines, so we # use libf to compile the Fortran source files. # tao_build_fortran: -@echo "BEGINNING TO COMPILE TAO FORTRAN SOURCE" -@echo "=========================================" -@cd src/fortran/custom; \ ${OMAKE} PETSC_ARCH=${PETSC_ARCH} libf clean -${RANLIB} ${TAO_LIB_DIR}/libtaofortran.a ${RANLIB} ${TAO_LIB_DIR}/libtao.a -@echo "Completed compiling TAO Fortran source" -@echo "=========================================" # Builds TAO test examples for a given architecture tao_testexamples: info chkopts -@echo "BEGINNING TO COMPILE AND RUN TAO TEST EXAMPLES" -@echo "Due to different numerical round-off on certain" -@echo "machines some of the numbers may not match exactly." -@echo "=========================================" -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} \ ACTION=testexamples_C tree -@echo "Completed compiling and running test examples" -@echo "=========================================" # Builds TAO test examples for a given architecture tao_testfortran: info chkopts -@echo "BEGINNING TO COMPILE AND RUN TAO FORTRAN TEST EXAMPLES" -@echo "=========================================" -@echo "Due to different numerical round-off on certain" -@echo "machines or the way Fortran formats numbers" -@echo "some of the results may not match exactly." -@echo "=========================================" -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} \ ACTION=testexamples_Fortran tree -@echo "Completed compiling and running Fortran test examples" -@echo "=========================================" # Builds TAO test examples for a given architecture tao_testexamples_uni: info chkopts -@echo "BEGINNING TO COMPILE AND RUN TEST UNI-PROCESSOR EXAMPLES" -@echo "Due to different numerical round-off on certain" -@echo "machines some of the numbers may not match exactly." -@echo "=========================================" -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} \ ACTION=testexamples_C_X11_MPIUni tree -@echo "Completed compiling and running uniprocessor test examples" -@echo "=========================================" tao_testfortran_uni: info chkopts -@echo "BEGINNING TO COMPILE AND RUN TEST UNI-PROCESSOR FORTRAN EXAMPLES" -@echo "Due to different numerical round-off on certain" -@echo "machines some of the numbers may not match exactly." -@echo "=========================================" -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} \ ACTION=testexamples_Fortran_MPIUni tree -@echo "Completed compiling and running uniprocessor fortran test examples" -@echo "=========================================" # Ranlib on the libraries tao_ranlib: ${RANLIB} ${TAO_LIB_DIR}/*.a # Deletes TAO libraries tao_deletelibs: -${RM} -f ${TAO_LIB_DIR}/* tao_shared: shared @if [ "${TAOSIDLDIR}x" = "sidlx" ]; then \ cd ${TAO_DIR}/src/sidl/servers/Taoapi/Taoapi-server-C++ && make; \ fi; @if [ "${TAO_BUILD_COMPONENTS}x" != "x" ]; then \ cd ${TAO_DIR}/src/sidl/components && make components; \ fi; tao_chklib_dir:chklib_dir # ------------------------------------------------------------------ # # All remaining actions are intended for TAO developers only. # TAO users should not generally need to use these commands. # # To access the tags in EMACS, type M-x visit-tags-table and specify # the file tao/TAGS. # 1) To move to where a TAO function is defined, enter M-. and the # function name. # 2) To search for a string and move to the first occurrence, # use M-x tags-search and the string. # To locate later occurrences, use M-, # Builds all etags files tao_alletags: -@maint/generateetags.py BMAKEFILES = bmake/tao_common* DOCS = bmake/readme bmake/petscconf.defs SCRIPTS = maint/addlinks maint/builddist maint/buildlinks maint/wwwman \ maint/xclude maint/crontab \ maint/autoftp include/foldinclude/generateincludes # Builds all the documentation - should be done every night tao_alldoc: tao_allmanpages cd docs/tex/manual; ${OMAKE} manual.dvi manual.pdf manual.html # Deletes man pages (HTML version) tao_deletemanualpages: ${RM} -f ${TAO_DIR}/docs/manualpages/*/*.html \ ${TAO_DIR}/docs/manualpages/manualpages.cit # Deletes man pages (LaTeX version) tao_deletelatexpages: ${RM} -f ${TAO_DIR}/docs/tex/rsum/*sum*.tex # Builds all versions of the man pages #tao_allmanpages: tao_allmanualpages tao_alllatexpages tao_allmanpages: tao_allmanualpages tao_htmlpages tao_allmanualpages: tao_deletemanualpages -${OMAKE} ACTION=tao_manualpages_buildcite tree -${OMAKE} ACTION=tao_manualpages tree -${OMAKE} ACTION=tao_manexamples tree LOC=${LOC} -maint/wwwindex.py ${TAO_DIR} -maint/examplesindex.tcl -maint/htmlkeywords.tcl tao_htmlpages: -${OMAKE} ACTION=tao_html TAO_DIR=${TAO_DIR} PETSC_DIR=${PETSC_DIR} alltree LOC=${TAO_DIR} tao_alllatexpages: tao_deletelatexpages -${OMAKE} ACTION=tao_latexpages tree # Builds Fortran stub files tao_allfortranstubs: -@maint/generatefortranstubs.py ${BFORT} tao_allci: -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} ACTION=ci alltree tao_allco: -@${OMAKE} PETSC_ARCH=${PETSC_ARCH} ACTION=co alltree # ------------------------------------------------------------------------------- # # Some macros to check if the fortran interface is up-to-date. # tao_countfortranfunctions: -@cd ${TAO_DIR}/src/fortran; egrep '^void' custom/*.c auto/*.c | \ cut -d'(' -f1 | tr -s ' ' | cut -d' ' -f2 | uniq | egrep -v "(^$$|Tao)" | \ sed "s/_$$//" | sort > /tmp/countfortranfunctions tao_countcfunctions: -@ grep extern ${TAO_DIR}/include/*.h *.h | grep "(" | tr -s ' ' | \ cut -d'(' -f1 | cut -d' ' -f3 | grep -v "\*" | tr -s '\012' | \ tr 'A-Z' 'a-z' | sort > /tmp/countcfunctions tao_difffortranfunctions: tao_countfortranfunctions tao_countcfunctions -@echo -------------- Functions missing in the Fortran interface --------------------- -@diff /tmp/countcfunctions /tmp/countfortranfunctions | grep "^<" | cut -d' ' -f2 -@echo ----------------- Functions missing in the C interface ------------------------ -@diff /tmp/countcfunctions /tmp/countfortranfunctions | grep "^>" | cut -d' ' -f2 -@${RM} /tmp/countcfunctions /tmp/countfortranfunctions tao_checkbadfortranstubs: -@echo "=========================================" -@echo "Functions with MPI_Comm as an Argument" -@echo "=========================================" -@cd ${TAO_DIR}/src/fortran/auto; grep '^void' *.c | grep 'MPI_Comm' | \ tr -s ' ' | tr -s ':' ' ' |cut -d'(' -f1 | cut -d' ' -f1,3 -@echo "=========================================" -@echo "Functions with a String as an Argument" -@echo "=========================================" -@cd ${TAO_DIR}/src/fortran/auto; grep '^void' *.c | grep 'char \*' | \ tr -s ' ' | tr -s ':' ' ' |cut -d'(' -f1 | cut -d' ' -f1,3 -@echo "=========================================" -@echo "Functions with Pointers to TAO Objects as Argument" -@echo "=========================================" -@cd ${TAO_DIR}/src/fortran/auto; \ _p_OBJ=`grep _p_ ${TAO_DIR}/include/*.h | tr -s ' ' | \ cut -d' ' -f 3 | tr -s '\012' | grep -v '{' | cut -d'*' -f1 | \ sed "s/_p_//g" | tr -s '\012 ' ' *|' ` ; \ for OBJ in $$_p_OBJ; do \ grep "$$OBJ \*" *.c | tr -s ' ' | tr -s ':' ' ' | \ cut -d'(' -f1 | cut -d' ' -f1,3; \ done # # Automatically generates TAO exercises in html from the tutorial examples. # # The introduction for each section is obtained from docs/manualpages/bop.${MANSEC} is under RCS and may be edited # (used also in introductions to the manual pages) # The overall introduction is in docs/exercises/introduction.html and is under RCS and may be edited # The list of exercises is from TUTORIALS in each directory's makefile # # DO NOT EDIT the pageform.txt or *.htm files generated since they will be automatically replaced. # The pagemaker rule is in the file bmake/common (at the bottom) # # Eventually the line below will replace the two cd in the rule below, it is just this way now for speed # -@${OMAKE} TAO_DIR=${TAO_DIR} pagemaker # exercises: -@echo "=========================================" -@echo "Generating HTML tutorial exercises" -@rm -f docs/pageform.txt -@echo "title=\"TAO Exercises\"" > docs/pageform.txt -@echo "access_title=Exercise Sections" >> docs/pageform.txt -@echo "access_format=short" >> pageform.txt -@echo "startpage=../exercises/introduction.htm" >> docs/pageform.txt -@echo "NONE title=\"Introduction\" command=link src=../exercises/introduction.htm" >> docs/pageform.txt -@echo "Generating HTML for individual directories" -@echo "=========================================" cd src/unconstrained/examples/tutorials; ${OMAKE} TAO_DIR=${TAO_DIR} taopagemaker cd src/bound/examples/tutorials; ${OMAKE} TAO_DIR=${TAO_DIR} taopagemaker cd src/least_squares/examples/tutorials; ${OMAKE} TAO_DIR=${TAO_DIR} taopagemaker cd src/complementarity/examples/tutorials; ${OMAKE} TAO_DIR=${TAO_DIR} taopagemaker cd src/petsctao/gridapplication/examples; ${OMAKE} TAO_DIR=${TAO_DIR} taopagemaker cd src/externaltao/globalarraytao/examples; ${OMAKE} TAO_DIR=${TAO_DIR} taopagemaker -@echo "Completed HTML for individual directories" -@echo "NONE title=\"<HR>\" " >> docs/pageform.txt; -@echo "NONE title=\"TAO Documentation\" command=link src=http://www-fp.mcs.anl.gov/tao/docs/index.htm" >> docs/pageform.txt /home/sarich/software/makepage/makepage.new -pageform=docs/pageform.txt -access_extra=/dev/null -outdir=docs/exercises -@echo "========================================="