All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnout Vandecappelle <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] Add packages sip and PyQt
Date: Fri, 18 Oct 2013 01:58:47 +0200	[thread overview]
Message-ID: <526079B7.4060502@mind.be> (raw)
In-Reply-To: <1382009228-25988-1-git-send-email-sergey.kostanbaev@gmail.com>

  Hi Sergey,

  Thank you for your contribution! I have quite a few comments on your 
patch, though, so hopefully you can modify it and resend.

On 17/10/13 13:27, Sergey Kostanbaev wrote:
> Add support for sip-4.15.3 and pyqt-4.9.6 to work with qt-4.8.x. Tested on arm platform.

  Two packages should come in two separate patches: the first one adding 
sip, the second one adding pyqt. Such patches normally have a subject like:

sip: new package

  Also, we prefix python-related packages with 'python-'. So the packages 
should be called python-sip and python-pyqt.

>
> Signed-off-by: Sergey Kostanbaev <sergey.kostanbaev@gmail.com>
> ---
>   Config.in                         |    5
>   pyqt/Config.in                    |    6
>   pyqt/pyqt-4.9.6-configure.patch   |  924 ++++++++++++++++++++++++++++++++++++
>   pyqt/pyqt-4.9.6-full.patch        |  949 ++++++++++++++++++++++++++++++++++++++

  Patches shouldn't have a version number, but should be numbered. So

python-pyqt-0001-configure.patch
python-pyqt-0002-full.patch

>   pyqt/pyqt.mk                      |   63 ++
>   sip/Config.in                     |    5
>   sip/sip-4.15.3-configure.py.patch |   38 +
>   sip/sip.mk                        |   71 ++
>   8 files changed, 2061 insertions(+)
>
> diff --git a/package/Config.in b/package/Config.in
> index a94cb62..9c9ee19 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -157,6 +157,11 @@ source "package/qextserialport/Config.in"
>   source "package/qjson/Config.in"
>   source "package/qtuio/Config.in"
>   source "package/qwt/Config.in"
> +
> +comment "PyQT libraries"

  I don't think this comment is needed.

> +source "package/sip/Config.in"
> +source "package/pyqt/Config.in"
> +
>   endif
>
>   source "package/qt5/Config.in"
> diff --git a/package/sip/Config.in b/package/sip/Config.in
> new file mode 100644
> index 0000000..bbdb943
> --- /dev/null
> +++ b/package/sip/Config.in
> @@ -0,0 +1,5 @@
> +config BR2_PACKAGE_SIP
> +	bool "sip"
> +	depends on BR2_PACKAGE_PYTHON
> +	help
> +	    SIP for PyQt4
> \ No newline at end of file

  I don't think we really need sip on the target. sip is needed to build 
pyqt, but we're not going to build it on the target. So you also don't 
need a Config.in for it then.

> diff --git a/package/sip/sip-4.15.3-configure.py.patch b/package/sip/sip-4.15.3-configure.py.patch
> new file mode 100644
> index 0000000..06591c0
> --- /dev/null
> +++ b/package/sip/sip-4.15.3-configure.py.patch

  Patches should have a description, similar to a commit message. They 
should also have a Signed-off-by tag. See
http://buildroot.net/downloads/manual/manual.html#_format_and_licensing_of_the_package_patches

  However, this patch is probably not needed if cross-compilation is not 
needed.

> @@ -0,0 +1,38 @@
> +--- a/configure.py	2013-04-24 12:41:35.382000017 +0400
> ++++ b/configure.py	2013-04-24 13:09:30.000000000 +0400
> +@@ -273,9 +273,9 @@
> +         "default_mod_dir":  plat_py_site_dir,
> +         "default_sip_dir":  opts.sipsipdir,
> +         "py_version":       py_version,
> +-        "py_inc_dir":       plat_py_inc_dir,
> +-        "py_conf_inc_dir":  plat_py_conf_inc_dir,
> +-        "py_lib_dir":       plat_py_lib_dir,
> ++        "py_inc_dir":       opts.py_inc_dir,
> ++        "py_conf_inc_dir":  opts.py_conf_inc_dir,
> ++        "py_lib_dir":       opts.py_lib_dir,
> +         "universal":        opts.universal,
> +         "arch":             opts.arch,
> +         "deployment_target":    opts.deployment_target
> +@@ -399,6 +399,22 @@
> +             "macros")
> +     p.add_option_group(g)
> +
> ++    # Python configuration
> ++    g = optparse.OptionGroup(p, title="Python include path")
> ++    g.add_option("-i", "--py_inc_dir", action="callback",
> ++	    default=plat_py_inc_dir, type="string", metavar="DIR",
> ++	    dest="py_inc_dir", callback=store_abspath, help="where the Python "
> ++	    "include directory located [default: %s]" % plat_py_inc_dir)
> ++    g.add_option("-c", "--py_conf_inc_dir", action="callback",
> ++	    default=plat_py_conf_inc_dir, type="string", metavar="DIR",
> ++	    dest="py_conf_inc_dir", callback=store_abspath, help="where the Python "
> ++	    "Configuration include directory located [default: %s]" % plat_py_conf_inc_dir)
> ++    g.add_option("-l", "--py_lib_dir", action="callback",
> ++	    default=plat_py_conf_inc_dir, type="string", metavar="DIR",
> ++	    dest="py_lib_dir", callback=store_abspath, help="where the Python "
> ++	    "library located [default: %s]" % plat_py_lib_dir)
> ++
> ++
> +     # Installation.
> +     g = optparse.OptionGroup(p, title="Installation")
> +     g.add_option("-b", "--bindir", action="callback",
> diff --git a/package/sip/sip.mk b/package/sip/sip.mk
> new file mode 100644
> index 0000000..2a4254c
> --- /dev/null
> +++ b/package/sip/sip.mk
> @@ -0,0 +1,71 @@
> +#############################################################
> +#
> +# sip
> +#
> +#############################################################

  That should be 80 #'s

> +SIP_VERSION = 4.15.3
> +SIP_SOURCE = sip-$(SIP_VERSION).tar.gz
> +SIP_SITE = http://sourceforge.net/projects/pyqt/files/sip/sip-$(SIP_VERSION)

  We use the direct download links on sourceforge:

http://downloads.sourceforge.net/project/pyqt/sip/sip-$(SIP_VERSION)

> +
> +################################################
> +# HOST

  This is not needed.

> +
> +HOST_SIP_DEPENDENCIES = host-python
> +define HOST_SIP_CONFIGURE_CMDS
> +    (cd $(@D); \
> +	echo "Host Configuring DIR=$(PWD)"; \

  This echo is not needed.

> +	LD_LIBRARY_PATH=$(HOST_DIR)/lib $(HOST_DIR)/usr/bin/python configure.py; \

  You should also pass HOST_CONFIGURE_OPTS in the environment. And this 
already contains (a better) LD_LIBRARY_PATH definition.

> +    )
> +endef
> +
[snip target definitions which are not needed IMO]
> +$(eval $(host-autotools-package))

  This is not an autotools package, so you shouldn't use the autotools 
rules. That does some additional things that may not apply here.

> diff --git a/package/pyqt/Config.in b/package/pyqt/Config.in
> new file mode 100644
> index 0000000..4e4ff07
> --- /dev/null
> +++ b/package/pyqt/Config.in
> @@ -0,0 +1,6 @@
> +config BR2_PACKAGE_PYQT
> +	bool "pyqt"
> +	depends on BR2_PACKAGE_QT

  It's already in an if BR2_PACKAGE_QT, so this is not needed.

> +	depends on BR2_PACKAGE_SIP

  This is not needed IMO. It requires the host sip, but not the target sip.

> +	help
> +	    PyQT4 for Qt Embedded 4

  There should be an upstream URL, i.e.
http://www.riverbankcomputing.com/software/pyqt/

  Also, help text indentation should be one tab + two spaces, not four 
spaces.

> \ No newline at end of file

  There should be a newline at the end of the file.

[snip 2 patches]

  These patches are suspiciously large. They lack a description, but I 
guess they are needed for cross-compilation. Upstream says that 
configure-ng will support cross-compilation in the future [1] so I think 
you should probably start with that script. And check in upstream's 
mercurial repository what is already possible. Or perhaps even ask 
upstream for help.

[1] http://pyqt.sourceforge.net/Docs/PyQt4/installation.html


  If you do need such large patches, try to split them up a little more 
and certainly give a good comment, so we can try to review them. Also, if 
possible, try to send them upstream. Upstream can give much more valuable 
comments on the patches.


> diff --git a/package/pyqt/pyqt.mk b/package/pyqt/pyqt.mk
> new file mode 100644
> index 0000000..6c3ccfb
> --- /dev/null
> +++ b/package/pyqt/pyqt.mk
> @@ -0,0 +1,63 @@
> +#############################################################

  80 #'s

> +#
> +# PyQT Open Source Edition for Qt Embedded (QWS)

  Just

# python-pyqt

> +#
> +#############################################################
> +PYQT_VERSION = 4.9.6
> +PYQT_SOURCE = PyQt-x11-gpl-$(PYQT_VERSION).tar.gz
> +PYQT_SITE = http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-$(PYQT_VERSION)

  Use downloads.sourceforge.net

> +
> +################################################
> +# TARGET
> +
> +PYQT_DEPENDENCIES = sip qt

  host-sip

> +
> +define PYQT_CONFIGURE_CMDS
> +    echo "Construting qtdirs"

  echo is not needed.

> +    echo $(STAGING_DIR)/usr             > $(@D)/qtdirs.out
> +    echo $(STAGING_DIR)/usr/include    >> $(@D)/qtdirs.out
> +    echo $(STAGING_DIR)/usr/lib        >> $(@D)/qtdirs.out
> +    echo $(HOST_DIR)/usr/bin           >> $(@D)/qtdirs.out
> +    echo $(STAGING_DIR)/usr            >> $(@D)/qtdirs.out
> +    echo $(STAGING_DIR)/usr/plugins    >> $(@D)/qtdirs.out
> +
> +    echo 264196                >> $(@D)/qtdirs.out
> +    echo 8                     >> $(@D)/qtdirs.out
> +    echo Open Source           >> $(@D)/qtdirs.out
> +    echo shared                >> $(@D)/qtdirs.out
> +    echo PyQt_Accessibility    >> $(@D)/qtdirs.out
> +    echo PyQt_SessionManager   >> $(@D)/qtdirs.out
> +    echo PyQt_qreal_double     >> $(@D)/qtdirs.out
> +    echo PyQt_OpenSSL          >> $(@D)/qtdirs.out
> +    echo PyQt_Shortcut         >> $(@D)/qtdirs.out
> +    echo PyQt_ButtonGroup      >> $(@D)/qtdirs.out
> +    echo PyQt_RawFont          >> $(@D)/qtdirs.out
> +    echo WS_MACX               >> $(@D)/qtdirs.out
> +    echo WS_WIN                >> $(@D)/qtdirs.out

  This really needs some comments to explain what it does.

  Also, it's nicer to keep a template in package/python-pyqt and sed-ing 
it to the build directory.

> +
> +    ( cd $(@D); \
> +	echo "TARGET_DIR=$(TARGET_DIR)" \
> +	echo "HOST_DIR=$(HOST_DIR)" \
> +	echo "BUILD_DIR=$(BUILD_DIR)" \
> +	echo "PyQT Configuring Target DIR=`pwd`"; \

  That's a pretty weird echo... And anyway not needed.

> +	PATH=$$PATH:$(HOST_DIR)/usr/bin \

  Use TARGET_CONFIGURE_OPTS.

> +	CROSS_SIPCONFIG=$(BUILD_DIR)/sip-$(SIP_VERSION)/ \

  Hm, we don't like referring to another build dir. Is it possible to 
install whatever is needed somewhere in $(HOST_DIR) and refer to that?

> +	QMAKESPEC=$(BUILD_DIR)/qt-$(QT_VERSION)/mkspecs/qws/linux-$(QT_EMB_PLATFORM)-g++ \
> +	LD_LIBRARY_PATH=$(HOST_DIR)/lib $(HOST_DIR)/usr/bin/python configure.py \

  Is LD_LIBRARY_PATH really needed?

> +		-b $(TARGET_DIR)/usr/bin \
> +		-d $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages \
> +		-l $(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR)  \
> +		-m $(STAGING_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/config \
> +		-q $(HOST_DIR)/usr/bin/qmake \
> +		-v $(TARGET_DIR)/usr/share/sip/PyQt4 \
> +		-w --confirm-license \
> +    )
> +endef
> +
> +define PYQT_INSTALL_TARGET_CMDS
> +# TODO copy only needed files  DESTDIR=

  Don't leave comments from your drafts lingering around. If there are 
todos, mention them in your commit message.

> +    PATH="$(PATH):$(HOST_DIR)/usr/bin"  $(MAKE1) install -C $(@D)

  Use the same environment as above.

> +    touch $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages/PyQt4/__init__.py

  Why is this needed?

> +endef
> +
> +$(eval $(autotools-package))

  Again, it's not really an autotools package.


  Regards,
  Arnout

> --
> 1.8.3.2
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
>
>


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

  reply	other threads:[~2013-10-17 23:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-17 11:27 [Buildroot] [PATCH] Add packages sip and PyQt Sergey Kostanbaev
2013-10-17 23:58 ` Arnout Vandecappelle [this message]
2013-10-18  6:26   ` sergey kostanbaev

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=526079B7.4060502@mind.be \
    --to=arnout@mind.be \
    --cc=buildroot@busybox.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.