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";
 | 
