1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2024-07-19 01:13:50 +02:00
qmckl/tools/build_makefile.sh

176 lines
4.7 KiB
Bash
Raw Normal View History

2021-05-11 11:45:49 +02:00
#!/bin/bash
#
# Creates all the dependencies from the org-mode files
if [[ -z ${srcdir} ]] ; then
echo "Error: srcdir environment variable is not defined"
exit 1
fi
2021-05-11 12:15:08 +02:00
2021-05-11 11:45:49 +02:00
WD=$PWD
function make_src()
{
cd ${srcdir}
2021-05-11 12:56:41 +02:00
declare -A DEPS DEPS_ORG DEPS_TEST
2021-05-11 11:45:49 +02:00
C_FILES=
F_FILES=
FH_FUNC_FILES=
FH_TYPE_FILES=
H_FUNC_FILES=
H_TYPE_FILES=
H_PRIVATE_FUNC_FILES=
H_PRIVATE_TYPE_FILES=
C_TEST_FILES=
F_TEST_FILES=
2021-05-11 12:15:08 +02:00
TANGLED_FILES=
2021-05-11 11:45:49 +02:00
2021-05-11 13:57:23 +02:00
qmckl_f=" \$(srcdir)/src/qmckl_f.o"
2021-05-11 11:45:49 +02:00
for org in org/*.org ; do
2021-05-11 12:56:41 +02:00
i=$(basename ${org%.org})
tangled="\$(srcdir)/org/${i}.tangled"
2021-05-11 12:15:08 +02:00
c_test_o="\$(srcdir)/src/test_${i}.o"
f_test_o="\$(srcdir)/src/test_${i}_f.o"
c_test="\$(srcdir)/src/test_${i}.c"
f_test="\$(srcdir)/src/test_${i}_f.f90"
2021-05-11 12:56:41 +02:00
i="\$(srcdir)/src/${i}"
2021-05-11 11:45:49 +02:00
c="${i}.c"
o="${i}.o"
h_func="${i}_func.h"
h_type="${i}_type.h"
h_private_func="${i}_private_func.h"
h_private_type="${i}_private_type.h"
f90="${i}_f.f90"
fo="${i}_f.o"
fh_func="${i}_fh_func.f90"
fh_type="${i}_fh_type.f90"
2021-05-11 12:15:08 +02:00
ORG_FILES+="\$(srcdir)/$org "
TANGLED_FILES+="$tangled "
DEPS_ORG["\$(srcdir)/$org"]=$tangled
2021-05-11 11:45:49 +02:00
grep -q "(eval c)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:15:08 +02:00
DEPS[$c]+=" $tangled"
2021-05-11 13:57:23 +02:00
DEPS[$o]+=" $c \$(qmckl_h)"
2021-05-11 11:45:49 +02:00
C_FILES+=" $c"
C_O_FILES+=" $o"
fi
grep -q "(eval h_func)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:15:08 +02:00
DEPS[$h_func]+=" $tangled"
2021-05-11 11:45:49 +02:00
H_FUNC_FILES+=" $h_func"
fi
grep -q "(eval h_type)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:15:08 +02:00
DEPS[$h_type]+=" $tangled"
2021-05-11 11:45:49 +02:00
H_TYPE_FILES+=" $h_type"
fi
grep -q "(eval h_private_type)" $org
if [[ $? -eq 0 ]] ; then
DEPS[$o]+=" $h_private_type"
2021-05-11 12:15:08 +02:00
DEPS[$h_private_type]+=" $tangled"
2021-05-11 11:45:49 +02:00
H_PRIVATE_TYPE_FILES+=" $h_private_type"
fi
grep -q "(eval h_private_func)" $org
if [[ $? -eq 0 ]] ; then
DEPS[$o]+=" $h_private_func"
2021-05-11 12:15:08 +02:00
DEPS[$h_private_func]+=" $tangled"
2021-05-11 11:45:49 +02:00
H_PRIVATE_FUNC_FILES+=" $h_private_func"
fi
grep -q "(eval f)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:15:08 +02:00
DEPS[$f90]+="$tangled "
2021-05-11 13:57:23 +02:00
DEPS[$fo]+="$f90 \$(qmckl_f)"
2021-05-11 11:45:49 +02:00
F_FILES+=" $f90"
fi
grep -q "(eval fh_func)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:15:08 +02:00
DEPS[$fh_func]+=" $tangled"
2021-05-11 11:45:49 +02:00
FH_FUNC_FILES+=" $fh_func"
fi
grep -q "(eval fh_type)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:15:08 +02:00
DEPS[$fh_type]+=" $tangled"
2021-05-11 11:45:49 +02:00
FH_TYPE_FILES+=" $fh_type"
fi
grep -q "(eval c_test)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:56:41 +02:00
DEPS_TEST["${c_test}"]="${tangled} "
2021-05-11 13:57:23 +02:00
DEPS_TEST["${c_test_o}"]+=" ${c_test} $o \$(qmckl_h)"
2021-05-11 12:56:41 +02:00
C_TEST_FILES+=" ${c_test}"
2021-05-11 11:45:49 +02:00
fi
grep -q "(eval f_test)" $org
if [[ $? -eq 0 ]] ; then
2021-05-11 12:56:41 +02:00
DEPS_TEST["${f_test}"]+="${tangled} "
2021-05-11 13:57:23 +02:00
DEPS_TEST["${f_test_o}"]+=" ${f_test} $fo \$(qmckl_f)"
2021-05-11 12:56:41 +02:00
F_TEST_FILES+=" ${f_test}"
2021-05-11 11:45:49 +02:00
fi
done
OUTPUT=${WD}/generated.mk
echo > ${OUTPUT}
echo "## Source files" > ${OUTPUT}
echo >> ${OUTPUT}
echo "ORG_FILES=${ORG_FILES}" >> ${OUTPUT}
2021-05-11 12:15:08 +02:00
echo "TANGLED_FILES=${TANGLED_FILES}" >> ${OUTPUT}
2021-05-11 11:45:49 +02:00
echo "C_FILES=${C_FILES}" >> ${OUTPUT}
echo "F_FILES=${F_FILES}" >> ${OUTPUT}
echo "C_O_FILES=${C_O_FILES}" >> ${OUTPUT}
echo "F_O_FILES=${F_O_FILES}" >> ${OUTPUT}
echo "FH_FUNC_FILES=${FH_FUNC_FILES}" >> ${OUTPUT}
echo "FH_TYPE_FILES=${FH_TYPE_FILES}" >> ${OUTPUT}
echo "H_FUNC_FILES=${H_FUNC_FILES}" >> ${OUTPUT}
echo "H_TYPE_FILES=${H_TYPE_FILES}" >> ${OUTPUT}
echo "H_PRIVATE_FUNC_FILES=${H_PRIVATE_FUNC_FILES}" >> ${OUTPUT}
echo "H_PRIVATE_TYPE_FILES=${H_PRIVATE_TYPE_FILES}" >> ${OUTPUT}
echo "C_TEST_FILES=${C_TEST_FILES}" >> ${OUTPUT}
echo "F_TEST_FILES=${F_TEST_FILES}" >> ${OUTPUT}
echo >> ${OUTPUT}
echo >> ${OUTPUT}
echo "## Org-mode inherited dependencies" >> ${OUTPUT}
echo >> ${OUTPUT}
for f in ${!DEPS_ORG[@]} ; do
echo ${DEPS_ORG[$f]}: $f
echo " \$(tangle_verbose)\$(srcdir)/tools/tangle.sh $f"
echo ""
done >> ${OUTPUT}
echo >> ${OUTPUT}
echo >> ${OUTPUT}
echo "## Source dependencies" >> ${OUTPUT}
echo >> ${OUTPUT}
for f in ${!DEPS[@]} ; do
2021-05-11 12:56:41 +02:00
echo "${f}: ${DEPS[$f]}"
done | sort >> ${OUTPUT}
echo >> ${OUTPUT}
echo "## Test files" >> ${OUTPUT}
echo >> ${OUTPUT}
for f in ${!DEPS_TEST[@]} ; do
echo "${f}: ${DEPS_TEST[$f]} \$(qmckl_h) \$(srcdir)/src/libqmckl.la"
2021-05-11 11:45:49 +02:00
done | sort >> ${OUTPUT}
}
make_src