1#!/bin/sh
2#
3# qhull-zip.sh version -- Make zip and tgz files for Qhull release
4#
5# requires road-script.sh from http://www.qhull.org/road/
6#   for check_err_log, log_step, log_note, exit_err, exit_if_fail, etc.
7#
8# wzzip from http://www.winzip.com/wzcline.htm
9#   can not use path with $zip_file
10#   odd error messages if can't locate directory
11#
12# $Id: //main/2019/qhull/eg/qhull-zip.sh#39 $$Change: 3039 $
13# $DateTime: 2020/09/03 21:26:22 $$Author: bbarber $
14
15if [[ $# -ne 3 ]]; then
16        echo 'Missing date stamp -- eg/qhull-zip.sh 2020 2020.2 8.0.2'
17        echo 'Build Release Win32 binaries -- build/... from Perforce, make cleanall, retarget vcxproj files, restart DevStudio'
18        echo 'Check libqhull_r and libqhull are the same.  See qh_code.htm#convert'
19        exit
20fi
21versionyear=$1
22version=$2
23versionunix=$3
24
25echo $TMP
26
27err_program=qhull-zip
28err_log=$TMP/qhull-zip.log
29[[ -e $HOME/bash/etc/road-script.sh ]] && source $HOME/bash/etc/road-script.sh \
30    || source /etc/road-script.sh
31
32check_err_log $LINENO "$err_log"
33check_err_log $LINENO "$err_step_log"
34log_step $LINENO "Logging to $err_log\n... and $err_step_log"
35
36log_note $LINENO "Find Qhull directory"
37if [[ ! -d qhull/eg && ! -d ../qhull/eg && -d ../../qhull/eg ]]; then
38    exit_err $LINENO "qhull/eg directory not found at or above $PWD"
39fi
40if [[ ! -d qhull/eg ]]; then
41    if [[ -d ../qhull/eg ]]; then
42        cd ..
43    else
44        cd ../..  # Tested above
45    fi
46fi
47root_dir=$(pwd)
48echo root_dir= $root_dir
49
50TEMP_DIR="$TMP/qhull-zip-$(ro_today2)"
51TEMP_FILE="$TMP/qhull-zip-$(ro_today2).txt"
52
53qhull_zip_file=qhull-$version.zip # no path or spaces
54qhull_tgz_file=qhull-$versionyear-src-$versionunix.tgz
55qhullmd5_file=qhull-$version.md5sum
56
57exit_if_fail $LINENO "rm -f $qhull_zip_file $qhull_tgz_file $qhullmd5_file"
58
59if [[ -e /bin/msysinfo || -e /bin/msys-z.dll ]]; then
60
61    #############################
62    log_step $LINENO "Check for DevStudio 32-bit release build without q_test2"
63    #############################
64
65    ls -l qhull/bin/*.exe qhull/bin/*.dll
66    qhull/bin/rbox 4 D2 | qhull/bin/qhull Tsz | grep "size in bytes"
67    qhull/bin/rbox 4 D2 | qhull/bin/qhull Tsz | grep "size in bytes" | grep "ridge 20"
68    exit_if_err $LINENO "Not a 32-bit build (expecting 'ridge 20')"
69
70    if grep eg/q_test2 qhull/Makefile; then
71       exit_err $LINENO "Change eg/q_test2 to eg/q_test in Makefile.testall"
72    fi
73
74    log_step $LINENO "Check 'p4 diff se' for modified files"
75    if (p4 diff -se qhull/... | grep -v vcxp | grep qhull); then
76       exit_err $LINENO "Submit modified files to Perforce"
77    fi
78
79    if [[ -d src/qhull_qh ]]; then
80       exit_err $LINENO "Delete src/qhull_qh/"
81    fi
82fi
83
84#############################
85log_step $LINENO "Check files"
86#############################
87
88exit_if_fail $LINENO "cd qhull"
89if ! grep "if 0 .* QHULL_CRTDBG" src/libqhull/user.h >/dev/null; then
90    exit_err $LINENO "QHULL_CRTDBG is defined in src/libqhull/user.h"
91elif ! grep "if 0 .* QHULL_CRTDBG" src/libqhull_r/user_r.h >/dev/null; then
92    exit_err $LINENO "QHULL_CRTDBG is defined in src/libqhull_r/user_r.h"
93elif ! grep "^#define qh_QHpointer 0" src/libqhull/user.h >/dev/null; then
94    exit_err $LINENO "qh_QHpointer is defined in src/libqhull/user.h"
95fi
96
97if (od -a Makefile src/libqhull/Makefile src/libqhull_r/Makefile build/*.pc.in html/*.man eg/*.sh eg/q_eg eg/q_egtest eg/q_test | grep cr >/dev/null); then
98    for f in Makefile src/*/Makefile build/*.pc.in html/*.man eg/*.sh eg/q_eg eg/q_egtest eg/q_test; do echo $f; od -a $f | grep cr | head -1; done
99    exit_err $LINENO "A UNIX file contains DOS line endings.  Use d2u and binary type"
100fi
101
102NOT_OK=$(grep -h "^ " Makefile src/libqhull/Makefile src/libqhull_r/Makefile | grep -vE '^[ \t]+[$()a-zA-Z_/]+\.[oh]|bin/testqset_r qtest')
103if [[ -n "$NOT_OK" ]]; then
104    exit_err $LINENO "A Makefile contains a leading space instead of tabs:\n$NOT_OK"
105fi
106
107TXTFILES=$(find *.diz *.htm *.txt html/ src/ working/qhull-news.html -type f -name '*.c' -o -name '*.cpp' -o -name '*.def' -o -name '*.diz' -o -name '*.h' -o -name '*.htm*' -o -name '*.txt' -o -name '*.pri' -o -name '*.pro' -o -name '*.txt' -o -name '*.txt' -o -name '*.xml')
108NOT_OK=$(for f in $TXTFILES; do if (od -a $f | grep '[^r0-9 ] *nl' >/dev/null); then echo $f; fi; done)
109if [[ -n "$NOT_OK" ]]; then
110    exit_err $LINENO "Text files with Unix line endings:\n$NOT_OK\nu2d *.diz *.htm *.txt html/*.txt html/*.htm html/*.xml src/*.pr* src/*.txt src/*/*.c;\nu2d src/*/*.cpp src/*/*.def src/*/*.h src/*/*.htm src/*/*.pro src/*/*.txt working/qhull-news.html"
111fi
112exit_if_fail $LINENO "cd .."
113
114
115#############################
116log_step $LINENO "Check environment"
117#############################
118
119[[ $(type -p md5sum) ]] || exit_err $LINENO "md5sum is missing"
120[[ $(cp --help || grep '[-]-parents') ]] ||  exit_err $LINENO "cp does not have --parents option"
121
122#############################
123log_step $LINENO "Define functions"
124#############################
125
126function check_zip_file #zip_file
127{
128    local zip_file=$1
129    local HERE=$(ro_here)
130    log_note $HERE "Check $zip_file"
131    ls -l $zip_file >>$err_log
132    exit_if_err $HERE "Did not create $zip_file"
133    wzunzip -ybc -t $zip_file | grep -E -v -e '( OK|Zip)' >>$err_log
134    exit_if_err $HERE "Error while checking $zip_file"
135}
136
137function check_tgz_file #tgz_file
138{
139    local tgz_file=$1
140    local HERE=$(ro_here)
141    log_note $HERE "Check $tgz_file"
142    ls -l $tgz_file >>$err_log
143    exit_if_err $HERE "Did not create $tgz_file"
144    tar -tzf $tgz_file >/dev/null 2>>$err_log
145    exit_if_err $HERE "Can not extract -- tar -tzf $tgz_file"
146}
147
148function convert_to_unix #dir $qhull_2ufiles -- convert files to Unix, preserving modtime from $root_dir
149{
150    local temp_dir=$1
151    local HERE=$(ro_here)
152    log_note $HERE "Convert files to unix format in $1"
153    for f in $(find $temp_dir -type f | grep -E '^([^.]*|.*\.(ac|am|bashrc|c|cfg|cpp|css|d|dpatch|h|htm|html|man|pl|pri|pro|profile|sh|sql|termcap|txt|xml|xsd|xsl))$'); do
154        exit_if_fail $HERE "d2u '$f' && touch -r '$root_dir/${f#$temp_dir/}' '$f'"
155    done
156    for f in $qhull_2ufiles; do
157        exit_if_fail $HERE "d2u '$temp_dir/$f' && touch -r '$root_dir/$f' '$temp_dir/$f'"
158    done
159}
160
161function create_md5sum #md5_file -- create md5sum of current directory
162{
163    local md5_file=$1
164    local HERE=$(ro_here)
165    log_step $HERE "Compute $md5_file"
166    exit_if_fail $HERE "rm -f $md5_file"
167    find . -type f | sed 's|^\./||' | LC_COLLATE=C sort | xargs md5sum >>$md5_file
168    exit_if_err $HERE "md5sum failed"
169    log_note $HERE "$(md5sum $md5_file)"
170}
171
172function findf #name [path]
173{
174    find . -type f -name "*$2*" -not -path "*.git*" | egrep -i "${1:-.}"
175}
176
177#############################
178log_step $LINENO "Configure $0 for $(pwd)/qhull"
179#############################
180
181md5_zip_file=qhull-$version-zip.md5sum
182md5_tgz_file=qhull-$versionyear-src-$versionunix-tgz.md5sum
183
184# recursive
185qhull_dirs="qhull/build/CMakeModules qhull/eg qhull/html qhull/src"
186qhull_files="qhull/build/*.sln qhull/build/*.vcproj qhull/build/qhulltest/*.vcproj \
187    qhull/build/*.vcxproj qhull/build/config.cmake.in qhull/build/qhulltest/*.vcxproj \
188    qhull/Announce.txt qhull/CMakeLists.txt qhull/COPYING.txt qhull/File_id.diz \
189    qhull/build/qhull.pc.in qhull/build/README-build.txt qhull/QHULL-GO.lnk \
190    qhull/README.txt qhull/REGISTER.txt qhull/index.htm qhull/Makefile  \
191    qhull/bin/qconvex.exe qhull/bin/qdelaunay.exe qhull/bin/qhalf.exe \
192    qhull/bin/qhull.exe qhull/bin/*qhull_r.dll qhull/bin/qvoronoi.exe \
193    qhull/bin/rbox.exe qhull/bin/user_eg.exe qhull/bin/user_eg2.exe \
194    qhull/bin/testqset_r.exe \
195    qhull/bin/user_eg3.exe qhull/bin/testqset.exe qhull/bin/msvcr80.dll"
196qhull_ufiles="$qhull_dirs qhull/build/*.sln qhull/build/*.vcproj \
197    qhull/build/*.vcxproj qhull/build/config.cmake.in \
198    qhull/Announce.txt qhull/CMakeLists.txt qhull/COPYING.txt \
199    qhull/File_id.diz qhull/build/qhull.pc.in qhull/QHULL-GO.lnk qhull/README.txt \
200    qhull/REGISTER.txt qhull/index.htm qhull/Makefile"
201qhull_d2ufiles="Makefile src/libqhull/Makefile src/libqhull_r/Makefile \
202    qhull/build/config.cmake.in \
203    src/*/DEPRECATED.txt src/*/*.pro src/*/*.htm html/*.htm html/*.txt \
204    src/libqhull/MBorland eg/q_eg eg/q_egtest eg/q_test "
205
206
207if [[ -e /bin/msysinfo || -e /bin/msys-z.dll ]]; then
208
209    #############################
210    log_step $LINENO "Check qhull_files for zip directory"
211    #############################
212
213    ls -l $qhull_files $qhull_dirs >>$err_log
214    exit_if_err $LINENO "Missing files for zip directory.  Release build only"
215fi
216
217#############################
218log_step $LINENO "Clean distribution directories"
219#############################
220
221rm -r qhull/build/*
222p4 sync -f qhull/build/...
223exit_if_err $LINENO "Can not 'p4 sync -f qhull.sln *.vcproj'"
224rm qhull/build/user_egp.vcproj qhull/build/qhullp.vcproj
225cd qhull && make clean
226exit_if_err $LINENO "Can not 'make clean'"
227cd ..
228# Includes many files from 'cleanall' (Makefile)
229rm -f qhull/src/qhull-all.pro.user* qhull/src/libqhull/BCC32tmp.cfg
230rm -f qhull/eg/eg.* qhull/eg/qhull-benchmark.log qhull/eg/qhull-benchmark-show.log
231rm -f qhull/bin/qhulltest.exe qhull/bin/qhulltest qhull/bin/qhullp.exe
232rm -f qhull/bin/user_egp.exe qhull/bin/libqhull_*.dll
233rm -f qhull/src/libqhull/*.exe qhull/src/libqhull/*.a qhull/src/libqhull/*.dll
234rm -f qhull/src/libqhull_r/*.exe qhull/src/libqhull_r/*.a qhull/src/libqhull_r/*.dll
235rm -f qhull/src/libqhull/qconvex.c qhull/src/libqhull/unix.c
236rm -f qhull/src/libqhull/qdelaun.c qhull/src/libqhull/qhalf.c
237rm -f qhull/src/libqhull/qvoronoi.c qhull/src/libqhull/rbox.c
238rm -f qhull/src/libqhull/user_eg.c qhull/src/libqhull/user_eg2.c
239rm -f qhull/src/libqhull/testqset.c
240rm -f qhull/src/libqhull_r/qconvex_r.c qhull/src/libqhull_r/unix_r.c
241rm -f qhull/src/libqhull_r/qdelaun_r.c qhull/src/libqhull_r/qhalf_r.c
242rm -f qhull/src/libqhull_r/qvoronoi_r.c qhull/src/libqhull_r/rbox_r.c
243rm -f qhull/src/libqhull_r/user_eg_r.c qhull/src/libqhull_r/user_eg2_r.c
244rm -f qhull/src/libqhull_r/testqset_r.c
245find qhull/ -type f -name x -o -name 'x.*' -o -name '*.x' | xargs -r rm
246set noglob
247
248if [[ (-e /bin/msysinfo || -e /bin/msys-z.dll) && $(type -p wzzip) && $(type -p wzunzip) ]]; then
249
250    #############################
251    log_step $LINENO "Build zip directory as $TEMP_DIR/qhull"
252    #############################
253
254    ls -l $qhull_files $qhull_dirs >>$err_log
255    exit_if_err $LINENO "Missing files for zip directory.  Release build only"
256
257    log_note $LINENO "Copy \$qhull_files \$qhull_dirs to $TEMP_DIR/qhull"
258    exit_if_fail $LINENO "rm -rf $TEMP_DIR && mkdir $TEMP_DIR"
259    exit_if_fail $LINENO "cp -r -p --parents $qhull_files $qhull_dirs $TEMP_DIR"
260
261    #############################
262    log_step $LINENO "Write md5sum to $md5_tgz_file"
263    #############################
264
265    exit_if_fail $LINENO "pushd $TEMP_DIR/qhull"
266    create_md5sum $md5_zip_file
267    exit_if_fail $LINENO "cp -p $md5_zip_file $root_dir"
268
269    #############################
270    log_step $LINENO "Write $qhull_zip_file"
271    #############################
272
273    log_note $LINENO "Write \$qhull_files to $qhull_zip_file"
274    exit_if_fail $LINENO "cd .. && mv qhull qhull-$version && md5sum qhull-$version/$md5_zip_file >>$root_dir/$qhullmd5_file"
275    wzzip -P -r -u $qhull_zip_file qhull-$version >>$err_log
276    exit_if_err $LINENO "wzzip does not exist or error while zipping files"
277    check_zip_file $qhull_zip_file
278    exit_if_fail $LINENO "popd"
279    exit_if_fail $LINENO "mv $TEMP_DIR/$qhull_zip_file ."
280fi
281
282#############################
283log_step $LINENO "Build tgz directory as $TEMP_DIR/qhull"
284#############################
285
286log_note $LINENO "Archive these files as $qhull_tgz_file"
287ls -l $qhull_ufiles >>$err_log
288exit_if_err $LINENO "Missing files for tgz"
289
290exit_if_fail $LINENO "rm -rf $TEMP_DIR && mkdir -p $TEMP_DIR"
291exit_if_fail $LINENO "cp -r -p --parents $qhull_ufiles $TEMP_DIR"
292
293if [[ $IS_WINDOWS && $(type -p d2u) ]]; then
294    log_step $LINENO "Convert to Unix line endings"
295    convert_to_unix "$TEMP_DIR"
296fi
297
298#############################
299log_step $LINENO "Write md5sum to $md5_tgz_file"
300#############################
301
302exit_if_fail $LINENO "pushd $TEMP_DIR && cd qhull"
303create_md5sum $md5_tgz_file
304exit_if_fail $LINENO "cp -p $md5_tgz_file $root_dir"
305
306exit_if_fail $LINENO "cd .. && mv qhull qhull-$version && md5sum qhull-$version/$md5_tgz_file >>$root_dir/$qhullmd5_file"
307
308#############################
309log_step $LINENO "Write $qhull_tgz_file"
310#############################
311
312exit_if_fail $LINENO "tar -zcf $root_dir/$qhull_tgz_file * && popd"
313check_tgz_file $qhull_tgz_file
314
315log_note $LINENO "md5sum of zip and tgz files"
316
317for f in $qhull_zip_file $qhull_tgz_file; do
318    if [[ -r $f ]]; then
319        exit_if_fail $LINENO "md5sum $f >>$qhullmd5_file"
320    fi
321done
322
323#############################
324log_step $LINENO "Extract zip and tgz files to $TEMP_DIR"
325#############################
326
327exit_if_fail $LINENO "rm -rf $TEMP_DIR"
328if [[ -r $root_dir/$qhull_zip_file ]]; then
329    exit_if_fail $LINENO "mkdir -p $TEMP_DIR/zip && cd $TEMP_DIR/zip"
330    log_step $LINENO "Current directory is /c/Git/$TEMP_DIR/zip"
331    exit_if_fail $LINENO "wzunzip -yb -d $root_dir/$qhull_zip_file"
332    log_step $LINENO "Search for date stamps into zip/Dates.txt"
333    find . -type f | grep -vE '/bin/|q_benchmark|q_test' | xargs grep '\-20' | grep -v -E '(page=|ISBN|sql-2005|utility-2000|written 2002-2003|tail -n -20|Spinellis|WEBSIDESTORY|D:06-5-2007|server-2005)' >Dates.txt
334    find . -type f | grep -vE '/bin/|q_benchmark|q_test' | xargs grep -i 'qhull *20' >>Dates.txt
335    find . -type f | grep -vE '/bin/|q_benchmark|q_test' | xargs grep -E 'SO=|SO |VERSION|FIXUP' >>Dates.txt
336    log_step $LINENO "Search for error codes into zip/Errors-matched.txt"
337    (find */src -type f) | grep -vE '_test\.cpp|\.log|Changes\.txt' | xargs grep -Eh ', [67][0-9][0-9][0-9]|"QH[67][0-9]|qh_fprintf_stderr\([67][0-9][0-9][0-9]' | sed -r 's/^[^Q67]*QH//' | sed -r 's/^.*qh_fprintf_stderr\(//' | sed -r 's/^[^67]*(errfile|ferr|fp|stderr), //' | sed 's/\\n"[,\)].*/ EOL/' | sed -r 's/_r([: ])/\1/' | sort >Errors.txt
338    (cat Errors.txt | sed 's/, .*//'; for ((i=6001; i<6400; i++)); do echo $i; done;  for ((i=7001; i<7200; i++)); do echo $i; done) | sort | uniq -c | grep -v '^ *3 ' | sed -r 's/^[^0-9]*([0-9]) (.*)/\2 \1 NOT-MATCHED/' >Errors-not-matched.txt
339    cat Errors.txt | grep -v 'EOL$' | sort -u >Errors-matched.txt
340    log_step $LINENO "Search for mismatched '*_r.h' references to zip/FileRef.txt"
341    grep -E '[^_][^_][^ *][.][ch]($|[^a-z>])|/libqhull/' */src/*/*_r.* */src/*/*_ra.* */src/libqhull_r/Makefile | grep -vE 'float.h|/html/| l.h.s. |libqhullcpp|mem.c for a standalone|qglobal.h|QhullError.|QhullSet.|string.h|unused.h|user.h and user_r.h' >FileRef.txt
342    grep -E '_r[.]|_ra[.]|/libqhull_r/' */src/qconvex/qconvex.c */src/qconvex/qconvex.c */src/qdelaunay/qdelaun.c */src/qhalf/qhalf.c */src/qvoronoi/qvoronoi.c */src/testqset/* | grep -vE 'user.h and user_r.h' >>FileRef.txt
343    log_step $LINENO "Search for mismatched option links in htm files to Links-single.txt"
344    findf htm | xargs grep 'qh-opt.*\#' | tee Links-all.txt | sed -r -e 's/^[^:]*://' -e 's/qh-opt/\nqh-opt/g' | grep 'qh-opt.*<' | sed -r -e 's/<.*//' | LC_ALL=C  sort | uniq -c >Links-counts.txt
345    grep ' 1 ' Links-counts.txt >Links-single.txt
346    log_step $LINENO "Search for other internal links to Links-check-other.txt"
347    findf htm | xargs grep -E 'http[^#]*htm#|href="?#|name='  | tee Links-other.txt | sed -e 's/#/\n#/g' -e 's/name="/\n#/g' -e 's/name=/\nname=/g' | grep -E '^#|name=' | sed -r -e 's/[" ].*//' | grep -vE ';|#[1-9][0-9]|#3dd|#[Hdv]$|[0-9][0-9]$|[a-z]T$|QJ$|convex|option|startup|voronoi|name=(as_q|num|sitesearch)' | LC_ALL=C  sort | uniq -c | grep ' 1 ' >Links-check-other.txt
348    log_step $LINENO "Search for mismatched link quotes"
349    findf htm | xargs grep -E '"'  | sed -e 's/"[^"]*"//g' | grep '"' | grep -vE 'html/qhull|html/rbox|working/debian' > Links-check-quotes.txt
350fi
351if [[ -r $root_dir/$qhull_tgz_file ]]; then
352    exit_if_fail $LINENO "mkdir -p $TEMP_DIR/tgz && cd $TEMP_DIR/tgz"
353    log_step $LINENO "Current directory is $TEMP_DIR/tgz"
354    exit_if_fail $LINENO "tar -zxf $root_dir/$qhull_tgz_file"
355fi
356log_step $LINENO "Check Changes.txt"
357head -60 */src/Changes.txt | tail -17
358
359#############################
360log_step $LINENO "====================================================================="
361log_step $LINENO "Check *qhull-zip-.../zip/Dates.txt and rbox.c for timestamps that need updating"
362log_step $LINENO "Check *qhull-zip-.../zip/Errors-matched.txt for mismatched codes, errors not ending in NL, errors on multiple lines, and recently missing codes"
363log_step $LINENO "  OK (\\n in error message) -- counters 6429,7027,.., 6023, 6233, 6237, 7089"
364log_step $LINENO "Check *qhull-zip-.../zip/Errors-not-matched.txt for unused error codes (count==1, without text) or multiply-defined codes (count>2, 7079 OK)"
365log_step $LINENO "Check *qhull-zip-.../zip/Links-single.txt for single use option links (matched names OK) in Links-all.txt"
366log_step $LINENO "Check *qhull-zip-.../zip/Links-check-other.txt for unknown tags in Links-other.txt"
367log_step $LINENO "Check *qhull-zip-.../zip/Links-check-quotes.txt for quotes that cross a line"
368log_step $LINENO "Check q_egtest examples in Geomview"
369log_step $LINENO "Check for 16 projects in Release mode, including qhulltest"
370log_step $LINENO "Check build dependencies for programs."
371log_step $LINENO "Check source dependencies and help prompts once a release"
372log_step $LINENO " prompts: see qhull-zip.sh for command"
373# N=qvoronoi; ($N . | grep -vE '^$|^Except|^Qhull' | sed 's/  */\n/g'; $N - | grep -vE '^ *#|^Qhull|0 roundoff|comments|options:' | sed 's/^  *//') | grep -vE '^$' | sort >x.1
374log_step $LINENO " check QhullFacet/qh_printfacetheader, QhullRidge/qh_printridge, QhullVertex/qh_printvertex"
375log_step $LINENO " check for internal errors while merging with pinched vertices, see qhull-zip.sh for command"
376# ../eg/qtest.sh 10 '10000 s C1,2e-13 D3' 'd Q14' | grep -vE 'topology|precision|CPU|Maximum'
377log_step $LINENO " check solution for ' = ' (comments OK)"
378log_step $LINENO "Test qhull with 32-bit devstudio release, compare and update with q_test-ok.txt"
379log_step $LINENO "  make testall 2>&1 | tee eg/q_test.x"
380
381log_step $LINENO "Test CMake build"
382log_step $LINENO " cd $TEMP_DIR/tgz/qhull*/build"
383log_step $LINENO " cmake -G \"MSYS Makefiles\" .. && cmake .."
384log_step $LINENO " make"
385log_step $LINENO " mkdir -p ../bin/ && cp -p lib*.dll *.exe ../bin/"
386log_step $LINENO " cd ..; make test"
387log_step $LINENO "Test Linux compile"
388log_step $LINENO " cd .. && scp $qhull_tgz_file qhull@qhull.org:"
389log_step $LINENO " rm -rf qhull-$version; tar zxf $qhull_tgz_file && cd qhull-$version && make >../make.x 2>&1"
390log_step $LINENO " more ../make.x"
391log_step $LINENO " export DESTDIR=.; make install; cd usr/local/lib"
392log_step $LINENO " make test"
393log_step $LINENO " eg/q_test >eg/q_test.x 2>&1"
394log_step $LINENO "Update 'Qhull wiki.md', qhull-news.htm (#problems, #bugs), qh-code.htm#enhance"
395log_step $LINENO "Test qhull and compare to q_test-ok.txt"
396log_step $LINENO " cd $TEMP_DIR/zip/qhull* && make testall >/d/bash/local/qhull/eg/q_test.x 2>&1"
397log_step $LINENO "Build and test 64-bit qhulltest.  Compare to eg/qhulltest-ok.txt"
398log_step $LINENO " cd /d/bash/local/qhull && bin/qhulltest --all >eg/qhulltest.x 2>&1"
399log_step $LINENO "Compare source directories:  Copy 'qhull/' to 'downloads/qhull-YYYY/'"
400log_step $LINENO "  If comparing 2020 to 2019 -- find qhull-2020 -type f ! -path "./.git*" ! -path "*working*" | xargs sed -i 's/2020/2019/g'"
401log_step $LINENO "Benchmark qhull.  Compare to eg/q_benchmark-ok.txt"
402log_step $LINENO "  cd $TEMP_DIR/zip/qhull* && make benchmark >/d/bash/local/qhull/eg/q_benchmark.x 2>&1"
403log_step $LINENO "Build qhull with gcc"
404log_step $LINENO " cd $TEMP_DIR/zip/qhull* && make SO=dll"
405log_step $LINENO " cp -p lib/libqhull*.dll bin && make testall >/d/bash/local/qhull/eg/q_test-make.x 2>&1"
406log_step $LINENO "Create qhull_qh and compare with libqhull, qconvex, etc.  See qh_code.htm#convert"
407log_step $LINENO " eg/make-qhull_qh.sh libqhull_r"
408log_step $LINENO " Ignore 'Id: //.*' and 'DateTime: 20.*'  Edit>FullRefresh"
409log_step $LINENO " Compare qhull*exports.def and add new functions"
410log_step $LINENO "Build and test libqhull.  user_eg3 not built"
411log_step $LINENO " make cleanall && cd src/libqhull && make cleanall && make && cp *.exe ../../bin && cd ../.. && make test && ls -l bin/qhull.exe"
412log_step $LINENO " make testall >/d/bash/local/qhull/eg/q_test-libqhull.x 2>&1"
413log_step $LINENO "Build and test libqhull with qh_QHpointer"
414log_step $LINENO " e src/libqhull/user.h"
415log_step $LINENO " make cleanall && cd src/libqhull && make cleanall && make && cp *.exe ../../bin && cd ../.. && make test && ls -l bin/qhull.exe"
416log_step $LINENO " bin/rbox c | bin/qhull FO Tz | grep QHpointer"
417log_step $LINENO " make testall 2>&1 | tee eg/q_test-qh_QHpointer.x"
418log_step $LINENO "Build and test libqhull_r.  user_eg3 not built"
419log_step $LINENO " make cleanall && cd src/libqhull_r && make cleanall && make && cp *.exe ../../bin && cd ../.. && make test && ls -l bin/qhull.exe"
420log_step $LINENO " make testall >/d/bash/local/qhull/eg/q_test-libqhull_r.x 2>&1"
421log_step $LINENO "Build and test libqhull_r with qh_NOmem"
422log_step $LINENO "Build and test libqhull_r with qh_NOmerge"
423log_step $LINENO "Build and test libqhull_r with qh_NOtrace"
424log_step $LINENO "Build and test libqhull_r with qh_KEEPstatistics 0"
425log_step $LINENO "Build and check Makefile/qhullx.  user_eg* not built"
426log_step $LINENO " make cleanall && make qhullx && make test && ls -l bin/qhull.exe"
427log_step $LINENO "Benchmark libqhull_r with gcc"
428log_step $LINENO " make benchmark >/d/bash/local/qhull/eg/q_benchmark-libqhull_r.x 2>&1"
429log_step $LINENO "Check Qhull-go (double-click)"
430log_step $LINENO "Compare Changes.txt with previous release"
431log_step $LINENO "Compare README.txt with previous release"
432log_step $LINENO "Compare previous zip release, Dates.txt, and md5sum"
433log_step $LINENO "Compare zip and tgz for CRLF vs LF"
434log_step $LINENO "  C:/Git$TEMP_DIR/"
435log_step $LINENO "Compare qh_prompt* for unix_r.c,qconvex.c,etc."
436log_step $LINENO "Check html links with Firefox Link Analyzer (fast but doesn't check #..."
437log_step $LINENO "  Replace old links with web.archive.org (archive.is)"
438log_step $LINENO "Check all files for FIXUP comments, including Makefile, html, etc."
439log_step $LINENO "Extract zip to download/ and compare directories"
440log_step $LINENO "Retest 32-bit release builds and 64-bit qhulltest"
441log_step $LINENO "Check for 32-bit release executables from DevStudio (<500K and 'Ts' 32-bit allocations)"
442log_step $LINENO "Check for virus with Windows Defender"
443log_step $LINENO "Check object dependencies with 'objdump -p user_eg.exe'"
444log_step $LINENO "Copy tarballs to qhull.org"
445log_step $LINENO " cd .. && ls -l qhull-2020.2* qhull*8.0.2*"
446log_step $LINENO " scp -p qhull-2020.2* qhull*8.0.2* qhull@qhull.org:web/download/"
447log_step $LINENO "Add md5sums to end of qh-get.htm"
448log_step $LINENO "Add release labels to git"
449log_step $LINENO "Finished successfully"
450#############################
451
452