dotfiles/.bin/OLD/mkport
2024-02-14 07:55:58 +01:00

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