(→Preparation) |
|||
| (18 intermediate revisions not shown) | |||
| Line 4: | Line 4: | ||
== Preparation == | == Preparation == | ||
The textures is one example of Qt demo and included in qt-examples package. The project is at /usr/lib/qt4/example/opengl/textures. | The textures is one example of Qt demo and included in qt-examples package. The project is at /usr/lib/qt4/example/opengl/textures. | ||
| - | * Copy it to a separate folder $workspace as | + | * Copy it to a separate folder $workspace as a stand-alone project. You can do it either in [[SDK/Docs/1.0/Building a MeeGo chroot on Linux|MeeGo SDK chroot]] or normal Linux machine with qt-examples installed. |
cp -a /usr/lib/qt4/examples/opengl/textures $workspace/textures-0.0.1 | cp -a /usr/lib/qt4/examples/opengl/textures $workspace/textures-0.0.1 | ||
cd $workspace/textures-0.0.1 | cd $workspace/textures-0.0.1 | ||
| - | * Add an icon for the | + | * Add an icon for the application. We reuse an image inside the project as the application icon. |
cp images/side6.png textures.png | cp images/side6.png textures.png | ||
| Line 39: | Line 39: | ||
#sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS textures.pro images | #sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS textures.pro images | ||
#sources.path = $$[QT_INSTALL_EXAMPLES]/opengl/textures | #sources.path = $$[QT_INSTALL_EXAMPLES]/opengl/textures | ||
| - | target.path = | + | target.path = $$[install_prefix]/bin |
icon.files = textures.png | icon.files = textures.png | ||
| - | icon.path = | + | icon.path = $$[install_prefix]/share/icons |
desktop.files = textures.desktop | desktop.files = textures.desktop | ||
| - | desktop.path = | + | desktop.path = $$[install_prefix]/share/applications |
INSTALLS += target icon desktop | INSTALLS += target icon desktop | ||
| - | * If you want to test before packaging, you can build and debug it in MeeGo SDK chroot. You can refer to [ | + | * If you want to test before packaging, you can build and debug it in the MeeGo SDK chroot. You can refer to [[SDK/Docs/1.0/Hello_World_-_MeeGo_x86_development_on_Linux|Hello World]] for an excmple of building in the MeeGo SDK chroot. |
| - | qmake | + | qmake PREFIX=/usr |
make | make | ||
make install | make install | ||
| Line 64: | Line 64: | ||
yum install python-cheetah | yum install python-cheetah | ||
yum install spectacle | yum install spectacle | ||
| + | |||
| + | * If you are behind proxy then before running the above commands, | ||
| + | export http_proxy=http://proxy_server:port | ||
* On Linux Host machine, you can refer to [http://wiki.meego.com/Spectacle#Installation Spectacle Installation]. | * On Linux Host machine, you can refer to [http://wiki.meego.com/Spectacle#Installation Spectacle Installation]. | ||
| Line 95: | Line 98: | ||
Builder: none | Builder: none | ||
Files: | Files: | ||
| - | - | + | - "%{_bindir}/textures" |
| - | - | + | - "%{_datadir}/applications/*.desktop" |
| - | - | + | - "%{_datadir}/icons/*.png" |
</pre> | </pre> | ||
| Line 109: | Line 112: | ||
specify textures.yaml | specify textures.yaml | ||
The generated $workspace/textures.spec file is: | The generated $workspace/textures.spec file is: | ||
| + | <pre> | ||
| + | # | ||
| + | # Do not Edit! Generated by: | ||
| + | # spectacle version 0.15 | ||
| + | # | ||
| + | # >> macros | ||
| + | # << macros | ||
| - | + | Name: textures | |
| - | + | Summary: Qt Demo - OpenGL Textures | |
| - | + | Version: 0.0.1 | |
| - | + | Release: 1 | |
| - | + | Group: Amusements/Graphics | |
| - | + | License: LGPLv2.1 | |
| - | + | URL: http://qt.nokia.com | |
| - | + | Source0: %{name}-%{version}.tar.bz2 | |
| - | + | Source100: textures.yaml | |
| - | + | Requires(post): desktop-file-utils | |
| - | + | Requires(post): /bin/touch | |
| - | + | Requires(postun): desktop-file-utils | |
| - | + | BuildRequires: pkgconfig(QtCore) >= 4.6.0 | |
| - | + | BuildRequires: pkgconfig(QtOpenGL) | |
| - | + | BuildRequires: pkgconfig(QtGui) | |
| - | + | BuildRequires: desktop-file-utils | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | %description | |
| - | + | Qt Demo OpenGL Textures | |
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| + | %prep | ||
| + | %setup -q -n %{name}-%{version} | ||
| + | |||
| + | # >> setup | ||
| + | # << setup | ||
| + | |||
| + | %build | ||
| + | # >> build pre | ||
| + | # << build pre | ||
| + | |||
| + | |||
| + | |||
| + | # >> build post | ||
| + | # << build post | ||
| + | %install | ||
| + | rm -rf %{buildroot} | ||
| + | # >> install pre | ||
| + | # << install pre | ||
| + | |||
| + | # >> install post | ||
| + | # << install post | ||
| + | desktop-file-install --delete-original \ | ||
| + | --dir %{buildroot}%{_datadir}/applications \ | ||
| + | %{buildroot}%{_datadir}/applications/* | ||
| + | |||
| + | |||
| + | |||
| + | %post | ||
| + | /bin/touch --no-create %{_datadir}/icons/hicolor || : | ||
| + | %{_bindir}/gtk-update-icon-cache \ | ||
| + | --quiet %{_datadir}/icons/hicolor 2> /dev/null|| : | ||
| + | update-desktop-database %{_datadir}/applications &> /dev/null || : | ||
| + | |||
| + | %postun | ||
| + | /bin/touch --no-create %{_datadir}/icons/hicolor || : | ||
| + | %{_bindir}/gtk-update-icon-cache \ | ||
| + | --quiet %{_datadir}/icons/hicolor 2> /dev/null|| : | ||
| + | update-desktop-database %{_datadir}/applications &> /dev/null || : | ||
| + | |||
| + | |||
| + | %files | ||
| + | %defattr(-,root,root,-) | ||
| + | %{_bindir}/textures | ||
| + | %{_datadir}/applications/*.desktop | ||
| + | %{_datadir}/icons/*.png | ||
| + | # >> files | ||
| + | # << files | ||
| + | </pre> | ||
| + | |||
| + | * Modify the textures.spec to add qt build in "build pre" and "install post" sections. | ||
| + | Note: In textures.yaml, we put "none" for the "Builder" option since the spectacle v0.15 does not support qt build well so we have to manually change the textures.spec. That limitation has been fixed in latest spectacle, which however is not included in MeeGo 1.0. | ||
| + | |||
| + | <pre> | ||
| + | # >> build pre | ||
| + | export PATH=/usr/lib/qt4/bin:$PATH | ||
| + | qmake PREFIX=%{_prefix} | ||
| + | # << build pre | ||
| + | </pre> | ||
| + | <pre> | ||
| + | # >> install post | ||
| + | make INSTALL_ROOT=%{buildroot}/usr install | ||
| + | # << install post | ||
| + | </pre> | ||
== Build rpm in MeeGo SDK chroot == | == Build rpm in MeeGo SDK chroot == | ||
For application developers, they may want to create package directly from the [http://TBD MeeGo SDK chroot] environment. It's quite easy to use rpmbuild to do that. | For application developers, they may want to create package directly from the [http://TBD MeeGo SDK chroot] environment. It's quite easy to use rpmbuild to do that. | ||
| - | * Enter the chroot (see [[Getting started with the MeeGo SDK for Linux]]) | + | * Enter the chroot (see [[SDK/Docs/1.0/Getting started with the MeeGo SDK for Linux]]) |
* Install rpmbuild and MeeGo rpm build configuration | * Install rpmbuild and MeeGo rpm build configuration | ||
| - | zypper install | + | zypper install rpm-build |
zypper install meego-rpm-config | zypper install meego-rpm-config | ||
| Line 228: | Line 237: | ||
* Fedora 10,11,12 | * Fedora 10,11,12 | ||
* openSUSE(s) | * openSUSE(s) | ||
| - | * xUbuntu 8.10/9.04/9.10 | + | * xUbuntu 8.10/9.04/9.10/10.04 |
* Debian 5.0 | * Debian 5.0 | ||
* Create rpm package with build and spec file | * Create rpm package with build and spec file | ||
| - | sudo build --repository http://repo.meego.com/MeeGo/ | + | sudo build --repository http://repo.meego.com/MeeGo/releases/1.1/core/repos/ia32/packages/ --arch i686 textures.spec |
The packages will be generated at /var/tmp/build-root/home/abuild/rpmbuild/RPMS/ and /var/tmp/build-root/home/abuild/rpmbuild/SRPMS/ | The packages will be generated at /var/tmp/build-root/home/abuild/rpmbuild/RPMS/ and /var/tmp/build-root/home/abuild/rpmbuild/SRPMS/ | ||
You may configure your http_proxy to make sure the repo can be accessed. | You may configure your http_proxy to make sure the repo can be accessed. | ||
| Line 239: | Line 248: | ||
== Verify the rpm package == | == Verify the rpm package == | ||
The rpm package can be installed on MeeGo devices or MeeGo SDK simulator directly. Copy the rpm to target device or simulator and run: | The rpm package can be installed on MeeGo devices or MeeGo SDK simulator directly. Copy the rpm to target device or simulator and run: | ||
| - | + | zypper --no-gpg-checks install textures-0.0.1-1.i586.rpm | |
| + | |||
| + | Then you can find QtDemoTextures in applications under ''Programming''. It's ready to be distributed. | ||
| - | + | [[Category:SDK]] | |
| + | [[Category:Packaging]] | ||
| + | [[Category:Tutorial]] | ||
| + | [[Category:Meego-1.0]] | ||
Contents |
This page will create a MeeGo rpm package from an existing qt project - an OpenGL application called "textures" in qt examples. The original project is just a qt example project and has no icon and can not be launched from MeeGo UI. We will make it more like a stand alone application which can be launched from MeeGo applications panel and create a rpm package which can be installed on MeeGo device.
The textures is one example of Qt demo and included in qt-examples package. The project is at /usr/lib/qt4/example/opengl/textures.
cp -a /usr/lib/qt4/examples/opengl/textures $workspace/textures-0.0.1 cd $workspace/textures-0.0.1
cp images/side6.png textures.png
vi textures.desktop
with following contents:
[Desktop Entry] Name=QtDemoTextures Comment=Qt Demo Textures Exec=textures Categories=Development; Icon=textures Type=Application Terminal=false StartupNotify=true
vi textures.pro
The contents will be:
HEADERS = glwidget.h \
window.h
SOURCES = glwidget.cpp \
main.cpp \
window.cpp
RESOURCES = textures.qrc
QT += opengl
# install
#target.path = $$[QT_INSTALL_EXAMPLES]/opengl/textures
#sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS textures.pro images
#sources.path = $$[QT_INSTALL_EXAMPLES]/opengl/textures
target.path = $$[install_prefix]/bin
icon.files = textures.png
icon.path = $$[install_prefix]/share/icons
desktop.files = textures.desktop
desktop.path = $$[install_prefix]/share/applications
INSTALLS += target icon desktop
qmake PREFIX=/usr make make install
make distclean cd .. tar jcvf textures-0.0.1.tar.bz2 textures-0.0.1
MeeGo recommends to use Spectacle to either create MeeGo spec file or convert existing spec file to MeeGo spec file.
yum install python-cheetah yum install spectacle
export http_proxy=http://proxy_server:port
Spectacle uses a package meta-data file as the input to generate MeeGo spec file. The meta-data file is in YAML format. Spectacle defines specific Syntax of Spectacle YAML.
vi $workspace/textures.yaml
with the following content:
Name: textures
Summary: Qt Demo - OpenGL Textures
Version: 0.0.1
Release: 1
Group: Development/Tools
License: LGPLv2.1
URL: http://qt.nokia.com
Sources:
- "%{name}-%{version}.tar.bz2"
Description: Qt Demo OpenGL Textures
PkgConfigBR:
- QtCore >= 4.6.0
- QtOpenGL
- QtGui
Configure: none
Builder: none
Files:
- "%{_bindir}/textures"
- "%{_datadir}/applications/*.desktop"
- "%{_datadir}/icons/*.png"
spec2spectacle package_name.spec
With the YAML file, the spec file can be easily generated:
specify textures.yaml
The generated $workspace/textures.spec file is:
#
# Do not Edit! Generated by:
# spectacle version 0.15
#
# >> macros
# << macros
Name: textures
Summary: Qt Demo - OpenGL Textures
Version: 0.0.1
Release: 1
Group: Amusements/Graphics
License: LGPLv2.1
URL: http://qt.nokia.com
Source0: %{name}-%{version}.tar.bz2
Source100: textures.yaml
Requires(post): desktop-file-utils
Requires(post): /bin/touch
Requires(postun): desktop-file-utils
BuildRequires: pkgconfig(QtCore) >= 4.6.0
BuildRequires: pkgconfig(QtOpenGL)
BuildRequires: pkgconfig(QtGui)
BuildRequires: desktop-file-utils
%description
Qt Demo OpenGL Textures
%prep
%setup -q -n %{name}-%{version}
# >> setup
# << setup
%build
# >> build pre
# << build pre
# >> build post
# << build post
%install
rm -rf %{buildroot}
# >> install pre
# << install pre
# >> install post
# << install post
desktop-file-install --delete-original \
--dir %{buildroot}%{_datadir}/applications \
%{buildroot}%{_datadir}/applications/*
%post
/bin/touch --no-create %{_datadir}/icons/hicolor || :
%{_bindir}/gtk-update-icon-cache \
--quiet %{_datadir}/icons/hicolor 2> /dev/null|| :
update-desktop-database %{_datadir}/applications &> /dev/null || :
%postun
/bin/touch --no-create %{_datadir}/icons/hicolor || :
%{_bindir}/gtk-update-icon-cache \
--quiet %{_datadir}/icons/hicolor 2> /dev/null|| :
update-desktop-database %{_datadir}/applications &> /dev/null || :
%files
%defattr(-,root,root,-)
%{_bindir}/textures
%{_datadir}/applications/*.desktop
%{_datadir}/icons/*.png
# >> files
# << files
Note: In textures.yaml, we put "none" for the "Builder" option since the spectacle v0.15 does not support qt build well so we have to manually change the textures.spec. That limitation has been fixed in latest spectacle, which however is not included in MeeGo 1.0.
# >> build pre
export PATH=/usr/lib/qt4/bin:$PATH
qmake PREFIX=%{_prefix}
# << build pre
# >> install post
make INSTALL_ROOT=%{buildroot}/usr install
# << install post
For application developers, they may want to create package directly from the MeeGo SDK chroot environment. It's quite easy to use rpmbuild to do that.
zypper install rpm-build zypper install meego-rpm-config
cp textures-0.0.1.tar.bz2 ~/rpmbuild/SOURCES/ cp textures.yaml ~/rpmbuild/SOURCES/ cp textures.spec ~/rpmbuild/SPECS/
cd ~/rpmbuild/SPECS rpmbuild -ba textures.spec
Then the rpm packages will be generated at:
~/rpmbuild/RPMS/i586/textures-0.0.1-1.i586.rpm ~/rpmbuild/SRPMS/textures-0.0.1-1.src.rpm
For people who do build or release, they may just want to build packages without the MeeGo SDK chroot environment. The following steps are useful for them.
Under Linux, a tool called "build" is used to create rpm packages directly from spec file.
* MeeGo * Fedora 10,11,12 * openSUSE(s) * xUbuntu 8.10/9.04/9.10/10.04 * Debian 5.0
sudo build --repository http://repo.meego.com/MeeGo/releases/1.1/core/repos/ia32/packages/ --arch i686 textures.spec
The packages will be generated at /var/tmp/build-root/home/abuild/rpmbuild/RPMS/ and /var/tmp/build-root/home/abuild/rpmbuild/SRPMS/ You may configure your http_proxy to make sure the repo can be accessed.
export http_proxy=http://proxy_server:port
The rpm package can be installed on MeeGo devices or MeeGo SDK simulator directly. Copy the rpm to target device or simulator and run:
zypper --no-gpg-checks install textures-0.0.1-1.i586.rpm
Then you can find QtDemoTextures in applications under Programming. It's ready to be distributed.