3 # $NetBSD: port2pkg.pl,v 1.3 1999/09/14 00:43:20 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, $pkgname);
16 if (! &Getopts('m:')) {&usage_and_exit();}
21 if (! $portsdir || ! $pkgdir) {&usage_and_exit();}
23 if ($opt_m) {$maintainer = $opt_m;}
24 if (! -d "$portsdir") {die "$portsdir: $!\n";}
26 if (mkdir($pkgdir, 0755) == 0) {
31 system("${GTAR} cCf $portsdir - .|${GTAR} xCf $pkgdir -");
38 system("(cd $pkgdir; pkglint)");
42 print "port2pkg [-m maintainer] portsdir pkgdir\n";
47 open(PORTS, "$portsdir/Makefile")
48 || die "$portsdir/Makefile: $!\n";
58 my ($extract_before_args, $extract_after_args);
59 foreach my $line (split(/\n/, $makefile)) {
61 if (/^PORTNAME\?*=(\s*)(.*)/) {
64 } elsif (/^PORTVERSION\?*=\s*(.*)/) {
66 } elsif (/^DISTNAME\?*=\s*(.*)/) {
68 } elsif (/^MASTER_SITE_SUBDIR\?*=\s*(.*)/) {
69 $master_site_subdir = $1;
70 if (!($master_site_subdir =~ /\/$/)) {
71 $master_site_subdir .= "/";
73 } elsif (/^MAN(.)\?*=\s*(.*)/) {
75 } elsif (/^CAT(.)\?*=\s*(.*)/) {
77 } elsif (/^EXTRACT_CMD\?*=\s*(.*)/) {
79 } elsif (/^EXTRACT_BEFORE_ARGS\?*=\s*(.*)/) {
80 $extract_before_args = $1;
81 } elsif (/^EXTRACT_AFTER_ARGS\?*=\s*(.*)/) {
82 $extract_after_args = $1;
86 if (defined($extract_cmd) && $extract_cmd ne "") {
87 if ($extract_before_args ne "") {
88 $extract_before_args = " $extract_before_args";
90 if ($extract_after_args ne "") {
91 $extract_after_args = " $extract_after_args";
93 $extract_cmd = "$extract_cmd$extract_before_args" .
94 " \${DOWNLOADED_DISTFILE}$extract_after_args";
97 if (defined($distname)) {
98 $distname =~ s/\${PORTNAME}/$portname/;
99 $distname =~ s/\${PORTVERSION}/$portversion/;
101 if ($distname ne "$portname-$portversion") {
102 $pkgname = "$portname-$portversion";
105 $distname = "$portname-$portversion";
110 open(PORTS, "$portsdir/Makefile")
111 || die "$portsdir/Makefile: $!\n";
112 open(PKG, ">$pkgdir/Makefile")
113 || die "$pkgdir/Makefile: $!\n";
115 print PKG "# \$NetBSD\$\n";
121 if (/\$FreeBSD(: .*) \$/ || /\$Id(: .*) \$/) {
122 print PKG "\# FreeBSD Id$1\n";
130 my ($nextline, $remove, $master_sites, $noportdocs);
143 s|^\.include <bsd.port.pre.mk>|.include \"../../mk/bsd.prefs.mk\"|;
144 s|^\.include <bsd.port.mk>|.include \"../../mk/bsd.pkg.mk\"|;
145 s|^FETCH_(DEPENDS)|BUILD_$1|;
146 s|^LIB_(DEPENDS)|$1|;
147 s|\$\{PORTSDIR\}|../..|g;
148 s|PLIST_SUB|PLIST_SUBST|;
150 if (defined($master_site_subdir) &&
151 $master_site_subdir ne "" &&
152 ($master_sites || /^MASTER_SITES\?*=/)) {
153 s|([^L][^O][^C][^A][^L])\}|$1:=$master_site_subdir}|g;
162 if (/(\/usr\/local)/ ||
166 /(.*cat.*MESSAGE.*)/i) {
167 print "WARN: found \"$1\"\n";
170 if (/^PORTVERSION/ ||
174 /^MASTER_SITE_SUBDIR/ ||
175 /^EXTRACT_BEFORE_ARGS/ ||
176 /^EXTRACT_AFTER_ARGS/) {
177 $remove if ($nextline);
178 } elsif (/^PORTNAME/) {
179 print PKG "DISTNAME=$namespace$distname\n";
180 print PKG "PKGNAME=$namespace$pkgname\n" if defined($pkgname);
181 $remove if ($nextline);
182 } elsif (/^(EXTRACT_CMD\?*=)/) {
183 print PKG "$1\t$extract_cmd\n";
184 $remove if ($nextline);
185 } elsif (/^(MAINTAINER\?*=)/) {
186 print PKG "$1\t$maintainer\n";
187 $remove if ($nextline);
189 open(DESCR, "$pkgdir/pkg/DESCR")
190 || die "$pkgdir/pkg/DESCR: $!\n";
193 if (/^WWW:[\s]*(.*)/) {
194 print PKG "HOMEPAGE=\t$1\n";
198 } elsif ($noportdocs || /^\.if.*NOPORTDOCS/) {
201 if ($noportdocs > 2) {print PKG $_;}
202 } elsif (/^\.endif/) {
204 if ($noportdocs > 2) {print PKG $_;}
218 my ($FILE, $category) = @_;
220 for (my $i = 1; $i <= 8; $i++) {
221 if (!defined(eval "\$$category\[\$i\]")) {next;}
222 foreach my $item (sort(split(/[ \t\n]+/,
223 eval "\$$category\[\$i\]"))) {
224 print $FILE "$category/$category$i/$item\n";
231 if (opendir(PKGDIR, "$portsdir/pkg") == 0) {return 0;}
232 while ($plist = readdir(PKGDIR)) {
233 if (!($plist =~ /^PLIST/)) {next;}
235 open(PORTS, "$portsdir/pkg/$plist")
236 || die "$portsdir/pkg/$plist: $!\n";
237 open(PKG, ">$pkgdir/pkg/$plist")
238 || die "$pkgdir/pkg/$plist: $!\n";
240 print PKG "\@comment \$NetBSD\$\n";
241 my ($cat_added, $man_added);
243 s|\%\%([^\%]+)\%\%|\${$1}|g;
244 if (/^\@.*ldconfig/) {next;}
245 if (defined($cat_added) && $cat_added == 0 && /^[d-z]/){
246 &add_manual(*PKG, "cat");
249 if (defined($man_added) && $man_added == 0 && /^[n-z]/){
250 &add_manual(*PKG, "man");
256 if (defined($cat_added) && $cat_added == 0)
257 {&add_manual(*PKG, "cat");}
258 if (defined($man_added) && $man_added == 0)
259 {&add_manual(*PKG, "man");}
269 if (open(MD5, "$portsdir/files/md5")) {
270 open(NMD5, ">$pkgdir/files/md5")
271 || die "$pkgdir/files/md5: $!\n";
272 print NMD5 "\$NetBSD\$\n\n";
280 if (opendir(PATCHDIR, "$portsdir/patches") == 0) {return 0;}
281 while ($patch = readdir(PATCHDIR)) {
282 if ($patch eq "\." || $patch eq "\.."
283 || $patch eq "CVS") {next;}
284 if (open(PATCH, "$portsdir/patches/$patch")) {
285 open(NPATCH, ">$pkgdir/patches/$patch")
286 || die "$pkgdir/patches/$patch: $!\n";
287 print NPATCH "\$NetBSD\$\n\n";
291 print "WARN: $pkgdir/patches/" .
292 "$patch includes \"$1\".\n";