compress.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. Automatically generated by libigl/scripts/compress.sh **Do not edit**
  31. libigl - A simple c++ geometry processing library
  32. http://igl.ethz.ch/projects/libigl/
  33. Copyright 2013 - Alec Jacobson, Daniele Panozzo, Olga Diamanti, Kenshi
  34. Takayama, Leo Sacht, Interactive Geometry Lab - ETH Zurich
  35. `cat $LIBIGL/VERSION.txt | sed -ne "s/^\([^\#]\)/VERSION \1/p"`
  36. Compressed on `date`
  37. "
  38. echo "$HEADER" | sed -e "s/^/\/\/ /" >> $H_OUT
  39. WIDGET_OPEN="
  40. #ifndef IGL_HEADER_ONLY
  41. # define IGL_HEADER_ONLY
  42. # define IGL_HEADER_ONLY_WAS_NOT_DEFINED
  43. #endif
  44. ";
  45. WIDGET_CLOSE="
  46. #ifdef IGL_HEADER_ONLY_WAS_NOT_DEFINED
  47. # undef IGL_HEADER_ONLY
  48. #endif
  49. ";
  50. # No cpp file, just header
  51. if [ $H_OUT == $CPP_OUT ]
  52. then
  53. echo "$WIDGET_OPEN" >> $H_OUT
  54. fi
  55. echo "" >> $H_OUT
  56. echo "#ifndef IGL_H" >> $H_OUT
  57. echo "#define IGL_H" >> $H_OUT
  58. LIBIGL=/usr/local/igl/libigl
  59. FIRST_H_FILES="\
  60. $LIBIGL/include/igl/igl_inline.h \
  61. ";
  62. H_FILES="$FIRST_H_FILES `ls $LIBIGL/include/igl/*.h`"
  63. for h in $H_FILES
  64. do
  65. short=`echo $h | sed -e 's/.*igl\///'`
  66. echo "//////////////////////////////////////////////////////////////////" >> $H_OUT
  67. echo "// $short begin" >> $H_OUT
  68. echo "//" >> $H_OUT
  69. # Remove "local" header or cpp files
  70. cat $h | sed -E '/^\# *include *"*[A-z_]*.(cpp|h)"/d' >> $H_OUT
  71. echo "//" >> $H_OUT
  72. echo "// $short end" >> $H_OUT
  73. echo "//////////////////////////////////////////////////////////////////" >> $H_OUT
  74. echo "" >> $H_OUT
  75. done
  76. echo "#endif" >> $H_OUT
  77. # Distinct h and cpp files
  78. if [ $H_OUT != $CPP_OUT ]
  79. then
  80. echo "$HEADER" | sed -e "s/^/\/\/ /" >> $CPP_OUT
  81. echo "#include \"igl.h\"" >> $CPP_OUT
  82. echo "" >> $CPP_OUT
  83. fi
  84. LAST_CPP_FILES="\
  85. $LIBIGL/include/igl/MCTables.hh \
  86. ";
  87. CPP_FILES=`ls $LIBIGL/include/igl/*.cpp $LAST_CPP_FILES`
  88. for cpp in $CPP_FILES
  89. do
  90. short=`echo $cpp | sed -e 's/.*igl\///'`
  91. echo "//////////////////////////////////////////////////////////////////" >> $CPP_OUT
  92. echo "// $short begin" >> $CPP_OUT
  93. echo "//" >> $CPP_OUT
  94. # Remove "local" header or cpp files
  95. cat $cpp | sed -E '/^\# *include *"*[A-z_]*.(cpp|h)"/d' >> $CPP_OUT
  96. echo "//" >> $CPP_OUT
  97. echo "// $short end" >> $CPP_OUT
  98. echo "//////////////////////////////////////////////////////////////////" >> $CPP_OUT
  99. echo "" >> $CPP_OUT
  100. done
  101. # No cpp file, just header
  102. if [ $H_OUT == $CPP_OUT ]
  103. then
  104. echo "$WIDGET_CLOSE" >> $CPP_OUT
  105. fi
  106. # Try to compile it
  107. echo "Compile with:"
  108. echo ""
  109. echo " g++ -o igl.o -c igl.cpp -I/opt/local/include/eigen3"
  110. echo " rm -f libigl.a"
  111. echo " ar cqs libigl.a igl.o"
  112. echo " rm igl.o"
  113. echo ""