diff options
-rw-r--r-- | setup.py | 29 |
1 files changed, 26 insertions, 3 deletions
@@ -177,6 +177,7 @@ def keywords_with_side_effects(argv): '--contact', '--contact-email', '--description', + '--egg-base', '--fullname', '--help-commands', '--keywords', @@ -198,9 +199,31 @@ def keywords_with_side_effects(argv): 'sdist', 'upload', ) - if all((arg in no_setup_requires_arguments) or - all(('-' + char) in no_setup_requires_arguments for char in arg[1:]) - for arg in argv[1:]): + def is_short_option(argument): + """Check whether a command line argument is a short option.""" + return len(argument) >= 2 and argument[0] == '-' and argument[1] != '-' + def expand_short_options(argument): + """Expand combined short options into canonical short options.""" + return ('-' + char for char in argument[1:]) + def argument_without_setup_requirements(argv, i): + """Check whether a command line argument needs setup requirements.""" + if argv[i] in no_setup_requires_arguments: + # Simple case: An argument which is either an option or a command + # which doesn't need setup requirements. + return True + elif is_short_option(argv[i]) and all(option in + no_setup_requires_arguments for option in + expand_short_options(argv[i])): + # Not so simple case: Combined short options none of which need + # setup requirements. + return True + elif argv[i - 1 : i] == ['--egg-base']: + # Tricky case: --egg-info takes an argument which should not make + # us use setup_requires (defeating the purpose of this code). + return True + else: + return False + if all(argument_without_setup_requirements(argv, i) for i in range(1, len(argv))): return { "cmdclass": { "build": DummyCFFIBuild, |