compress.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #!/bin/bash
  2. if [ "$#" -eq 0 ]
  3. then
  4. USAGE="Usage:
  5. scripts/compress.sh igl.h igl.cpp
  6. Compresses all headers into igl.h and all sources into igl.cpp
  7. Or:
  8. scripts/compress.sh igl.h
  9. Compresses all headers *and* sources into igl.h (IGL_HEADER_ONLY)
  10. ";
  11. echo "$USAGE"
  12. exit 1
  13. fi
  14. if [ "$#" -eq 1 ]
  15. then
  16. H_OUT=$1
  17. CPP_OUT=$H_OUT
  18. fi
  19. if [ "$#" -eq 2 ]
  20. then
  21. H_OUT=$1
  22. CPP_OUT=$2
  23. fi
  24. # Prepare output files
  25. #H_OUT=igl.h
  26. #CPP_OUT=igl.cpp
  27. rm -f $H_OUT
  28. rm -f $CPP_OUT
  29. HEADER="
  30. libigl - A simple c++ geometry processing library
  31. http://igl.ethz.ch/projects/libigl/
  32. Copyright 2013 - Alec Jacobson, Daniele Panozzo, Olga Diamanti, Kenshi
  33. Takayama, Leo Sacht, Interactive Geometry Lab - ETH Zurich
  34. `cat $LIBIGL/VERSION.txt | sed -ne "s/^\([^\#]\)/VERSION \1/p"`
  35. Compressed on `date`
  36. "
  37. echo "$HEADER" | sed -e "s/^/\/\/ /" >> $H_OUT
  38. WIDGET_OPEN="
  39. #ifndef IGL_HEADER_ONLY
  40. # define IGL_HEADER_ONLY
  41. # define IGL_HEADER_ONLY_WAS_NOT_DEFINED
  42. #endif
  43. ";
  44. WIDGET_CLOSE="
  45. #ifdef IGL_HEADER_ONLY_WAS_NOT_DEFINED
  46. # undef IGL_HEADER_ONLY
  47. #endif
  48. ";
  49. # No cpp file, just header
  50. if [ $H_OUT == $CPP_OUT ]
  51. then
  52. echo "$WIDGET_OPEN" >> $H_OUT
  53. fi
  54. echo "" >> $H_OUT
  55. echo "#ifndef IGL_H" >> $H_OUT
  56. echo "#define IGL_H" >> $H_OUT
  57. LIBIGL=/usr/local/igl/libigl
  58. FIRST_H_FILES="\
  59. $LIBIGL/include/igl/igl_inline.h \
  60. ";
  61. H_FILES="$FIRST_H_FILES `ls $LIBIGL/include/igl/*.h`"
  62. for h in $H_FILES
  63. do
  64. short=`echo $h | sed -e 's/.*igl\///'`
  65. echo "//////////////////////////////////////////////////////////////////" >> $H_OUT
  66. echo "// $short begin" >> $H_OUT
  67. echo "//" >> $H_OUT
  68. # Remove "local" header or cpp files
  69. cat $h | sed -E '/^\# *include *"*[A-z_]*.(cpp|h)"/d' >> $H_OUT
  70. echo "//" >> $H_OUT
  71. echo "// $short end" >> $H_OUT
  72. echo "//////////////////////////////////////////////////////////////////" >> $H_OUT
  73. echo "" >> $H_OUT
  74. done
  75. echo "#endif" >> $H_OUT
  76. # Distinct h and cpp files
  77. if [ $H_OUT != $CPP_OUT ]
  78. then
  79. echo "$HEADER" | sed -e "s/^/\/\/ /" >> $CPP_OUT
  80. echo "#include \"igl.h\"" >> $CPP_OUT
  81. echo "" >> $CPP_OUT
  82. fi
  83. LAST_CPP_FILES="\
  84. $LIBIGL/include/igl/MCTables.hh \
  85. ";
  86. CPP_FILES=`ls $LIBIGL/include/igl/*.cpp $LAST_CPP_FILES`
  87. for cpp in $CPP_FILES
  88. do
  89. short=`echo $cpp | sed -e 's/.*igl\///'`
  90. echo "//////////////////////////////////////////////////////////////////" >> $CPP_OUT
  91. echo "// $short begin" >> $CPP_OUT
  92. echo "//" >> $CPP_OUT
  93. # Remove "local" header or cpp files
  94. cat $cpp | sed -E '/^\# *include *"*[A-z_]*.(cpp|h)"/d' >> $CPP_OUT
  95. echo "//" >> $CPP_OUT
  96. echo "// $short end" >> $CPP_OUT
  97. echo "//////////////////////////////////////////////////////////////////" >> $CPP_OUT
  98. echo "" >> $CPP_OUT
  99. done
  100. # No cpp file, just header
  101. if [ $H_OUT == $CPP_OUT ]
  102. then
  103. echo "$WIDGET_CLOSE" >> $CPP_OUT
  104. fi
  105. # Try to compile it
  106. echo "Compile with:"
  107. echo ""
  108. echo " g++ -o igl.o -c igl.cpp -I/opt/local/include/eigen3"
  109. echo " ar cqs libigl.a igl.o"
  110. echo " rm igl.o"
  111. echo ""