Set filename of source

Hi!
I am trying to package my dotnet app. To avoid having to package every nuget package I depend on as rpms I am trying to define them as sources. The problem is that when spectools -g -R myspec.spec grabs the sources they are downloaded to files named only their version number. Collisions occur, and now I only have 26 of 61 in the directory.

On Arch there is the following syntax:
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/${_tag}.tar.gz") so the source file gets downloaded to a certain output file, like wget url -O myfile.
Is there something similar in .spec files?

Note: downloading the dependencies this way does not break reproducibility as nuget packages are immutable - a given version of the package cannot be changed and will always refer to the same archive.

Previously I got help from Dotnet restore nuget packages at build

If anyone has a better idea how to package dotnet c# applications (e.g. without defining 61 sources or creating 61 rpm packages) I’m open to suggestions! I could not find examples of how others did it (package anything C# to Fedora), that would help as well.

.spec

%global debug_package %{nil}
Name:           bookmark-dlp
Version:        0.4.1
Release:        %autorelease
Summary:        Utility program for downloading bookmarked YouTube links using yt-dlp

License:        GPL-3.0-only
URL:            https://github.com/Neurofibromin/bookmark-dlp
Source0:         https://github.com/Neurofibromin/bookmark-dlp/archive/refs/tags/%{version}.tar.gz
Source1: https://www.nuget.org/api/v2/package/Avalonia/11.0.0
Source2: https://www.nuget.org/api/v2/package/Avalonia/11.2.3
Source3: https://www.nuget.org/api/v2/package/Avalonia.Angle.Windows.Natives/2.1.22045.20230930
...(more sources)...
Source59: https://www.nuget.org/api/v2/package/xunit.extensibility.core/2.9.3
Source60: https://www.nuget.org/api/v2/package/xunit.extensibility.execution/2.9.3
Source61: https://www.nuget.org/api/v2/package/xunit.runner.visualstudio/3.0.1

BuildRequires:  gcc
BuildRequires:  glibc
BuildRequires:  git
BuildRequires:  dotnet-sdk-9.0
BuildRequires:  wget
BuildRequires:  unzip
BuildRequires:  desktop-file-utils
Requires:       yt-dlp
Requires:       glibc
Requires:       libstdc++
Requires:       libgcc
%description
Small utility program for downloading bookmarked YouTube links using yt-dlp

%prep
#extract Source0
tar -xf %{version}.tar.gz
mv %{version} %{name}-%{version}
cd %{name}-%{version} 

export NUGET_PACKAGES=$PWD/nuget
export DOTNET_NOLOGO=true
export DOTNET_CLI_TELEMETRY_OPTOUT=true
#download and extract Source1 to Source60
mkdir -p %{_builddir}/%{name}-%{version}/nuget
pushd %{_builddir}/%{name}-%{version}/nuget

wget %{Source2} Avalonia.11.2.3.nupkg
unzip Avalonia.11.0.0.nupkg -d Avalonia/11.0.0
mv %{Source2} Avalonia.11.2.3.nupkg
unzip Avalonia.11.2.3.nupkg -d Avalonia/11.2.3
...(more extraction)...
mv %{Source59} xunit.extensibility.core.2.9.3.nupkg
unzip xunit.extensibility.core.2.9.3.nupkg -d xunit.extensibility.core/2.9.3
mv %{Source60} xunit.extensibility.execution.2.9.3.nupkg
unzip xunit.extensibility.execution.2.9.3.nupkg -d xunit.extensibility.execution/2.9.3
mv %{Source61} xunit.runner.visualstudio.3.0.1.nupkg
unzip xunit.runner.visualstudio.3.0.1.nupkg -d xunit.runner.visualstudio/3.0.1

popd
dotnet restore --locked-mode --source %{_builddir}/%{name}-%{version}/nuget bookmark-dlp.sln

%build
export MSBUILDDISABLENODEREUSE=1
dotnet publish bookmark-dlp/bookmark-dlp.csproj \
    --configuration Release \
    --runtime linux-x64 \
    --framework net9.0 \
    -o %{_builddir}/%{name}-%{version}/publish \
    --verbosity quiet

%check
dotnet test ./Tests/bookmark-dlp.Tests/ \
    --no-restore \
    --framework net9.0 \
    --verbosity quiet

%install
%define __strip /bin/true
install -d %{buildroot}%{_bindir}
install -d %{buildroot}%{_libdir}/%{name}
cp -r %{_builddir}/%{name}-%{version}/publish/* %{buildroot}%{_libdir}/%{name}/

# Install icons and create directories automatically
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.16.png \
    %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.24.png \
    %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.32.png \
    %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.48.png \
    %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.64.png \
    %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.96.png \
    %{buildroot}%{_datadir}/icons/hicolor/96x96/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.128.png \
    %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.256.png \
    %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.512.png \
    %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/bookmark-dlp.png

install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.svg \
    %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/bookmark-dlp.svg

ln -s %{_libdir}/%{name}/%{name} %{buildroot}%{_bindir}/%{name}
install -d %{buildroot}%{_datadir}/applications
install -d %{buildroot}%{_mandir}/man1
install -m 644 bookmark-dlp.1 %{buildroot}%{_mandir}/man1/
# install -m 644 bookmark-dlp.desktop %{_builddir}/usr/share/applications/
desktop-file-install                                    \
--dir=%{buildroot}%{_datadir}/applications              \
bookmark-dlp.desktop
rm -f %{buildroot}%{_libdir}/%{name}/*.pdb
rm -f %{buildroot}%{_libdir}/%{name}/*.xml

%files
%license LICENSE
%doc README.md
%{_mandir}/man1/bookmark-dlp.1.gz
%{_bindir}/%{name}
%{_libdir}/%{name}/bookmark-dlp
%{_datadir}/applications/bookmark-dlp.desktop
%{_datadir}/icons/hicolor/16x16/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/24x24/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/32x32/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/48x48/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/64x64/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/96x96/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/128x128/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/256x256/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/512x512/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/1024x1024/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/scalable/apps/bookmark-dlp.svg

%changelog
%autochangelog
1 Like

Try naming the sources like this.

Source1: https://www.nuget.org/api/v2/package/Avalonia/11.0.0#/Avalonia-11.0.0.zip
Source2: https://www.nuget.org/api/v2/package/Avalonia/11.2.3#/Avalonia-11.2.3.zip
3 Likes

That worked, thanks!