mirror of https://gitlab.com/QEF/q-e.git
169 lines
3.8 KiB
Tcl
Executable File
169 lines
3.8 KiB
Tcl
Executable File
#!/bin/sh
|
|
# the next line restarts using tclsh \
|
|
exec tclsh "$0" "$@"
|
|
|
|
###
|
|
# Purpose: this script generates Emacs major mode elisp file for
|
|
# requested Quantum ESPRESSO mode
|
|
##
|
|
|
|
# directories
|
|
|
|
set basedir [file normalize [file dirname [info script]]]
|
|
set topdir [file normalize [file join $basedir ..]]
|
|
set qe_modes_template_dir [file join $topdir GUI QE-modes qe-modes.templates]
|
|
|
|
set helpdocdir [file join $basedir helpdoc.d]
|
|
source [file join $helpdocdir modules.tcl]; # load which modules do we support
|
|
|
|
set usage "
|
|
Usage:
|
|
|
|
either: $argv0 \[OPTIONS\] module1 \[module2 module3 ...\]
|
|
or: $argv0 \[OPTIONS\] INPUT_*.def \[INPUT_*.def INPUT_*.def ...\]
|
|
|
|
Where possible values for modules are:
|
|
|
|
[::helpdoc::get_supported_modules]
|
|
|
|
While INPUT_*.def are what the name suggests.
|
|
|
|
OPTIONS are:
|
|
|
|
-mode value
|
|
|
|
The \"mode\" stands for the short name of the mode, i.e., the
|
|
generated name of the major mode file will be \${mode}-mode.el
|
|
(default value is the same as the name of the command-line
|
|
specified either module or the lowercase spelled PROG part of the
|
|
INPUT_PROG.def file).
|
|
|
|
-modename value
|
|
|
|
The \"modename\" is the textual name of mode; for example if
|
|
mode = pw, then modename can be set to QE-pw.x
|
|
(default value = QE-\${mode}.x).
|
|
|
|
-nmlprefix value
|
|
|
|
The \"nmlprefix\" is the prefix character of the fortran namelists
|
|
(default value = '&').
|
|
|
|
-funcs
|
|
|
|
If this option is specified then the function \$mode-funcs.el file is generated.
|
|
|
|
-masteronly
|
|
|
|
If this option is specified then only the master \$mode-modes.el file is generated.
|
|
|
|
The $argv0 generates an emacs major-mode elisp file for easier editing
|
|
of input files of specified Quantum ESPRESSO package.
|
|
"
|
|
|
|
# parse command-line
|
|
|
|
if { $argc < 1 } {
|
|
puts stderr $usage
|
|
exit 1
|
|
}
|
|
|
|
package require cmdline
|
|
|
|
set options {
|
|
{funcs "generate $mode-funcs.el file"}
|
|
{masteronly "generate $mode-modes.el master file"}
|
|
{mode.arg {} "short name of mode; the corresponding mode file will be named $mode-mode.el"}
|
|
{modename.arg {} "textual name of mode"}
|
|
{nmlprefix.arg & "symbol used for fortran namelist prefix"}
|
|
}
|
|
|
|
set argv_orig $argv
|
|
|
|
namespace eval ::helpdoc {
|
|
variable opt
|
|
array set opt [::cmdline::getoptions ::argv $options $usage]
|
|
|
|
if { [llength $::argv] == 0 } {
|
|
puts stderr "
|
|
### no module specified on the command line: [concat $::argv0 $::argv_orig]
|
|
"
|
|
exit 1
|
|
}
|
|
|
|
puts "
|
|
Input specs:
|
|
-----------"
|
|
parray opt
|
|
foreach module $argv {
|
|
puts "module([incr i]) = $module"
|
|
}
|
|
puts ""
|
|
}
|
|
|
|
# load the helpdoc package
|
|
|
|
source [file join $helpdocdir helpdoc.tcl]
|
|
|
|
# source the gen-emacs-mode.tcl
|
|
|
|
source [file join $basedir gen-emacs-mode.tcl]
|
|
|
|
namespace eval ::helpdoc {
|
|
|
|
# for -masteronly generates only the master mode file
|
|
|
|
if { $opt(masteronly) } {
|
|
qe_master_generate $argv
|
|
exit 0
|
|
}
|
|
|
|
# initialize the qe-mode generation
|
|
|
|
qe_mode_init
|
|
|
|
|
|
# parse each module file ...
|
|
|
|
variable module
|
|
foreach module $argv {
|
|
|
|
# find whether module is a name of the name of INPUT_*.def file
|
|
|
|
set deffile $module
|
|
|
|
if { ! [file exists $module] } {
|
|
# seems $module is a module name
|
|
|
|
puts -nonewline "
|
|
trying the $module as a module name ... "
|
|
|
|
set deffile [get_def_filename $module]
|
|
puts "\[OK\]"
|
|
} else {
|
|
# extract module name from INPUT_*.def as:
|
|
|
|
set module [modulename_from_defname $deffile]
|
|
}
|
|
|
|
lappend module_list $module
|
|
|
|
if { $opt(mode) eq {} } {
|
|
set opt(mode) $module
|
|
}
|
|
if { $opt(modename) eq {} } {
|
|
set opt(modename) QE-$opt(mode).x
|
|
}
|
|
|
|
# process this def file
|
|
|
|
qe_mode_process_def $deffile
|
|
}
|
|
|
|
# generate a $opt(mode)-mode.el file
|
|
|
|
qe_mode_generate $module_list
|
|
}
|
|
|
|
|