1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
#!/bin/bash
# Disable the make jobserver???
unset MAKEFLAGS
unset MAKE
function make_target_flags() {
local tgt=$1
sleep 1
make -j1 VERBOSE=1 $tgt 2>&1 | \
awk "/foo.(c|cxx|F90)( |$)/{print} /-o *(lib)?$tgt/{print}" | \
sed -e "s| \+| |g" -e "s| *[^ ]*$tgt[^ ]*||g" \
-e "s| *-D *WITH_ADIOS2||" > $tgt.flags
}
function a_without_b() {
local A="$1"
local B="$2"
local skip=0
local firstA=1
for a in $A
do
if [ $firstA -eq 1 ]
then
firstA=0
continue
fi
skip=0
local firstB=1
for b in ${B}
do
if [ $firstB -eq 1 ]
then
firstB=0
continue
fi
if [ "${a}" == "${b}" ]
then
skip=1
break
fi
done
if [ $skip -eq 1 ]
then
continue
fi
echo $a
done
}
function flag_diff() {
local A="$1"
local B="$2"
a_without_b "$2" "$1"
}
function prefixify() {
echo "$@" | sed "s|${PREFIX}|\${ADIOS2_PREFIX}|g"
}
PREFIX="$1"
if [ "${1:0:1}" != "/" ]
then
# Convert relative paths to absolute based on DESTDIR
PREFIX="${DESTDIR:-$(pwd)}/$1"
else
PREFIX="${DESTDIR}$1"
fi
shift
CMAKE="@CMAKE_COMMAND@"
SOURCE_DIR="@ADIOS2_SOURCE_DIR@/cmake/install/post/adios2-config-dummy"
BUILD_DIR=$(mktemp -d)
pushd ${BUILD_DIR}
if [ @ADIOS2_CONFIG_MPICC@ -eq 1 ]
then
export CC="@MPI_C_COMPILER@"
fi
if [ @ADIOS2_CONFIG_MPICXX@ -eq 1 ]
then
export CXX="@MPI_CXX_COMPILER@"
fi
if [ @ADIOS2_CONFIG_MPIFC@ -eq 1 ]
then
export FC="@MPI_Fortran_COMPILER@"
fi
if [ -z "$adios2_DIR" ]
then
export adios2_DIR="${PREFIX}/@CMAKE_INSTALL_CMAKEDIR@"
fi
# Sometimes package managers build in root jails
if [ ! -d "${adios2_DIR}" ]
then
adios2_DIR="@CMAKE_BINARY_DIR@/${PREFIX}/@CMAKE_INSTALL_CMAKEDIR@"
fi
if [ -n "@CMAKE_PREFIX_PATH@" ]
then
export CMAKE_PREFIX_PATH="@CMAKE_PREFIX_PATH@:${CMAKE_PREFIX_PATH}"
fi
echo "Configuring adios2-config@ADIOS2_EXECUTABLE_SUFFIX@ dummy CMake project"
if ! ${CMAKE} -G "Unix Makefiles" ${SOURCE_DIR} ${EXTRA_CMAKE_ARGS}
then
echo "Failed"
exit 1
fi
rm -f adios2.flags
variants="serial"
variant_default="serial"
if [ @ADIOS2_CONFIG_MPI@ -eq 1 ]
then
variants="$variants mpi"
variant_default="mpi"
fi
for variant in $variants
do
echo "Extracting ADIOS flags for C bindings (${variant})"
echo " Without ADIOS"
make_target_flags ${variant}_without_C
without_C_CFLAGS=$(head -1 ${variant}_without_C.flags)
without_C_LDFLAGS=$(tail -1 ${variant}_without_C.flags)
echo " With ADIOS"
make_target_flags ${variant}_with_C
with_C_CFLAGS=$(head -1 ${variant}_with_C.flags)
with_C_LDFLAGS=$(tail -1 ${variant}_with_C.flags)
echo " Extracting diff"
ADIOS2_C_CFLAGS="$(prefixify $(flag_diff "${without_C_CFLAGS}" "${with_C_CFLAGS}"))"
ADIOS2_C_LDFLAGS="$(prefixify $(flag_diff "${without_C_LDFLAGS}" "${with_C_LDFLAGS}"))"
echo " Exporting"
echo ADIOS2_C_CFLAGS_${variant}=\"${ADIOS2_C_CFLAGS}\" >> adios2.flags
echo ADIOS2_C_LDFLAGS_${variant}=\"${ADIOS2_C_LDFLAGS}\" >> adios2.flags
echo "Extracting ADIOS flags for C++ bindings (${variant})"
echo " Without ADIOS"
make_target_flags ${variant}_without_CXX
without_CXX_CXXFLAGS=$(head -1 ${variant}_without_CXX.flags)
without_CXX_LDFLAGS=$(tail -1 ${variant}_without_CXX.flags)
echo " With ADIOS"
make_target_flags ${variant}_with_CXX
with_CXX_CXXFLAGS=$(head -1 ${variant}_with_CXX.flags)
with_CXX_LDFLAGS=$(tail -1 ${variant}_with_CXX.flags)
echo " Extracting diff"
ADIOS2_CXX_CXXFLAGS="$(prefixify $(flag_diff "${without_CXX_CXXFLAGS}" "${with_CXX_CXXFLAGS}"))"
ADIOS2_CXX_LDFLAGS="$(prefixify $(flag_diff "${without_CXX_LDFLAGS}" "${with_CXX_LDFLAGS}"))"
echo " Exporting"
echo ADIOS2_CXX_CXXFLAGS_${variant}=\"${ADIOS2_CXX_CXXFLAGS}\" >> adios2.flags
echo ADIOS2_CXX_LDFLAGS_${variant}=\"${ADIOS2_CXX_LDFLAGS}\" >> adios2.flags
if [ @ADIOS2_CONFIG_FORTRAN@ -eq 1 ]
then
echo "Extracting ADIOS flags for Fortran bindings (${variant})"
echo " Without ADIOS"
make_target_flags ${variant}_without_Fortran
without_Fortran_FFLAGS=$(head -1 ${variant}_without_Fortran.flags)
without_Fortran_LDFLAGS=$(tail -1 ${variant}_without_Fortran.flags)
echo " With ADIOS"
make_target_flags ${variant}_with_Fortran
with_Fortran_FFLAGS=$(head -1 ${variant}_with_Fortran.flags)
with_Fortran_LDFLAGS=$(tail -1 ${variant}_with_Fortran.flags)
echo " Extracting diff"
ADIOS2_Fortran_FFLAGS="$(prefixify $(flag_diff "${without_Fortran_FFLAGS}" "${with_Fortran_FFLAGS}"))"
ADIOS2_Fortran_LDFLAGS="$(prefixify $(flag_diff "${without_Fortran_LDFLAGS}" "${with_Fortran_LDFLAGS}"))"
echo " Exporting"
echo ADIOS2_Fortran_FFLAGS_${variant}=\"${ADIOS2_Fortran_FFLAGS}\" >> adios2.flags
echo ADIOS2_Fortran_LDFLAGS_${variant}=\"${ADIOS2_Fortran_LDFLAGS}\" >> adios2.flags
else
echo ADIOS2_Fortran_FFLAGS_${variant}="" >> adios2.flags
echo ADIOS2_Fortran_LDFLAGS_${variant}="" >> adios2.flags
fi
done
echo "ADIOS2_CONFIG_MPI=@ADIOS2_CONFIG_MPI@" >> adios2.flags
echo "ADIOS2_DEFAULT_VARIANT=${variant_default}" >> adios2.flags
if [[ "@CMAKE_INSTALL_BINDIR@" == /* ]]
then
# absolute path
BINDIR="@CMAKE_INSTALL_BINDIR@"
else
# relative path
BINDIR="${PREFIX}/@CMAKE_INSTALL_BINDIR@"
fi
echo "Writing ${BINDIR}/adios2-config@ADIOS2_EXECUTABLE_SUFFIX@"
# check if the BINDIR directory exists and create it if not
if [ ! -d "${BINDIR}" ]
then
mkdir -p ${BINDIR}
fi
cat \
"@ADIOS2_BINARY_DIR@/cmake/install/post/adios2-config.pre.sh" \
adios2.flags \
"@ADIOS2_BINARY_DIR@/cmake/install/post/adios2-config.post.sh" > "${BINDIR}/adios2-config@ADIOS2_EXECUTABLE_SUFFIX@"
chmod +x "${BINDIR}/adios2-config@ADIOS2_EXECUTABLE_SUFFIX@"
popd
rm -rf ${BUILD_DIR}
|