mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Tcl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Tcl
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/tclsh
 | 
						|
 | 
						|
set cachefile [lindex $argv 0]
 | 
						|
 | 
						|
if { $cachefile == "" } {
 | 
						|
	puts stderr "Usage: [file tail $argv0] <existing CMakeCache.txt file>"
 | 
						|
	exit 1
 | 
						|
}
 | 
						|
 | 
						|
set struct {
 | 
						|
	name
 | 
						|
	type
 | 
						|
	value
 | 
						|
	description
 | 
						|
}
 | 
						|
 | 
						|
set fd [open $cachefile r]
 | 
						|
 | 
						|
set cached ""
 | 
						|
 | 
						|
set dbase ""
 | 
						|
 | 
						|
while {[gets $fd line] != -1 } {
 | 
						|
	set line [string trim $line]
 | 
						|
 | 
						|
	# Hash comment
 | 
						|
	if { [string index $line 0] == "#" } {
 | 
						|
		continue
 | 
						|
	}
 | 
						|
 | 
						|
	# empty line
 | 
						|
	if { $line == "" } {
 | 
						|
		set cached ""
 | 
						|
		continue
 | 
						|
	}
 | 
						|
 | 
						|
	if { [string range $line 0 1] == "//" } {
 | 
						|
		set linepart [string range $line 2 end]
 | 
						|
		# Variable description. Add to cache.
 | 
						|
		if { $cached != "" && [string index $cached end] != " " && [string index $linepart 0] != " " } {
 | 
						|
			append cached " "
 | 
						|
		}
 | 
						|
		append cached $linepart
 | 
						|
	}
 | 
						|
 | 
						|
	# Possibly a variable
 | 
						|
	if [string is alpha [string index $line 0]] {
 | 
						|
		# Note: this skips variables starting grom underscore.
 | 
						|
 | 
						|
		if { [string range $line 0 5] == "CMAKE_" } {
 | 
						|
			# Skip variables with CMAKE_ prefix, they are internal.
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		lassign [split $line =] vartype value
 | 
						|
		lassign [split $vartype :] var type
 | 
						|
 | 
						|
		# Store the variable now
 | 
						|
		set storage [list $var $type $value $cached]
 | 
						|
		set cached ""
 | 
						|
		lappend dbase $storage
 | 
						|
 | 
						|
		continue
 | 
						|
	}
 | 
						|
 | 
						|
	#puts stderr "Ignored line: $line"
 | 
						|
 | 
						|
	# Ignored.
 | 
						|
}
 | 
						|
 | 
						|
# Now look over the stored variables
 | 
						|
 | 
						|
set lenlimit 80
 | 
						|
 | 
						|
foreach stor $dbase {
 | 
						|
 | 
						|
	lassign $stor {*}$struct
 | 
						|
 | 
						|
	if { [string length $description] > $lenlimit } {
 | 
						|
		set description [string range $description 0 $lenlimit-2]...
 | 
						|
	}
 | 
						|
 | 
						|
	if { $type in {STATIC INTERNAL} } {
 | 
						|
		continue
 | 
						|
	}
 | 
						|
 | 
						|
	# Check special case of CXX to turn back to c++.
 | 
						|
	set pos [string first CXX $name]
 | 
						|
	if { $pos != -1 } {
 | 
						|
		# Check around, actually after XX should be no letter.
 | 
						|
		if { $pos+3 >= [string length $name] || ![string is alpha [string index $name $pos+3]] } {
 | 
						|
			set name [string replace $name $pos $pos+2 C++]
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	set optname [string tolower [string map {_ -} $name]]
 | 
						|
 | 
						|
	# Variables of type bool are just empty.
 | 
						|
	# Variables of other types must have =<value> added.
 | 
						|
	# Lowercase cmake type will be used here.
 | 
						|
	set optassign ""
 | 
						|
	set def ""
 | 
						|
	if { $type != "BOOL" } {
 | 
						|
		set optassign "=<[string tolower $type]>"
 | 
						|
	} else {
 | 
						|
		# Supply default for boolean option
 | 
						|
		set def " (default: $value)"
 | 
						|
	}
 | 
						|
 | 
						|
	puts "    $optname$optassign \"$description$def\""
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |