40 Commits
8.91 ... 8.95.9

Author SHA1 Message Date
Armando
9a6bf8f390 Fixed arch subroutine in Tgz.pm as it was causing issues when converting deb to tgz. 2025-10-08 15:43:52 +05:00
Armando
32f04aed12 feat: Implement slack-desc handling for Slackware packages This commit introduces the following changes:
1.  **Modified `scan` method in `Alien/Package/Tgz.pm`:**
    - The method now attempts to read and parse `install/slack-desc` from input .tgz packages.
    - If found, the package's description and summary are populated from `slack-desc`.
    - Fallback to existing behavior if `slack-desc` is not present.

2.  **Modified `prep` method in `Alien/Package/Tgz.pm`:**
    - When creating a .tgz package, an `install/slack-desc` file is now generated.
    - This file is populated using the package's summary and description, formatted according to Slackware standards.
    - A helper function `_format_slack_desc` was added to handle the formatting logic.

3.  **Modified `build` method in `Alien/Package/Tgz.pm`:**
    - When creating a .tgz package, `makepkg` is now used.
	- Package is now named according to Slackware standard naming scheme.
2025-10-08 15:43:52 +05:00
Armando
ab603a11e0 Added support for zstd archives. Fixes "Unknown control member!" error with some deb packags. 2025-10-08 15:43:48 +05:00
Syed-Shahrukh-OSSRevival
b3bc197956 Removed debian directory from imported sources https://salsa.debian.org/debian/alien 2025-10-01 17:37:47 +05:00
Marcos Talau
ee8794614c Renamed debian/tests/convert_deb_to_rpm.sh to debian/tests/convert-deb-to-rpm.sh 2024-11-24 22:07:23 -03:00
Daniel Costa
c4c8e3bc4a debian/changelog: Update 2024-11-24 21:33:28 -03:00
Daniel Costa
c6b123e40f debian/tests/control:
Create autopkgtest
2024-11-24 21:32:24 -03:00
Daniel Costa
c83906446f debian/changelog: Update 2024-11-24 20:00:52 -03:00
Daniel Costa
6a2e53bc63 debian/salsa-ci.yml: Add
to provide CI tests for Salsa
2024-11-24 19:49:31 -03:00
Bastian Germann
ccd0532208 Upload to unstable 2024-06-22 19:42:42 +00:00
Bastian Germann
3985359d47 d/copyright: Remove trailing whitespace 2024-06-22 19:39:08 +00:00
Alois Klink
385b2066d3 Map arm64 in deb to aarch64 in rpm
This fixes conversion of arm64 debian packages.

See #985808, which was the bug for doing it in the opposite direction.
2024-06-22 19:37:54 +00:00
Debian Janitor
b65f2d6974 Update standards version to 4.6.2, no changes needed.
Changes-By: lintian-brush
Fixes: lintian: out-of-date-standards-version
See-also: https://lintian.debian.org/tags/out-of-date-standards-version.html
2023-01-07 06:13:42 +00:00
Debian Janitor
2989545da6 debian/copyright: use spaces rather than tabs to start continuation lines.
Changes-By: lintian-brush
Fixes: lintian: tab-in-license-text
See-also: https://lintian.debian.org/tags/tab-in-license-text.html
2023-01-07 06:13:35 +00:00
Jelmer Vernooij
3e7874e029 releasing package alien version 8.95.6 2022-05-25 18:54:06 +01:00
Jelmer Vernooij
919146ea09 Mention QA Upload. 2022-05-25 18:54:06 +01:00
Boyuan Yang
7179500cf8 Merge branch 'scrub-obsolete' into 'master'
Remove unnecessary constraints

See merge request debian/alien!4
2021-10-14 04:28:04 +00:00
Debian Janitor
f0fe4f6c80 Remove constraints unnecessary since buster
* alien: Drop versioned constraint on rpm in Depends.

Changes-By: deb-scrub-obsolete
2021-10-13 06:51:08 +00:00
Boyuan Yang
922b06bf8d Prepare new upload. 2021-08-22 01:29:46 -04:00
Boyuan Yang
b235b51c36 Bump Standards-Version to 4.6.0. 2021-08-22 01:14:55 -04:00
Boyuan Yang
3e46c56693 Alien/Package/Deb.pm: Do not fail when dh_usrlocal complains
When dh_usrlocal returns nonzero, continue and print a warning
information. This allows the generated deb package to install
files under /usr/local/.
2021-08-22 01:13:25 -04:00
Boyuan Yang
80877786d3 Prepare new upload. 2021-04-07 12:20:23 -04:00
Boyuan Yang
0de126bcfb Let alien recognize aarch64->arm64. (Closes: #985808) 2021-04-07 12:13:57 -04:00
Boyuan Yang
3f13d15dfd Fix incorrect filepath (Closes: #985835) 2021-04-07 12:12:13 -04:00
Boyuan Yang
f66dbb457b Fix incorrect debian/rules template. (Closes: #983492) 2021-04-07 12:09:23 -04:00
Boyuan Yang
a5a16d572f Revert "debian/control: Bump Standard-Version to 4.5.1."
This reverts commit 18e40eeabb.
2021-04-07 12:08:05 -04:00
Boyuan Yang
18e40eeabb debian/control: Bump Standard-Version to 4.5.1. 2021-04-07 12:07:16 -04:00
Adrian Bunk
1a98232df6 Import Debian version 8.95.3
alien (8.95.3) unstable; urgency=medium
.
  * QA upload.
  * Upload to unstable.
2021-04-07 12:05:10 -04:00
Jelmer Vernooij
648de61a5d Merge branch 'scrub-obsolete' into 'master'
Remove unnecessary constraints

See merge request debian/alien!1
2021-03-03 17:28:58 +00:00
Jenkins
0a70fe5858 Remove constraints unnecessary since stretch.
* alien: Drop versioned constraint on debhelper, rpm in Depends.

Changes-By: deb-scrub-obsolete
2021-02-14 15:04:11 +00:00
Thiago da Silva Gracini
e2eb7e0026 Import Debian version 8.95.2
alien (8.95.2) experimental; urgency=medium
.
  * QA upload.
  * debian/control:
      + Bump debhelper compat to v13.
      + Included Rules-Requires-Root: no
  * debian/changelog:
      + Removed trailing-whitespaces.
  * alien.pl:
      + Fixed some misspelled words.
  * Alien/Package.pm:
      + Fixed misspelled word.
  * Alien/Package/Rpm.pm:
      + Fixed misspeled word.
  * debian/rules:
      + Added a "nocheck" check on override_dh_auto_test.
2020-11-11 23:10:13 +00:00
Boyuan Yang
9b5622f8f2 Deb.pm: Use dh sequencer in rules file; bump debhelper requirement to 10+ 2020-03-29 00:07:47 -04:00
Boyuan Yang
88a0008668 Rpm.pm: Do not ship conflicting dirs (Closes: #759533)
See also: https://sourceforge.net/p/alien-pkg-convert/tickets/1/

Generated RPM packages provides directories that conflict with
the "filesystem" package. As a result, do not ship commonly-used
directories.

Patch provided by woob in the above ticket webpage.
2020-03-28 23:50:17 -04:00
Boyuan Yang
a7be498dca debian/changelog: Document changes in Vcs-* fields 2020-03-28 23:45:30 -04:00
Boyuan Yang
f11a007797 debian/control,compat: Minor fixes 2020-03-28 23:40:53 -04:00
Fabiano Antunes
9f53b73b58 Import Debian version 8.95
alien (8.95) unstable; urgency=medium

  * QA upload.
  * debian/control:
      - Bumped Standards-Version to 3.9.6.
      - Removed duplicated section field.
  * debian/copyright:
      - Replaced protocol from http to https in the Format field.
      - Included authors' e-mail addresses.
      - Replaced GPL-2+ license reference by actual GPL-2+ license.
  * debian/source/format: Created as 3.0 (native).

alien (8.94) unstable; urgency=medium

  * QA upload.
  * Fix "FTBFS with perl 5.22 in experimental (MakeMaker changes)":
    remove override_dh_auto_install in debian/rules, and 
    use DESTDIR in Makefile.PL.
    (Closes: #792371)
2020-03-28 23:37:19 -04:00
Joey Hess
bb351ddbc8 Alien needs a new maintainer, both in Debian and upstream. 2014-11-07 17:26:20 -04:00
Joey Hess
3572ac62b9 foo 2014-08-31 14:16:51 -07:00
Joey Hess
6443b942ab prep 2014-08-31 14:16:33 -07:00
Joey Hess
919297f3d1 Remove suggests for lsb-rpm, which no longer exists. Closes: #756873 2014-08-02 19:20:25 -04:00
16 changed files with 494 additions and 2830 deletions

1
.gitattributes vendored
View File

@@ -1 +0,0 @@
debian/changelog merge=dpkg-mergechangelogs

View File

@@ -62,7 +62,7 @@ The package's maintainer.
=item depends =item depends
The package's dependancies. Only dependencies that should exist on all The package's dependencies. Only dependencies that should exist on all
target distributions can be put in here though (ie: lsb). target distributions can be put in here though (ie: lsb).
=item group =item group
@@ -173,7 +173,7 @@ sub install {
=item test =item test
Test a package file. The filename is passed, should return an array of lines Test a package file. The filename is passed, should return an array of lines
of test results. Child classses may implement this. of test results. Child classes may implement this.
=cut =cut

View File

@@ -71,7 +71,7 @@ sub init {
=item checkfile =item checkfile
Detect deb files by their extention. Detect deb files by their extension.
=cut =cut
@@ -176,6 +176,8 @@ sub getcontrolfile {
$controlcomp = 'gzip -dc'; $controlcomp = 'gzip -dc';
} elsif ($controlmember eq 'control.tar.xz') { } elsif ($controlmember eq 'control.tar.xz') {
$controlcomp = 'xz -dc'; $controlcomp = 'xz -dc';
} elsif ($controlmember eq 'control.tar.zst') {
$controlcomp = 'zstd -dc';
} elsif ($controlmember eq 'control.tar') { } elsif ($controlmember eq 'control.tar') {
$controlcomp = 'cat'; $controlcomp = 'cat';
} else { } else {
@@ -210,6 +212,8 @@ sub get_datamember_cmd {
$datacomp = 'xz -dc'; $datacomp = 'xz -dc';
} elsif ($datamember eq 'data.tar.lzma') { } elsif ($datamember eq 'data.tar.lzma') {
$datacomp = 'xz -dc'; $datacomp = 'xz -dc';
} elsif ($datamember eq 'data.tar.zst') {
$datacomp = 'zstd -dc';
} elsif ($datamember eq 'data.tar') { } elsif ($datamember eq 'data.tar') {
$datacomp = 'cat'; $datacomp = 'cat';
} else { } else {
@@ -459,7 +463,7 @@ sub prep {
# Use debhelper v7 # Use debhelper v7
open (OUT, ">$dir/debian/compat") || die "$dir/debian/compat: $!"; open (OUT, ">$dir/debian/compat") || die "$dir/debian/compat: $!";
print OUT "7\n"; print OUT "10\n";
close OUT; close OUT;
# A minimal rules file. # A minimal rules file.
@@ -471,48 +475,40 @@ sub prep {
PACKAGE=\$(shell dh_listpackages) PACKAGE=\$(shell dh_listpackages)
build: %:
dh_testdir dh \$\@
clean: override_dh_clean:
dh_testdir
dh_testroot
dh_clean -d dh_clean -d
binary-indep: build override_dh_auto_configure:
binary-arch: build override_dh_auto_build:
dh_testdir
dh_testroot
dh_prep
dh_installdirs
dh_installdocs override_dh_auto_install:
dh_installchangelogs mkdir -p debian/\$(PACKAGE)
# Copy the packages's files.
# Copy the packages's files.
find . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \\ find . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \\
xargs -0 -r -i cp -a {} debian/\$(PACKAGE) sed -e s#'./'##g | \\
xargs -0 -r -i cp -a ./{} debian/\$(PACKAGE)/{}
# #
# If you need to move files around in debian/\$(PACKAGE) or do some # If you need to move files around in debian/\$(PACKAGE) or do some
# binary patching, do it here # binary patching, do it here
# #
override_dh_strip:
# This has been known to break on some wacky binaries. # This has been known to break on some wacky binaries.
# dh_strip # dh_strip
dh_compress
$fixpermscomment dh_fixperms override_dh_usrlocal:
dh_makeshlibs -dh_usrlocal || printf "Your package seems to be installing files into /usr/local/, which could be buggy. Will continue anyway.\\n"
dh_installdeb
-dh_shlibdeps override_dh_fixperms:
dh_gencontrol $fixpermscomment dh_fixperms
dh_md5sums
dh_builddeb override_dh_shlibdeps:
-dh_shlibdeps
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary
EOF EOF
close OUT; close OUT;
$this->do("chmod", 755, "$dir/debian/rules"); $this->do("chmod", 755, "$dir/debian/rules");
@@ -614,7 +610,7 @@ sub cleantree {
Set/get package name. Set/get package name.
Always returns the packge name in lowercase with all invalid characters Always returns the package name in lowercase with all invalid characters
rmoved. The name is however, stored unchanged. rmoved. The name is however, stored unchanged.
=cut =cut

View File

@@ -8,7 +8,9 @@ Alien::Package::Rpm - an object that represents a rpm package
package Alien::Package::Rpm; package Alien::Package::Rpm;
use strict; use strict;
use base qw(Alien::Package); use Exporter qw(import);
our @EXPORT_OK = qw(arch);
use base qw(Alien::Package Exporter);
=head1 DESCRIPTION =head1 DESCRIPTION
@@ -31,7 +33,7 @@ Relocatable rpm packages have a prefixes field.
=item checkfile =item checkfile
Detect rpm files by their extention. Detect rpm files by their extension.
=cut =cut
@@ -44,7 +46,7 @@ sub checkfile {
=item install =item install
Install a rpm. If RPMINSTALLOPT is set in the environement, the options in Install a rpm. If RPMINSTALLOPT is set in the environment, the options in
it are passed to rpm on its command line. it are passed to rpm on its command line.
=cut =cut
@@ -302,10 +304,142 @@ sub prep {
my $this=shift; my $this=shift;
my $dir=$this->unpacked_tree || die "The package must be unpacked first!"; my $dir=$this->unpacked_tree || die "The package must be unpacked first!";
# Exclude standard system directories
# This list is adapted from the rpmlint source code
my @standard_dirs = (
"/",
"/bin/",
"/boot/",
"/etc/",
"/etc/X11/",
"/etc/opt/",
"/etc/profile.d/",
"/etc/skel/",
"/etc/xinetd.d/",
"/home/",
"/lib/",
"/lib/modules/",
"/lib64/",
"/media/",
"/mnt/",
"/mnt/cdrom/",
"/mnt/disk/",
"/mnt/floppy/",
"/opt/",
"/proc/",
"/root/",
"/run/",
"/sbin/",
"/selinux/",
"/srv/",
"/sys/",
"/tmp/",
"/usr/",
"/usr/X11R6/",
"/usr/X11R6/bin/",
"/usr/X11R6/doc/",
"/usr/X11R6/include/",
"/usr/X11R6/lib/",
"/usr/X11R6/lib64/",
"/usr/X11R6/man/",
"/usr/X11R6/man/man1/",
"/usr/X11R6/man/man2/",
"/usr/X11R6/man/man3/",
"/usr/X11R6/man/man4/",
"/usr/X11R6/man/man5/",
"/usr/X11R6/man/man6/",
"/usr/X11R6/man/man7/",
"/usr/X11R6/man/man8/",
"/usr/X11R6/man/man9/",
"/usr/X11R6/man/mann/",
"/usr/bin/",
"/usr/bin/X11/",
"/usr/etc/",
"/usr/games/",
"/usr/include/",
"/usr/lib/",
"/usr/lib/X11/",
"/usr/lib/games/",
"/usr/lib/gcc-lib/",
"/usr/lib/menu/",
"/usr/lib64/",
"/usr/lib64/gcc-lib/",
"/usr/local/",
"/usr/local/bin/",
"/usr/local/doc/",
"/usr/local/etc/",
"/usr/local/games/",
"/usr/local/info/",
"/usr/local/lib/",
"/usr/local/lib64/",
"/usr/local/man/",
"/usr/local/man/man1/",
"/usr/local/man/man2/",
"/usr/local/man/man3/",
"/usr/local/man/man4/",
"/usr/local/man/man5/",
"/usr/local/man/man6/",
"/usr/local/man/man7/",
"/usr/local/man/man8/",
"/usr/local/man/man9/",
"/usr/local/man/mann/",
"/usr/local/sbin/",
"/usr/local/share/",
"/usr/local/share/man/",
"/usr/local/share/man/man1/",
"/usr/local/share/man/man2/",
"/usr/local/share/man/man3/",
"/usr/local/share/man/man4/",
"/usr/local/share/man/man5/",
"/usr/local/share/man/man6/",
"/usr/local/share/man/man7/",
"/usr/local/share/man/man8/",
"/usr/local/share/man/man9/",
"/usr/local/share/man/mann/",
"/usr/local/src/",
"/usr/sbin/",
"/usr/share/",
"/usr/share/dict/",
"/usr/share/doc/",
"/usr/share/icons/",
"/usr/share/info/",
"/usr/share/man/",
"/usr/share/man/man1/",
"/usr/share/man/man2/",
"/usr/share/man/man3/",
"/usr/share/man/man4/",
"/usr/share/man/man5/",
"/usr/share/man/man6/",
"/usr/share/man/man7/",
"/usr/share/man/man8/",
"/usr/share/man/man9/",
"/usr/share/man/mann/",
"/usr/share/misc/",
"/usr/src/",
"/usr/tmp/",
"/var/",
"/var/cache/",
"/var/db/",
"/var/lib/",
"/var/lib/games/",
"/var/lib/misc/",
"/var/lib/rpm/",
"/var/local/",
"/var/log/",
"/var/mail/",
"/var/nis/",
"/var/opt/",
"/var/preserve/",
"/var/spool/",
"/var/spool/mail/",
"/var/tmp/"
);
# Place %config in front of files that are conffiles. # Place %config in front of files that are conffiles.
my @conffiles = @{$this->conffiles}; my @conffiles = @{$this->conffiles};
my $filelist; my $filelist;
foreach my $fn (@{$this->filelist}) { foreach my $fn (@{$this->filelist}) {
if (! grep(m:^\Q$fn\E$:,@standard_dirs)) {
# Unquote any escaped characters in filenames - needed for # Unquote any escaped characters in filenames - needed for
# non ascii characters. (eg. iso_8859-1 latin set) # non ascii characters. (eg. iso_8859-1 latin set)
if ($fn =~ /\\/) { if ($fn =~ /\\/) {
@@ -324,6 +458,7 @@ sub prep {
$filelist.=qq{"$fn"\n}; $filelist.=qq{"$fn"\n};
} }
} }
}
# Write out the spec file. # Write out the spec file.
my $spec="$dir/".$this->name."-".$this->version."-".$this->release.".spec"; my $spec="$dir/".$this->name."-".$this->version."-".$this->release.".spec";
@@ -392,7 +527,7 @@ sub cleantree {
=item build =item build
Build a rpm. If RPMBUILDOPT is set in the environement, the options in Build a rpm. If RPMBUILDOPT is set in the environment, the options in
it are passed to rpm on its command line. it are passed to rpm on its command line.
An optional parameter, if passed, can be used to specify the program to use An optional parameter, if passed, can be used to specify the program to use
@@ -479,7 +614,7 @@ sub version {
Set/get script fields. Set/get script fields.
When retrieving a value, we have to do some truely sick mangling. Since When retrieving a value, we have to do some truly sick mangling. Since
debian/slackware scripts can be anything -- perl programs or binary files debian/slackware scripts can be anything -- perl programs or binary files
-- and rpm is limited to only shell scripts, we need to encode the files -- and rpm is limited to only shell scripts, we need to encode the files
and add a scrap of shell script to make it unextract and run on the fly. and add a scrap of shell script to make it unextract and run on the fly.
@@ -564,7 +699,7 @@ sub prerm {
Set/get arch field. When the arch field is set, some sanitizing is done Set/get arch field. When the arch field is set, some sanitizing is done
first to convert it to the debian format used internally. When it's first to convert it to the debian format used internally. When it's
retreived it's converted back to rpm form from the internal form. retrieved it's converted back to rpm form from the internal form.
=cut =cut
@@ -611,6 +746,10 @@ sub arch {
# Treat armv7l as armel. # Treat armv7l as armel.
$arch='armel'; $arch='armel';
} }
elsif ($arch eq 'aarch64') {
# Treat aarch64 as arm64.
$arch='arm64';
}
elsif ($arch eq 'parisc') { elsif ($arch eq 'parisc') {
$arch='hppa'; $arch='hppa';
} }
@@ -636,6 +775,9 @@ sub arch {
elsif ($arch eq 'all') { elsif ($arch eq 'all') {
$arch='noarch'; $arch='noarch';
} }
elsif ($arch eq 'arm64') {
$arch='aarch64';
}
elsif ($arch eq 'ppc64el') { elsif ($arch eq 'ppc64el') {
$arch='ppc64le'; $arch='ppc64le';
} }

View File

@@ -35,7 +35,7 @@ character, I=unsigned integer.)
=item footer_version =item footer_version
What package format are we up to now? (Lowest one this is still What package format are we up to now? (Lowest one this is still
compatable with.) compatible with.)
=item archtrans =item archtrans
@@ -93,7 +93,7 @@ Holds the slp package format version of the slp file.
=item checkfile =item checkfile
Detect slp files by their extention. Detect slp files by their extension.
=cut =cut
@@ -270,7 +270,7 @@ Set/get conffiles.
When the conffiles are set, the format used by slp (a colon-delimited list) When the conffiles are set, the format used by slp (a colon-delimited list)
is turned into the real list that is used internally. The list is changed is turned into the real list that is used internally. The list is changed
back into slp's internal format when it is retreived. back into slp's internal format when it is retrieved.
=cut =cut
@@ -291,7 +291,7 @@ Set/get copyright.
When the copyright is set, the number used by slp is changed into a textual When the copyright is set, the number used by slp is changed into a textual
description. This is changed back into a number when the value is description. This is changed back into a number when the value is
retreived. retrieved.
=cut =cut
@@ -315,7 +315,7 @@ Set/get arch.
When the arch is set, the number used by slp is changed into a textual When the arch is set, the number used by slp is changed into a textual
description. This is changed back into a number when the value is description. This is changed back into a number when the value is
retreived. retrieved.
=cut =cut
@@ -341,7 +341,7 @@ sub arch {
Set/get release version. Set/get release version.
When the release version is retreived, it is converted to an unsigned When the release version is retrieved, it is converted to an unsigned
integer, as is required by the slp package format. integer, as is required by the slp package format.
=cut =cut

View File

@@ -10,6 +10,7 @@ package Alien::Package::Tgz;
use strict; use strict;
use base qw(Alien::Package); use base qw(Alien::Package);
use Cwd qw(abs_path); use Cwd qw(abs_path);
use Alien::Package::Rpm qw(arch);
my $tarext=qr/\.(?:tgz|tar(?:\.(?:gz|Z|z|bz|bz2))?|taz)$/; my $tarext=qr/\.(?:tgz|tar(?:\.(?:gz|Z|z|bz|bz2))?|taz)$/;
@@ -45,7 +46,7 @@ use constant scripttrans => {
=item checkfile =item checkfile
Detect tgz files by their extention. Detect tgz files by their extension.
=cut =cut
@@ -96,7 +97,7 @@ sub scan {
# Get basename of the filename. # Get basename of the filename.
my ($basename)=('/'.$file)=~m#^/?.*/(.*?)$#; my ($basename)=('/'.$file)=~m#^/?.*/(.*?)$#;
# Strip out any tar extentions. # Strip out any tar extensions.
$basename=~s/$tarext//; $basename=~s/$tarext//;
if ($basename=~m/([\w-]+)-([0-9\.?]+).*/) { if ($basename=~m/([\w-]+)-([0-9\.?]+).*/) {
@@ -110,8 +111,92 @@ sub scan {
$this->arch('all'); $this->arch('all');
# Attempt to extract slack-desc
my $slack_desc_content = $this->runpipe(1, "tar Oxf '$file' install/slack-desc 2>/dev/null");
my $pkg_name = $this->name(); # Get package name early
if ($slack_desc_content && $slack_desc_content =~ /\S/) {
my @slack_lines = split /\n/, $slack_desc_content;
# Default values if parsing fails or parts are missing
my $default_summary_text = "Package from tgz file (slack-desc found)";
my $default_description_text = "Package from tgz file (slack-desc found)";
$this->summary($default_summary_text);
$this->description($default_description_text);
my $summary_parsed_successfully = 0;
if (@slack_lines) {
my $first_line = $slack_lines[0]; # Peek at first line
# Try to parse summary from the first line using the strict format
if ($first_line =~ /^\Q$pkg_name\E: \Q$pkg_name\E \((.+)\)\s*$/) {
my $summary_candidate = $1;
if ($summary_candidate =~ /\S/) { # Check if captured summary is not just whitespace
$this->summary($summary_candidate);
$this->description($summary_candidate); # Initial guess for description
shift @slack_lines; # Consume the line as it was successfully parsed
$summary_parsed_successfully = 1;
}
}
}
# Description Parsing from remaining lines (or all lines if summary parse failed)
my @description_parts;
my $expected_prefix_regex = qr/^\Q$pkg_name\E: /; # $pkg_name: <text>
my $paragraph_break_regex = qr/^\Q$pkg_name\E:$/; # $pkg_name:
foreach my $line (@slack_lines) {
if ($line =~ $paragraph_break_regex) {
push @description_parts, ""; # Paragraph break
} elsif ((my $desc_content = $line) =~ s/$expected_prefix_regex//) {
# Prefix was stripped, $desc_content now holds the rest
push @description_parts, $desc_content;
} else {
# Line does not match strict format, ignore it for description.
# This handles cases where the first line was not a valid summary
# and is now being re-evaluated here but doesn't fit description format either.
}
}
if (@description_parts) {
my $parsed_description = join("\n", @description_parts);
# Remove leading/trailing empty lines from the final description block
$parsed_description =~ s/^\n+//;
$parsed_description =~ s/\n+$/\n/; # Keep single trailing newline if content, or make it one if many
$parsed_description =~ s/\s+$//; # Trim trailing whitespace overall, including last newline if it was just that
if ($parsed_description =~ /\S/) {
$this->description($parsed_description);
# If summary is still the generic default, but we have a description,
# try to set summary from the first line of this description.
if ($this->summary() eq $default_summary_text) {
my ($first_desc_line) = split /\n/, $parsed_description;
if ($first_desc_line && length($first_desc_line) < 100 && $first_desc_line =~ /\S/) {
$this->summary($first_desc_line);
}
}
} else {
# Description parts were found but resulted in an empty string (e.g. only paragraph markers)
# Revert to summary if summary was good, or default if summary was also default.
if ($summary_parsed_successfully) {
$this->description($this->summary());
} else {
$this->description($default_description_text); # Keep default
}
}
} elsif (!$summary_parsed_successfully) {
# No description parts AND summary was not parsed successfully means slack-desc was
# present but entirely unparsable or empty after the first line (if any).
# Summary and Description remain $default_summary_text.
}
# If summary was parsed but no description lines, description is already set to summary.
} else {
# Original behavior if slack-desc is not found or empty
$this->summary("Converted tgz package"); $this->summary("Converted tgz package");
$this->description($this->summary); $this->description($this->summary);
}
$this->copyright('unknown'); $this->copyright('unknown');
$this->release(1); $this->release(1);
$this->distribution("Slackware/tarball"); $this->distribution("Slackware/tarball");
@@ -177,6 +262,161 @@ sub unpack {
return 1; return 1;
} }
# Helper function for _format_slack_desc
sub _format_slack_desc_section {
my ($pkgname, $text_content, $num_target_lines, $max_total_line_length) = @_;
my $line_prefix_with_space = "$pkgname: ";
my $line_prefix_no_space = "$pkgname:";
# Max length for the actual content, after the prefix
my $max_content_len = $max_total_line_length - length($line_prefix_with_space);
# Ensure max_content_len is somewhat reasonable if pkgname is very long
$max_content_len = 10 if $max_content_len < 10;
my @formatted_lines;
$text_content = "" if !defined $text_content; # Ensure defined
my @segments = split /\n/, $text_content;
# If text_content was empty, split results in one empty segment.
# If text_content ended with \n, split might produce an extra empty segment.
# We want to preserve intentional paragraph breaks (empty segments from \n\n).
# Special case: if text_content is completely empty, segments will be [""]
# and num_target_lines is 1, it should produce one "$pkgname:" line.
# If text_content is non-empty but results in no words (e.g. " \n "),
# it should also be handled gracefully.
SEGMENT: foreach my $segment (@segments) {
last SEGMENT if scalar(@formatted_lines) >= $num_target_lines;
# Trim whitespace from segment. If it becomes empty, it's a paragraph break.
$segment =~ s/^\s+|\s+$//g;
if ($segment eq "") {
push @formatted_lines, $line_prefix_no_space;
next SEGMENT;
}
my @words = split /\s+/, $segment;
next SEGMENT if !@words; # Should not happen if segment was non-empty after trim
my $current_line_buffer = ""; # Holds content part of the line
WORD: foreach my $word (@words) {
if (scalar(@formatted_lines) >= $num_target_lines && $current_line_buffer eq "") {
# Already filled target lines and current buffer for this segment is empty
last SEGMENT;
}
# Check if a single word itself is too long
if (length($word) > $max_content_len) {
# If buffer has content, push it first
if ($current_line_buffer ne "") {
last SEGMENT if scalar(@formatted_lines) >= $num_target_lines;
push @formatted_lines, $line_prefix_with_space . $current_line_buffer;
$current_line_buffer = "";
}
# Push the long word, truncated, on its own line
last SEGMENT if scalar(@formatted_lines) >= $num_target_lines;
push @formatted_lines, $line_prefix_with_space . substr($word, 0, $max_content_len);
# The rest of the word is lost, as per typical shell script behavior (often implicit)
# Or, decide if $word should become the remainder: $word = substr($word, $max_content_len); and re-evaluate
# For now, simply truncating and moving to next word in input.
# Given the spec, it's more about fitting, so a very long word will just fill one line.
next WORD; # Move to next word, current long word handled.
}
if ($current_line_buffer eq "") {
$current_line_buffer = $word;
} else {
my $potential_line = $current_line_buffer . " " . $word;
if (length($potential_line) <= $max_content_len) {
$current_line_buffer = $potential_line;
} else {
last SEGMENT if scalar(@formatted_lines) >= $num_target_lines;
push @formatted_lines, $line_prefix_with_space . $current_line_buffer;
$current_line_buffer = $word;
}
}
}# end WORD loop
# Push any remaining content in buffer for the current segment
if ($current_line_buffer ne "") {
last SEGMENT if scalar(@formatted_lines) >= $num_target_lines;
push @formatted_lines, $line_prefix_with_space . $current_line_buffer;
}
} # end SEGMENT loop
# Pad with "$pkgname:" or truncate to meet exactly $num_target_lines
while (scalar(@formatted_lines) < $num_target_lines) {
push @formatted_lines, $line_prefix_no_space;
}
if (scalar(@formatted_lines) > $num_target_lines) {
@formatted_lines = @formatted_lines[0 .. $num_target_lines - 1];
}
return @formatted_lines;
}
sub _format_slack_desc {
my $this = shift;
my $pkgname = $this->name() || "unknown"; # Should usually be defined
my $summary = $this->summary();
my $description = $this->description();
my $homepage_url = ""; # Fixed as per requirement
# Ensure summary is a single, trimmed line
$summary = "" if !defined $summary;
$summary =~ s/\n.*//s; # Keep only the first line
$summary =~ s/^\s+|\s+$//g; # Trim whitespace
$summary = "No summary" if $summary eq "";
$description = "" if !defined $description;
# Newlines in description are paragraph separators, handled by _format_slack_desc_section
my $screen_width = 72 + length($pkgname);
my $ruler_header = "# HOW TO EDIT THIS FILE:\n# The \"handy ruler\" below makes it easier to edit a package description.\n# Line up the first '|' above the ':' following the base package name, and\n# the '|' on the right side marks the last column you can put a character in.\n# You must make exactly 11 lines for the formatting to be correct. It's also\n# customary to leave one space after the ':' except on otherwise blank lines.\n\n";
my $ruler_gap = ' ' x length($pkgname);
my $ruler_base = $ruler_gap . "|-----handy-ruler--";
# Screen width is total, ruler includes the final '|', so -1 from screen_width for filling
my $ruler_fill_count = $screen_width - 1 - length($ruler_base);
$ruler_fill_count = 0 if $ruler_fill_count < 0; # Ensure not negative
my $ruler_line = $ruler_base . ('-' x $ruler_fill_count) . '|';
my $complete_ruler_block = $ruler_header . $ruler_line . "\n";
# Section 1: Summary (1 line)
# The format "$pkgname ($summary)" is part of the text_content for this section
my $summary_content_for_section = "$pkgname ($summary)";
my @summary_section = _format_slack_desc_section($pkgname, $summary_content_for_section, 1, $screen_width);
# Section 2: Empty line (1 line)
# This is effectively an empty paragraph
my @empty_section = _format_slack_desc_section($pkgname, "", 1, $screen_width);
# Ensure it's just "$pkgname:" as per spec for empty lines
$empty_section[0] = "$pkgname:" if @empty_section;
# Section 3: Description (8 lines)
my @description_section = _format_slack_desc_section($pkgname, $description, 8, $screen_width);
# Section 4: Homepage (1 line)
my @homepage_section = _format_slack_desc_section($pkgname, $homepage_url, 1, $screen_width);
# Ensure it's just "$pkgname:" if homepage_url is empty
if ($homepage_url eq "" && @homepage_section) {
$homepage_section[0] = "$pkgname:";
}
my $all_content_lines = join("\n", @summary_section, @empty_section, @description_section, @homepage_section);
return $complete_ruler_block . $all_content_lines . "\n";
}
=item prep =item prep
Adds a populated install directory to the build tree. Adds a populated install directory to the build tree.
@@ -186,16 +426,41 @@ Adds a populated install directory to the build tree.
sub prep { sub prep {
my $this=shift; my $this=shift;
my $dir=$this->unpacked_tree || die "The package must be unpacked first!"; my $dir=$this->unpacked_tree || die "The package must be unpacked first!";
my $install_dir = $dir."/install";
my $install_made=0; my $install_made=0;
# Check if install directory already exists (e.g. from unpacking)
if (-d $install_dir) {
$install_made = 1;
}
# Generate and write slack-desc if description is meaningful
my $description = $this->description();
my $summary = $this->summary();
if (defined $description && $description =~ /\S/ && $description ne "Converted tgz package" && $description ne $summary) {
my $slack_desc_content = $this->_format_slack_desc();
if ($slack_desc_content && $slack_desc_content =~ /\S/) {
if (!$install_made) {
mkdir($install_dir, 0755)
|| die "unable to mkdir $install_dir: $!";
$install_made=1;
}
my $slack_desc_path = $install_dir."/slack-desc";
open (SLACKDESC, ">$slack_desc_path") || die "Unable to open $slack_desc_path for writing: $!";
print SLACKDESC $slack_desc_content;
close SLACKDESC;
chmod(0644, $slack_desc_path) || $this->warn("Could not chmod $slack_desc_path: $!");
}
}
if ($this->usescripts) { if ($this->usescripts) {
foreach my $script (keys %{scripttrans()}) { foreach my $script (keys %{scripttrans()}) {
my $data=$this->$script(); my $data=$this->$script();
my $out=$this->unpacked_tree."/install/".${scripttrans()}{$script}; my $out=$install_dir."/".${scripttrans()}{$script};
next if ! defined $data || $data =~ m/^\s*$/; next if ! defined $data || $data =~ m/^\s*$/;
if (!$install_made) { if (!$install_made) {
mkdir($this->unpacked_tree."/install", 0755) mkdir($install_dir, 0755)
|| die "unable to mkdir ".$this->unpacked_tree."/install: $!"; || die "unable to mkdir $install_dir: $!";
$install_made=1; $install_made=1;
} }
open (OUT, ">$out") || die "$out: $!"; open (OUT, ">$out") || die "$out: $!";
@@ -214,11 +479,18 @@ Build a tgz.
sub build { sub build {
my $this=shift; my $this=shift;
my $tgz=$this->name."-".$this->version.".tgz"; my $arch = Alien::Package::Rpm::arch($this, @_);
my $tgz=$this->name."-".$this->version."-".$arch."-1_alien.tgz";
$this->do("cd ".$this->unpacked_tree."; tar czf ../$tgz .") if (-x "/sbin/makepkg") {
or die "Package build failed"; my $v=$Alien::Package::verbose;
$Alien::Package::verbose=2;
$this->do("cd ".$this->unpacked_tree."; makepkg -l y -c n ../$tgz .")
or die "Unable to make pkg";
$Alien::Package::verbose=$v;
}
else {
die "Sorry, I cannot generate the .tgz file because /sbin/makepkg is not present.\n"
}
return $tgz; return $tgz;
} }

View File

@@ -19,17 +19,11 @@ VER=$(shell perl -e '$$_=<>;print m/\((.*?)\)/'<debian/changelog)
all:: extra_build all:: extra_build
clean:: extra_build clean:: extra_build
install:: extra_install
pure_install:: extra_install
extra_build: extra_build:
perl -i -pe "s/\@version\@/$(VER)/g" <alien.lsm.in >alien.lsm perl -i -pe "s/\@version\@/$(VER)/g" <alien.lsm.in >alien.lsm
perl -i -pe "s/\@version\@/$(VER)/g" <alien.spec.in >alien.spec perl -i -pe "s/\@version\@/$(VER)/g" <alien.spec.in >alien.spec
extra_install:
install -d $(PREFIX)/share/alien/patches \
$(VARPREFIX)/var/lib/alien
alien: alien:
perl -pe '$$_="" if /use lib/; $$_="our \$$Version=\"$(VER)\";\n" if /VERSION_AUTOREPLACE/' alien.pl > alien perl -pe '$$_="" if /use lib/; $$_="our \$$Version=\"$(VER)\";\n" if /VERSION_AUTOREPLACE/' alien.pl > alien
} }

View File

@@ -1,6 +1,6 @@
Begin3 Begin3
Title: alien Title: alien
Version: 8.91 Version: 8.95.2
Entered-date: 31MAR97 Entered-date: 31MAR97
Description: Alien converts Slackware .tgz packages, Red Hat .rpm packages, Description: Alien converts Slackware .tgz packages, Red Hat .rpm packages,
Debian .deb packages, and Stampede .slp packages. It can Debian .deb packages, and Stampede .slp packages. It can
@@ -9,6 +9,6 @@ Description: Alien converts Slackware .tgz packages, Red Hat .rpm packages,
Keywords: debian dpkg deb red hat redhat rpm slackware tgz stampede slp convert package LSB Keywords: debian dpkg deb red hat redhat rpm slackware tgz stampede slp convert package LSB
Author: joey@kitenet.net Author: joey@kitenet.net
Primary-site: sunsite.unc.edu /pub/Linux/utils/package Primary-site: sunsite.unc.edu /pub/Linux/utils/package
80 alien-8.91.tar.gz 80 alien-8.95.2.tar.gz
Copying-policy: GPL Copying-policy: GPL
End End

View File

@@ -37,7 +37,7 @@ installed.
=item lsb =item lsb
Unlike the other package formats, B<alien> can handle the depenendencies of Unlike the other package formats, B<alien> can handle the dependencies of
lsb packages if the destination package format supports dependencies. Note lsb packages if the destination package format supports dependencies. Note
that this means that the package generated from a lsb package will depend on that this means that the package generated from a lsb package will depend on
a package named "lsb" -- your distribution should provide a package by that a package named "lsb" -- your distribution should provide a package by that
@@ -149,7 +149,7 @@ built.
=item B<--anypatch> =item B<--anypatch>
Be less strict about which patch file is used, perhaps attempting to use a patch Be less strict about which patch file is used, perhaps attempting to use a patch
file for an older verson of the package. This is not guaranteed to always work; file for an older version of the package. This is not guaranteed to always work;
older patches may not necessarily work with newer packages. older patches may not necessarily work with newer packages.
=item B<--nopatch> =item B<--nopatch>
@@ -158,12 +158,12 @@ Do not use any patch files.
=item B<--description=>I<desc> =item B<--description=>I<desc>
Specifiy a description for the package. This only has an effect when Specify a description for the package. This only has an effect when
converting from the tgz package format, which lacks descriptions. converting from the tgz package format, which lacks descriptions.
=item B<--version=>I<version> =item B<--version=>I<version>
Specifiy a version for the package. This only has an effect when Specify a version for the package. This only has an effect when
converting from the tgz package format, which may lack version converting from the tgz package format, which may lack version
information. information.

View File

@@ -1,12 +1,12 @@
Summary: Install Debian, Slackware, and Stampede packages with rpm. Summary: Install Debian, Slackware, and Stampede packages with rpm.
Name: alien Name: alien
Packager: Joey Hess <joey@kitenet.net> Packager: Joey Hess <joey@kitenet.net>
Version: 8.91 Version: 8.95.2
Release: 1 Release: 1
Source: ftp://kitenet.net/pub/code/debian/alien_8.91.tar.gz Source: ftp://kitenet.net/pub/code/debian/alien_8.95.2.tar.gz
License: GPL License: GPL
Group: Utilities/File Group: Utilities/File
Buildroot: /tmp/alien-8.91.build Buildroot: /tmp/alien-8.95.2.build
Requires: perl Requires: perl
BuildArchitectures: noarch BuildArchitectures: noarch
@@ -20,7 +20,7 @@ This is a tool only suitable for binary packages.
%prep %prep
%setup -n alien %setup -n alien
rm -rf /tmp/alien-8.91.build rm -rf /tmp/alien-8.95.2.build
%install %install
perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr

2682
debian/changelog vendored

File diff suppressed because it is too large Load Diff

1
debian/compat vendored
View File

@@ -1 +0,0 @@
9

21
debian/control vendored
View File

@@ -1,21 +0,0 @@
Source: alien
Section: admin
Priority: optional
Build-Depends: debhelper (>= 9)
Maintainer: Joey Hess <joeyh@debian.org>
Standards-Version: 3.9.5
Vcs-Git: git://git.kitenet.net/alien
Homepage: http://kitenet.net/~joey/code/alien/
Package: alien
Architecture: all
Section: admin
Depends: debhelper (>= 7), ${misc:Depends}, ${perl:Depends}, rpm (>= 2.4.4-2), dpkg-dev, make, cpio, rpm2cpio
Suggests: patch, bzip2, lsb-rpm, lintian, lzma
Description: convert and install rpm and other packages
Alien allows you to convert LSB, Red Hat, Stampede and Slackware Packages
into Debian packages, which can be installed with dpkg.
.
It can also generate packages of any of the other formats.
.
This is a tool only suitable for binary packages.

13
debian/copyright vendored
View File

@@ -1,13 +0,0 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: native package
Files: *
Copyright:
1996, 1997 Christoph Lameter
1997 Randolph Chung
2001 Mark A. Hershberger
1997-2011 Joey Hess
License: GPL-2+
On Debian systems, the complete text of the GPL can be found in
/usr/share/common-licenses/GPL.

2
debian/docs vendored
View File

@@ -1,2 +0,0 @@
README
gendiff.txt

20
debian/rules vendored
View File

@@ -1,20 +0,0 @@
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_test:
# simple smoke test
./alien.pl -V
override_dh_auto_install:
$(MAKE) pure_install INSTALLDIRS=vendor \
PREFIX=$(shell pwd)/debian/alien/$(shell perl -MConfig -e 'print $$Config{prefix}') \
VARPREFIX=$(shell pwd)/debian/alien
override_dh_auto_clean:
# distclean moans about MANIFEST, this is quieter
if [ -e Makefile ]; then $(MAKE) realclean; fi
# Not intended for use by anyone except the author.
announcedir:
@echo ${HOME}/src/joeywiki/code/alien/news