3 # $NetBSD: port2pkg.pl,v 1.4 2000/04/26 16:18:59 sakamoto Exp $
10 my($maintainer) = "packages\@netbsd.org";
11 my($makefile, $master_site_subdir, $extract_cmd);
12 my($portsdir, $pkgdir);
13 my($namespace, $portname, $portversion, $distname,
14 $pkgname, $pkgnameprefix, $pkgnamesuffix);
17 &usage_and_exit() if (! &Getopts('m:'));
22 &usage_and_exit() if (! $portsdir || ! $pkgdir);
24 $maintainer = $opt_m if ($opt_m);
25 die "$portsdir: $!\n" if (! -d "$portsdir");
27 if (mkdir($pkgdir, 0755) == 0) {
32 system("${GTAR} cCf $portsdir - .|${GTAR} xCf $pkgdir -");
39 system("(cd $pkgdir; pkglint)");
43 print "port2pkg [-m maintainer] portsdir pkgdir\n";
48 open(PORTS, "$portsdir/Makefile")
49 || die "$portsdir/Makefile: $!\n";
59 my ($extract_before_args, $extract_after_args);
60 foreach my $line (split(/\n/, $makefile)) {
62 if (/^PORTNAME\?*=(\s*)(.*)/) {
65 } elsif (/^PORTVERSION\?*=\s*(.*)/) {
67 } elsif (/^PKGNAMEPREFIX\?*=\s*(.*)/) {
69 } elsif (/^PKGNAMESUFFIX\?*=\s*(.*)/) {
71 } elsif (/^DISTNAME\?*=\s*(.*)/) {
73 } elsif (/^MASTER_SITE_SUBDIR\?*=\s*(.*)/) {
74 $master_site_subdir = $1;
75 if (!($master_site_subdir =~ /\/$/)) {
76 $master_site_subdir .= "/";
78 } elsif (/^MAN(.)\?*=\s*(.*)/) {
80 } elsif (/^CAT(.)\?*=\s*(.*)/) {
82 } elsif (/^EXTRACT_CMD\?*=\s*(.*)/) {
84 } elsif (/^EXTRACT_BEFORE_ARGS\?*=\s*(.*)/) {
85 $extract_before_args = $1;
86 } elsif (/^EXTRACT_AFTER_ARGS\?*=\s*(.*)/) {
87 $extract_after_args = $1;
91 if (defined($extract_cmd) && $extract_cmd ne "") {
92 if ($extract_before_args ne "") {
93 $extract_before_args = " $extract_before_args";
95 if ($extract_after_args ne "") {
96 $extract_after_args = " $extract_after_args";
98 $extract_cmd = "$extract_cmd$extract_before_args" .
99 " \${DOWNLOADED_DISTFILE}$extract_after_args";
102 if (defined($distname)) {
103 $distname =~ s/\${PORTNAME}/$portname/;
104 $distname =~ s/\${PORTVERSION}/$portversion/;
106 if ($distname ne "$portname-$portversion") {
107 $pkgname = "$portname-$portversion";
110 $distname = "$portname-$portversion";
112 if (defined($pkgnameprefix)) {
113 $pkgname = $distname unless (defined($pkgname));
114 $pkgname = $pkgnameprefix . $pkgname;
116 if (defined($pkgnamesuffix)) {
117 $pkgname = $distname unless (defined($pkgname));
118 $pkgname .= $pkgnamesuffix;
123 open(PORTS, "$portsdir/Makefile")
124 || die "$portsdir/Makefile: $!\n";
125 open(PKG, ">$pkgdir/Makefile")
126 || die "$pkgdir/Makefile: $!\n";
128 print PKG "# \$NetBSD\$\n";
134 if (/\$FreeBSD(: .*) \$/ || /\$Id(: .*) \$/) {
135 print PKG "\# FreeBSD Id$1\n";
143 my ($nextline, $remove, $master_sites, $noportdocs);
156 s|^\.include <bsd.port.pre.mk>|.include \"../../mk/bsd.prefs.mk\"|;
157 s|^\.include <bsd.port.mk>|.include \"../../mk/bsd.pkg.mk\"|;
158 s|^FETCH_(DEPENDS)|BUILD_$1|;
159 s|^LIB_(DEPENDS)|$1|;
160 s|\$\{PORTSDIR\}|../..|g;
161 s|PLIST_SUB|PLIST_SUBST|;
163 if (defined($master_site_subdir) &&
164 $master_site_subdir ne "" &&
165 ($master_sites || /^MASTER_SITES\?*=/)) {
166 s|([^L][^O][^C][^A][^L])\}|$1:=$master_site_subdir}|g;
175 if (/(\/usr\/local)/ ||
179 /(.*cat.*MESSAGE.*)/i) {
180 print "WARN: found \"$1\"\n";
183 if (/^PORTVERSION/ ||
189 /^MASTER_SITE_SUBDIR/ ||
190 /^EXTRACT_BEFORE_ARGS/ ||
191 /^EXTRACT_AFTER_ARGS/) {
192 $remove if ($nextline);
193 } elsif (/^PORTNAME/) {
194 print PKG "DISTNAME=$namespace$distname\n";
195 print PKG "PKGNAME=$namespace$pkgname\n" if defined($pkgname);
196 $remove if ($nextline);
197 } elsif (/^(EXTRACT_CMD\?*=)/) {
198 print PKG "$1\t$extract_cmd\n";
199 $remove if ($nextline);
200 } elsif (/^(MAINTAINER\?*=)/) {
201 print PKG "$1\t$maintainer\n";
202 $remove if ($nextline);
204 open(DESCR, "$pkgdir/pkg/DESCR")
205 || die "$pkgdir/pkg/DESCR: $!\n";
208 if (/^WWW:[\s]*(.*)/) {
209 print PKG "HOMEPAGE=\t$1\n";
213 } elsif ($noportdocs || /^\.if.*NOPORTDOCS/) {
216 print PKG $_ if ($noportdocs > 2);
217 } elsif (/^\.endif/) {
219 print PKG $_ if ($noportdocs > 2);
233 my ($FILE, $category) = @_;
235 for (my $i = 1; $i <= 8; $i++) {
236 next if (!defined(eval "\$$category\[\$i\]"));
237 foreach my $item (sort(split(/[ \t\n]+/,
238 eval "\$$category\[\$i\]"))) {
239 print $FILE "$category/$category$i/$item\n";
246 return 0 if (opendir(PKGDIR, "$portsdir/pkg") == 0);
247 while ($plist = readdir(PKGDIR)) {
248 next if (!($plist =~ /^PLIST/));
250 open(PORTS, "$portsdir/pkg/$plist")
251 || die "$portsdir/pkg/$plist: $!\n";
252 open(PKG, ">$pkgdir/pkg/$plist")
253 || die "$pkgdir/pkg/$plist: $!\n";
255 print PKG "\@comment \$NetBSD\$\n";
256 my ($cat_added, $man_added);
258 s|\%\%([^\%]+)\%\%|\${$1}|g;
259 next if (/^\@.*ldconfig/);
260 if (defined($cat_added) && $cat_added == 0 && /^[d-z]/){
261 &add_manual(*PKG, "cat");
264 if (defined($man_added) && $man_added == 0 && /^[n-z]/){
265 &add_manual(*PKG, "man");
271 if (defined($cat_added) && $cat_added == 0)
272 {&add_manual(*PKG, "cat");}
273 if (defined($man_added) && $man_added == 0)
274 {&add_manual(*PKG, "man");}
284 if (open(MD5, "$portsdir/files/md5")) {
285 open(NMD5, ">$pkgdir/files/md5")
286 || die "$pkgdir/files/md5: $!\n";
287 print NMD5 "\$NetBSD\$\n\n";
295 return 0 if (opendir(PATCHDIR, "$portsdir/patches") == 0);
296 while ($patch = readdir(PATCHDIR)) {
297 if ($patch eq "\." || $patch eq "\.."
298 || $patch eq "CVS") {next;}
299 if (open(PATCH, "$portsdir/patches/$patch")) {
300 open(NPATCH, ">$pkgdir/patches/$patch")
301 || die "$pkgdir/patches/$patch: $!\n";
302 print NPATCH "\$NetBSD\$\n\n";
306 print "WARN: $pkgdir/patches/" .
307 "$patch includes \"$1\".\n";