--- MITgcm/tools/genmake2 2013/07/21 23:21:36 1.251 +++ MITgcm/tools/genmake2 2013/08/07 16:20:03 1.254 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.251 2013/07/21 23:21:36 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.254 2013/08/07 16:20:03 heimbach Exp $ # $Name: $ # # Makefile generator for MITgcm UV codes @@ -607,54 +607,74 @@ mpi_headers_do_local_copy() { dBug=0 - #----- check for additional headers (chain of included headers) - listIni=$MPI_HEADER_FILES - echo $listIni | grep "\" > /dev/null 2>&1 - outp=$? - #- always check mpif.h (the only mpi-header included in standard MITgcm code) - if test $outp != 0 ; then listIni="mpif.h $listIni" ; fi - if test $dBug = 1 ; then echo "listIni='$listIni'" ; fi - doCheck=1 ; list2copy='' ; list2check=$listIni - while test $doCheck = 1 ; do - newList='' - for i in $list2check ; do - if test -f $MPIINCLUDEDIR/$i ; then - newInc=`grep '^ *include ' $MPIINCLUDEDIR/$i | \ + rm -rf ./mpi_headers + if test -d $MPIINCLUDEDIR ; then + + #----- check for additional headers (chain of included headers) + echo -n ' Check MPI headers ... ' + listIni=$MPI_HEADER_FILES + echo $listIni | grep "\" > /dev/null 2>&1 + outp=$? + #- always check mpif.h (the only mpi-header included in standard MITgcm code) + if test $outp != 0 ; then listIni="mpif.h $listIni" ; fi + if test $dBug = 1 ; then echo "listIni='$listIni'" ; fi + + doCheck=1 ; list2copy='' ; list2check=$listIni + while test $doCheck = 1 ; do + newList='' + for i in $list2check ; do + if test -f $MPIINCLUDEDIR/$i ; then + newInc=`grep '^ *include ' $MPIINCLUDEDIR/$i | \ sed -e 's/^ *include //' -e 's/\!.*$//' -e "s/'//g" -e 's/\"//g'` - if test $dBug = 1 ; then echo -n "checking $i : newInc='$newInc'" ; fi - for j in $newInc ; do - echo $listIni $list2copy $newList | grep "\<$j\>" > /dev/null 2>&1 - outp=$? - if test $outp != 0 ; then - if test $dBug = 1 ; then echo -n " ; adding $j" ; fi - newList="$newList $j" - fi - done - if test $dBug = 1 ; then echo "" ; fi - fi + if test $dBug = 1 ; then echo -n "checking $i : newInc='$newInc'" ; fi + for j in $newInc ; do + echo $listIni $list2copy $newList | grep "\<$j\>" > /dev/null 2>&1 + outp=$? + if test $outp != 0 ; then + if test $dBug = 1 ; then echo -n " ; adding $j" ; fi + newList="$newList $j" + fi + done + if test $dBug = 1 ; then echo "" ; fi + fi + done + if test "x$newList" = x ; then doCheck=0 + else list2check=$newList ; list2copy="$list2copy $newList" + fi done - if test "x$newList" = x ; then doCheck=0 - else list2check=$newList ; list2copy="$list2copy $newList" - fi - done - list2copy="$MPI_HEADER_FILES $list2copy" - if test $dBug = 1 ; then echo "list2copy='$list2copy'" ; fi - #----- make local copy and update LOCAL_MPI_HEADERS (if not already set) - mkListInc=0 - for i in $list2copy ; do - if test -f $MPIINCLUDEDIR/$i ; then + list2copy="$MPI_HEADER_FILES $list2copy" + if test $dBug = 1 ; then echo "list2copy='$list2copy'" ; fi + + #----- create local mpi_headers dir if we have files to copy + mkListInc=`echo $list2copy | wc -w` + if test $mkListInc != 0 ; then + echo 'create local "./mpi_headers" dir' + mkdir -p ./mpi_headers + INCLUDES="-I./mpi_headers $INCLUDES" + mkListInc=1 + fi + if test "x$LOCAL_MPI_HEADERS" != x ; then mkListInc=0 ; fi + + #----- make local copy and update LOCAL_MPI_HEADERS (if not already set) + for i in $list2copy ; do + if test -f $MPIINCLUDEDIR/$i ; then cp -p $MPIINCLUDEDIR/$i ./mpi_headers if test $i = 'mpif.h' ; then perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h fi - if test $mkListInc = 1 ; then + if test $mkListInc = 2 ; then LOCAL_MPI_HEADERS="$LOCAL_MPI_HEADERS ./mpi_headers/$i" fi - if test "x$LOCAL_MPI_HEADERS" = x ; then - LOCAL_MPI_HEADERS="./mpi_headers/$i" ; mkListInc=1 + if test $mkListInc = 1 ; then + LOCAL_MPI_HEADERS="./mpi_headers/$i" ; mkListInc=2 fi - fi - done + fi + done + else + echo "WARNING: MPIINCLUDEDIR='$MPIINCLUDEDIR' is not a directory" + echo "WARNING: => skip checking for MPI headers (no ./mpi_headers dir)" +# exit -1 + fi } # Parse the package dependency information @@ -2559,22 +2579,12 @@ done if test ! "x$DIVA" = x -a ! "x$MPI" = x ; then - if test ! "x$MPIINCLUDEDIR" = x ; then - if test -d $MPIINCLUDEDIR ; then - echo " Creating the pseudo-MPI include directory" - INCLUDES="-I./mpi_headers $INCLUDES" - rm -rf ./mpi_headers - mkdir -p ./mpi_headers + if test ! "x$MPIINCLUDEDIR" = x ; then # Do a local copy of MPI headers files (in local dir ./mpi_headers/) after # checking for additional included headers (in case of chain of included # header); also set LOCAL_MPI_HEADERS (if not already set) mpi_headers_do_local_copy - else - echo "WARNING: MPIINCLUDEDIR='$MPIINCLUDEDIR' is not a dir" - echo "WARNING: ==> cannot create pseudo-MPI include directory" -# exit -1 fi - fi fi echo " Determining the list of source and include files" @@ -2605,10 +2615,6 @@ OAD_KEEP_ORIGINAL="/dev/null" OAD_CB2M_FILES="/dev/null" OADTOOLS="$TOOLSDIR/OAD_support" - test -f "oadtempflile" && \rm -f "oadtempflile" -cat >> "oadtempflile" < ad_config.template cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h @-rm -f ad_config.template @\$(MAKE) -f \$(MAKEFILE) \$(F77_PP_SRC_FILES) @\$(MAKE) -f \$(MAKEFILE) \$(FLOWFILES) - cat \$(FLOWFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS + cat \$(FLOWFILES) \$(F77_PP_SRC_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS ad_taf_output.$FS: ad_input_code.$FS \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS @@ -3129,8 +3136,8 @@ ls -l ad_input_code_ad.$FS cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS -\$(EXE_AD): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) ad_taf_output.o \$(OBJFILES) \$(EMBEDDED_FILES) - \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS) +\$(EXE_AD): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES:.c=.o) \$(H_SRC_FILES) \$(F90_SRC_FILES) ad_taf_output.o \$(EMBEDDED_FILES) + \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(C_SRC_FILES:.c=.o) ad_taf_output.o \$(LIBS) ad_tamc_output.$FS: ad_input_code.$FS \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS @@ -3159,26 +3166,26 @@ @-rm -f ad_config.template \$(MAKE) -f \$(MAKEFILE) \$(EXE_FTL) -ftl_input_code.$FS: \$(AD_FILES) +ftl_input_code.$FS: \$(F77_SRC_FILES) @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "TangLin version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h @-rm -f ad_config.template @\$(MAKE) -f \$(MAKEFILE) \$(F77_PP_SRC_FILES) @\$(MAKE) -f \$(MAKEFILE) \$(AD_FLOW_FILES) - cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS + cat \$(AD_FLOW_FILES) \$(F77_PP_SRC_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS ftl_taf_output.$FS: ftl_input_code.$FS \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS - ls -l ftl_input_code_ftl.$FS - cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS + ls -l ftl_input_code_tl.$FS + cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS ftltafonly: \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS - ls -l ftl_input_code_ftl.$FS - cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS + ls -l ftl_input_code_tl.$FS + cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS -\$(EXE_FTL): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) ftl_taf_output.o \$(OBJFILES) \$(EMBEDDED_FILES) - \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS) +\$(EXE_FTL): ftl_taf_output.o \$(C_SRC_FILES:.c=.o) + \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(C_SRC_FILES:.c=.o) ftl_taf_output.o \$(LIBS) ftl_tamc_output.$FS: ftl_input_code.$FS \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS