FreeTDS

Michael Schwendt fedora at wir-sind-cool.org
Fri Dec 17 23:17:38 UTC 2004


On Fri, 17 Dec 2004 20:33:00 +0100, Stefan Sonnenberg-Carstens wrote:

> I got rpms compiled under FC3.
> They are available under
> 
> http://www.coolspot.de/fedora-devel/
> 
> Test them, please.

The src.rpm fails to build on FC3. Try to clean up your installation
to find missing build dependencies:

  http://fedoraproject.org/wiki/HOWTOFindMissingBuildRequires


Other packaging mistakes after a brief look. In random order:

 * Main package must not contain files %_libdir/*.so
   All these belong into the -devel package. Same applies to the
   -unixodbc sub package. It must not include %_libdir/*.so either.
   These files are needed at build-time only.


 * rpmlint reports a few relevant things:

E: freetds summary-too-long FreeTDS is a free re-implementation of the TDS (Tabular DataStream) protocol that is used by Sybase and Microsoft for their database products.

 => better:  A free re-implementation of the TDS protocol

 Everything longer than ~70 characters ought to be put into the
 package description.


W: freetds no-url-tag

 => You've put that into "Vendor:" field instead. Change that into
    "URL: http://www.freetds.org" -- the vendor is the package vendor
    and usually will be substituted by a build system automatically.


E: freetds no-signature

 => minor issue for a test package - you didn't sign it with
    your GPG key


W: freetds strange-permission freetds.spec 0664

 => also unimportant, but a user who would extract the file into
    /tmp would end up with a group-writable file


W: freetds obsolete-tag Copyright

 => should be "License: LGPL" not "Copyright: LGPL"


> %define	name	freetds
> %define	version	0.62.4
>  
> Name: %{name} 
> Version: %{version} 

That construct is redundant. The %name and %version macros are defined
by "Name:" and "Version:" already.


> %package devel 
> Requires: freetds = %{version}

Better would be:

  Requires: freetds = %{version}-%release

Why? Imagine you apply a patch which patches the header files or other
files in the -devel package or which fixes a bug in the main package.
You want main package release and -devel package release to stay in
sync. "yum update freetds-devel" should pull in the updated "freetds"
main package, too.


> %post 
> /sbin/ldconfig 

Better:

  %post -p /sbin/ldconfig
  %postun -p /sbin/ldconfig

Why? It adds an automatic dependency on /sbin/ldconfig and updates the
run-time linker cache also after package un-installation, when the
freetds libraries are gone. Your %post script would be executed in
/bin/sh.


> %configure --with-tdsver=4.2 --prefix=/usr --with-unixodbc=/usr/ --sysconfdir=%{_sysconfdir}

The %configure macro sets --prefix=%_prefix and --syconfdir=%_sysconfdir
already. You can trim the line a bit. :)


> %doc AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README TODO 

COPYING is GPL, which is not what's specified in "License:" field.
File COPYING.LIB would be the LGPL and should be included.
The INSTALL file contains generic instructions, which are irrelevant
to the package user.


> %{_libdir}/libct.so*

Files with such non-unique names will likely cause conflicts in
%_libdir in the future, when more and more packages share that
directory and more projects use similar short names. This topic will
come back in the near future as it will be necessary more often to
install such libraries into %_libdir/%name/ and add that path to the
run-time linker's search path list.

Same with regard to some of the header names in %_includedir:

> -rw-r--r-- root  root      3036 /usr/include/bkpublic.h
> -rw-r--r-- root  root     22514 /usr/include/cspublic.h
> -rw-r--r-- root  root      1251 /usr/include/cstypes.h
> -rw-r--r-- root  root      4492 /usr/include/ctpublic.h
> -rw-r--r-- root  root      2207 /usr/include/dblib.h
> -rw-r--r-- root  root      1096 /usr/include/sqldb.h
> -rw-r--r-- root  root      1119 /usr/include/sqlfront.h


> %package unixodbc
> Requires: freetds = %{version}, unixODBC >= 2.2.9

Fedora Core 3 includes unixODBC 2.2.9, the dependency on libodbcinst.so.1
is automatic, so the explicit dependency on a package called
unixODBC doesn't add any value. Be careful with "explicit Requires".
If Fedora Core 4 moved libodbcinst.so.1 into a package with a different
name, this dependency would break.

With regard to the freetds dependency, same as above.




More information about the fedora-devel-list mailing list