The following commit has been merged in the master branch: commit eae9dc261dd761e11aea4c78e3a47f2b78ca63f6 Author: Sylvain Le Gall <gil...@debian.org> Date: Mon Jul 27 21:47:24 2009 +0000
Add ocaml-lintian and use it in dh_ocaml to dump information for lintian check diff --git a/debhelper/dh_ocaml b/debhelper/dh_ocaml index 76e465e..99d526e 100755 --- a/debhelper/dh_ocaml +++ b/debhelper/dh_ocaml @@ -186,11 +186,20 @@ OCaml packaging policy, version 1.0.0 =cut -my $omd5 = $ENV{OCAML_MD5SUMS}; -$omd5 = "/usr/bin/ocaml-md5sums" unless $omd5; -error "$omd5 does not exists or is not executable" unless -x $omd5; +sub exec_default ($$) +{ + my ($env_var, $default) = @_; + my $res = $default; + $res = $ENV{$env_var} if defined($ENV{$env_var}); + error "$res does not exists or is not executable" unless -x $res; + return $res; +} + +my $omd5 = exec_default("OCAML_MD5SUMS", "/usr/bin/ocaml-md5sums"); +my $olintian = exec_default("OCAML_LINTIAN", "/usr/bin/ocaml-lintian"); my $md5dir = "/var/lib/ocaml/md5sums"; +my $lintiandir = "/var/lib/ocaml/lintian"; my $md5ext = ".md5sums"; my $ocaml_magic_line = "#!/usr/bin/ocamlrun"; @@ -364,12 +373,13 @@ foreach my $package (keys(%dev_packages), @binary_packages) }; }; -verbose_print "+++ Compute .md5sums files for dev packages +++"; +verbose_print "+++ Compute .md5sums and lintian files for dev packages +++"; my %oinfo; foreach my $package (keys(%dev_packages)) { my $runtime = $dev_packages{$package}; $runtime = undef if $runtime && $runtime eq "-"; my $md5sums_fn = (tmpdir $package)."/$md5dir/$package$md5ext"; + my $lintian_fn = (tmpdir $package)."/$lintiandir/$package"; my $oinfo_fn = "debian/".(pkgext $package)."oinfo.debhelper"; $oinfo{$package} = $oinfo_fn; my $oprovides_fn = "debian/".(pkgext $package)."oprovides.debhelper"; @@ -386,7 +396,30 @@ foreach my $package (keys(%dev_packages)) { . " --dump-info $oinfo_fn" . " --dump-provides $oprovides_fn" . " compute < ".$olist{$package} - . " > $md5sums_fn") || die "Cannot compute $md5sums_fn"; + . " > $md5sums_fn"); + + # compute lintian informations + doit(qw/mkdir -p/, dirname $lintian_fn); + complex_doit("$olintian $local_flags < $olist{$package} > $lintian_fn.info"); + if (defined($runtime)) + { + my @META = (); + my $obj_dir = (tmpdir $runtime)."/usr/lib"; + find(sub {push (@META, $File::Find::name) if $_ =~ /META(\..+)?/}, + $obj_dir) + if -d $obj_dir; + foreach (@META) + { + if (/META\.(.*)/) + { + doit("cp", $_, "$lintian_fn.META.$1"); + } + else + { + doit("cp", $_, "$lintian_fn.META.".(basename (dirname $_))); + }; + } + }; if (!$dh{NO_ACT}) { diff --git a/debhelper/ocaml-lintian b/debhelper/ocaml-lintian new file mode 100755 index 0000000..63210b2 --- /dev/null +++ b/debhelper/ocaml-lintian @@ -0,0 +1,111 @@ +#!/usr/bin/perl + +use Getopt::Long; +use Pod::Usage; +use warnings; +use strict; + +# Executable called +my $ocamlobjinfo=$ENV{OCAMLOBJINFO}; +$ocamlobjinfo="ocamlobjinfo" unless defined($ocamlobjinfo); + +my $man = 0; +my $help = 0; +my @objects; +my $package_dev; +my $package_runtime; +my $package_version; +my $checksum; + +sub process_not_option +{ + push @objects, @_; +} + +sub get_objects +{ + return <STDIN> unless @objects > 0; + return @objects; +} + +GetOptions( + "package=s" => \$package_dev, + "runtime=s" => \$package_runtime, + "version=s" => \$package_version, + "checksum=s" => \$checksum, + "<>" => \&process_not_option, + "help|?" => \$help, + "man" => \$man) or pod2usage(2); +pod2usage(1) if $help; +pod2usage(-exitstatus => 0, -verbose => 2) if $man; + +...@objects = get_objects(); + +print "Package: $package_dev\n" if $package_dev; +print "Runtime: $package_runtime\n" if $package_runtime; +print "Version: $package_version\n" if $package_version; +print "ForcedChecksum: $checksum\n" if $checksum; + +foreach my $obj_file (get_objects()) +{ + chomp $obj_file; + if ($obj_file =~ /.*\.cma$/) + { + print "\nFile: $obj_file\n"; + foreach (`$ocamlobjinfo $obj_file`) + { + chomp $_; + if (/.*(Force custom|Extra C object files|Extra C options):(.*)/) + { + print "$1:$2\n" + }; + }; + die "Error running $ocamlobjinfo" if $?; + } +}; + +__END__ + +=head1 NAME + +ocaml-lintian - Dump OCaml object information for lintian test + +=head1 SYNOPSIS + +ocaml-lintian [option ...] file ... + +Extract information from various OCaml object and dump them. This information +should be reused by lintian OCaml test, without dependency to ocaml tools to +extract information. + +=head1 OPTIONS + +=over 8 + +=item B<--package> pkg + +Set package name for development dependency. + +=item B<--runtime> pkg + +Set package name for runtime dependency. + +=item B<--version> ver + +Set package version for dependencies. + +=item B<--checksum> str + +Checksum to use. + +=item B<-help> + +Print a brief help message and exits. + +=item B<-man> + +Prints the manual page and exits. + +=back + +=cut diff --git a/debian/changelog b/debian/changelog index d7d0ad5..0979715 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,8 @@ dh-ocaml (0.9.0) UNRELEASED; urgency=low * dh_ocaml now computes automatically dependencies (Closes: #522831) * Add dh-ocaml (>= 0.9) build dependency when generating debian/control through CDBS + * Add ocaml-lintian and use it in dh_ocaml to dump information for + lintian check [ Mehdi Dogguy ] * Install ocaml.pm to enable: dh --with ocaml -- dh-ocaml packaging _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/pkg-ocaml-maint-commits