mirror of https://github.com/abinit/abinit.git
139 lines
3.7 KiB
Python
Executable File
139 lines
3.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Copyright (C) 2009-2025 ABINIT Group (Yann Pouillon)
|
|
#
|
|
# This file is part of the ABINIT software package. For license information,
|
|
# please see the COPYING file in the top-level directory of the ABINIT source
|
|
# distribution.
|
|
#
|
|
from __future__ import print_function, division, absolute_import #, unicode_literals
|
|
|
|
try:
|
|
from ConfigParser import ConfigParser
|
|
except ImportError:
|
|
from configparser import ConfigParser
|
|
from time import gmtime,strftime
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
class MyConfigParser(ConfigParser):
|
|
|
|
def optionxform(self,option):
|
|
return str(option)
|
|
|
|
|
|
|
|
def key_is_ok(key):
|
|
|
|
# Init keys to ignore
|
|
cnf_ignore = ["status"]
|
|
|
|
if ( key in cnf_ignore ):
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Main program
|
|
#
|
|
|
|
# Initial setup
|
|
my_name = "make-build-examples"
|
|
my_configs = ["config/specs/testfarm.conf"]
|
|
my_template = "doc/build/config-template.ac9"
|
|
my_outdir = "doc/build/config-examples"
|
|
my_fbck = "config/specs/fbversion.conf"
|
|
|
|
# Check if we are in the top of the ABINIT source tree
|
|
if ( not os.path.exists("configure.ac") or
|
|
not os.path.exists("src/98_main/abinit.F90") ):
|
|
print("%s: You must be in the top of an ABINIT source tree." % my_name)
|
|
print("%s: Aborting now." % my_name)
|
|
sys.exit(1)
|
|
|
|
# Check if we have a config file
|
|
for my_config in my_configs:
|
|
if ( not os.path.exists(my_config) ):
|
|
print("%s: Could not find config file (%s)." % (my_name,my_config))
|
|
print("%s: Aborting now." % my_name)
|
|
sys.exit(2)
|
|
|
|
# Check if we have a template
|
|
if ( os.path.exists(my_template) ):
|
|
inp_data = open(my_template,"rt").readlines()
|
|
else:
|
|
print("%s: Could not find template file (%s)." % (my_name,my_template))
|
|
print("%s: Aborting now." % my_name)
|
|
sys.exit(3)
|
|
|
|
# Check if we have a fallback config file
|
|
if ( os.path.exists(my_fbck) ):
|
|
fcnf = MyConfigParser()
|
|
fcnf.read(my_fbck)
|
|
if len(fcnf.sections()) != 0:
|
|
fbversion = '_'+fcnf.sections()[0]
|
|
else:
|
|
fbversion = ''
|
|
else:
|
|
print("%s: Could not find fbversion file (%s)." % (my_name,my_fbck))
|
|
print("%s: Aborting now." % my_name)
|
|
sys.exit(4)
|
|
|
|
# What time is it?
|
|
now = strftime("%Y/%m/%d %H:%M:%S +0000",gmtime())
|
|
|
|
# Prepare the storage space
|
|
if ( not os.path.exists(my_outdir) ):
|
|
os.makedirs(my_outdir)
|
|
for old_ex in os.listdir(my_outdir):
|
|
item = os.path.join(my_outdir, old_ex)
|
|
#print("Removing item:", item)
|
|
if os.path.isdir(item):
|
|
if os.listdir(item) != 0:
|
|
raise RuntimeError("Cannot remove non-empty directory:", item)
|
|
os.rmdir(item)
|
|
else:
|
|
os.remove(item)
|
|
|
|
# Process config files and write examples
|
|
for my_config in my_configs:
|
|
cnf = MyConfigParser()
|
|
cnf.read(my_config)
|
|
|
|
for sec in cnf.sections():
|
|
cnf_vars = dict(cnf.items(sec))
|
|
cnf_keys = list(cnf_vars.keys())
|
|
cnf_keys.sort()
|
|
out_data = ""
|
|
|
|
# Uncomment variables in template data
|
|
for line in inp_data:
|
|
do_print = True
|
|
for key in cnf_keys:
|
|
if ( re.match("#%s=" % (key),line) or \
|
|
(re.match("#fcflags_opt_",line) and re.match("fcflags_opt_",key)) ):
|
|
if ( key_is_ok(key) ):
|
|
out_data += "%s=\"%s\"\n" % (key,cnf_vars[key])
|
|
do_print = False
|
|
if ( do_print ):
|
|
out_data += line
|
|
|
|
# Inject fbversion in out_data
|
|
out_data=out_data.replace("_FB_",fbversion)
|
|
|
|
# Write data
|
|
out_path = os.path.join(my_outdir, sec+".ac9")
|
|
open(out_path, "wt").write(out_data)
|
|
|
|
# FIXME: Create symbolic link until the test farm gets updated
|
|
old_path = os.path.join(my_outdir, sec+".ac")
|
|
if ( os.path.exists(old_path) or os.path.islink(old_path) ):
|
|
os.remove(old_path)
|
|
os.symlink(sec+".ac9", old_path)
|