Bug 807383 - Review Request: PythonMagick - Interface to ImageMagick for Python written in C++ [NEEDINFO]
Review Request: PythonMagick - Interface to ImageMagick for Python written in...
Status: CLOSED DEFERRED
Product: Fedora
Classification: Fedora
Component: Package Review (Show other bugs)
rawhide
All Linux
unspecified Severity medium
: ---
: ---
Assigned To: Nobody's working on this, feel free to take it
Fedora Extras Quality Assurance
:
Depends On:
Blocks: FE-DEADREVIEW
  Show dependency treegraph
 
Reported: 2012-03-27 11:59 EDT by philip.worrall
Modified: 2015-07-21 10:03 EDT (History)
8 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2015-07-21 09:27:28 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
tibbs: needinfo? (philip.worrall)


Attachments (Terms of Use)

  None (edit)
Description philip.worrall 2012-03-27 11:59:00 EDT
Spec URL: http://www.freefilehosting.net/pythonmagick 
SRPM URL: http://www.freefilehosting.net/pythonmagick-097-1fc15src_1 
Description: PythonMagick is an object-oriented Python interface to ImageMagick
Comment 1 philip.worrall 2012-03-27 12:26:57 EDT
Hello,

This is my first RPM package for Fedora.

The rpm provides an interface for ImageMagick for Python programs. Its _not_ to be confused with python-magic which is used by the file command to see what type of file a given filename is. As far as I can tell, there is no RPM package of Python ImageMagick for fedora, although it has been packaged for debian [1]

I have built the package on Fedora 15 x64-86 since this is the only system i have access to. The source is licence under the ImageMagick licence. I have named the package "PythonMagick" as this corresponds with the naming used by upstream [2]. I ran the rpmlint tool on the .SPEC file and found no warnings or errors.

Regards,


[1] http://packages.debian.org/search?keywords=python-pythonmagick
[2] http://www.imagemagick.org/script/api.php#python
Comment 2 Michael Scherer 2012-03-27 17:14:05 EDT
Hi,

if this is your first rpm for fedora, you should find a sponsor 
see http://fedoraproject.org/wiki/How_to_get_sponsored_into_the_packager_group .

also, I would recommend reading http://fedoraproject.org/wiki/Packaging:Python to make sure that your package follow the policy.
Comment 3 Jos de Kloe 2012-09-16 08:29:15 EDT
rpmlint on the srpm reports these errors/warnings on some
textual issues, please fix them:

PythonMagick.src: W: name-repeated-in-summary C PythonMagick
PythonMagick.src: E: description-line-too-long C PythonMagick is an object-oriented interface to ImageMagick which makes it possible
PythonMagick.src: E: description-line-too-long C to access the powerful image manipulation features of ImageMagick from Python applications.
PythonMagick.src: E: description-line-too-long C Install this library if you want to create, edit, compose, transform or convert images

rpmlint on the generated rpm file gives these additionals warnings:

PythonMagick.x86_64: W: private-shared-object-provides /usr/lib64/python2.7/site-packages/PythonMagick/_PythonMagick.so _PythonMagick.so()(64bit)
PythonMagick.x86_64: W: devel-file-in-non-devel-package /usr/lib64/python2.7/site-packages/PythonMagick/_PythonMagick.a

Avoiding a private shared object to be "provided" by an rpm can be done by adding a filter like this:

%{?filter_setup:
%filter_provides_in %{python_sitearch}.*\.so$
%filter_setup
}

see: https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering

a library file is not needed to run the python module.
Therefore _PythonMagick.a should be packed into a separate devel package

see: https://fedoraproject.org/wiki/Packaging/Guidelines#DevelPackages
"""
When in doubt as to whether a file belongs in the base package or in -devel, packagers should consider whether the file is necessary to be present for a user to use or execute the functionality in the base package properly, or if it is only necessary for development. If it is only necessary for development, it must go into a -devel package. 
"""

Packages must NOT contain any .la libtool archives, these must be removed
in the spec if they are built.

Therefore please remove: _PythonMagick.la 

see: https://fedoraproject.org/wiki/Packaging/ReviewGuidelines
list of "MUST" items.
Comment 4 Pierre-YvesChibon 2012-10-01 15:38:11 EDT
Are you still interested in getting this package into the repo (and thus becoming packager) ?
Comment 5 philip.worrall 2012-10-11 19:22:52 EDT
Yes Im still interested, just reading the docs again before I post an updated spec file
Comment 6 philip.worrall 2012-10-12 07:28:28 EDT
I have taken into account the previous comments and corrected the SPEC file. Please find attached src.rpm and spec file.

http://dl.dropbox.com/u/32828830/Fedora/PythonMagick-0.9.7-2.fc16.src.rpm

http://dl.dropbox.com/u/32828830/Fedora/PythonMagick.spec
Comment 7 Jos de Kloe 2012-10-15 17:07:11 EDT
Thanks for your updated version.
Here is my (informal) review:

On my Fedora17 system "rpmbuild -ba' creates 4 rpms now:
    PythonMagick-0.9.7-2.fc17.src.rpm
    PythonMagick-0.9.7-2.fc17.x86_64.rpm
    PythonMagick-devel-0.9.7-2.fc17.x86_64.rpm
    PythonMagick-debuginfo-0.9.7-2.fc17.x86_64.rpm

rplint results:

rpmlint PythonMagick-0.9.7-2.fc17.src.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

rpmlint  PythonMagick-0.9.7-2.fc17.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

rpmlint  PythonMagick-devel-0.9.7-2.fc17.x86_64.rpm
PythonMagick-devel.x86_64: W: no-documentation
1 packages and 0 specfiles checked; 0 errors, 1 warnings.

rpmlint  PythonMagick-debuginfo-0.9.7-2.fc17.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

The warning on the devel package is acceptable according to
the "no-documentation" section in
https://fedoraproject.org/wiki/Common_Rpmlint_issues


MUST items as mentioned in:
  https://fedoraproject.org/wiki/Packaging/ReviewGuidelines

key:
[+] OK
[.] OK, not applicable
[X] needs work

[+] MUST: rpmlint must be run on the source rpm and all binary rpms the build produces. The output should be posted in the review.[1]
[+] MUST: The package must be named according to the Package Naming Guidelines .
[+] MUST: The spec file name must match the base package %{name}, in the format %{name}.spec unless your package has an exemption. [2] .
[+] MUST: The package must meet the Packaging Guidelines .
[+] MUST: The package must be licensed with a Fedora approved license and meet the Licensing Guidelines .
[+] MUST: The License field in the package spec file must match the actual license. [3]
[+] MUST: If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package must be included in %doc.[4]
[+] MUST: The spec file must be written in American English. [5]
[+] MUST: The spec file for the package MUST be legible. [6]
[+] MUST: The sources used to build the package must match the upstream source, as provided in the spec URL. Reviewers should use sha256sum for this task as it is used by the sources file once imported into git. If no upstream URL can be specified for this package, please see the Source URL Guidelines for how to deal with this.
[+] MUST: The package MUST successfully compile and build into binary rpms on at least one primary architecture. [7]
[.] MUST: If the package does not successfully compile, build or work on an architecture, then those architectures should be listed in the spec in ExcludeArch. Each architecture listed in ExcludeArch MUST have a bug filed in bugzilla, describing the reason that the package does not compile/build/work on that architecture. The bug number MUST be placed in a comment, next to the corresponding ExcludeArch line. [8]
[+] MUST: All build dependencies must be listed in BuildRequires, except for any that are listed in the exceptions section of the Packaging Guidelines ; inclusion of those as BuildRequires is optional. Apply common sense.
[.] MUST: The spec file MUST handle locales properly. This is done by using the %find_lang macro. Using %{_datadir}/locale/* is strictly forbidden.[9]
[.] MUST: Every binary RPM package (or subpackage) which stores shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in %post and %postun. [10]
[+] MUST: Packages must NOT bundle copies of system libraries.[11]
[.] MUST: If the package is designed to be relocatable, the packager must state this fact in the request for review, along with the rationalization for relocation of that specific package. Without this, use of Prefix: /usr is considered a blocker. [12]
[+] MUST: A package must own all directories that it creates. If it does not create a directory that it uses, then it should require a package which does create that directory. [13]
[+] MUST: A Fedora package must not list a file more than once in the spec file's %files listings. (Notable exception: license texts in specific situations)[14]
[+] MUST: Permissions on files must be set properly. Executables should be set with executable permissions, for example. [15]
[+] MUST: Each package must consistently use macros. [16]
[+] MUST: The package must contain code, or permissable content. [17]
[.] MUST: Large documentation files must go in a -doc subpackage. (The definition of large is left up to the packager's best judgement, but is not restricted to size. Large can refer to either size or quantity). [18]
[+] MUST: If a package includes something as %doc, it must not affect the runtime of the application. To summarize: If it is in %doc, the program must run properly if it is not present. [18]
[.] MUST: Static libraries must be in a -static package. [19]
[+] MUST: Development files must be in a -devel package. [20]
[+] MUST: In the vast majority of cases, devel packages must require the base package using a fully versioned dependency: Requires: %{name}%{?_isa} = %{version}-%{release} [21]
[+] MUST: Packages must NOT contain any .la libtool archives, these must be removed in the spec if they are built.[19]
[.] MUST: Packages containing GUI applications must include a %{name}.desktop file, and that file must be properly installed with desktop-file-install in the %install section. If you feel that your packaged GUI application does not need a .desktop file, you must put a comment in the spec file with your explanation. [22]
[.] MUST: Packages must not own files or directories already owned by other packages. The rule of thumb here is that the first package to be installed should own the files or directories that other packages may rely upon. This means, for example, that no package in Fedora should ever share ownership with any of the files or directories owned by the filesystem or man package. If you feel that you have a good reason to own a file or directory that another package owns, then please present that at package review time. [23]
[+] MUST: All filenames in rpm packages must be valid UTF-8. [24]

All MUST items seem fine to me.

The package builds fine in mock using:
mock -r fedora-17-x86_64 --rebuild PythonMagick-0.9.7-2.fc17.src.rpm

Also, the package installs and runs fine in the mock chroot dir using:

mock -r fedora-17-x86_64 --shell
cd  /builddir/build/RPMS/
rpm -i PythonMagick-0.9.7-2.fc17.x86_64.rpm
cd
python
>>> import PythonMagick
works fine.

This python snippit from the README file also runs fine:

  from PythonMagick import *
  
  img=Image('30x30','red')
  img.write('test1.png')
  data=file('test1.png','rb').read()
  img=Image(Blob(data))
  img.write('test2.png')
  print "now you should have two png files"

generated png files seem ok.
Comment 8 Jos de Kloe 2012-12-07 16:41:31 EST
As mentioned earlier, my review is an informal one, meaning that I do not have the rights to sponsor you. You still need to find a sponsor to allow the package to be accepted into Fedora. The best way is to introduce yourself on the devel mailinglist (assuming you did not yet do this).

The procedure for this is detailed here:
https://fedoraproject.org/wiki/Join_the_package_collection_maintainers
Comment 9 Michael Schwendt 2012-12-16 06:25:03 EST
A few mistakes here, including one or two eyebrow-raisers. Let's start with the reviews in comment 3 and comment 7:


> [+] MUST: The package must meet the Packaging Guidelines .

Please be careful here. Basically, this MUST item is the hardest one to acknowledge with a brief '[+]', since that means you've checked _everything_ written on the following hierarchy of Wiki pages:
https://fedoraproject.org/wiki/Packaging:Guidelines

Not only would you need to try to find a section in the guidelines for every line of the spec file, you would also need to do that for the built rpms and the build job output (as created by Mock or plain rpmbuild).


> [.] MUST: Static libraries must be in a -static package. [19]
> 
> [.] OK, not applicable

Cannot be true, because the reviewed package places a static lib in the -devel packages:

| %files devel
| %{python_sitearch}/%{name}/_PythonMagick.a

Please revisit
https://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries
and comment on it, if you disagree or if there are questions.


> [+] MUST: Development files must be in a -devel package. [20]

PythonMagick is a Python module to be used within Python software. Leaving aside the Static Library guidelines for a moment, how does the _PythonMagick.a library fit into all this?

$ rpmls -p PythonMagick-devel-0.9.7-2.fc18.x86_64.rpm
-rw-r--r--  /usr/lib64/python2.7/site-packages/PythonMagick/_PythonMagick.a



> [+] MUST: In the vast majority of cases, devel packages must
> require the base package using a fully versioned dependency:
> Requires: %{name}%{?_isa} = %{version}-%{release} [21]

The reviewed package does
  Requires:	%{name} = %{version}-%{release}
so %_isa is not used. Minor issue only, but can lead to trouble in some situations.


> %description devel
> 
> %{name}-devel contains the library links you'll need to develop 
> Python ImageMagick applications. 

This description would deserve an explanation. Specifically: Which "links"? And
when are they needed?


> Group:		Development/Libraries

"Development/Languages" is very common for Python modules.


> Requires:	boost-python
> Requires:	ImageMagick-c++ >= 6.4
> Requires:	python >= 2.4

https://fedoraproject.org/wiki/Packaging:Guidelines#Explicit_Requires

In short: Add comments to the spec file giving the rationale for each of those explicit dependencies or drop them as appropriate. The section in the guidelines may read as if it's specific to shared libs (here the "ImageMagick-c++" explicit Requires), but basically it applies to all other explicit Requires, too.

> Requires:	python >= 2.4

Currently the package automatically depends on

  python(abi) = 2.7
  libpython2.7.so.1.0()(64bit)

and explicitly on

  python >= 2.4

so which is right? Preferably, you drop the explicit dep on python >= 2.4, since the automatic dependency is on Python 2.7.


> /bin/sh ./libtool --tag=CXX   --mode=link g++  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=generic -DBOOST_PYTHON_DYNAMIC_LIB -avoid-version -module -L/usr/lib -Wl,-z,relro  -o _PythonMagick.la -rpath /usr/lib64/python2.7/site-packages/PythonMagick  pythonmagick_src/libpymagick.la helpers_src/libhelper.la -L/usr/lib -lboost_python -lMagick++ -lMagickCore    -lpython2.7 
> 

This is a line from the x86_64 build job output. The '-L/usr/lib' indicates that somewhere an incorrect libdir value, perhaps a hardcoded one, is used. Tracking down where and telling upstream about it might be worthwhile.
Comment 10 Miroslav Suchý 2015-07-21 09:27:28 EDT
Closing due long inactivity. Feel free to reopen if you want to continue.

Note You need to log in before you can comment on or make changes to this bug.