47dcf5fc27 2019-05-01 rkeene: #! /usr/bin/env tclsh
47dcf5fc27 2019-05-01 rkeene:
47dcf5fc27 2019-05-01 rkeene: set sourceDirectory [file dirname [file normalize [info script]]]
f09ab16ca1 2019-05-08 rkeene:
47dcf5fc27 2019-05-01 rkeene: lappend auto_path [file join $sourceDirectory lib]
f09ab16ca1 2019-05-08 rkeene:
f09ab16ca1 2019-05-08 rkeene: set template [file join $sourceDirectory xvfs.c.rvt]
47dcf5fc27 2019-05-01 rkeene:
47dcf5fc27 2019-05-01 rkeene: package require minirivet
47dcf5fc27 2019-05-01 rkeene:
f09ab16ca1 2019-05-08 rkeene: set mode "run"
f09ab16ca1 2019-05-08 rkeene: if {[lindex $argv 0] == "--dump-tcl"} {
f09ab16ca1 2019-05-08 rkeene: set mode "dump-tcl"
f09ab16ca1 2019-05-08 rkeene: }
f09ab16ca1 2019-05-08 rkeene:
0bdbe4333e 2019-09-20 rkeene: foreach {arg val} $argv {
0bdbe4333e 2019-09-20 rkeene: switch -exact -- $arg {
0bdbe4333e 2019-09-20 rkeene: "--output" {
0bdbe4333e 2019-09-20 rkeene: set outputFile $val
0bdbe4333e 2019-09-20 rkeene: }
0bdbe4333e 2019-09-20 rkeene: }
0bdbe4333e 2019-09-20 rkeene: }
0bdbe4333e 2019-09-20 rkeene:
d80c88cee0 2019-09-16 rkeene: proc remove_debug {input} {
d80c88cee0 2019-09-16 rkeene: set output [list]
d80c88cee0 2019-09-16 rkeene:
d80c88cee0 2019-09-16 rkeene: set lastLine -
d80c88cee0 2019-09-16 rkeene: foreach line [split $input "\n"] {
d80c88cee0 2019-09-16 rkeene: if {[string match -nocase "*XVFS_DEBUG*" $line]} {
d80c88cee0 2019-09-16 rkeene: continue
d80c88cee0 2019-09-16 rkeene: }
d80c88cee0 2019-09-16 rkeene:
d80c88cee0 2019-09-16 rkeene: if {$lastLine eq "" && $line eq ""} {
d80c88cee0 2019-09-16 rkeene: continue
d80c88cee0 2019-09-16 rkeene: }
d80c88cee0 2019-09-16 rkeene:
d80c88cee0 2019-09-16 rkeene: set lastLine $line
d80c88cee0 2019-09-16 rkeene: lappend output $line
d80c88cee0 2019-09-16 rkeene: }
d80c88cee0 2019-09-16 rkeene:
d80c88cee0 2019-09-16 rkeene: return [join $output "\n"]
d80c88cee0 2019-09-16 rkeene: }
d80c88cee0 2019-09-16 rkeene:
f09ab16ca1 2019-05-08 rkeene: switch -- $mode {
f09ab16ca1 2019-05-08 rkeene: "run" {
0bdbe4333e 2019-09-20 rkeene: if {[info exists outputFile]} {
0bdbe4333e 2019-09-20 rkeene: set fd [open $outputFile w]
0bdbe4333e 2019-09-20 rkeene: ::minirivet::setOutputChannel $fd
0bdbe4333e 2019-09-20 rkeene: }
0bdbe4333e 2019-09-20 rkeene:
f09ab16ca1 2019-05-08 rkeene: ::minirivet::parse $template
0bdbe4333e 2019-09-20 rkeene:
0bdbe4333e 2019-09-20 rkeene: if {[info exists fd]} {
0bdbe4333e 2019-09-20 rkeene: close $fd
0bdbe4333e 2019-09-20 rkeene: }
f09ab16ca1 2019-05-08 rkeene: }
f09ab16ca1 2019-05-08 rkeene: "dump-tcl" {
f09ab16ca1 2019-05-08 rkeene: set xvfs_tcl [file join $sourceDirectory lib xvfs xvfs.tcl]
7664854ef9 2019-05-08 rkeene: set xvfs_core_h [file join $sourceDirectory xvfs-core.h]
7664854ef9 2019-05-08 rkeene: set xvfs_core_c [file join $sourceDirectory xvfs-core.c]
7664854ef9 2019-05-08 rkeene:
b8cca3a6b4 2019-05-08 rkeene: set cleanup {
b8cca3a6b4 2019-05-08 rkeene: "#include <xvfs-core.h>" ""
b8cca3a6b4 2019-05-08 rkeene: "#include <xvfs-core.c>" ""
b8cca3a6b4 2019-05-08 rkeene: }
7664854ef9 2019-05-08 rkeene:
7664854ef9 2019-05-08 rkeene: set core_header_data ""
7664854ef9 2019-05-08 rkeene: append core_header_data [string map $cleanup [read [open $xvfs_core_h]]] "\n"
7664854ef9 2019-05-08 rkeene: append core_header_data [string map $cleanup [read [open $xvfs_core_c]]] "\n"
7664854ef9 2019-05-08 rkeene:
d80c88cee0 2019-09-16 rkeene: if {[lsearch -exact $argv "--remove-debug"] != -1} {
d80c88cee0 2019-09-16 rkeene: set core_header_data [remove_debug $core_header_data]
d80c88cee0 2019-09-16 rkeene: }
d80c88cee0 2019-09-16 rkeene:
f09ab16ca1 2019-05-08 rkeene: puts "#! /usr/bin/env tclsh"
f09ab16ca1 2019-05-08 rkeene: puts ""
0bdbe4333e 2019-09-20 rkeene: puts [list namespace eval ::minirivet {}]
0bdbe4333e 2019-09-20 rkeene: puts [list set ::minirivet::_outputChannel stdout]
0bdbe4333e 2019-09-20 rkeene: puts [list proc ::minirivet::_emitOutput [info args ::minirivet::_emitOutput] [info body ::minirivet::_emitOutput]]
f09ab16ca1 2019-05-08 rkeene: puts [read [open $xvfs_tcl]]
f09ab16ca1 2019-05-08 rkeene: puts ""
7664854ef9 2019-05-08 rkeene: puts [list puts -nonewline $core_header_data]
7664854ef9 2019-05-08 rkeene: puts ""
7664854ef9 2019-05-08 rkeene: puts [string map $cleanup [::minirivet::parseStringToCode [read [open $template]]]]
f09ab16ca1 2019-05-08 rkeene: }
f09ab16ca1 2019-05-08 rkeene: default {
f09ab16ca1 2019-05-08 rkeene: puts stderr "error: Invalid mode: $mode"
f09ab16ca1 2019-05-08 rkeene: exit 1
f09ab16ca1 2019-05-08 rkeene: }
f09ab16ca1 2019-05-08 rkeene: }