[gdal-dev] Using a "standard" argument parser for command line utilities?

Even Rouault even.rouault at spatialys.com
Fri Mar 8 08:42:11 PST 2024


Thomas,
>
> my number 1 requirement would be that the rewrite not cause any 
> backwards compatibility issues compared to today's argument handling. 
> I suspect many users are calling the gdal utilities through scripts 
> and it would be a pain to have to update those when upgrading gdal.

Yes, backward compatibility is an obvious requirement. That said, it 
would not be fully backwards compatible in the situations where users 
currently misuse the official synopsis, and typically when they repeat 
an argument that is supposed to not be repeatable. Currently depending 
on the argument and utility, they might potentially get an error, or the 
first occurrence will be used, or the last occurrence will be used (most 
often this last case). With a standard argument parser, this will be 
rejected with an explicit error message. This is actually what triggered 
me to consider using a dedicated mechanism for argument parsing.

Backward compatibility for nominal cases will be tricky in some 
situations. For example I see that ogrinfo supports a weird syntax like 
"-geom=NO" that p-ranav/argparse cannot support out of the box (it 
supports ["-geom", "NO"], and if a dash dash alias is also declared, 
["--geom", "NO"] or ["--geom=NO"]). So for those hopefully rare cases, 
one will have to pre-process argv[] before passing to p-ranav/argparse 
so that is sees 2 separate argv[] values ["-geom", "NO"] instead to work 
properly.

>
> a nice to have enhancement that could be added during this upgrade 
> (which actually could be incompatible with my previous point, although 
> I don't see any on the top of my head) would be to support "--config 
> key=value" alongside "--config key value" in order to align with e.g. 
> creation options.

That's kind of orthogonal. We can support both with the logic: if the 
argv[i] value after "--config" has an equal sign in it, assume it is a 
key=value pair (none of our valid config options should have an equal 
sign in the key!). Otherwise assume argv[i] is the key and argv[i+1] is 
the value.


-- 
http://www.spatialys.com
My software is free, but my time generally not.



More information about the gdal-dev mailing list