255 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			255 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env perl
 | 
						|
 | 
						|
# ISC LICENSE
 | 
						|
# Copyright Stefan Hagen <sh+ports@codevoid.de>
 | 
						|
 | 
						|
# usage: ./mkport thing thing thing > Makefile
 | 
						|
#        ./mkport -h
 | 
						|
#
 | 
						|
# "thing" is something you want in the port. It can be a module, distfile
 | 
						|
# provider or build tool.
 | 
						|
#
 | 
						|
# The script is far from complete. I'm just adding constraints and
 | 
						|
# support for key words along the way.
 | 
						|
#
 | 
						|
# The script runs top down and builds up constraints (for example no
 | 
						|
# MASTER_SITES when GH_* is present. And prefills WANTLIB and *_DEPENDS
 | 
						|
# based on modules it knows.
 | 
						|
#
 | 
						|
# The idea is to create a sensible default Makefile to start with.
 | 
						|
# That means I won't add all variables for a given module. Just the ones
 | 
						|
# that are most likely needed.
 | 
						|
#
 | 
						|
# DONE
 | 
						|
# lua cmake qmake cpan qt5 qt6 python
 | 
						|
#
 | 
						|
# TODO
 | 
						|
# erlang gnome gnu gnustep intltool java
 | 
						|
#
 | 
						|
# SKIPPED (rare use)
 | 
						|
# apache-module asterisk-sounds fortran gcc4 clang heimdal imake qt4
 | 
						|
#
 | 
						|
# UNSURE (or unknown)
 | 
						|
# dconf font gconf2
 | 
						|
#
 | 
						|
# USE PORTGEN
 | 
						|
# go ruby perl
 | 
						|
#
 | 
						|
# MAYBE PORTGEN IN FUTURE?
 | 
						|
# cabal cargo
 | 
						|
#
 | 
						|
# DIDN'T LOOK AT THOSE YET
 | 
						|
# kde-applications kf5  mariadb meson mono  mozilla ocaml pear  pecl php
 | 
						|
# postgresql scons tcl tk xfce4
 | 
						|
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
use File::Basename;
 | 
						|
 | 
						|
my %arg = map {$_ => 1} @ARGV;
 | 
						|
 | 
						|
# USAGE
 | 
						|
if(exists $arg{"-h"}) {
 | 
						|
      print "Usage: ".basename($0)." thing thing thing > Makefile\n";
 | 
						|
      print "Things: ";
 | 
						|
      open(my $f, '<', "$0") or die $!;
 | 
						|
      my @lines = sort grep s/^exists \$arg\{"([^_]\w+)"\}.*/$1/g, <$f>;
 | 
						|
      @lines = do { my %s; grep { !$s{$_}++ } @lines };
 | 
						|
      while(my $l=shift(@lines)) { chomp($l); print "$l "; }
 | 
						|
      print "\n";
 | 
						|
      exit(0);
 | 
						|
}
 | 
						|
 | 
						|
# DEFAULTS
 | 
						|
$arg{"_distname"}     = "\${V}";
 | 
						|
$arg{"_maintainer"}   = 'Stefan Hagen <sh+ports@codevoid.de>';
 | 
						|
$arg{"_license"}      = "LICENSE";
 | 
						|
$arg{"_mastersites"}  = "";
 | 
						|
$arg{"_makeflags"}    = "";
 | 
						|
$arg{"_testflags"}    = "";
 | 
						|
$arg{"_wantlib"}      = [];
 | 
						|
$arg{"_libdepends"}   = [];
 | 
						|
$arg{"_rundepends"}   = [];
 | 
						|
$arg{"_builddepends"} = [];
 | 
						|
$arg{"_testdepends"}  = [];
 | 
						|
$arg{"_configstyle"}  = "";
 | 
						|
 | 
						|
sub addlist {
 | 
						|
    push(@{$arg{$_[0]}}, ( $_[1] ));
 | 
						|
}
 | 
						|
 | 
						|
sub printlist {
 | 
						|
    print "$_[0]".join(' ', sort @{$arg{$_[1]}})."\n\n"
 | 
						|
}
 | 
						|
 | 
						|
# CONSTRAINTS
 | 
						|
if(exists $arg{"github"}) {
 | 
						|
    delete $arg{"_distname"};
 | 
						|
    delete $arg{"_mastersites"};
 | 
						|
}
 | 
						|
if(exists $arg{"cpan"}) {
 | 
						|
    delete $arg{"_mastersites"};
 | 
						|
    delete $arg{"_makeflags"};
 | 
						|
    delete $arg{"_testflags"};
 | 
						|
    delete $arg{"_wantlib"};
 | 
						|
    delete $arg{"_libdepends"};
 | 
						|
    $arg{"_license"} = "Perl";
 | 
						|
    $arg{"_configstyle"} = "modinst";
 | 
						|
}
 | 
						|
if(exists $arg{"autoconf"}) {
 | 
						|
    $arg{"_configstyle"} = "autoconf";
 | 
						|
}
 | 
						|
if(exists $arg{"nobuild"}) {
 | 
						|
    delete $arg{"_wantlib"};
 | 
						|
    delete $arg{"_builddepends"};
 | 
						|
    delete $arg{"_configstyle"};
 | 
						|
    delete $arg{"_makeflags"};
 | 
						|
}
 | 
						|
 | 
						|
# COMMENT
 | 
						|
print "COMMENT =\t\n\n";
 | 
						|
 | 
						|
# PORT INFO
 | 
						|
print "V =\t\t\n";
 | 
						|
exists $arg{"github"}
 | 
						|
    and print "GH_ACCOUNT =\t\n"
 | 
						|
    and print "GH_PROJECT =\t\n"
 | 
						|
    and print "GH_TAGNAME =\t\${V}\t\n"
 | 
						|
    and print "\#GH_COMMIT =\t\n";
 | 
						|
exists $arg{"cpan"}
 | 
						|
    and print "PKG_ARCH =\t*\n";
 | 
						|
exists $arg{"_distname"}
 | 
						|
    and print "DISTNAME =\t\${V}\n"
 | 
						|
    and print "\#PKGNAME =\t\${DISTNAME}-\${V}\n";
 | 
						|
exists $arg{"github"}
 | 
						|
    and print "\#PKGNAME =\t\${GH_PROJECT}-\${V}\n";
 | 
						|
 | 
						|
print "\nCATEGORIES =\t\n\n";
 | 
						|
 | 
						|
# HOMEPAGE
 | 
						|
print "HOMEPAGE =\t\n\n";
 | 
						|
 | 
						|
# MAINTAINER
 | 
						|
exists $arg{"_maintainer"}
 | 
						|
    and print "MAINTAINER =\t", $arg{'_maintainer'}, "\n\n";
 | 
						|
exists $arg{"cpan"}
 | 
						|
    and print "CPAN_AUTHOR =\t\n\n";
 | 
						|
 | 
						|
# LICENSE
 | 
						|
exists $arg{"_license"}
 | 
						|
    and print "\# $arg{'_license'}\n";
 | 
						|
print "PERMIT_PACKAGE =\tYes\n\n";
 | 
						|
 | 
						|
# MASTER_SITES
 | 
						|
exists $arg{"_mastersites"}
 | 
						|
    and print "MASTER_SITES =\t\n"
 | 
						|
    and print "\#EXTRACT_SUFX =\t\n\n";
 | 
						|
 | 
						|
# MODULES
 | 
						|
exists $arg{"cmake"}   and $arg{"_modules"} .= "devel/cmake ";
 | 
						|
exists $arg{"lua"}     and $arg{"_modules"} .= "devel/lua ";
 | 
						|
exists $arg{"qmake"}   and $arg{"_modules"} .= "devel/qmake ";
 | 
						|
exists $arg{"qt5"}     and $arg{"_modules"} .= "x11/qt5 ";
 | 
						|
exists $arg{"qt6"}     and $arg{"_modules"} .= "x11/qt6 ";
 | 
						|
exists $arg{"python"}  and $arg{"_modules"} .= "lang/python ";
 | 
						|
exists $arg{"ruby"}    and $arg{"_modules"} .= "lang/ruby ";
 | 
						|
exists $arg{"tk"}      and $arg{"_modules"} .= "x11/tk ";
 | 
						|
exists $arg{"gnome"}   and $arg{"_modules"} .= "gnome ";
 | 
						|
exists $arg{"perl"}    and $arg{"_modules"} .= "perl ";
 | 
						|
exists $arg{"cpan"}    and $arg{"_modules"} .= "cpan ";
 | 
						|
exists $arg{"php"}     and $arg{"_modules"} .= "php ";
 | 
						|
exists $arg{"fortran"} and $arg{"_modules"} .= "fortran ";
 | 
						|
exists $arg{"cabal"}   and $arg{"_modules"} .= "devel/cabal ";
 | 
						|
exists $arg{"cargo"}   and $arg{"_modules"} .= "devel/cargo ";
 | 
						|
exists $arg{"java"}    and $arg{"_modules"} .= "java ";
 | 
						|
exists $arg{"_modules"}
 | 
						|
     and print "MODULES =\t$arg{'_modules'}\n";
 | 
						|
 | 
						|
# MOD*
 | 
						|
exists $arg{"qt5"}
 | 
						|
    and print "\#MODQT5_DEPS =\t\n"
 | 
						|
    and print "\#MODQT5USE_CXX11 = No\t\n";
 | 
						|
exists $arg{"qt6"}
 | 
						|
    and print "\#MODQT6_DEPS =\t\n"
 | 
						|
    and print "\#MODQT6USE_CXX11 = No\t\n";
 | 
						|
exists $arg{"lua"}
 | 
						|
    and print "MODLUA_VERSION =\t\${MODLUA_DEFAULT_VERSION}\n";
 | 
						|
exists $arg{"python"}
 | 
						|
    and print "MODPI_VERSION =\t\${MODPY_DEFAULT_VERSION}\n";
 | 
						|
exists $arg{"qmake"}
 | 
						|
    and print "\#MODQMAKEPROJECTS =\t\n";
 | 
						|
exists $arg{"qmake"}
 | 
						|
    and print "\#MODQMAKEARGS =\t\n";
 | 
						|
exists $arg{"_modules"}
 | 
						|
    and print "\n";
 | 
						|
 | 
						|
# WANTLIB
 | 
						|
exists $arg{"lua"}
 | 
						|
    and addlist("_wantlib","\${MODLUA_WANTLIB}");
 | 
						|
exists $arg{"python"}
 | 
						|
    and addlist("_wantlib","\${MODPY_WANTLIB}");
 | 
						|
exists $arg{"cmake"}
 | 
						|
    and addlist("_wantlib","\${COMPILER_LIBCXX}");
 | 
						|
 | 
						|
exists $arg{"_wantlib"}
 | 
						|
    and print "\# ?uses pledge()?\n"
 | 
						|
    and printlist("WANTLIB =\t","_wantlib");
 | 
						|
 | 
						|
# LIB_DEPENDS
 | 
						|
exists $arg{"lua"}
 | 
						|
    and addlist("_libdepends", "\${MODLUA_LIB_DEPENDS}");
 | 
						|
exists $arg{"python"}
 | 
						|
    and addlist("_libdepends", "\${MODPY_LIB_DEPENDS}");
 | 
						|
 | 
						|
exists $arg{"_libdepends"}
 | 
						|
    and printlist("LIB_DEPENDS =\t", "_libdepends");
 | 
						|
 | 
						|
# RUN_DEPENDS
 | 
						|
exists $arg{"_rundepends"}
 | 
						|
    and printlist("RUN_DEPENDS =\t", "_rundepends");
 | 
						|
 | 
						|
# BUILD_DEPENDS
 | 
						|
exists $arg{"cpan"}
 | 
						|
    and addlist("_builddepends", "\${RUN_DEPENDS}");
 | 
						|
exists $arg{"autoconf"}
 | 
						|
    and addlist("_builddepends", "\${MODGNU_AUTOCONF_DEPENDS}")
 | 
						|
    and addlist("_builddepends", "\${MODGNU_AUTOMAKE_DEPENDS}")
 | 
						|
    and addlist("_builddepends", "devel/libtool");
 | 
						|
exists $arg{"_builddepends"}
 | 
						|
    and printlist("BUILD_DEPENDS =\t", "_builddepends");
 | 
						|
 | 
						|
# TEST_DEPENDS
 | 
						|
exists $arg{"_testflags"}
 | 
						|
    and printlist("\#TEST_DEPENDS =\t", "_testdepends");
 | 
						|
 | 
						|
# COMPILER
 | 
						|
exists $arg{"gcc"}
 | 
						|
    and print "COMPILER=\tbase-clang ports-gcc\n\n";
 | 
						|
 | 
						|
# CONFIGURE
 | 
						|
exists $arg{"autoconf"}
 | 
						|
    and print "\#AUTOCONF_VERSION =\t?.??\n"
 | 
						|
    and print "\#AUTOMAKE_VERSION =\t?.??\n\n";
 | 
						|
exists $arg{"_configstyle"}
 | 
						|
    and print "\#CONFIGURE_STYLE =\t", $arg{'_configstyle'}, "\n\n";
 | 
						|
 | 
						|
# FLAGS
 | 
						|
exists $arg{"_makeflags"}
 | 
						|
    and print "\#MAKE_FLAGS =\t\n\n";
 | 
						|
 | 
						|
exists $arg{"nobuild"}
 | 
						|
    and print "NO_BUILD =\tYes\n\n";
 | 
						|
 | 
						|
# USE FLAGS
 | 
						|
exists $arg{"gmake"}
 | 
						|
    and print "USE_GMAKE =\tYes\n\n";
 | 
						|
 | 
						|
# TESTS
 | 
						|
exists $arg{"_testflags"}
 | 
						|
    and print "\#NO_TEST =\tYes\n"
 | 
						|
    and print "\#TEST_TARGET =\t\n\n";
 | 
						|
exists $arg{"cpan"}
 | 
						|
    and print "\#MODCPAN_EXAMPLES =\tYes\n\n";
 | 
						|
 | 
						|
print ".include <bsd.port.mk>\n";
 |