diff --git a/pylibfdt/Makefile.pylibfdt b/pylibfdt/Makefile.pylibfdt index 005cb25..5fe5c82 100644 --- a/pylibfdt/Makefile.pylibfdt +++ b/pylibfdt/Makefile.pylibfdt @@ -12,11 +12,10 @@ SETUPFLAGS += --quiet endif define run_setup - VERSION="$(dtc_version)" $(SETUP) $(SETUPFLAGS) $(1) endef -$(PYMODULE): $(PYLIBFDT_srcs) $(LIBFDT_archive) $(SETUP) +$(PYMODULE): $(PYLIBFDT_srcs) $(LIBFDT_archive) $(SETUP) $(VERSION_FILE) @$(VECHO) PYMOD $@ $(call run_setup, build_ext --build-lib=$(PYLIBFDT_objdir)) diff --git a/pylibfdt/setup.py b/pylibfdt/setup.py index 95f1601..f0f0e10 100755 --- a/pylibfdt/setup.py +++ b/pylibfdt/setup.py @@ -4,13 +4,6 @@ setup.py file for SWIG libfdt Copyright (C) 2017 Google, Inc. Written by Simon Glass - -Version is provided in VERSION - -If these variables are not given they are parsed from the Makefiles. This -allows this script to be run stand-alone, e.g.: - - ./pylibfdt/setup.py install [--prefix=...] """ from distutils.core import setup, Extension @@ -18,73 +11,16 @@ import os import re import sys -# Decodes a Makefile assignment line into key and value (and plus for +=) -RE_KEY_VALUE = re.compile('(?P\w+) *(?P[+])?= *(?P.*)$') + +VERSION_PATTERN = '^#define DTC_VERSION "DTC ([^"]*)"$' -def ParseMakefile(fname): - """Parse a Makefile to obtain its variables. +def get_version(): + version_file = "version_gen.h" + f = open(version_file, 'rt') + m = re.match(VERSION_PATTERN, f.readline()) + return m.group(1) - This collects variable assigments of the form: - - VAR = value - VAR += more - - It does not pick out := assignments, as these are not needed here. It does - handle line continuation. - - Returns a dict: - key: Variable name (e.g. 'VAR') - value: Variable value (e.g. 'value more') - """ - makevars = {} - with open(fname) as fd: - prev_text = '' # Continuation text from previous line(s) - for line in fd.read().splitlines(): - if line and line[-1] == '\\': # Deal with line continuation - prev_text += line[:-1] - continue - elif prev_text: - line = prev_text + line - prev_text = '' # Continuation is now used up - m = RE_KEY_VALUE.match(line) - if m: - value = m.group('value') or '' - key = m.group('key') - - # Appending to a variable inserts a space beforehand - if 'plus' in m.groupdict() and key in makevars: - makevars[key] += ' ' + value - else: - makevars[key] = value - return makevars - -def GetEnvFromMakefiles(): - """Scan the Makefiles to obtain the settings we need. - - This assumes that this script is being run from the top-level directory, - not the pylibfdt directory. - - Returns: - Tuple with: - Version string - List of extra C preprocessor flags needed - """ - basedir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0]))) - makevars = ParseMakefile(os.path.join(basedir, 'Makefile')) - version = '%s.%s.%s' % (makevars['VERSION'], makevars['PATCHLEVEL'], - makevars['SUBLEVEL']) - return version - - -progname = sys.argv[0] -version = os.environ.get('VERSION') - -# If we were called directly rather than through our Makefile (which is often -# the case with Python module installation), read the settings from the -# Makefile. -if not version: - version = GetEnvFromMakefiles() libfdt_module = Extension( '_libfdt', @@ -96,7 +32,7 @@ libfdt_module = Extension( setup( name='libfdt', - version= version, + version= get_version(), author='Simon Glass ', description='Python binding for libfdt', ext_modules=[libfdt_module],