diff --git a/Makefile b/Makefile index 013eb39ec..d43e46021 100755 --- a/Makefile +++ b/Makefile @@ -19,7 +19,11 @@ directories.stamp: $(OBJS): directories.stamp -install: python_code +install: python_code + +rpm: setup.py + @echo "About to make RPM" + $(PYTHON) ./setup.py bdist --format=rpm sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql directories.stamp cp $< $@ diff --git a/multicorn.control b/multicorn.control index 29b1ce4df..689b8a204 100755 --- a/multicorn.control +++ b/multicorn.control @@ -1,4 +1,4 @@ comment = 'Multicorn Python bindings for Postgres 9.2.* Foreign Data Wrapper' default_version = '1.3.2' module_pathname = '$libdir/multicorn' -relocatable = true +relocatable = True diff --git a/rpm/post_install.sh b/rpm/post_install.sh new file mode 100644 index 000000000..7e59df133 --- /dev/null +++ b/rpm/post_install.sh @@ -0,0 +1,3 @@ +default_version=$(grep default_version $(pg_config --sharedir)/extension/multicorn.control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/") + +ln $(pg_config --sharedir)/extension/multicorn.sql $(pg_config --sharedir)/extension/multicorn--${default_version}.sql diff --git a/rpm/pre_uninstall.sh b/rpm/pre_uninstall.sh new file mode 100644 index 000000000..3ba31dad4 --- /dev/null +++ b/rpm/pre_uninstall.sh @@ -0,0 +1,3 @@ +default_version=$(grep default_version $(pg_config --sharedir)/extension/multicorn.control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/") + +rm $(pg_config --sharedir)/extension/multicorn--${default_version}.sql diff --git a/setup.py b/setup.py index bcd3aa7e4..c73a3c266 100755 --- a/setup.py +++ b/setup.py @@ -2,6 +2,12 @@ import sys from setuptools import setup, find_packages, Extension + +import os +from sys import platform +from setuptools.command.install import install +from distutils.command.build import build + # hum... borrowed from psycopg2 def get_pg_config(kind, pg_config="pg_config"): p = subprocess.Popen([pg_config, '--%s' % kind], stdout=subprocess.PIPE) @@ -26,12 +32,37 @@ def get_pg_config(kind, pg_config="pg_config"): elif sys.version_info[1] < 6: sys.exit("Sorry, you need at least python 2.6 for Multicorn") +class MulticornBuild(build): + def run(self): + # Original build + build.run(self) + r = subprocess.check_output(['/usr/bin/make', 'multicorn.so']) + r = r.strip().decode('utf8') + if not r: + raise Warning(p[2].readline()) + # After original build + +execfile('multicorn.control') + + setup( - name='multicorn', - version='__VERSION__', - author='Kozea', - license='Postgresql', - package_dir={'': 'python'}, - packages=['multicorn', 'multicorn.fsfdw'], - ext_modules = [multicorn_utils_module] -) + name='multicorn', + # version='__VERSION__', + version=default_version, + author='Kozea', + license='Postgresql', + options={'bdist_rpm': {'post_install': 'rpm/post_install.sh', + 'pre_uninstall': 'rpm/pre_uninstall.sh', + 'requires': 'postgresql95-server', + }}, + package_dir={'': 'python'}, + packages=['multicorn', 'multicorn.fsfdw'], + ext_modules=[multicorn_utils_module], + data_files=[ + ('%s/extension' % get_pg_config('sharedir'), ['multicorn.control', 'sql/multicorn.sql', 'doc/multicorn.md']), + (get_pg_config('libdir'), ['multicorn.so']) + ], + cmdclass={ + 'build': MulticornBuild, + } + )