2011-12-22 15:19:25 +00:00
|
|
|
#!/usr/bin/tclsh
|
|
|
|
|
|
|
|
# read include file
|
|
|
|
set include_pathname [lindex $argv 0]
|
|
|
|
if {[catch {
|
|
|
|
set source [exec cat $include_pathname]
|
|
|
|
}]} {
|
|
|
|
puts stderr ""
|
|
|
|
puts stderr "Assign correct ifndef-define name to header file."
|
|
|
|
puts stderr "The name is derived from the location of the"
|
|
|
|
puts stderr "header file relative to directory from which"
|
|
|
|
puts stderr "this program is executed."
|
|
|
|
puts stderr ""
|
|
|
|
puts stderr "\n usage: fix_include_ifndef <include_file>\n"
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
puts stderr "Fixing ifndef header for $include_pathname"
|
|
|
|
|
|
|
|
# convert pathname to ifndef string
|
|
|
|
regsub {^./} $include_pathname "" ifndef_name
|
|
|
|
set ifndef_name [string toupper $ifndef_name]
|
|
|
|
regsub -all {/} $ifndef_name {__} ifndef_name
|
|
|
|
regsub -all {\.} $ifndef_name {_} ifndef_name
|
|
|
|
regsub -all {\-} $ifndef_name {_} ifndef_name
|
|
|
|
set ifndef_name "_$ifndef_name\_"
|
|
|
|
|
|
|
|
set lines [split $source "\n"]
|
|
|
|
set state comment_header_begin
|
|
|
|
set i 0
|
|
|
|
set output ""
|
|
|
|
|
|
|
|
proc out {txtline} {
|
|
|
|
global output
|
|
|
|
append output "$txtline\n"
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach line $lines {
|
|
|
|
incr i
|
2013-12-31 15:34:35 +00:00
|
|
|
|
2011-12-22 15:19:25 +00:00
|
|
|
if {$state == "comment_header_begin"} {
|
|
|
|
if {[regexp {^/*} $line]} {
|
|
|
|
set state comment_header
|
|
|
|
out $line
|
|
|
|
continue
|
|
|
|
} else {
|
|
|
|
puts stderr "Error (line $i): missing comment header"
|
|
|
|
exit -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "comment_header"} {
|
|
|
|
if {[regexp {^ \*/} $line]} {
|
|
|
|
set state empty_line_after_comment_header
|
|
|
|
out $line
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if {[regexp {^ \*[^/]*} $line]} {
|
|
|
|
out $line
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
puts "Error (line $i): non-complient comment header"
|
|
|
|
exit -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "empty_line_after_comment_header"} {
|
|
|
|
if {![regexp {^$} $line]} {
|
|
|
|
puts "Error (line $i): no empty line after comment header"
|
|
|
|
exit -1;
|
|
|
|
}
|
2013-12-31 15:34:35 +00:00
|
|
|
set state license_header_begin
|
|
|
|
out $line
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "license_header_begin"} {
|
|
|
|
if {[regexp {^/*} $line]} {
|
|
|
|
set state license_header
|
|
|
|
out $line
|
|
|
|
continue
|
|
|
|
} else {
|
|
|
|
puts stderr "Error (line $i): missing license header"
|
|
|
|
exit -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "license_header"} {
|
|
|
|
if {[regexp {^ \*/} $line]} {
|
|
|
|
set state empty_line_after_license_header
|
|
|
|
out $line
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if {[regexp {^ \*[^/]*} $line]} {
|
|
|
|
out $line
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
puts "Error (line $i): non-complient license header"
|
|
|
|
exit -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "empty_line_after_license_header"} {
|
|
|
|
if {![regexp {^$} $line]} {
|
|
|
|
puts "Error (line $i): no empty line after license header"
|
|
|
|
exit -1;
|
|
|
|
}
|
2011-12-22 15:19:25 +00:00
|
|
|
set state ifndef
|
|
|
|
out $line
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "ifndef"} {
|
|
|
|
if {![regexp {^#ifndef} $line]} {
|
|
|
|
puts "Error (line $i): expected \"#ifndef\""
|
|
|
|
exit -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
regsub {^.*$} $line "#ifndef $ifndef_name" line
|
|
|
|
out $line
|
|
|
|
set state define
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if {$state == "define"} {
|
|
|
|
if {![regexp {^#define} $line]} {
|
|
|
|
puts "Error (line $i): expected \"#define\""
|
|
|
|
exit -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
regsub {^.*$} $line "#define $ifndef_name" line
|
|
|
|
out $line
|
|
|
|
set state source_main
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
out $line
|
|
|
|
}
|
|
|
|
|
|
|
|
# remove empty lines at the end of the header file
|
|
|
|
while {[regexp "\n$" $output]} {
|
|
|
|
regsub "\n$" $output "" output
|
|
|
|
}
|
|
|
|
|
|
|
|
if {![regexp "\n#endif\[^\n\]*\$" $output]} {
|
|
|
|
puts stderr "Error: last line is no \"#endif\""
|
|
|
|
exit -1
|
|
|
|
}
|
|
|
|
|
|
|
|
regsub "\n#endif\[^\n\]*\$" $output "\n#endif /* $ifndef_name */" output
|
|
|
|
|
|
|
|
# write result back to include file
|
|
|
|
set fh [open $include_pathname "w"]
|
|
|
|
puts $fh $output
|
|
|
|
close $fh
|
|
|
|
|