public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Henning Schild <henning.schild@siemens.com>
To: Alexander Smirnov <asmirnov@ilbers.de>
Cc: <isar-users@googlegroups.com>
Subject: Re: [RFC][PATCH 2/3] classes/dsc: Basic Debian .dsc backend implementation
Date: Tue, 8 May 2018 19:40:07 +0200	[thread overview]
Message-ID: <20180508194007.5e5d73e6@md1pvb1c.ad001.siemens.net> (raw)
In-Reply-To: <20180423132146.14743-3-asmirnov@ilbers.de>

Am Mon, 23 Apr 2018 16:21:45 +0300
schrieb Alexander Smirnov <asmirnov@ilbers.de>:

> This patch introduces class to work with Debian .dsc files. The
> main goal is to simplify re-building and customization of original
> Debian packages.
> 
> To rebuild package from the upstream the following recipe template
> could be used:
> 
>   DSC_URI = "http://ftp.de.debian.org/...dsc;md5sum=..."
>   inherit debian-dsc
> 
> All the remaining information bitbake will derive automatically.
> This is only first implementation, so there are still several open
> issues like:
>  - Chose correct upstream package version depending on Debian distro
>  - quilt-3.0 source format support
>  - Cross-recipe dependencies recognition
> 
> Signed-off-by: Alexander Smirnov <asmirnov@ilbers.de>
> ---
>  meta/classes/debian-dsc.bbclass | 112
> ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112
> insertions(+) create mode 100644 meta/classes/debian-dsc.bbclass
> 
> diff --git a/meta/classes/debian-dsc.bbclass
> b/meta/classes/debian-dsc.bbclass new file mode 100644
> index 0000000..4159e3a
> --- /dev/null
> +++ b/meta/classes/debian-dsc.bbclass
> @@ -0,0 +1,112 @@
> +# Debian .dsc backend
> +#
> +# This software is a part of ISAR.
> +# Copyright (c) ilbers GmbH, 2018
> +#
> +# SPDX-License-Identifier: MIT
> +
> +# List of non-standard variables added to package workspace
> +#
> +# Set by user:
> +#  * DSC_URI - uri link to .dsc file in upstream apt
> +#
> +# Generated automatically:
> +#  * DEBIAN_URI - uri link to Debian patch in upstream apt
> +
> +python __anonymous() {
> +    # Fetch .dsc package file
> +    dsc_uri = (d.getVar("DSC_URI", True) or "").split()
> +    if len(dsc_uri) == 0:
> +        return
> +
> +    try:
> +        fetcher = bb.fetch2.Fetch(dsc_uri, d)
> +        fetcher.download()
> +    except bb.fetch2.BBFetchException as e:
> +        raise bb.build.FuncFailed(e)
> +
> +    # Open .dsc file from downloads
> +    dl_dir = d.getVar("DL_DIR", True)
> +    dsc_file = (dsc_uri[0].split(";")[0]).split("/")[-1]
> +    filepath = dl_dir + "/" + dsc_file
> +
> +    pv = ""
> +    src_uri = ""
> +
> +    # Parse .dsc file to get package details
> +    with open(filepath, "r") as file:
> +        line = file.readline()
> +
> +        while line:
> +            # Get package version and export PV
> +            if line.startswith("Version:") and not pv:
> +                pv = line.split(": ")[-1].rstrip()
> +                d.setVar("PV", pv)
> +
> +            # Get package and Debian patch arcives names
> +            if line.startswith("Files:") and not src_uri:
> +                line = file.readline()
> +                src = line.split(" ")[-1].rstrip()
> +                src_uri = (dsc_uri[0].rsplit("/", 1))[0] + "/" + src
> +                src_uri = src_uri + ";md5sum=" + line.split("
> ")[1].rstrip()
> +                d.setVar("SRC_URI", src_uri)
> +
> +                line = file.readline()
> +                debian = line.split(" ")[-1].rstrip()
> +                debian_uri = (dsc_uri[0].rsplit("/", 1))[0] + "/" +
> debian
> +                debian_uri = debian_uri + ";md5sum=" + line.split("
> ")[1].rstrip()
> +                d.setVar("DEBIAN_URI", debian_uri)
> +
> +            line = file.readline()
> +
> +        file.close()
> +
> +    # Set correct path to unpacked sources
> +    pv_orig = (src.split("_")[-1]).split(".orig")[0]
> +    pn = d.getVar("PN", True)
> +    d.setVar("S", pn + "-" + pv_orig)
> +}
> +
> +python do_fetch_append() {
> +    debian_uri = (d.getVar("DEBIAN_URI", True) or "").split()
> +    if len(debian_uri) == 0:
> +        return
> +
> +    try:
> +        fetcher = bb.fetch2.Fetch(debian_uri, d)
> +        fetcher.download()
> +    except bb.fetch2.BBFetchException as e:
> +        raise bb.build.FuncFailed(e)
> +}
> +
> +python do_unpack_append() {
> +    import subprocess
> +
> +    s = d.getVar("S", True)
> +    workdir = d.getVar("WORKDIR", True)
> +    debian_uri = (d.getVar("DEBIAN_URI", True) or "").split()
> +
> +    try:
> +        fetcher = bb.fetch2.Fetch(debian_uri, d)
> +        fetcher.unpack(workdir + "/" + s)
> +    except bb.fetch2.BBFetchException as e:
> +        raise bb.build.FuncFailed(e)
> +}
> +
> +# NOTE: this is workaround to serve quilt-3.0 package format support.
> +#       To build such package, the original tarball should be placed
> +#       in "../" folder. In general, this should be handled by Isar
> +#       core build classes, but for now this class in the only one
> user +#       for quilt-3.0, so for the first implementation let"s
> keep it here. +# Open issues:
> +#  - How to identify if package has quilt-3.0 source format?

Had the same issue... The format is in the .dsc. We should check which
other formats change what we need to build.

> +#  - How to avoid copying of tarballs from downloads to working dir?

i fetched twice, once with unpack=false

Henning

> +do_build_prepend() {
> +    dl_dir="${@ d.getVar('DL_DIR', True)}"
> +    workdir="${@ d.getVar('WORKDIR', True)}"
> +    file="${@ ((d.getVar('SRC_URI',
> True)).split(";")[0]).split("/")[-1]}" +
> +    install -m 644 $dl_dir/$file $workdir
> +}
> +
> +inherit dpkg


  parent reply	other threads:[~2018-05-08 17:40 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-23 13:21 [RFC][PATCH 0/3] Experiments with .dsc backend Alexander Smirnov
2018-04-23 13:21 ` [RFC][PATCH 1/3] buildchroot: Include texinfo to base system Alexander Smirnov
2018-04-23 13:21 ` [RFC][PATCH 2/3] classes/dsc: Basic Debian .dsc backend implementation Alexander Smirnov
2018-04-23 15:04   ` Henning Schild
2018-04-23 16:11     ` Alexander Smirnov
2018-04-23 17:27       ` Henning Schild
2018-04-25 10:11         ` Jan Kiszka
2018-05-08 17:40   ` Henning Schild [this message]
2018-04-23 13:21 ` [RFC][PATCH 3/3] recipes-debian: Add example recipe to test Debian .dsc support Alexander Smirnov
2018-04-23 14:36 ` [RFC][PATCH 0/3] Experiments with .dsc backend Henning Schild
2018-04-23 15:26   ` Alexander Smirnov
2018-04-23 16:03     ` Henning Schild
2018-04-27 15:46       ` Alexander Smirnov
2018-05-02  8:19         ` Henning Schild
2018-05-08 17:37 ` Henning Schild
2018-05-08 18:31   ` Alexander Smirnov
2018-05-09  7:37     ` Henning Schild

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180508194007.5e5d73e6@md1pvb1c.ad001.siemens.net \
    --to=henning.schild@siemens.com \
    --cc=asmirnov@ilbers.de \
    --cc=isar-users@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox