Compare commits

...

10 commits

Author SHA1 Message Date
Imbus
bdc7b77eae Typos and substituting variable names in build.rpm.sh 2024-06-10 13:16:39 +02:00
Imbus
abac34fa2f Background compilation/rpm build with podman 2024-06-10 13:16:17 +02:00
Imbus
368f29324a build_rpm now uses local rpmbuild directory 2024-06-10 12:10:06 +02:00
Imbus
a262510dc7 Currently unused set_versions.sh script 2024-06-10 12:09:24 +02:00
Imbus
3b63d4fe6b gitignore 2024-06-10 12:09:07 +02:00
Imbus
a97604e18e Podman rpm build convenience script 2024-06-10 12:08:58 +02:00
Imbus
75a1bd2f3d Containerfile 2024-06-10 12:08:30 +02:00
Imbus
88cfe7d8ba Containerignore 2024-06-10 12:07:26 +02:00
Imbus
c2e9464a06 Working RPM build 2024-06-10 10:08:27 +02:00
Imbus
4da836c535 Working state, all from crates.io 2024-06-10 10:05:25 +02:00
9 changed files with 185 additions and 7 deletions

3
.containerignore Normal file
View file

@ -0,0 +1,3 @@
vendor
target
rpmbuild

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
/target
vendor
rpmbuild
*.tar.*

View file

@ -4,7 +4,6 @@ version = "0.1.0"
edition = "2021"
description = "A simple demonstration of the Iced GUI library."
license = "MIT"
#license-file = "LICENSE.txt"
repository = "no"
# This application was created and tested with Rust version 1.81.0-nightly

15
Containerfile Normal file
View file

@ -0,0 +1,15 @@
# This image is used for building the RPMs for SolutionTM
FROM fedora:40 as build
# Some general tools used for RPM building
RUN dnf install rpm-build rpmdevtools dnf-plugins-core git -y
RUN rpmdev-setuptree
# Get the build deps
ADD ./SolutionTM.spec ./
RUN dnf builddep ./SolutionTM.spec -y
# Where the source will be mounted
RUN mkdir /source
WORKDIR /source

56
SolutionTM.spec Normal file
View file

@ -0,0 +1,56 @@
# Generated by rust2rpm 26
%bcond_without check
# prevent library files from being installed
%global cargo_install_lib 0
%global crate SolutionTM
Name: SolutionTM
Version: 0.1.0
Release: %autorelease
Summary: Simple demonstration of the Iced GUI library
SourceLicense: MIT
# FIXME: paste output of %%cargo_license_summary here
License: MIT
# LICENSE.dependencies contains a full license breakdown
URL: no
Source: %{crate}-%{version}.tar.gz
Source: %{crate}-%{version}-vendor.tar.gz
BuildRequires: cargo-rpm-macros >= 26
BuildRequires: cargo >= 1.78
%global _description %{expand:
A simple demonstration of the Iced GUI library.}
%description %{_description}
%prep
%autosetup -n %{crate}-%{version} -p1 -a1
%cargo_prep -v vendor
%build
%cargo_build
%{cargo_license_summary}
%{cargo_license} > LICENSE.dependencies
%{cargo_vendor_manifest}
%install
%cargo_install
%if %{with check}
%check
%cargo_test
%endif
%files
%license LICENCE.txt
%license LICENSE.dependencies
%license cargo-vendor.txt
%{_bindir}/SolutionTM
%changelog
%autochangelog

8
build_podman.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
# First we build the 'Containerfile' for podman
podman build -t solutiontm:latest -f Containerfile || exit 1
# Run it, mount repo as /source and execute "bash build_rpm.sh"
podman run -d -v $(pwd):/source:Z -n rpmbuild solutiontm:latest bash build_rpm.sh || exit 1
echo "Continuing build in background..."

61
build_rpm.sh Executable file
View file

@ -0,0 +1,61 @@
#!/bin/bash
# This is a simple script to build an RPM package from a spec file.
# We need to install the required dependencies to build RPM packages.
# We also need to set up the RPM build tree:
#
# $ sudo dnf install rpm-build rpmdevtools dnf-plugins-core
# $ rpmdev-setuptree
#
# To install the builddeps:
#
# $ sudo dnf builddep SolutionTM.spec
version=0.1.0
name=SolutionTM
rpmbuild=$PWD/rpmbuild
mkdir -p $rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo "Building RPM package for $name version $version."
# Check so that all versions are coherent
grep -q "Version:.*$version" $name.spec
if [ $? -eq 0 ]; then
echo "Version number in spec file is $version."
else
echo "Version number in spec file is not $version. Exiting."
exit 1
fi
grep -q "version = \"$version\"" Cargo.toml
if [ $? -eq 0 ]; then
echo "Version number in Cargo.toml is $version."
else
echo "Version number in Cargo.toml is not $version. Exiting."
exit 1
fi
source_tar=$name-$version.tar.gz
vendor_tar=$name-$version-vendor.tar.gz
echo "Building source tarball $source_tar."
echo "Building vendor tarball $vendor_tar."
# First, we need a tarball of the source code in this very repo.
git archive --format=tar.gz --prefix=$name-$version/ -o $source_tar HEAD
# If we want an unclean build, comment out the above line and use the following instead.
# git ls-files | tar --transform="s,^,$name-$version/," -T - -czf $source_tar
# Then we need a vendor tarball of the dependencies.
cargo vendor --versioned-dirs vendor
tar -cvzf $vendor_tar vendor
# Then we move the tarball to the SOURCES directory.
mv $source_tar $rpmbuild/SOURCES/
mv $vendor_tar $rpmbuild/SOURCES/
rpmbuild --define "_topdir $rpmbuild" -ba $name.spec

26
set_versions.sh Executable file
View file

@ -0,0 +1,26 @@
#!/bin/bash
# Currently not used
$name=SolutionTM
$version=0.1.0
# If git is unclean, exit
if ! git diff-index --quiet HEAD --; then
echo "Git is unclean. Please commit your changes before building the RPM package."
exit 1
fi
# These should all set the first occurrence of the
# version number in the respective files.
# Set the version number in the spec file.
sed -i "0,/Version: .*/s/Version: .*/Version: $version/" $name.spec
# Set the version number in the Cargo.toml file.
sed -i "0,/version = \".*\"/s/version = \".*\"/version = \"$version\"/" Cargo.toml
# Set the version number in the Cargo.lock file.
sed -i "0,/version = \".*\"/s/version = \".*\"/version = \"$version\"/" Cargo.lock
git diff

View file

@ -3,6 +3,7 @@ use race::Race;
use iced::widget::{button, column, combo_box, row, text, Column, ComboBox, Text};
use iced::{Alignment, Padding};
use iced::{Element, Sandbox};
/// Represents the state of our application and handles
/// message matching and updating the state accordingly.
@ -36,7 +37,9 @@ enum Command {
Closed,
}
impl State {
impl Sandbox for State {
type Message = Command;
// Constructor for the state, nothing special here.
fn new() -> Self {
Self {
@ -47,6 +50,10 @@ impl State {
}
}
fn title(&self) -> String {
String::from("Test Example")
}
// On each update, we recieve a command and update the state accordingly.
fn update(&mut self, command: Command) {
match command {
@ -60,7 +67,7 @@ impl State {
// Called every frame to render the user interface.
// Changes to the state are reflected here.
fn view(&self) -> Column<Command> {
fn view(&self) -> Element<Command> {
// Our combo box
let combo_box: ComboBox<Race, Command> = combo_box::ComboBox::new(
&self.races,
@ -93,14 +100,16 @@ impl State {
.align_items(Alignment::Start)
.spacing(10)
.width(iced::Length::Fill)
.into()
}
}
fn main() {
// Iced::run is an entry point for the application.
// It may fail so we match on the result.
match iced::run("Test Example", State::update, State::view) {
Ok(_) => {}
Err(error) => eprintln!("Error: {}", error),
}
// match iced::run("Test Example", State::update, State::view) {
// Ok(_) => {}
// Err(error) => eprintln!("Error: {}", error),
// }
State::run(iced::Settings::default());
}