1#!/bin/bash 2# 3# make-qhull_qh.sh [libqhull_r] [sed-only] [files] -- Derive src/qhull-qh/ from src/libqhull_r with 'qh' macros 4# 5# $Id: //main/2019/qhull/eg/make-qhull_qh.sh#2 $$Change: 2672 $ 6# $DateTime: 2019/06/06 15:21:49 $$Author: bbarber $ 7 8if [[ "$1" == "" ]]; then 9 echo "eg/make-qhull_qh.sh libqhull_r | sed-only | <directory-file-list> -- convert 'qh->' to macro 'qh'" 10 echo " creates 'src/qhull_qh/' unless 'DEST=destination eg/make-qhull_qh.sh ..." 11 exit 12fi 13# set -v 14SEDONLY=0 15if [[ "$1" == "libqhull_r" ]]; then 16 SOURCES="src/libqhull_r src/qconvex src/qdelaunay src/qhalf src/qhull src/qvoronoi src/rbox src/testqset_r src/user_eg src/user_eg2" 17 DEST=${DEST:-src/qhull_qh} 18 if [[ $# -gt 1 ]]; then 19 echo "eg/make-qhull_qh.sh: 'libqhull_r' does not take source directories. It converts qhull files in '$SOURCES' to '$DEST'" 20 exit 1 21 fi 22elif [[ "$1" == "sed-only" ]]; then 23 SEDONLY=1 24 DEST=${DEST:-.} 25 if [[ $# -gt 1 ]]; then 26 echo "eg/make-qhull_qh.sh: 'sedonly' does not take source directories. It converts qhull files in '$DEST' from 'qh->' to the macro 'qh'" 27 exit 1 28 fi 29else 30 SOURCES="$@" 31 DEST=${DEST:-src/qhull_qh} 32fi 33 34if [[ $SEDONLY -ne 1 ]]; then 35 if [[ -d $DEST ]]; then 36 echo "To rebuild '$DEST' from '$SOURCES'" 37 if [[ "$DEST" == "src/qhull_qh" ]]; then 38 echo " make cleanall; eg/make-qhull_qh.sh $@" 39 else 40 echo " rm -rf '$DEST'; eg/make-qhull_qh.sh $@" 41 fi 42 exit 1 43 fi 44 for F in $SOURCES; do 45 if [[ ! -d $F && ! -r $F ]]; then 46 echo "eg/make-qhull_qh.sh: source '$F' not found. Execute make-qhull_qh.sh from a Qhull directory with $SOURCES" 47 exit 1 48 fi 49 done 50 echo eg/make-qhull_qh.sh: Create "'$DEST/' from '$SOURCES'" 51 mkdir $DEST || exit 1 52 echo -e "eg/make-qhull_qh.sh created '$DEST' to compare reentrant with non-reentrant Qhull" >$DEST/README.txt 53 echo -e "\nSource directories and files -- $SOURCES" >>$DEST/README.txt 54 echo -e "\n'make cleanall' deletes 'src/qhull_qh/'\n" >>$DEST/README.txt 55 date >>$DEST/README.txt 56 for X in $SOURCES; do 57 if [[ -d $X ]]; then 58 for F in $X/*_r.* $X/*_ra.* $X/*.def; do 59 if [[ -f $F ]]; then 60 G="$(echo ${F##*/} | sed -e 's/_r\././' -e 's/_ra\./_a./')" 61 # echo "$F => $DEST/$G" 62 cp -p $F $DEST/$G || exit 1 63 fi 64 done 65 if [[ -f $X/Makefile && ! -f $DEST/Makefile ]]; then 66 cp -p $X/Makefile $DEST/ || exit 1 67 fi 68 if [[ -f $X/index.htm && ! -f $DEST/index.htm ]]; then 69 cp -p $X/index.htm $DEST/ || exit 1 70 fi 71 elif [[ -f $X ]]; then 72 G="$(echo ${X##*/} | sed -e 's/_r\././' -e 's/_ra\./_a./')" 73 # echo "$X => $DEST/$G" 74 cp -p $X $DEST/$G || exit 1 75 fi 76 done 77fi 78 79echo Convert 'qh->' to 'qh ', etc. 80if [[ -w $DEST/Makefile ]]; then 81 sed -i -r \ 82 -e 's/_r$//' \ 83 -e 's/_r / /g' \ 84 -e 's|_r/|/|g' \ 85 -e 's/_r\.a/.a/g' \ 86 -e 's/_r\.c/.c/g' \ 87 -e 's/_r\.h/.h/g' \ 88 -e 's/_r\.o/.o/g' \ 89 -e 's/_ra\.h/_a.h/g' \ 90 $DEST/Makefile || exit 1 91fi 92for F in $DEST/*.c $DEST/*.h; do 93 sed -i -r \ 94 -e 's/\(qhT \*qh, /(/' \ 95 -e ' /ifdef __cplusplus/,/^$/ d' \ 96 -e 's/\(qhT \*qh(.*)\)/(void\1)/' \ 97 -e 's/_r$//' \ 98 -e 's/_r([ /:])/\1/g' \ 99 -e 's/_r\.c/.c/g' \ 100 -e 's/_r\.h/.h/g' \ 101 -e 's/_r\.o/.o/g' \ 102 -e 's/_ra\.h/_a.h/g' \ 103 -e 's/ \|\| \!qh\)/)/' \ 104 -e 's/_rbox\(qh, qh->/_rbox(rbox./' \ 105 -e ' /QHULL_UNUSED\(qh\)/ d' \ 106 -e 's/qh->rbox_([^c])/rbox.\1/g' \ 107 -e 's/\(qh, (.*) \)$/( \1 )/' \ 108 -e 's/\(qh, (.*) \) \{ \.\.\. \}$/( \1 ) { ... }/' \ 109 -e 's/\(qh *\)$/( )/' \ 110 -e 's/\(qhB?, /(/g' \ 111 -e 's/\(qhB?\)/()/g' \ 112 -e 's/\(qh /(/g' \ 113 -e 's/qh->qhmem/qhmem/g' \ 114 -e 's/qh->qhstat\./qhstat /g' \ 115 -e 's/qh->/qh /g' \ 116 -e 's/qhull_r-/qhull-/g' \ 117 -e "s/Needed for qhT in libqhull.h/Needed for qhT in libqhull_r.h. Here for compatibility/" \ 118 -e ' /ifdef __cplusplus/,/^$/ d' \ 119 -e ' /qh may be NULL/ d' \ 120 -e ' /For libqhull_r,/ d' \ 121 -e ' /reentrant only/ d' \ 122 -e ' /assumes qh defined/ d' \ 123 -e ' /^ *\/\*.*\.cpp -- / d' \ 124 $F 125 # sed requires space before search expressions, /.../ 126 if which u2d >/dev/null 2>&1; then 127 u2d $F 128 fi 129done 130for F in $DEST/*.htm; do 131 sed -i -r \ 132 -e 's|_r/|/|g' \ 133 -e 's/_r\.c/.c/g' \ 134 -e 's/_r\.h/.h/g' \ 135 -e 's/_ra\.h/_a.h/g' \ 136 $F 137 if which u2d >/dev/null 2>&1; then 138 u2d $F 139 fi 140done 141echo -e "\nCompare '$DEST' to 'src/libqhull', 'src/qdelaunay', etc. Do not ignore minor differences." 142