Sfoglia il codice sorgente

compression script

Former-commit-id: 35a72050305f2e6ce563822f18e8cf548c6562bb
Alec Jacobson (jalec 11 anni fa
parent
commit
616b9172ec
2 ha cambiato i file con 154 aggiunte e 0 eliminazioni
  1. 133 0
      scripts/compress.sh
  2. 21 0
      tutorial.html

+ 133 - 0
scripts/compress.sh

@@ -0,0 +1,133 @@
+#!/bin/bash 
+
+if [ "$#" -eq 0 ]
+then
+  USAGE="Usage:
+  scripts/compress.sh igl.h igl.cpp
+
+Compresses all headers into igl.h and all sources into igl.cpp
+
+Or:
+  scripts/compress.sh igl.h
+
+Compresses all headers *and* sources into igl.h (IGL_HEADER_ONLY)
+";
+  echo "$USAGE"
+  exit 1
+fi
+
+if [ "$#" -eq 1 ]
+then
+  H_OUT=$1
+  CPP_OUT=$H_OUT
+fi
+
+if [ "$#" -eq 2 ]
+then
+  H_OUT=$1
+  CPP_OUT=$2
+fi
+
+# Prepare output files
+#H_OUT=igl.h
+#CPP_OUT=igl.cpp
+rm -f $H_OUT
+rm -f $CPP_OUT
+
+HEADER="
+libigl - A simple c++ geometry processing library
+
+http://igl.ethz.ch/projects/libigl/
+
+Copyright 2013 - Alec Jacobson, Daniele Panozzo, Olga Diamanti, Kenshi
+Takayama, Leo Sacht, Interactive Geometry Lab - ETH Zurich
+
+`cat $LIBIGL/VERSION.txt | sed -ne "s/^\([^\#]\)/VERSION \1/p"`
+
+Compressed on `date`
+
+"
+
+echo "$HEADER" | sed -e "s/^/\/\/ /" >> $H_OUT
+
+WIDGET_OPEN="
+#ifndef IGL_HEADER_ONLY
+#  define IGL_HEADER_ONLY
+#  define IGL_HEADER_ONLY_WAS_NOT_DEFINED
+#endif
+";
+WIDGET_CLOSE="
+#ifdef IGL_HEADER_ONLY_WAS_NOT_DEFINED
+#  undef IGL_HEADER_ONLY
+#endif
+";
+
+# No cpp file, just header
+if [ $H_OUT == $CPP_OUT ]
+then
+  echo "$WIDGET_OPEN" >> $H_OUT
+fi
+
+echo "" >> $H_OUT
+echo "#ifndef IGL_H" >> $H_OUT
+echo "#define IGL_H" >> $H_OUT
+LIBIGL=/usr/local/igl/libigl
+FIRST_H_FILES="\
+$LIBIGL/include/igl/igl_inline.h \
+";
+
+H_FILES="$FIRST_H_FILES `ls $LIBIGL/include/igl/*.h`"
+for h in $H_FILES
+do
+  short=`echo $h | sed -e 's/.*igl\///'`
+  echo "//////////////////////////////////////////////////////////////////" >> $H_OUT
+  echo "// $short begin" >> $H_OUT
+  echo "//" >> $H_OUT
+  # Remove "local" header or cpp files
+  cat $h | sed -E '/^\# *include  *"*[A-z_]*.(cpp|h)"/d' >> $H_OUT
+  echo "//" >> $H_OUT
+  echo "// $short end" >> $H_OUT
+  echo "//////////////////////////////////////////////////////////////////" >> $H_OUT
+  echo "" >> $H_OUT
+done
+echo "#endif" >> $H_OUT
+
+# Distinct h and cpp files
+if [ $H_OUT != $CPP_OUT ]
+then
+  echo "$HEADER" | sed -e "s/^/\/\/ /" >> $CPP_OUT
+  echo "#include \"igl.h\"" >> $CPP_OUT
+  echo "" >> $CPP_OUT
+fi
+
+LAST_CPP_FILES="\
+$LIBIGL/include/igl/MCTables.hh \
+";
+CPP_FILES=`ls $LIBIGL/include/igl/*.cpp $LAST_CPP_FILES`
+for cpp in $CPP_FILES
+do
+  short=`echo $cpp | sed -e 's/.*igl\///'`
+  echo "//////////////////////////////////////////////////////////////////" >> $CPP_OUT
+  echo "// $short begin" >> $CPP_OUT
+  echo "//" >> $CPP_OUT
+  # Remove "local" header or cpp files
+  cat $cpp | sed -E '/^\# *include  *"*[A-z_]*.(cpp|h)"/d' >> $CPP_OUT
+  echo "//" >> $CPP_OUT
+  echo "// $short end" >> $CPP_OUT
+  echo "//////////////////////////////////////////////////////////////////" >> $CPP_OUT
+  echo "" >> $CPP_OUT
+done
+
+# No cpp file, just header
+if [ $H_OUT == $CPP_OUT ]
+then
+  echo "$WIDGET_CLOSE" >> $CPP_OUT
+fi
+
+# Try to compile it
+echo "Compile with:"
+echo ""
+echo "    g++ -o igl.o -c igl.cpp -I/opt/local/include/eigen3"
+echo "    ar cqs libigl.a igl.o"
+echo "    rm igl.o"
+echo ""

+ 21 - 0
tutorial.html

@@ -289,6 +289,27 @@ make
       <pre><code>
 #include &lt;igl/extra/some_extra_function.h&gt;
       </code></pre>
+
+      <h2 id=compress>Compressing into a single  .h/.cpp pair</h2>
+      <p>Calling the script:</p>
+      <pre><code>scripts/compress.sh igl.h igl.cpp</code></pre>
+      <p>will create a single header
+      <code>igl.h</code> and a single cpp file <code>igl.cpp</code>. This can
+      be easily incorporated into external projects. The disadvantage of this
+      seems to be that even to use a single function (e.g.
+      <code>cotmatrix</code>), compiling and linking against
+      <code>igl.cpp</code> will require linking to all of <code>libigl</code>'s
+      dependencies (<code>OpenGL</code>, <code>GLUT</code>,
+      <code>AntTweakBar</code>, <code>BLAS</code>).</p>
+
+      <p>Alternatively, you can compress everything into a single header file (analagous to IGL_HEADER_ONLY):</p>
+      <pre><code>scripts/compress.sh igl.h</code></pre>
+      <p>This seems to have the seem linking dependency troubles as above.</p>
+
+      <p><span class=todo>One option would be to be better about enclosing
+      things in <code>#ifndef IGL_NO_ANTTWEAKBAR</code> type guards.</span></p>
+
+
   </div>
   </body>
 </html>