On Wed, 31 Oct 2018 at 19:52, Jason L Tibbitts III <[email protected]> wrote:
>
> >>>>> "IU" == Iñaki Ucar <[email protected]> writes:
>
> IU> https://cran.r-project.org/package=simmer&version=3.0.0
>
> IU> returns a redirection (303) to the complete URL, with file
> IU> extension.
>
> 303 is actually "See Other". Which is odd as that's usually sent in
> response to a PUT or POST, not a GET. Maybe you can get the files via
> POST as well; I'm not sure.
Why is this odd? It's not "moved", either permanently or temporarily
(301, 302). It clearly matches the "see other" case. 303 was
*primarily* motivated by the POST use case, but I think this is a
pretty fair use.
> In any case, none of that has any effect on the filename that spectool
> (really curl) will use. It can't use data supplied by the remote host
> for that, for obvious reasons.
>
> IU> CRAN maintainers are pretty strict with this kind of stuff: if it
> IU> works now, it's guaranteed to continue to work.
>
> Well, that's good, but this is a hack so it's not a terrible idea to
> inform them that we have to use this kind of thing so that they can
> either bless this method or provide a cleaner one.
I'll raise the issue in the R-devel mailing list and report back.
> IU> There are no other formats: every package is tar.gz. But, as I
> IU> pointed out above, the immutable URL is a redirection to the
> IU> complete URL, so you can still extract the extension.
>
> No, you can't. Not in the context and under the limitations where we're
> running. Certainly we can't know anything about that in an RPM macro as
> we have to provide an extension in a complete vacuum.
>
> But given what you say, certainly defaulting to tar.gz will work for
> everything now.
For what it's worth, this (the extension) is clearly specified in the
"Writing R Extensions" and the "R Installation and Administration"
manuals. It always has been the same, and I'd say it's *extremely*
unlikely to change.
> Try dropping the below into /usr/lib/rpm/macros.d/macros.test
> (temporarily, make sure to deleted it when you're done experimenting).
> See if it gives the results you expect when you use %cran_url and
> %cran_source. Do fedpkg prep or some local builds. Try spectool -g and
> rpmspec -P.
Thanks, I'll give it a try and report back.
> Note that I've snuck a bit of magic in there which I'm not sure should
> be kept: If you don't have %packname defined and you call either
> %cran_url or %cran_source, then it will be automatically defined for you
> by stripping the leading "R-" from the name.
This is great. However, in theory, given the naming guidelines, by
stripping the leading "R-" you should get the package name. In
practice, at least one package doesn't adhere to this: R-TH-data,
while the R package name is TH.data, not TH-data. I see that the SPEC
says "# Cannot use . in name", but this is clearly not true (maybe it
was true long ago?).
> With this, you can just have:
>
> Name: R-webp
> Version: 0.4
> Release: 3%{?dist}
> Summary: A New Format for Lossless and Lossy Image Compression
>
> License: MIT
> URL: %cran_url
> Source0: %cran_source
>
> And use %packname in %prep as usual without explicitly defining it. But
> I'm not sure that much magic is a good idea.
>
> (And while we're doing R macros, that package suggests that we should
> also have a macro defined to %_libdir/R/library....)
That would require a good ton of magic. You have seen something like this:
%global rlibdir %{_libdir}/R/library
The thing is, this is the path for R packages *with* compiled code,
while R packages *without* compiled code must go to
%_datadir/R/library. That's why every R package has this global on top
of the SPEC. Are you able to detect that and set the path
appropriately with an RPM macro? :) That would certainly be very
convenient for us, packagers.
>
> - J<
>
> # Macros to replace overly complicated references to CRAN URLs and source
> files.
> # %cran_source -
> # Expands to the CRAN URL for a package
> # Accepts zero to three arguments:
> # 1: The CRAN project name, defaulting to %packname if it is defined.
> # If not, R- will be stripped from %name and %packname defined to that.
> # 2: The CRAN version, defaulting to %version.
> # 3: The file extension, defaulting to %__cran_default_extension (tar.gz).
> # Requires %__cran_package_url_template and %__cran_default_extension to be
> defined.
> # %__cran_package_url_template will undergo substitution (case-sensitive):
> # * "PACKNAME" will be replaced with the above CRAN project name.
> # * "PACKVERSION" will be replaced with the above CRAN version.
> # * "EXTENSION" will be replaced with the above extension.
> #
> # %cran_url -
> # Expands to the CRAN URL for a package
> # Accepts zero or one arguments:
> # 1: The CRAN project name, defaulting to %packname if it is defined.
> # If not, R- will be stripped from %name and %packname defined to that.
> # Requires %__cran_project_url_template to be defined.
> # %__cran_project_url_template will undergo substitution (case-sensitive):
> # * "PACKNAME" will be replaced with the above CRAN project name.
>
> %__cran_project_url_template https://cran.r-project.org/package=PACKNAME
> %__cran_package_url_template
> %{__cran_project_url_template}&version=PACKVERSION#/PACKNAME_PACKVERSION.EXTENSION
> %__cran_default_extension tar.gz
>
> %cran_source() %{lua:
> local src = rpm.expand('%1')
> local ver = rpm.expand('%2')
> local ext = rpm.expand('%3')
> local url = rpm.expand('%__cran_package_url_template')
> \
> -- If no first argument, try %packname, then %name with 'R-' stripped.
> -- Note that rpm leaves macros unchanged if they are not defined.
> if src == '%1' then
> src = rpm.expand('%packname')
> end
> if src == '%packname' then
> src = string.gsub(rpm.expand('%name'), "^R%-", "")
> -- Since packname wasn't defined, define it for convenience.
> rpm.define("packname " .. src)
> end
> \
> -- If no second argument, use %version
> if ver == '%2' then
> ver = rpm.expand('%version')
> end
> \
> -- If no third argument, use the preset default extension
> if ext == '%3' then
> ext = rpm.expand('%__cran_default_extension')
> end
> \
> -- Now substitute in all the values
> url = string.gsub(url, "PACKNAME", src)
> url = string.gsub(url, "PACKVERSION", ver)
> url = string.gsub(url, "EXTENSION", ext)
> \
> print(url)
> }
>
> %cran_url() %{lua:
> local src = rpm.expand('%1')
> local url = rpm.expand('%__cran_project_url_template')
> \
> -- If no first argument, try %packname, then %name with 'R-' stripped.
> -- Note that rpm leaves macros unchanged if they are not defined.
> if src == '%1' then
> src = rpm.expand('%packname')
> end
> if src == '%packname' then
> src = string.gsub(rpm.expand('%name'), "^R%-", "")
> -- Since packname wasn't defined, define it for convenience.
> rpm.define("packname " .. src)
> end
> \
> -- Substitute in the URL value
> url = string.gsub(url, "PACKNAME", src)
> \
> print(url)
> }
>
>
--
Iñaki Ucar
_______________________________________________
devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedoraproject.org/archives/list/[email protected]