All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Seiderer <ps.report@gmx.net>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2 1/2] qt5tools: new package
Date: Thu, 4 Feb 2016 21:20:39 +0100	[thread overview]
Message-ID: <20160204212039.461849f4@gmx.net> (raw)
In-Reply-To: <20160203234438.08f631d1@free-electrons.com>

Hello Thomas,

On Wed, 3 Feb 2016 23:44:38 +0100, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:

> Dear Peter Seiderer,
> 
> On Wed,  3 Feb 2016 23:01:10 +0100, Peter Seiderer wrote:
> > - host programs: lconvert, lrelease and lupdate
> 
> Ok, so you say they are host programs, i.e built to be executed on the
> host. It is somewhat weird that they are built by a target package, but
> since it's already the case with the qt5base package providing qmake
> and other tools, I guess that's OK.
> 

Not sure, but I think for a 'real' host-qt5tools package a host-qt5base
package would be needed?

> > diff --git a/package/qt5/qt5tools/Config.in b/package/qt5/qt5tools/Config.in
> > new file mode 100644
> > index 0000000..432f095
> > --- /dev/null
> > +++ b/package/qt5/qt5tools/Config.in
> > @@ -0,0 +1,41 @@
> > +config BR2_PACKAGE_QT5TOOLS
> > +	bool "qt5tools"
> > +	help
> > +	  Qt is a cross-platform application and UI framework for
> > +	  developers using C++.
> > +
> > +	  This package corresponds to the qt5tools module.
> > +
> > +	  http://qt.io
> > +
> > +if BR2_PACKAGE_QT5TOOLS
> > +
> > +config BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS
> > +	bool "Linguist host tools (lconvert, lrelease, lupdate)"
> > +	help
> > +	  This option enables the linguist host tools
> > +	  lconvert, lrelease and lupdate.
> > +
> > +config BR2_PACKAGE_QT5TOOLS_PIXELTOOL
> > +	bool "pixeltool"
> > +	select BR2_PACKAGE_QT5BASE_PNG
> > +        select BR2_PACKAGE_LIBPNG
> 
> This line is not properly indented and is not needed, since

Sorry for the indent mismatch (still missing a good tab/space
highlight config for vim...).

> BR2_PACKAGE_QT5BASE_PNG already selects BR2_PACKAGE_LIBPNG.

O.k., will drop the line...

> 
> It *may* be needed if pixeltool directly calls libpng functions, in
> order to make this dependency clear. But isn't pixeltool only using
> qt5base PNG functions ?

Pixeltools just saves images (hardcoded) as png files...

> 
> > diff --git a/package/qt5/qt5tools/qt5tools.mk b/package/qt5/qt5tools/qt5tools.mk
> > new file mode 100644
> > index 0000000..a849f4c
> > --- /dev/null
> > +++ b/package/qt5/qt5tools/qt5tools.mk
> > @@ -0,0 +1,106 @@
> > +################################################################################
> > +#
> > +# qt5tools
> > +#
> > +################################################################################
> > +
> > +QT5TOOLS_VERSION = $(QT5_VERSION)
> > +QT5TOOLS_SITE = $(QT5_SITE)
> > +QT5TOOLS_SOURCE = qttools-opensource-src-$(QT5BASE_VERSION).tar.xz
> > +
> > +QT5TOOLS_DEPENDENCIES = qt5base
> > +QT5TOOLS_INSTALL_STAGING = YES
> > +
> > +# linguist tools compile conditionally on qtHaveModule(qmldevtools-private)
> > +ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)
> > +QT5TOOLS_DEPENDENCIES += qt5declarative
> > +endif
> 
> linguist tools are built for the host according to what you're saying.
> So how can they use a target package ?

The condition qtHaveModule(qmldevtools-private) is only used to
decide if lupdate will support parsing qml files (via setting
QT_NO_QML define), no linking against target qt5 libs...

> 
> > +define QT5TOOLS_BUILD_CMDS_ALL
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \
> > +		sub-src-qmake_all
> 
> The line break is not really needed here.

O.k, will fix it....

> 
> > +endef
> > +
> > +ifeq ($(BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS),y)
> > +define QT5TOOLS_BUILD_CMDS_LINGUIST_TOOLS
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/linguist/lconvert
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/linguist/lrelease
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/linguist/lupdate
> > +endef
> > +define QT5TOOLS_INSTALL_STAGING_CMDS_LINGUIST_TOOLS
> > +	cp -dpf $(@D)/bin/lconvert $(STAGING_DIR)/usr/bin
> > +	cp -dpf $(@D)/bin/lrelease $(STAGING_DIR)/usr/bin
> > +	cp -dpf $(@D)/bin/lupdate $(STAGING_DIR)/usr/bin
> 
> So they are host tools, but you install them in $(STAGING_DIR) where we
> install only target binaries ? This looks weird.

Did first try to install to $(HOST_DIR)/usr/bin but this breaks
my use case (from .pro file):

    updateqm.input = TRANSLATIONS
    updateqm.output = Languages/${QMAKE_FILE_BASE}.qm
    updateqm.variable_out = PRE_TARGETDEPS
    updateqm.commands = $$[QT_INSTALL_BINS]/lrelease -markuntranslated \"$$LITERAL_HASH\" -idbased ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
    updateqm.CONFIG += no_link
    QMAKE_EXTRA_COMPILERS += updateqm

which works with the prebuild qt5 packages for linux and windows, so
I decided to install to the staging dir, maybe changing the 
QT_INSTALL_BINS path is better?
> 
> Also, the canonical way of installing binaries is:
> 
> 	$(INSTALL) -D -m0755 $(@D)/bin/lconvert $(STAGING_DIR)/usr/bin/lconvert
> 

O.k, will fix...

> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_QT5TOOLS_PIXELTOOL),y)
> > +QT5TOOLS_DEPENDENCIES += libpng
> 
> Really needed ?

O.k., will drop...

> 
> > +define QT5TOOLS_BUILD_CMDS_PIXELTOOL
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/pixeltool
> > +endef
> > +define QT5TOOLS_INSTALL_TARGET_CMDS_PIXELTOOL
> > +	cp -dpf $(@D)/bin/pixeltool $(TARGET_DIR)/usr/bin
> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_QT5TOOLS_QTDIAG),y)
> > +define QT5TOOLS_BUILD_CMDS_QTDIAG
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/qtdiag
> > +endef
> > +define QT5TOOLS_INSTALL_TARGET_CMDS_QTDIAG
> > +	cp -dpf $(@D)/bin/qtdiag $(TARGET_DIR)/usr/bin
> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_QT5TOOLS_QTPATHS),y)
> > +define QT5TOOLS_BUILD_CMDS_QTPATHS
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/qtpaths
> > +endef
> > +define QT5TOOLS_INSTALL_TARGET_CMDS_QTPATHS
> > +	cp -dpf $(@D)/bin/qtpaths $(TARGET_DIR)/usr/bin
> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_QT5TOOLS_QTPLUGININFO),y)
> > +define QT5TOOLS_BUILD_CMDS_QTPLUGININFO
> > +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/qtplugininfo
> > +endef
> > +define QT5TOOLS_INSTALL_TARGET_CMDS_QTDIAG
> > +	cp -dpf $(@D)/bin/qtplugininfo $(TARGET_DIR)/usr/bin
> > +endef
> > +endif
> 
> All this logic looks fairly repetitive. What about instead:
> 
> QT5TOOLS_TOOL_DIRS_$(BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS) += \
> 	linguist/lconvert linguist/lrelease linguist/lupdate
> QT5TOOLS_TOOL_DIRS_$(BR2_PACKAGE_QT5TOOLS_PIXELTOOL) += pixeltool
> QT5TOOLS_TOOL_DIRS_$(BR2_PACKAGE_QT5TOOLS_QTDIAG) += qtdiag
> QT5TOOLS_TOOL_DIRS_$(BR2_PACKAGE_QT5TOOLS_QTPATHS) += qtpaths
> QT5TOOLS_TOOL_DIRS_$(BR2_PACKAGE_QT5TOOLS_QTPLUGINFO) += qtpluginfo
> 
> and then:
> 
> define QT5TOOLS_BUILD_CMDS
> 	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \
> 		sub-src-qmake_all
> 	$(foreach p,$(QT5TOOLS_TOOL_DIRS_y),\
> 		$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/src/$(p)$(sep))
> endef
> 
> And ditto for the installation.

O.k, looks much better, will do...
> 
> You might need to do a special case for the linguist tools, though.
> 

Thanks for review...

Regards, Peter


> Best regards,
> 
> Thomas

  reply	other threads:[~2016-02-04 20:20 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-03 22:01 [Buildroot] [PATCH v2 1/2] qt5tools: new package Peter Seiderer
2016-02-03 22:44 ` Thomas Petazzoni
2016-02-04 20:20   ` Peter Seiderer [this message]
2016-02-04 20:38     ` Thomas Petazzoni
2016-02-04 21:07       ` Peter Seiderer
2016-02-04 21:13         ` Thomas Petazzoni
2016-02-04 21:32           ` Peter Seiderer

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=20160204212039.461849f4@gmx.net \
    --to=ps.report@gmx.net \
    --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.