From b32d18a72b6222a70a8d3db21887a36ccd2d5ecc Mon Sep 17 00:00:00 2001 From: David Bremner Date: Wed, 28 Oct 2015 22:38:13 -0300 Subject: release 0.0.16: add misc:Built-Using substvar also depend on perl, while we're at it. --- debian/changelog | 8 ++ debian/control | 3 +- debian/rules | 6 +- dh_elpa | 247 ------------------------------------------------------ dh_elpa.in | 251 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 265 insertions(+), 250 deletions(-) delete mode 100755 dh_elpa create mode 100755 dh_elpa.in diff --git a/debian/changelog b/debian/changelog index 8fb9fdd..298e650 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +dh-elpa (0.0.16) unstable; urgency=medium + + * Bug fix: "Add Built-Using substvars entry", thanks to Hilko Bengen + (Closes: #803350). + * Add depends on ${perl:Depends} + + -- David Bremner Wed, 28 Oct 2015 22:43:59 -0300 + dh-elpa (0.0.15) unstable; urgency=medium * Also ignore emacs20 diff --git a/debian/control b/debian/control index 4e284be..8da099a 100644 --- a/debian/control +++ b/debian/control @@ -11,7 +11,8 @@ Vcs-Browser: http://anonscm.debian.org/cgit/pkg-emacsen/pkg/dh-elpa.git/ Package: dh-elpa Architecture: all -Depends: ${misc:Depends}, emacs24-nox | emacs24 (>=24~) | emacs24-lucid (>=24~) +Built-Using: ${misc:Built-Using} +Depends: ${misc:Depends}, ${perl:Depends}, emacs24-nox | emacs24 (>=24~) | emacs24-lucid (>=24~) Description: Debian helper tools for packaging emacs lisp extensions This package provides a helper for packaging emacs lisp extensions in a way compatible with the GNU Emacs 'elpa' package repository. diff --git a/debian/rules b/debian/rules index 49e5292..ccb9394 100755 --- a/debian/rules +++ b/debian/rules @@ -1,12 +1,14 @@ #!/usr/bin/make -f DESTDIR=$(CURDIR)/debian/tmp - +VERSION=$(shell dpkg-parsechangelog | sed -n 's/^Version: //p') %: dh $@ override_dh_auto_build: - pod2man -c Debhelper --section=1 dh_elpa > dh_elpa.1 + pod2man -c Debhelper --section=1 dh_elpa.in > dh_elpa.1 + sed s/@HELPER_VERSION@/${VERSION}/ < dh_elpa.in > dh_elpa + chmod 755 dh_elpa override_dh_install: dh_install diff --git a/dh_elpa b/dh_elpa deleted file mode 100755 index b921cb9..0000000 --- a/dh_elpa +++ /dev/null @@ -1,247 +0,0 @@ -#!/usr/bin/perl - -=head1 NAME - -dh_elpa - install emacs lisp packages into package build directories - -=cut - -use strict; -use Cwd qw{ getcwd }; -use File::Temp qw{tempfile}; -use IO::Handle; -use File::Path; - -use Debian::Debhelper::Dh_Lib; - -=head1 SYNOPSIS - -B [S>] [S>] - -=head1 DESCRIPTION - -B is a debhelper program that is responsible for installing -elpa style emacs lisp packages into package build directories. - -=head1 FILES - -=over 4 - -=item debian/I.elpa - -List of files to be installed into I as an elpa package. - -=back - -=cut - -init(options => { - "byte-compile!" => \$dh{BYTECOMPILE}, -}); - -=head1 OPTIONS - -=over 4 - -=item B<--byte-compile>, B<--no-byte-compile> - -Enable (default) or disable byte compilation of installed emacs lisp -files. Disabling byte compilation changes the destination directory -to one that is found by the emacs package system. - -=back - -=cut - -sub doit_quietly { - my ($handle,$tmpfile) = tempfile(UNLINK=>1); - my $exitcode; - - verbose_print(escape_shell(@_)); - open (CPERR,">&STDERR") or error "$!"; - open (CPOUT,">&STDOUT") or error "$!"; - STDOUT->fdopen($handle,'w'); - STDERR->fdopen($handle,'w'); - my $ret=doit_noerror(@_); - STDOUT->fdopen(\*CPOUT,'w'); - STDERR->fdopen(\*CPERR,'w'); - - if (!$ret){ - $exitcode=$?; - seek $handle, 0, 0 or error "$!"; - print while (<$handle>); - my $command=join(" ",@_); - error("$command returned exit code ".($exitcode >> 8)); - } - -} - -# simplified version of private sub autoscript_sed in Dh_Lib -sub sed_file { - my ($sed, $infile, $outfile) = @_; - - open(IN, $infile) or die "$infile: $!"; - open(OUT, ">>$outfile") or die "$outfile: $!"; - while () { $sed->(); print OUT } - close(OUT) or die "$outfile: $!"; - close(IN) or die "$infile: $!"; -} - -sub read_package_desc { - my ($descdir, $package) = @_; - my %desc = (); - - my $descfile="${descdir}/${package}.desc"; - - my $fh; - - open $fh,'<', $descfile or - error "failed to open $descfile"; - - while (<$fh>) { - if (m/([^:]+):\s*(.*)\s*$/) { - $desc{$1} = $2; - } - } - return \%desc; -} - -my $templatedir = "/usr/share/debhelper/dh_elpa/emacsen-common"; - -sub maybe_install_helper{ - my ($package,$piece, $mode, $desc)=@_; - my $file=pkgfile($package,"emacsen-$piece"); - - my $tmp=tmpdir($package); - my $ecdest="$tmp/usr/lib/emacsen-common/packages"; - my $target="$ecdest/$piece/$package"; - # if there is file, leave it for dh_installemacsen - if ($file eq '') { - if (! -d "$ecdest/$piece") { - doit("install","-d","$ecdest/$piece"); - } - unlink $target; # ignore errors - - my $elpapackage = $desc->{'ELPA-Name'} or - error "elpa package name not found"; - - my $elpaversion = $desc->{'ELPA-Version'} or - error "elpa version not found"; - - sed_file (sub {s/#ELPAPACKAGE#/$elpapackage/; - s/#ELPAVERSION#/$elpaversion/; }, - "$templatedir/$piece", $target); - chmod oct($mode), $target; - } -} - -$dh{BYTECOMPILE} = 1 unless defined($dh{BYTECOMPILE}); - -my $elpadir; - -my $dhelpadir="/usr/share/emacs/site-lisp/elpa"; - -# TODO: do we really need a seperate elpa-src hierarchy? -if ($dh{BYTECOMPILE}) { - $elpadir="/usr/share/emacs/site-lisp/elpa-src"; -} else { - $elpadir=$dhelpadir; -} - -PACKAGE: -foreach my $package (@{$dh{DOPACKAGES}}) { - - my $tmp=tmpdir($package); - my $file=pkgfile($package,"elpa"); - - my $elpapkg=$package; - # TODO do this more sanely or at least allow an override - $elpapkg =~ s/^elpa-//; - verbose_print("Using elpa package name $elpapkg"); - - my @files; - - # Call isnative because it sets $dh{VERSION} - # as a side effect. - isnative($package); - if ($file) { - @files=filearray($file, "."); - scalar(@files) == 1 || grep { m/\b${elpapkg}-pkg.el$/ } @files or - error "missing ${elpapkg}-pkg.el"; - } - if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) - && @ARGV) { - push @files, @ARGV; - } - - next PACKAGE if (scalar(@files) == 0); - - my $pkg_file; - my $cwd = getcwd(); - my $tempdir = "${cwd}/debian/.debhelper/elpa"; - - File::Path::rmtree $tempdir || - error "cleaning $tempdir"; - - File::Path::make_path $tempdir || - error "creating $tempdir"; - - if (scalar(@files) == 1) { - my $pkg_file=$files[0]; - - doit_quietly(qw{emacs -batch -Q -l package}, - '--eval',"(add-to-list 'package-directory-list \"$dhelpadir\")", - '--eval',"(add-to-list 'package-directory-list \"$elpadir\")", - qw{-f package-initialize -l dh-elpa.el}, - qw{-f dhelpa-batch-install-file}, "$tmp/$elpadir", $pkg_file, $tempdir); - } else { - my $stagedir = "$tempdir/$elpapkg"; - File::Path::make_path $stagedir || - error "creating $stagedir"; - - # copy files into stagedir, flattening hierarchy - # TODO: do this more correctly - foreach my $el_file (@files) { - doit("cp", "-a", $el_file, "$stagedir"); - } - - doit_quietly(qw{emacs -batch -Q -l package}, - '--eval',"(add-to-list 'package-directory-list \"$dhelpadir\")", - '--eval',"(add-to-list 'package-directory-list \"$elpadir\")", - qw{-f package-initialize -l dh-elpa.el}, - qw{-f dhelpa-batch-install-directory}, - "$tmp/$elpadir", $stagedir, $tempdir); - - } - if ($dh{BYTECOMPILE}) { - my $desc = read_package_desc ($tempdir,$elpapkg); - - addsubstvar($package,'misc:Depends','emacsen-common'); - maybe_install_helper($package, 'compat', '0644', $desc); - maybe_install_helper($package, 'install', '0755', $desc); - maybe_install_helper($package, 'remove', '0755', $desc); - - if (! $dh{NOSCRIPTS}) { - autoscript($package,"postinst","postinst-emacsen", - "s/#PACKAGE#/$package/"); - autoscript($package,"prerm","prerm-emacsen", - "s/#PACKAGE#/$package/"); - } - } - -} - -=head1 EXAMPLES - -Here is an example of using the helper in a dh(1) style debian/rules - -=over 4 - -override_dh_install: - dh_install - dh_elpa - -=back - -=cut - diff --git a/dh_elpa.in b/dh_elpa.in new file mode 100755 index 0000000..7a196e6 --- /dev/null +++ b/dh_elpa.in @@ -0,0 +1,251 @@ +#!/usr/bin/perl + +=head1 NAME + +dh_elpa - install emacs lisp packages into package build directories + +=cut + +use strict; +use Cwd qw{ getcwd }; +use File::Temp qw{tempfile}; +use IO::Handle; +use File::Path; + +use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B [S>] [S>] + +=head1 DESCRIPTION + +B is a debhelper program that is responsible for installing +elpa style emacs lisp packages into package build directories. + +=head1 FILES + +=over 4 + +=item debian/I.elpa + +List of files to be installed into I as an elpa package. + +=back + +=cut + +init(options => { + "byte-compile!" => \$dh{BYTECOMPILE}, +}); + +=head1 OPTIONS + +=over 4 + +=item B<--byte-compile>, B<--no-byte-compile> + +Enable (default) or disable byte compilation of installed emacs lisp +files. Disabling byte compilation changes the destination directory +to one that is found by the emacs package system. + +=back + +=cut + +sub doit_quietly { + my ($handle,$tmpfile) = tempfile(UNLINK=>1); + my $exitcode; + + verbose_print(escape_shell(@_)); + open (CPERR,">&STDERR") or error "$!"; + open (CPOUT,">&STDOUT") or error "$!"; + STDOUT->fdopen($handle,'w'); + STDERR->fdopen($handle,'w'); + my $ret=doit_noerror(@_); + STDOUT->fdopen(\*CPOUT,'w'); + STDERR->fdopen(\*CPERR,'w'); + + if (!$ret){ + $exitcode=$?; + seek $handle, 0, 0 or error "$!"; + print while (<$handle>); + my $command=join(" ",@_); + error("$command returned exit code ".($exitcode >> 8)); + } + +} + +# simplified version of private sub autoscript_sed in Dh_Lib +sub sed_file { + my ($sed, $infile, $outfile) = @_; + + open(IN, $infile) or die "$infile: $!"; + open(OUT, ">>$outfile") or die "$outfile: $!"; + while () { $sed->(); print OUT } + close(OUT) or die "$outfile: $!"; + close(IN) or die "$infile: $!"; +} + +sub read_package_desc { + my ($descdir, $package) = @_; + my %desc = (); + + my $descfile="${descdir}/${package}.desc"; + + my $fh; + + open $fh,'<', $descfile or + error "failed to open $descfile"; + + while (<$fh>) { + if (m/([^:]+):\s*(.*)\s*$/) { + $desc{$1} = $2; + } + } + return \%desc; +} + +my $templatedir = "/usr/share/debhelper/dh_elpa/emacsen-common"; + +sub maybe_install_helper{ + my ($package,$piece, $mode, $desc)=@_; + my $file=pkgfile($package,"emacsen-$piece"); + + my $tmp=tmpdir($package); + my $ecdest="$tmp/usr/lib/emacsen-common/packages"; + my $target="$ecdest/$piece/$package"; + # if there is file, leave it for dh_installemacsen + if ($file eq '') { + if (! -d "$ecdest/$piece") { + doit("install","-d","$ecdest/$piece"); + } + unlink $target; # ignore errors + + my $elpapackage = $desc->{'ELPA-Name'} or + error "elpa package name not found"; + + my $elpaversion = $desc->{'ELPA-Version'} or + error "elpa version not found"; + + sed_file (sub {s/#ELPAPACKAGE#/$elpapackage/; + s/#ELPAVERSION#/$elpaversion/; }, + "$templatedir/$piece", $target); + chmod oct($mode), $target; + } +} + +$dh{BYTECOMPILE} = 1 unless defined($dh{BYTECOMPILE}); + +my $elpadir; + +my $dhelpadir="/usr/share/emacs/site-lisp/elpa"; + +# TODO: do we really need a seperate elpa-src hierarchy? +if ($dh{BYTECOMPILE}) { + $elpadir="/usr/share/emacs/site-lisp/elpa-src"; +} else { + $elpadir=$dhelpadir; +} + +PACKAGE: +foreach my $package (@{$dh{DOPACKAGES}}) { + + my $tmp=tmpdir($package); + my $file=pkgfile($package,"elpa"); + + my $elpapkg=$package; + # TODO do this more sanely or at least allow an override + $elpapkg =~ s/^elpa-//; + verbose_print("Using elpa package name $elpapkg"); + + my @files; + + # Call isnative because it sets $dh{VERSION} + # as a side effect. + isnative($package); + if ($file) { + @files=filearray($file, "."); + scalar(@files) == 1 || grep { m/\b${elpapkg}-pkg.el$/ } @files or + error "missing ${elpapkg}-pkg.el"; + } + if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) + && @ARGV) { + push @files, @ARGV; + } + + next PACKAGE if (scalar(@files) == 0); + + my $pkg_file; + my $cwd = getcwd(); + my $tempdir = "${cwd}/debian/.debhelper/elpa"; + my $helper_version = '@HELPER_VERSION@'; + + File::Path::rmtree $tempdir || + error "cleaning $tempdir"; + + File::Path::make_path $tempdir || + error "creating $tempdir"; + + addsubstvar($package,'misc:Built-Using',"dh-elpa (= ${helper_version})"); + + if (scalar(@files) == 1) { + my $pkg_file=$files[0]; + + doit_quietly(qw{emacs -batch -Q -l package}, + '--eval',"(add-to-list 'package-directory-list \"$dhelpadir\")", + '--eval',"(add-to-list 'package-directory-list \"$elpadir\")", + qw{-f package-initialize -l dh-elpa.el}, + qw{-f dhelpa-batch-install-file}, "$tmp/$elpadir", $pkg_file, $tempdir); + } else { + my $stagedir = "$tempdir/$elpapkg"; + File::Path::make_path $stagedir || + error "creating $stagedir"; + + # copy files into stagedir, flattening hierarchy + # TODO: do this more correctly + foreach my $el_file (@files) { + doit("cp", "-a", $el_file, "$stagedir"); + } + + doit_quietly(qw{emacs -batch -Q -l package}, + '--eval',"(add-to-list 'package-directory-list \"$dhelpadir\")", + '--eval',"(add-to-list 'package-directory-list \"$elpadir\")", + qw{-f package-initialize -l dh-elpa.el}, + qw{-f dhelpa-batch-install-directory}, + "$tmp/$elpadir", $stagedir, $tempdir); + + } + + if ($dh{BYTECOMPILE}) { + my $desc = read_package_desc ($tempdir,$elpapkg); + + addsubstvar($package,'misc:Depends','emacsen-common'); + maybe_install_helper($package, 'compat', '0644', $desc); + maybe_install_helper($package, 'install', '0755', $desc); + maybe_install_helper($package, 'remove', '0755', $desc); + + if (! $dh{NOSCRIPTS}) { + autoscript($package,"postinst","postinst-emacsen", + "s/#PACKAGE#/$package/"); + autoscript($package,"prerm","prerm-emacsen", + "s/#PACKAGE#/$package/"); + } + } + +} + +=head1 EXAMPLES + +Here is an example of using the helper in a dh(1) style debian/rules + +=over 4 + +override_dh_install: + dh_install + dh_elpa + +=back + +=cut + -- cgit v1.2.3