initial work on pyconf script
diff --git a/pyconf.py b/pyconf.py
new file mode 100755
--- /dev/null
+++ b/pyconf.py
@@ -0,0 +1,128 @@
+#!/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)