tags 511680 + patch thanks On Tue, Jan 13, 2009 at 01:23:23PM +0100, Olivier Berger wrote: > > Version 2.1.64 seems is packaged for Ubuntu. > > Please port that packaging to Debian. >
I made some quick and dirty changes to make it build on my Lenny system (with a mix of unstable packages). Here's the resulting interdiff -z soprano_2.1.64+dfsg.1-0ubuntu1.diff.gz soprano_2.1.64+dfsg.1-1.diff.gz Hope this helps,
diff -u soprano-2.1.64+dfsg.1/debian/rules soprano-2.1.64+dfsg.1/debian/rules --- soprano-2.1.64+dfsg.1/debian/rules +++ soprano-2.1.64+dfsg.1/debian/rules @@ -2,10 +2,12 @@ DEB_DH_MAKESHLIBS_ARGS_libsoprano4 = -V'libsoprano4 (>= 2.1.64)' -include /usr/share/cdbs/1/class/kde4.mk +#include /usr/share/cdbs/1/class/kde4.mk +include debian/cdbs/kde.mk build/libsoprano-doc:: - cp /usr/share/qt4/doc/html/qt.tags $(DEB_BUILDDIR)/qt.tags + #cp /usr/share/qt4/doc/html/qt.tags $(DEB_BUILDDIR)/qt.tags + cp qt4.tag $(DEB_BUILDDIR)/qt4.tag cd $(DEB_BUILDDIR) && $(MAKE) apidox install/libsoprano-doc:: diff -u soprano-2.1.64+dfsg.1/debian/changelog soprano-2.1.64+dfsg.1/debian/changelog --- soprano-2.1.64+dfsg.1/debian/changelog +++ soprano-2.1.64+dfsg.1/debian/changelog @@ -1,3 +1,9 @@ +soprano (2.1.64+dfsg.1-1) UNRELEASED; urgency=low + + * Debian version + + -- Olivier Berger <olivier.ber...@it-sudparis.eu> Tue, 13 Jan 2009 13:02:25 +0100 + soprano (2.1.64+dfsg.1-0ubuntu1) jaunty; urgency=low * New upstream release diff -u soprano-2.1.64+dfsg.1/debian/control soprano-2.1.64+dfsg.1/debian/control --- soprano-2.1.64+dfsg.1/debian/control +++ soprano-2.1.64+dfsg.1/debian/control @@ -5,7 +5,7 @@ XSBC-Original-Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Uploaders: Sune Vuorela <deb...@pusling.com>, Ana Beatriz Guerrero Lopez <a...@debian.org>, Armin Berres <trigger+deb...@space-based.de>, Fathi Boudra <f...@debian.org>, Matthew Rosewarne <mrosewa...@inoutbox.com> Build-Depends: cdbs (>= 0.4.52), debhelper (>= 5), cmake (>=2.6.0~), quilt, - libclucene-dev, libqt4-dev (>= 4.4.3-1ubuntu4), librdf0-dev, doxygen, + libclucene-dev, libqt4-dev (>= 4.4.3), librdf0-dev, doxygen, graphviz, kdesdk-scripts Standards-Version: 3.8.0 Homepage: http://soprano.sourceforge.net only in patch2: unchanged: --- soprano-2.1.64+dfsg.1.orig/debian/cdbs/kde.mk +++ soprano-2.1.64+dfsg.1/debian/cdbs/kde.mk @@ -0,0 +1,73 @@ +include /usr/share/cdbs/1/class/cmake.mk +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/patchsys-quilt.mk +include /usr/share/cdbs/1/rules/utils.mk + +# Include default KDE 4 cmake configuration variables +include debian/cdbs/variables.mk +# Pass standard KDE 4 flags to cmake via appropriate CDBS variable +# (DEB_CMAKE_EXTRA_FLAGS) +DEB_CMAKE_EXTRA_FLAGS += $(DEB_CMAKE_KDE4_FLAGS) $(DEB_CMAKE_CUSTOM_FLAGS) + +DEB_COMPRESS_EXCLUDE = .dcl .docbook -license .tag .sty .el + +#DEB_CMAKE_PREFIX = /usr/lib/kde4 +DEB_DH_INSTALL_SOURCEDIR = debian/tmp +#DEB_DH_SHLIBDEPS_ARGS = -l/usr/lib/kde4/lib/ +DEB_KDE_ENABLE_FINAL ?= +#DEB_MAKE_ENVVARS += XDG_CONFIG_DIRS=/etc/xdg XDG_DATA_DIRS=/usr/share +#DEB_STRIP_EXCLUDE = so + +common-build-arch:: debian/stamp-man-pages +debian/stamp-man-pages: + if ! test -d debian/man/out; then mkdir -p debian/man/out; fi + for f in $$(find debian/man -name '*.sgml'); do \ + docbook-to-man $$f > debian/man/out/`basename $$f .sgml`.1; \ + done + for f in $$(find debian/man -name '*.man'); do \ + soelim -I debian/man $$f \ + > debian/man/out/`basename $$f .man`.`head -n1 $$f | awk '{print $$NF}'`; \ + done + touch debian/stamp-man-pages + +clean:: +ifndef THIS_SHOULD_GO_TO_UNSTABLE + #guard against experimental uploads to unstable + dpkg-parsechangelog | grep ^Distribution | grep -q 'experimental\|UNRELEASED' +endif + rm -rf debian/man/out + -rmdir debian/man + rm -f debian/stamp-man-pages + rm -f CMakeCache.txt + + +$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%: + if test -x /usr/bin/dh_desktop; then dh_desktop -p$(cdbs_curpkg) $(DEB_DH_DESKTOP_ARGS); fi + if test -e debian/$(cdbs_curpkg).lintian; then \ + install -p -D -m644 debian/$(cdbs_curpkg).lintian \ + debian/$(cdbs_curpkg)/usr/share/lintian/overrides/$(cdbs_curpkg); \ + fi + if test -e debian/$(cdbs_curpkg).presubj; then \ + install -p -D -m644 debian/$(cdbs_curpkg).presubj \ + debian/$(cdbs_curpkg)/usr/share/bug/$(cdbs_curpkg)/presubj; \ + fi + +binary-install/$(DEB_SOURCE_PACKAGE)-doc-html:: + set -e; \ + for doc in `cd $(DEB_DESTDIR)/usr/share/doc/kde/HTML/en; find . -name index.docbook`; do \ + pkg=$${doc%/index.docbook}; pkg=$${pkg#./}; \ + echo Building $$pkg HTML docs...; \ + mkdir -p $(CURDIR)/debian/$(DEB_SOURCE_PACKAGE)-doc-html/usr/share/doc/kde/HTML/en/$$pkg; \ + cd $(CURDIR)/debian/$(DEB_SOURCE_PACKAGE)-doc-html/usr/share/doc/kde/HTML/en/$$pkg; \ + meinproc4 $(DEB_DESTDIR)/usr/share/doc/kde/HTML/en/$$pkg/index.docbook; \ + done + for pkg in $(DOC_HTML_PRUNE) ; do \ + rm -rf debian/$(DEB_SOURCE_PACKAGE)-doc-html/usr/share/doc/kde/HTML/en/$$pkg; \ + done + + +# Process "sameVersionDep:" substvars +DH_SAMEVERSIONDEPS=debian/cdbs/dh_sameversiondeps +common-binary-predeb-arch common-binary-predeb-indep:: + @if [ ! -x "$(DH_SAMEVERSIONDEPS)" ]; then chmod a+x "$(DH_SAMEVERSIONDEPS)"; fi + $(DH_SAMEVERSIONDEPS) $(if $(filter common-binary-predeb-arch,$@),-a,-i) only in patch2: unchanged: --- soprano-2.1.64+dfsg.1.orig/debian/cdbs/dh_sameversiondeps +++ soprano-2.1.64+dfsg.1/debian/cdbs/dh_sameversiondeps @@ -0,0 +1,257 @@ +#!/usr/bin/perl -w + +use strict; +use Dpkg::Control; +use Dpkg::Substvars; +use Dpkg::ErrorHandling; +use File::Copy; + +use Debian::Debhelper::Dh_Lib; + +my $namespace = "sameVersionDep"; +my @fields = qw(Depends Recommends Suggests Enhances Pre-Depends); +my $re_fields = join("|", @fields); +my $re_pkgname = qr/[a-z0-9][a-z0-9+.-]*/; +my $re_oursubstvar = qr/\$\{($namespace:(.*?))\}/; +my $re_splitsubstvar = qr/^($re_pkgname)(?::($re_pkgname))?(?:-($re_fields))?$/; + +# Global substvars file +my $g_substvars = new Dpkg::Substvars; +$g_substvars->parse("debian/substvars") if (-r "debian/substvars"); + +sub extract_package_names { + my $val = shift; + $val =~ s/\([^)]+\)//g; + $val =~ s/^\s+//; + $val =~ s/\s+$//; + return split(/\s*,\s*/, $val); +} + +sub Shlibsvars::new { + my ($cls, $package, $control, $substvars_file) = @_; + my $self = bless ( { + "package" => $package, + "control" => $control, + "file" => $substvars_file, + }, $cls); + $self->{substvars} = new Dpkg::Substvars; + if (-r $self->{file}) { + $self->{substvars}->parse($self->{file}); + } + return $self; +} + +sub Shlibsvars::get_fieldval { + my ($self, $field) = @_; + + my $pkg = $self->{control}->get_pkg_by_name($self->{package}); + return undef if (!defined $pkg || !exists $pkg->{$field}); + + # Turn of warnings for substvars runs + my $save_quiet = $Dpkg::ErrorHandling::quiet_warnings; + $Dpkg::ErrorHandling::quiet_warnings = 1; + + my $val = $pkg->{$field}; + $val = $self->{substvars}->substvars($val); + $val = $g_substvars->substvars($val); + + $Dpkg::ErrorHandling::quiet_warnings = $save_quiet; + return $val; +} + +sub Shlibsvars::extract_deps { + my ($self, $field, $deppkg) = @_; + + my $val = $self->get_fieldval($field); + return undef() unless defined $val; + + # Extract dependency fields we need + my @matched_deps; + for my $dep (split(/\s*,\s*/, $val)) { + if ($dep =~ /^\Q$deppkg\E(?:$|[\W])/) { + push @matched_deps, $dep; + } + } + return @matched_deps; +} + +sub Shlibsvars::get_dep_package_names { + my ($self, $field) = @_; + + my $val = $self->get_fieldval($field); + return undef() unless defined $val; + return extract_package_names($val); +} + +sub get_package_dpkg_status { + my $binpkgs = shift; + my $fields = shift; + $fields = [ "Source", "Version" ] unless defined $fields; + my $regexp_fields = join("|", @$fields); + my %status; + + my $pid = open(DPKG, "-|"); + error("cannot fork for dpkg-query --status") unless defined($pid); + if (!$pid) { + # Child process running dpkg --search and discarding errors + close STDERR; + open STDERR, ">", "/dev/null"; + $ENV{LC_ALL} = "C"; + exec("dpkg-query", "--status", "--", @$binpkgs) or error("cannot exec dpkg-query"); + } + my $curpkg; + while (defined($_ = <DPKG>)) { + if (m/^Package:\s*(.*)$/) { + $curpkg = $1; + $status{$curpkg} = {}; + } elsif (defined($curpkg)) { + if (m/^($regexp_fields):\s*(.*)$/) { + my $field = $1; + error("Dublicate field $field for the $curpkg package in the dpkg status file") + if (exists $status{$curpkg}{$field}); + $status{$curpkg}{$field} = $2; + } + } else { + error("Missing Package entry at $."); + } + } + close(DPKG); + + # Check if all packages were processed + for my $pkg (@$binpkgs) { + error("Package $pkg was not found in the dpkg status") unless exists $status{$pkg}; + } + return \%status; +} + +sub write_substvar($$$$) { + my ($pkgname, $varname, $value, $substvars) = @_; + my @contents; + my $varset = 0; + + my $file = (-r $substvars) ? $substvars : "debian/substvars"; + if (-r $file) { + open(FILE, "<$file") or die "Unable to open substvars file '$file' for reading\n"; + while (<FILE>) { + if (!$varset && /^\s*\Q$varname=\E/) { + push @contents, "$varname=$value\n"; + $varset = 1; + } else { + push @contents, $_; + } + } + close(FILE); + } else { + # Fallback to default + $file = $substvars; + } + + open(FILE, ">$file.tmp") or die "Unable to open substvars file '$file.tmp' for writing\n"; + for (@contents) { + print FILE $_; + } + if (!$varset) { + print FILE "$varname=$value", "\n"; + } + close(FILE); + + File::Copy::move("$file.tmp", "$file"); +} + +init(); + +my $control = new Dpkg::Control; +my %shlibsvars; + +foreach my $package (@{$dh{DOPACKAGES}}) { + my $pkg_substvars = sprintf("debian/%ssubstvars", pkgext($package)); + my $pkg = $control->get_pkg_by_name($package); + + for my $fieldname (@fields) { + if (exists $pkg->{$fieldname}) { + my $fieldval = $pkg->{$fieldname}; + my $pkgname = $pkg->{Package}; + + while ($fieldval =~ m/\G.*?$re_oursubstvar/gs) { + my $varname = $1; + my $varparams = $2; + if ($varparams =~ m/$re_splitsubstvar/) { + my $dep2add = $1; + my $scanpkg = $2; + $scanpkg = $dh{MAINPACKAGE} unless defined $scanpkg; + my $deptype = $3; + $deptype = $fieldname unless defined $deptype; + + if (!exists $shlibsvars{$scanpkg}) { + my $scan_substvars = sprintf("debian/%ssubstvars", pkgext($scanpkg)); + $shlibsvars{$scanpkg} = new Shlibsvars($scanpkg, $control, $scan_substvars); + } + + # Get dpkg status information about dep2add package + my $dep2add_status = get_package_dpkg_status( [ $dep2add ], [ "Source", "Version", $deptype ] ); + $dep2add_status = $dep2add_status->{$dep2add}; + + # Check validility of dep2add status + error("Could not retreive source package name for $dep2add package. Is it installed?") + unless exists $dep2add_status->{Source} && exists $dep2add_status->{Version}; + error("Package $dep2add has no $deptype field. This configuration is unsupported. ") + unless exists $dep2add_status->{$deptype}; + my @dep2add_deps = extract_package_names($dep2add_status->{$deptype}); + + # Get deptype packages of scanpkg + my $vars = $shlibsvars{$scanpkg}; + my @scan_deps = $vars->get_dep_package_names($deptype); + + # Intersect both _deps arrays to find common dependencies + my @commondeps; + { + my %_map; + map { $_map{$_} = 1; } @scan_deps; + map { push @commondeps, $_ if exists $_map{$_} } @dep2add_deps; + } + + # Get status information about common packages. They need to come from the + # same source package as dep2add package and their versions should match + my $depstatus = get_package_dpkg_status(\...@commondeps, [ "Source", "Version" ]); + @commondeps = (); + while (my ($pkg, $status) = each(%$depstatus)) { + push @commondeps, $pkg + if (exists $status->{Source} && exists $status->{Version} && + ($status->{Source} eq $dep2add_status->{Source}) && + ($status->{Version} eq $dep2add_status->{Version})); + } + + # Ideally we should have got the list down to one. if not, combine + # version relationships + my @fulldeps; + if (!...@commondeps) { + error("$0: no same version dependencies for '$varname' found (at $fieldname of the $package package)"); + } else { + for my $deppkg (@commondeps) { + my @deps = $vars->extract_deps($deptype, $deppkg); + map s/\b\Q$deppkg\E\b/$dep2add/g, @deps; + push @fulldeps, @deps; + } + + # Drop dupes + @fulldeps = sort @fulldeps; + my @uniqdeps; + my $_prevdep; + for my $dep (@fulldeps) { + my $tmp = "$dep"; + $tmp =~ s/\s//g; + push @uniqdeps, $dep if (!defined $_prevdep || $_prevdep ne $tmp); + $_prevdep = $tmp; + } + # Write substvar for the package + write_substvar($pkgname, $varname, join(", ", @uniqdeps), $pkg_substvars); + } + } else { + error("Invalid '$namespace' substvar syntax: $varparams"); + } + } + } + } +} + +exit 0 only in patch2: unchanged: --- soprano-2.1.64+dfsg.1.orig/debian/cdbs/variables.mk +++ soprano-2.1.64+dfsg.1/debian/cdbs/variables.mk @@ -0,0 +1,49 @@ +# KDE 4 global configuration file installation directory +DEB_CONFIG_INSTALL_DIR ?= /usr/share/kde4/config + +# Standard Debian KDE 4 cmake flags +DEB_CMAKE_KDE4_FLAGS += \ + -DCMAKE_BUILD_TYPE=Debian \ + -DKDE4_ENABLE_FINAL=$(KDE4-ENABLE-FINAL) \ + -DKDE4_BUILD_TESTS=false \ + -DKDE_DISTRIBUTION_TEXT="Debian packages" \ + -DKDE_DEFAULT_HOME=.kde4 \ + -DCMAKE_SKIP_RPATH=true \ + -DKDE4_USE_ALWAYS_FULL_RPATH=false \ + -DCONFIG_INSTALL_DIR=$(DEB_CONFIG_INSTALL_DIR) \ + -DDATA_INSTALL_DIR=/usr/share/kde4/apps \ + -DHTML_INSTALL_DIR=/usr/share/doc/kde4/HTML \ + -DKCFG_INSTALL_DIR=/usr/share/kde4/config.kcfg \ + -DLIB_INSTALL_DIR=/usr/lib \ + -DSYSCONF_INSTALL_DIR=/etc + +# Support building with enable final (disabled by default) +DEB_KDE_ENABLE_FINAL ?= +KDE4-ENABLE-FINAL := false +ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + treat_me_gently_arches := arm m68k alpha ppc64 armel armeb + DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU) + ifeq (,$(filter $(DEB_HOST_ARCH_CPU),$(treat_me_gently_arches))) + KDE4-ENABLE-FINAL := $(if $(DEB_KDE_ENABLE_FINAL),true,false) + endif +endif + +#### Default additional (custom) cmake flags #### +DEB_CMAKE_CUSTOM_FLAGS ?= + +# Set the one below to something else than 'yes' to disable linking +# with --as-needed (on by default) +DEB_KDE_LINK_WITH_AS_NEEDED ?= yes +ifneq (,$(findstring yes, $(DEB_KDE_LINK_WITH_AS_NEEDED))) + ifeq (,$(findstring no-as-needed, $(DEB_BUILD_OPTIONS))) + DEB_KDE_LINK_WITH_AS_NEEDED := yes + DEB_CMAKE_CUSTOM_FLAGS += \ + -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--no-undefined -Wl,--as-needed" \ + -DCMAKE_MODULE_LINKER_FLAGS="-Wl,--no-undefined -Wl,--as-needed" \ + -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined -Wl,--as-needed" + else + DEB_KDE_LINK_WITH_AS_NEEDED := no + endif +else + DEB_KDE_LINK_WITH_AS_NEEDED := no +endif