Overview
Comment: | Example for compiling tcllibc -- very specific |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
40255f4a4f483f58c95d94f21b765a88 |
User & Date: | rkeene on 2019-06-05 00:34:17 |
Other Links: | manifest | tags |
Context
2019-06-05
| ||
00:38 | Minor updates check-in: 6443047afb user: rkeene tags: trunk | |
00:34 | Example for compiling tcllibc -- very specific check-in: 40255f4a4f user: rkeene tags: trunk | |
00:33 | Added example script which converts Tcl script using Critcl to C files check-in: e5ddd6aaff user: rkeene tags: trunk | |
Changes
Added build/tcllibc.sh version [e69b1a60d2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #! /usr/bin/env bash inFiles=( ../tcllib-fossil/modules/tcllibc.tcl ../tcllib-fossil/modules/md4/md4c.tcl ../tcllib-fossil/modules/struct/graph_c.tcl ../tcllib-fossil/modules/base32/base32_c.tcl ../tcllib-fossil/modules/struct/sets_c.tcl ../tcllib-fossil/modules/json/jsonc.tcl ../tcllib-fossil/modules/pt/pt_rdengine_c.tcl ../tcllib-fossil/modules/pt/pt_parse_peg_c.tcl ../tcllib-fossil/modules/uuid/uuid.tcl ../tcllib-fossil/modules/struct/tree_c.tcl ../tcllib-fossil/modules/base32/base32hex_c.tcl ../tcllib-fossil/modules/base64/base64c.tcl ../tcllib-fossil/modules/base64/uuencode.tcl ../tcllib-fossil/modules/base64/yencode.tcl ../tcllib-fossil/modules/sha1/sha1c.tcl ../tcllib-fossil/modules/md5/md5c.tcl ../tcllib-fossil/modules/crc/crcc.tcl ../tcllib-fossil/modules/crc/sum.tcl ../tcllib-fossil/modules/crc/crc32.tcl ../tcllib-fossil/modules/md5crypt/md5cryptc.tcl ../tcllib-fossil/modules/struct/queue_c.tcl ../tcllib-fossil/modules/rc4/rc4c.tcl ../tcllib-fossil/modules/sha1/sha256c.tcl ../tcllib-fossil/modules/struct/stack_c.tcl ../tcllib-fossil/modules/dns/ipMoreC.tcl ) set -e outDir='' function cleanup() { local localOutDir localOutDir="${outDir}" outDir='' if [ -n "${localOutDir}" ]; then rm -rf "${localOutDir}" fi } trap cleanup EXIT outDir="tmp-$(openssl rand 20 -hex)" rm -rf "${outDir}" mkdir "${outDir}" for input in "${inFiles[@]}"; do out="${outDir}/$(basename "${input}" .tcl)" ./tcc-critcl-to-c.tcl --mode direct "${input}" > "${out}.c" cflags=($(awk '/^CLI:/{ gsub(/^CLI:/, ""); print; }' < "${out}.c")) "${CC:-cc}" -fPIC -Dinline= -o "${out}.o" "${cflags[@]}" -c "${out}.c" || continue done ( cd "${outDir}" || exit 1 cat << \_EOF_ > base.c #include <tcl.h> _EOF_ for input in *.c; do object="$(basename "${input}" .c).o" if [ ! -f "${object}" ]; then continue fi grep '^/\* Immediate: ' "${input}" | sed 's@^/\* Immediate: *@'$'\t''@;s@ *\*/$@@' | grep 'Tcl_CreateObjCommand' | cut -f 3 -d , | while IFS='' read -r symbol; do grep "${symbol}" "${input}" | grep -v '^/\* Immediate:' | sed 's@) {$@);@' done done >> base.c cat << \_EOF_ >> base.c int Tcllibc_Init(Tcl_Interp *interp) { #ifdef USE_TCL_STUBS if (Tcl_InitStubs(interp, TCL_PATCH_LEVEL, 0) == 0L) { return TCL_ERROR; } #endif _EOF_ for input in *.c; do object="$(basename "${input}" .c).o" if [ ! -f "${object}" ]; then continue fi grep '^/\* Immediate: ' "${input}" | sed 's@^/\* Immediate: *@'$'\t''@;s@ *\*/$@@' | sed 's@Tcc4tclDeleteClientData@NULL@g' done >> base.c cat << \_EOF_ >> base.c Tcl_PkgProvide(interp, "tcllibc", "0"); return(TCL_OK); } _EOF_ "${CC:-cc}" -fPIC -o base.o -c base.c ) "${CC:-cc}" -fPIC -shared -o tcllibc.so "${outDir}"/*.o exit 0 |