#!/usr/bin/env python
# Copyright (C) 2013 Brandon Invergo <brandon@invergo.net>
#
# This file is part of pyconfigure.
#
# pyconfigure is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyconfigure is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyconfigure. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import os.path
import sys
import getopt
import shutils
import subprocess
DATADIR = "/usr/local/share/pyconfigure/"
def parse_pkg_info(pkg_info):
pass
def gen_configure(pkg_meta, output):
config_src = os.path.join(DATADIR, "configure.ac")
config_dst = os.path.join(output, "configure.ac")
bootstrap = os.path.join(DATADIR, "bootstrap.sh")
with open(config_src, 'r') as h:
config_lines = h.readlines()
init_i = config_lines.index("@AC_INIT_LINE@")
config_lines[init_i] = "AC_INIT([{0}], [{1}], [{2}])".format(
pkg_meta["name"],
pkg_meta["version"],
pkg_meta["email"])
with open(config_dst, 'w') as h:
for line in config_lines:
h.write(line)
shutils.copy(bootstrap, output)
subprocess.call(["autoreconf", "-fvi", output])
def gen_makefile(pkg_meta, output, prefer_make):
pass
def gen_distutils(pkg_meta, output, prefer_make):
pass
def print_usage():
print("""Usage: pyconf [OPTIONS] [TARGET] PKG-INFO
Generate `configure' and installation scripts for a Python program
OPTIONS
-o, --output=DIR directory to move the generated files
--prefer-make prefer Make for performing installation logic,
otherwise prefer the TARGET
--help show this information
TARGETSl:
distutils (default)
By default, the generated `Makefile' will be a wrapper around the
TARGET-based script for Python (i.e. distutils' `setup.py' script).
If `--prefer-make' is specified, the TARGET-based Python script will
be a wrapper around `Makefile'.
For more information on the PKG-INFO file format, see PEP 345.
<http://www.python.org/dev/peps/pep-0345/>
Report bugs to: bug-pyconfigure@gnu.org
pyconfigure home page: <http://www.gnu.org/software/pyconfigure/>
General help using GNU software: <http://www.gnu.org/get/help/>""")
if __name__ == "__main__":
long_args = ["help", "output", "prefer-make"]
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], "ho:", long_args)
except getopt.GetoptError as err:
print(str(err))
print_usage()
sys.exit(2)
output = os.getcwd()
prefer_make = False
for o, a in opts:
if o in ["-h", "--help"]:
print_usage()
sys.exit()
if o in ["-o", "--output"]:
output = a
if o in ["--prefer-make"]:
prefer_make = True
else:
print("Warning: unhandled option")
if len(args) == 0:
print_usage()
sys.exit(2)
elif len(args) == 1:
target = 0
pkg_info = args[0]
else:
# do the following with an eye to the future of handling more
# Python packaging systems:
target = {"distutils":0}.get(args[0])
if target is None:
print("Error: invalid target {0}".format([args[0]))
sys.exit(2)
pkg_info = args[1]
if not os.isfile(pkg_info):
print("Error: PKG-INFO file does not exist")
sys.exit(2)
pkg_meta = parse(pkg_info)
gen_configure(pkg_meta, output)
gen_makefile(pkg_meta, output, prefer_make)
# also with an eye to the future:
[gen_distutils][target](pkg_meta, output, prefer_make)