Skip to content

move getopt() to Py_GetOpt() and use it unconditionally #33417

Description

@Yhg1s
BPO 402170
Nosy @tim-one, @freddrake, @Yhg1s
Files
  • None: None
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/Yhg1s'
    closed_at = <Date 2000-11-08.22:53:43.000>
    created_at = <Date 2000-10-30.17:43:03.000>
    labels = ['interpreter-core']
    title = 'move getopt() to Py_GetOpt() and use it unconditionally'
    updated_at = <Date 2000-11-08.22:53:43.000>
    user = 'https://github.com/Yhg1s'

    bugs.python.org fields:

    activity = <Date 2000-11-08.22:53:43.000>
    actor = 'fdrake'
    assignee = 'twouters'
    closed = True
    closed_date = None
    closer = None
    components = ['Interpreter Core']
    creation = <Date 2000-10-30.17:43:03.000>
    creator = 'twouters'
    dependencies = []
    files = ['2904']
    hgrepos = []
    issue_num = 402170
    keywords = ['patch']
    message_count = 6.0
    messages = ['34725', '34726', '34727', '34728', '34729', '34730']
    nosy_count = 4.0
    nosy_names = ['tim.peters', 'fdrake', 'twouters', 'moshez']
    pr_nums = []
    priority = 'normal'
    resolution = None
    stage = None
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue402170'
    versions = []

    Activity

    1. Yhg1s commented on Oct 30, 2000

      @Yhg1s
      MemberAuthor
      No description provided.
    2. self-assigned this
      on Oct 30, 2000
    3. self-assigned this
      on Oct 30, 2000
    4. Yhg1s commented on Oct 30, 2000

      @Yhg1s
      MemberAuthor

      This patch attempts to do what Tim suggested in the python-dev thread about getopt()'s prototype and the difficulties of it. the 'getopt' implementation as provided in Python/getopt.c is renamed to Py_GetOpt(), the exported variables 'opterr', 'optind' and 'optarg' are prefixed with Py_, and all use in the Python sourcetree is adjusted.

      The patch is missing the 'pygetopt.h' include file, though :P I'll resubmit a proper patch later.

      There are a couple of issues still open: the name of the getopt.c file, its use of 'fprintf(stderr, ... )', its license, documentation (which this patch lacks) and whether this Py_GetOpt should be an officially exported API at all.

    5. Yhg1s commented on Oct 30, 2000

      @Yhg1s
      MemberAuthor

      New patch, includes pygetopt.h by hack. (not sure if it patches cleanly, but it's not that exciting a file anyway :) Assigned to.... (spin wheel... Guido. no. spin wheel... Barry. no. spin wheel... Moshe. dang. spin wheel... *nudge*. Ah, finally,) Tim.

    6. moshez commented on Nov 1, 2000

      moshezmannequin
      Mannequin

      Well, as the one who almost got the assignment <wink>, I'm +1 on it. Using native getopt is more trouble then it's worth, especially considering the fact that we've had an implementation of our own for so long. So here's for reinventing the wheel! <wink>

    7. tim-one commented on Nov 2, 2000

      @tim-one
      Member

      Accepted and assigned back to Thomas.

      Guido approved of this "in theory" before, so go for it! I would like to see the function renamed to _PyOS_GetOpt(), because we always stick "OS" in the name of an OS substitute function, and the leading underscore keeps it out of the public API (thus answering one of your open issues: if people clamor for a public getopt replacement, we can add that later; but if we make it public from the start, it can never go away).

      About the license, we can't change it, but it certainly allows us to modify the code and distribute your changes. Under copyright law, I don't believe the changes are substantial enough that we could legitimately claim a new copyright for the new version. So the whole license thing seems a non-issue to me.

      Documentation? If it's in the private API, it doesn't need any <wink>.

      fprintf(stderr, ...)? Sure. Python barely exists by the time this code is called, and there's really nothing better to do (note that Py_Main calls fprintf(stderr, ...) itself later in a couple of other startup error cases).

    8. freddrake commented on Nov 8, 2000

      @freddrake
      Member

      Already checked in, so I'll close this for Thomas.

      Thanks, Thomas!

    9. transferred this issue fromon Apr 9, 2022
    10. vstinner commented on Jun 19, 2023

      @vstinner
      Member

      Code changed by commit 2cffc7d:

      commit 2cffc7d4202fc1197280a05d998075551b459283
      Author: Thomas Wouters <thomas@python.org>
      Date:   Fri Nov 3 08:18:37 2000 +0000
      
          Move our own getopt() implementation to _PyOS_GetOpt(), and use it
          regardless of whether the system getopt() does what we want. This avoids the
          hassle with prototypes and externs, and the check to see if the system
          getopt() does what we want. Prefix optind, optarg and opterr with _PyOS_ to
          avoid name clashes. Add new include file to define the right symbols. Fix
          Demo/pyserv/pyserv.c to include getopt.h itself, instead of relying on
          Python to provide it.
      

      Include/pygetopt.h was moved to Include/internal/pygetopt.h by commit e425bd7 (then renamed to Include/internal/pycore_getopt.h).

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions