File: make-c-ext.tcl

package info (click to toggle)
openocd 0.9.0-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 24,876 kB
  • sloc: ansic: 275,029; sh: 15,664; tcl: 7,079; asm: 1,913; cpp: 1,671; makefile: 1,200; perl: 717; python: 708; haskell: 35
file content (38 lines) | stat: -rw-r--r-- 1,095 bytes parent folder | download | duplicates (11)
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
#!/usr/bin/env tclsh

# Usage: make-c-ext.tcl source.tcl >jim-source.c

# Converts a Tcl source file into C source suitable
# for loading as a static extension.

lassign $argv source

if {![string match *.tcl $source]} {
	error "Source $source is not a .tcl file"
}

# Read the Tcl source and convert to C
# Note that no lines are removed in order to preserve line numbering
set sourcelines {}
set f [open $source]
while {[gets $f buf] >= 0} {
	# Remove comment lines
	regsub {^[ \t]*#.*$} $buf "" buf
	# Escape quotes and backlashes
	set buf [string map [list \\ \\\\ \" \\"] $buf]
	lappend sourcelines \"$buf\\n\"
}
close $f

lappend lines {/* autogenerated - do not edit */}
lappend lines {#include <jim.h>}
set basename [file tail $source]
set pkgname [file rootname $basename]

lappend lines "int Jim_${pkgname}Init(Jim_Interp *interp)"
lappend lines "\{"
lappend lines "\tif (Jim_PackageProvide(interp, \"$pkgname\", \"1.0\", JIM_ERRMSG)) return JIM_ERR;"
lappend lines "\treturn Jim_EvalSource(interp, \"$basename\", 1, [join $sourcelines \n]);"
lappend lines "\}"

puts [join $lines \n]