89 lines
2.1 KiB
Bash
Executable File
89 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# http://tipstricks.itmatrix.eu/?p=305
|
|
tac () {
|
|
awk '1 { last = NR; line[last] = $0; } END { for (i = last; i > 0; i--) { print line[i]; } }'
|
|
}
|
|
|
|
function replace_inline
|
|
{
|
|
result="$1"
|
|
# replace inlines with IGL_INLINEs, first those that begin lines
|
|
result=`echo "$result" | sed -e 's/^inline/IGL_INLINE/g'`
|
|
# then also those that begin words
|
|
result=`echo "$result" | sed -e 's/ inline/ IGL_INLINE/g'`
|
|
echo "$result"
|
|
}
|
|
|
|
# Convert well organized .h file to a .h/.cpp pair
|
|
for i in $*
|
|
do
|
|
# Only operate on .h files
|
|
filename=$(basename $i)
|
|
extension=${filename##*.}
|
|
filename=${filename%.*}
|
|
FILENAME=`echo $filename | tr '[a-z]' '[A-Z]'`
|
|
if [ ! "$extension" = "h" ];
|
|
then
|
|
echo "Skipping $i because it is not a .h file"
|
|
continue;
|
|
fi
|
|
|
|
if ! grep -q "^\/\/ Implementation *$" "$i"
|
|
then
|
|
echo "Skipping $i because it does not match ^\/\/ Implementation *$ "
|
|
continue;
|
|
fi
|
|
|
|
if [[ `grep -c "^\#endif" "$i"` > 1 ]];
|
|
then
|
|
echo "Warning $i contains multple matches to ^#endif"
|
|
fi
|
|
|
|
before=`sed -n '/^\/\/ Implementation$/q;p' "$i"`;
|
|
|
|
if ! echo "$before" | grep -q "^\#ifndef IGL_${FILENAME}_H"
|
|
then
|
|
echo "Skipping $i because it does not match ^#ifndef IGL_${FILENAME}_H "
|
|
continue;
|
|
fi
|
|
|
|
if ! echo "$before" | grep -q "^\#define IGL_${FILENAME}_H"
|
|
then
|
|
echo "Skipping $i because it does not match ^#define IGL_${FILENAME}_H "
|
|
continue;
|
|
fi
|
|
|
|
before=`replace_inline "$before"`
|
|
# prepend #include "igl_inline.h"
|
|
before=`echo "$before" | sed -e 's/^\(#define IGL_'${FILENAME}'_H\)/\1\'$'\n''#include \"igl_inline.h\"'/`
|
|
after=`sed '1,/^\/\/ Implementation$/d' $i`;
|
|
after=`replace_inline "$after"`
|
|
# reverse file
|
|
after=`echo "$after" | tac`
|
|
# everything after first (last) endif
|
|
after=`echo "
|
|
$after" | sed '1,/endif/d'`;
|
|
# reverse file
|
|
after=`echo "$after" | tac`
|
|
# append empty template code
|
|
if grep -q "template" "$i"
|
|
then
|
|
after=`echo "$after
|
|
|
|
#ifdef IGL_STATIC_LIBRARY
|
|
// Explicit template specialization
|
|
#endif"`
|
|
fi
|
|
echo "$before
|
|
|
|
#ifndef IGL_STATIC_LIBRARY
|
|
# include \"$filename.cpp\"
|
|
#endif
|
|
|
|
#endif"> "$filename".h
|
|
echo "#include \"$filename.h\"
|
|
|
|
$after"> "$filename".cpp
|
|
done
|