#!/usr/bin/env python3 # --------------------------------------------------------------------------- # Copyright (C) 2020-2030, per.s.sandberg@bahnhof.se # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files # (the "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and / or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions : # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # --------------------------------------------------------------------------- import sys import os from os.path import * import argparse import subprocess project = "zmq-Ada" def getProjectDir(): projects = False os.environ["ADA_PROJECT_PATH"] = "" os.environ["GPR_PROJECT_PATH"] = "" response = subprocess.Popen( ["gnatls", "-v"], stdout=subprocess.PIPE).communicate()[0].decode("utf-8").split("\n") for line in response: if "Project Search Path" in line: projects = True if projects: if exists(line.strip()): return line.strip() def which(program): import os def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, fname = os.path.split(program) if fpath: if is_exe(program): return program else: for path in os.environ["PATH"].split(os.pathsep): path = path.strip('"') exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file def whichzmqversion(): with open("_locate_zmq.c", "w") as outf: outf.write("#include \n") outf.write("#include \n") outf.write('int main() { printf("%d.%d.%d",ZMQ_VERSION_MAJOR,ZMQ_VERSION_MINOR,ZMQ_VERSION_PATCH);}') response = subprocess.Popen(["gcc", "_locate_zmq.c", "-lzmq"], stdout=subprocess.PIPE).communicate()[0].decode("utf-8").split("\n") response = subprocess.Popen([join(dirname(__file__),"a.out")], stdout=subprocess.PIPE).communicate()[0].decode("utf-8") os.remove("_locate_zmq.c") os.remove("a.out") return response def whichzmq(): ret = "/usr" with open("_locate_zmq.c", "w") as outf: outf.write("#include ") response = subprocess.Popen(["gcc", "-E", "-pipe", "_locate_zmq.c"], stdout=subprocess.PIPE).communicate()[0].decode("utf-8").split("\n") os.remove("_locate_zmq.c") for line in response: if "/zmq.h" in line: line = line.split('"')[1] ret = dirname(dirname(line)) return ret def parsargs(args): parser = argparse.ArgumentParser(description='Process some integers.') fail = False parser.add_argument('--prefix', metavar='N', type=str, default=dirname(dirname(which("gnatls"))), help='Install root') parser.add_argument('--eprefix', metavar='N', type=str, default=dirname(dirname(which("gnatls"))), help='system admin root') parser.add_argument("--bindir", metavar='N', type=str, help='user executables [EPREFIX/bin]') parser.add_argument("--sbindir", metavar='N', type=str, help='system admin executables [EPREFIX/sbin]') parser.add_argument("--projectdir", metavar='N', type=str, default=getProjectDir(), help='Location of gprfiles [%s]' % getProjectDir()) parser.add_argument("--libexecdir", metavar='N', type=str, help='program executables [EPREFIX/libexec]') parser.add_argument("--sysconfdir", metavar='N', type=str, help='read-only single-machine data [PREFIX/etc]') parser.add_argument("--sharedstatedir", metavar='N', type=str, help='modifiable architecture-independent data [PREFIX/com]') parser.add_argument("--localstatedir", metavar='N', type=str, help='modifiable single-machine data [PREFIX/var]') parser.add_argument("--libdir", metavar='N', type=str, help='object code libraries [EPREFIX/lib]') parser.add_argument("--includedir", metavar='N', type=str, help='header files [PREFIX/include]') parser.add_argument("--datarootdir", metavar='N', type=str, help='read-only arch.-independent data root [PREFIX/share]') parser.add_argument("--datadir", metavar='N', type=str, help='read-only architecture-independent data [DATAROOTDIR]') parser.add_argument("--infodir", metavar='N', type=str, help='info documentation [DATAROOTDIR/info]') parser.add_argument("--localedir", metavar='N', type=str, help='locale-dependent data [DATAROOTDIR/locale]') parser.add_argument("--mandir", metavar='N', type=str, help='man documentation [DATAROOTDIR/man]') parser.add_argument("--docdir", metavar='N', type=str, help='documentation root [DATAROOTDIR/doc/a-zeromq]') parser.add_argument("--htmldir", metavar='N', type=str, help='html documentation [DOCDIR]') parser.add_argument("--dvidir", metavar='N', type=str, help='dvi documentation [DOCDIR]') parser.add_argument("--pdfdir", metavar='N', type=str, help='pdf documentation [DOCDIR]') parser.add_argument("--psdir", metavar='N', type=str, help='ps documentation [DOCDIR]') parser.add_argument("--withzmq", metavar='N', type=str, default=whichzmq(), help='location of zmq') parser.add_argument("--withzmqlib", metavar='N', type=str, help='location of libzmq.a') parser.add_argument("--withzmqinclude", metavar='N', type=str, help='location of zmq.h') parser.add_argument("--withzmqversion", metavar='N', type=str, default=whichzmqversion(), help='Version of libzmq') args = parser.parse_args(args) if not args.bindir: args.bindir = join(args.prefix, "bin") if not args.sbindir: args.sbindir = join(args.eprefix, "sbin") if not args.libexecdir: args.libexecdir = join(args.eprefix, "libexex") if not args.sysconfdir: args.sysconfdir = join(args.prefix, "etc") if not args.libdir: args.libdir = join(args.prefix, "lib") if not args.sharedstatedir: args.sharedstatedir = join(args.prefix, "com") if not args.localstatedir: args.localstatedir = join(args.prefix, "var") if not args.includedir: args.includedir = join(args.prefix, "include") if not args.datarootdir: args.datarootdir = join(args.prefix, "share") if not args.datadir: args.datadir = args.datarootdir if not args.infodir: args.infodir = join(args.datarootdir, "info") if not args.localedir: args.localedir = join(args.datarootdir, "locale") if not args.mandir: args.mandir = join(args.datarootdir, "man") if not args.docdir: args.docdir = join(args.datarootdir, "doc", project) if not args.htmldir: args.htmldir = join(args.docdir, "html") if not args.dvidir: args.dvidir = join(args.docdir, "dvi") if not args.pdfdir: args.pdfdir = join(args.docdir, "pdf") if not args.psdir: args.psdir = join(args.docdir, "ps") if not args.withzmqlib: args.withzmqlib = join(args.withzmq, "lib") if not args.withzmqinclude: args.withzmqinclude = join(args.withzmq, "include") if not exists(join(args.withzmqinclude, "zmq.h")): sys.stderr.write("No zmq.h found\n") fail = True # if not exists(join(args.withzmqlib, "libzmq.a")): # sys.stderr.write("No libzmq found\n") # fail = True if fail: return None args.__dict__["PATH"] = os.getenv("PATH") return args def expand(args): for root, dirs, files in os.walk("."): if "libzeromq" not in root: for f in files: if splitext(f)[1] == ".in": src = join(root, f) tgt = join(root, splitext(f)[0]) with open(src) as inf: print (src, tgt) with open(tgt, "w") as outf: outf.write(inf.read() % args.__dict__) def main(args): expand(parsargs(args)) if __name__ == "__main__": main(sys.argv[1:])