|
@@ -0,0 +1,88 @@
|
|
|
+#!/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
|
|
|
+
|
|
|
+#ifndef IGL_HEADER_ONLY
|
|
|
+// Explicit template specialization
|
|
|
+#endif"`
|
|
|
+ fi
|
|
|
+ echo "$before
|
|
|
+
|
|
|
+#ifdef IGL_HEADER_ONLY
|
|
|
+# include \"$filename.cpp\"
|
|
|
+#endif
|
|
|
+
|
|
|
+#endif">before-"$filename".h
|
|
|
+ echo "#include \"$filename.h\"
|
|
|
+
|
|
|
+$after">after-"$filename".cpp
|
|
|
+done
|